if (ir.options.fclearWithFNINIT()) { if (ir.hasFloatingPoint() && call.operator != CALL_SAVE_VOLATILE) { call.insertBefore(MIR_Empty.create(IA32_FNINIT)); } }
  private static void callExpand(OPT_Instruction call, OPT_IR ir) {    OPT_PhysicalRegisterSet phys = ir.regpool.getPhysicalRegisterSet();    boolean isSysCall = call.operator() == IA32_SYSCALL;    // -1. Clear the floating-point stack if dirty.    if (ir.options.fclearWithFNINIT()) {      if (ir.hasFloatingPoint() && call.operator != CALL_SAVE_VOLATILE) {        call.insertBefore(MIR_Empty.create(IA32_FNINIT));      }    }        // 0. Handle the parameters    int parameterBytes = isSysCall ? expandParametersToSysCall(call,ir) :       expandParametersToCall(call,ir);    // 1. Clear the floating-point stack if dirty.    if (!ir.options.fclearWithFNINIT() && call.operator != CALL_SAVE_VOLATILE) {      if (ir.hasFloatingPoint() && call.operator != CALL_SAVE_VOLATILE) {        int FPRRegisterParams= countFPRParams(call);        FPRRegisterParams = Math.min(FPRRegisterParams,                                      phys.getNumberOfFPRParams());        call.insertBefore(MIR_UnaryNoRes.create(IA32_FCLEAR,                                                I(FPRRegisterParams)));      }    }        // 2. Move the return value into a register    expandResultOfCall(call,ir);        // 3. If this is an interface invocation, set up the hidden parameter    //    in the processor object to hold the interface signature id.    if (VM.BuildForIMTInterfaceInvocation) {      if (MIR_Call.hasMethod(call)) {	OPT_MethodOperand mo = MIR_Call.getMethod(call);        if (mo.isInterface()) {          int signatureId = VM_ClassLoader.            findOrCreateInterfaceMethodSignatureId(mo.method.getName(),                                                    mo.method.getDescriptor());          OPT_MemoryOperand M = OPT_MemoryOperand.BD            (R(phys.getPR()), VM_Entrypoints.hiddenSignatureIdOffset,              (byte)WORDSIZE, null, null);          call.insertBefore(MIR_Move.create(IA32_MOV,M,I(signatureId)));        }      }    }    // 4. ESP must be parameterBytes before call, will be at either parameterBytes    //    or 0 afterwards depending on whether or it is an RVM method or a sysCall.    call.insertBefore(MIR_UnaryNoRes.create(REQUIRE_ESP, I(parameterBytes)));    call.insertAfter(MIR_UnaryNoRes.create(ADVISE_ESP, I(isSysCall?parameterBytes:0)));  }