if (VM.VerifyAssertions) VM.assert(s.nextInstructionInCodeOrder() == lastInstr);
if (VM.VerifyAssertions) VM._assert(s.nextInstructionInCodeOrder() == lastInstr);
  private static OPT_Instruction fp_ifcmp(OPT_Instruction s, OPT_IR ir) {    OPT_Instruction nextInstr = s.nextInstructionInCodeOrder();    OPT_Operator op = s.operator();    OPT_BranchOperand testFailed;    OPT_BasicBlock bb = s.getBasicBlock();    OPT_Instruction lastInstr = bb.lastRealInstruction();    if (lastInstr.operator() == IA32_JMP) {      // We're in trouble if there is another instruction between s and lastInstr!      if (VM.VerifyAssertions) VM.assert(s.nextInstructionInCodeOrder() == lastInstr);      // Set testFailed to target of GOTO      testFailed = MIR_Branch.getTarget(lastInstr);      nextInstr = lastInstr.nextInstructionInCodeOrder();      lastInstr.remove();    } else {      // Set testFailed to label of next (fallthrough basic block)      testFailed = bb.nextBasicBlockInCodeOrder().makeJumpTarget();    }    OPT_ConditionOperand c = IfCmp.getCond(s);    OPT_BranchOperand target = IfCmp.getTarget(s);    boolean UeqL = (op == DOUBLE_IFCMPL) || (op == FLOAT_IFCMPL);    boolean UeqG = (op == DOUBLE_IFCMPG) || (op == FLOAT_IFCMPG);    OPT_BranchOperand unorderedTarget;    if (c.value == OPT_ConditionOperand.EQUAL || 	(UeqL && (c.value == OPT_ConditionOperand.GREATER || 		  c.value == OPT_ConditionOperand.GREATER_EQUAL)) || 	(UeqG && (c.value == OPT_ConditionOperand.LESS || 		  c.value == OPT_ConditionOperand.LESS_EQUAL))) {      unorderedTarget = (OPT_BranchOperand)testFailed.copy();    } else {      unorderedTarget = (OPT_BranchOperand)target.copy();    }        // IMPORTANT: FCOMI only sets 3 of the 6 bits in EFLAGS, so    // we can't just translate the condition operand as if it     // were an integer compare.    // FCMOI sets ZF, PF, and CF as follows:     // Compare Results      ZF     PF      CF    // left > right          0      0       0    // left < right          0      0       1    // left == right         1      0       0    // UNORDERED             1      1       1    if (c.isEQUAL()) {      s.insertBefore(MIR_CondBranch2.create(IA32_JCC2, 					    OPT_IA32ConditionOperand.PE(),  // PF == 1					    unorderedTarget,					    new OPT_BranchProfileOperand(),					    OPT_IA32ConditionOperand.EQ(),  // ZF == 1					    target,					    new OPT_BranchProfileOperand()));      s.insertBefore(MIR_Branch.create(IA32_JMP, testFailed));    } else if (c.isNOT_EQUAL()) {      s.insertBefore(MIR_CondBranch2.create(IA32_JCC2,					    OPT_IA32ConditionOperand.PE(),  // PF == 1					    unorderedTarget,					    new OPT_BranchProfileOperand(),					    OPT_IA32ConditionOperand.EQ(),  // ZF == 1					    testFailed,					    new OPT_BranchProfileOperand()));      s.insertBefore(MIR_Branch.create(IA32_JMP, target));    } else if (c.isLESS()) {      s.insertBefore(MIR_CondBranch2.create(IA32_JCC2,					    OPT_IA32ConditionOperand.PE(),  // PF == 1					    unorderedTarget,					    new OPT_BranchProfileOperand(),					    OPT_IA32ConditionOperand.LLT(), // CF == 1					    target,					    new OPT_BranchProfileOperand()));      s.insertBefore(MIR_Branch.create(IA32_JMP, testFailed));    } else if (c.isGREATER()) {      s.insertBefore(MIR_CondBranch2.create(IA32_JCC2,					    OPT_IA32ConditionOperand.PE(),  // PF == 1					    unorderedTarget,					    new OPT_BranchProfileOperand(),					    OPT_IA32ConditionOperand.LGT(), // ZF == 0 and CF == 0					    target,					    new OPT_BranchProfileOperand()));      s.insertBefore(MIR_Branch.create(IA32_JMP,testFailed));    } else if (c.isLESS_EQUAL()) {      s.insertBefore(MIR_CondBranch2.create(IA32_JCC2,					    OPT_IA32ConditionOperand.PE(),  // PF == 1					    unorderedTarget,					    new OPT_BranchProfileOperand(),					    OPT_IA32ConditionOperand.LGT(), // ZF == 0 and CF == 0					    testFailed,					    new OPT_BranchProfileOperand()));      s.insertBefore(MIR_Branch.create(IA32_JMP, target));    } else if (c.isGREATER_EQUAL()) {      s.insertBefore(MIR_CondBranch2.create(IA32_JCC2,					    OPT_IA32ConditionOperand.PE(),  // PF == 1					    unorderedTarget,					    new OPT_BranchProfileOperand(),					    OPT_IA32ConditionOperand.LLT(), // CF == 1					    testFailed,					    new OPT_BranchProfileOperand()));      s.insertBefore(MIR_Branch.create(IA32_JMP, target));    } else {      throw new OPT_OptimizingCompilerException("Unexpected fp compare operation" + c.toString());    }    s.remove();    return nextInstr;  }