MIR_Trap.mutate(ptr, PPC_TW, OPT_PowerPCTrapOperand.LESS(), R(FP), R(S0),
MIR_Trap.mutate(ptr, PPC_TW, OPT_PowerPCTrapOperand.GREATER(), R(S0), R(FP),
  final void insertNormalPrologue() {    OPT_PhysicalRegisterSet phys = ir.regpool.getPhysicalRegisterSet();    OPT_Register FP = phys.getFP();    OPT_Register PR = phys.getPR();    OPT_Register TSR = phys.getTSR();    OPT_Register R0 = phys.getTemp();    OPT_Register S0 = phys.getGPR(FIRST_SCRATCH_GPR);    OPT_Register S1 = phys.getGPR(LAST_SCRATCH_GPR);    boolean interruptible = ir.method.isInterruptible();    boolean stackOverflow = interruptible;    boolean yp = ir.stackManager.hasPrologueYieldpoint();    int frameFixedSize = getFrameFixedSize();    ir.compiledMethod.setFrameFixedSize(frameFixedSize);        if (frameFixedSize >= STACK_SIZE_GUARD || ir.compiledMethod.isSaveVolatile()) {      insertExceptionalPrologue();      return;    }    OPT_Instruction ptr = ir.firstInstructionInCodeOrder().nextInstructionInCodeOrder();    if (VM.VerifyAssertions) VM._assert(ptr.getOpcode() == IR_PROLOGUE_opcode);    ptr.insertBefore(MIR_Move.create(PPC_MFSPR, R(R0),                                     R(phys.getLR()))); // 1    if (yp) {      ptr.insertBefore(MIR_Load.create(PPC_LWZ, R(S1), R(PR),				       I(VM_Entrypoints.threadSwitchRequestedField.getOffset()))); // 2    }    ptr.insertBefore(MIR_StoreUpdate.create(PPC_STWU, R(FP), R(FP),					    I(-frameSize))); // 3    if (stackOverflow) {      ptr.insertBefore(MIR_Load.create(PPC_LWZ, R(S0),				       R(phys.getPR()), 				       I(VM_Entrypoints.activeThreadStackLimitField.getOffset()))); // 4    }    // Now add any instructions to save the volatiles and nonvolatiles (5)    saveNonVolatiles(ptr);        if (yp) {      ptr.insertBefore(MIR_Binary.create(PPC_CMPI, R(TSR), R(S1), I(0))); // 6    }    int cmid = ir.compiledMethod.getId();    if (cmid <= 0x7fff) {      ptr.insertBefore(MIR_Unary.create(PPC_LDI, R(S1), I(cmid))); // 7    } else {      ptr.insertBefore(MIR_Unary.create(PPC_LDIS, R(S1),I(cmid>>>16))); // 7 (a)      ptr.insertBefore(MIR_Binary.create(PPC_ORI, R(S1), R(S1),					 I(cmid&0xffff))); // 7 (b)    }    ptr.insertBefore(MIR_Store.create(PPC_STW, R(R0), R(FP), 				      I(frameSize + STACKFRAME_NEXT_INSTRUCTION_OFFSET))); // 8    ptr.insertBefore(MIR_Store.create(PPC_STW, R(S1), R(FP), 				      I(STACKFRAME_METHOD_ID_OFFSET))); // 9    ptr.insertBefore(Empty.create(IR_ENDPROLOGUE));    if (stackOverflow) {      // Mutate the Prologue instruction into the trap      MIR_Trap.mutate(ptr, PPC_TW, OPT_PowerPCTrapOperand.LESS(), R(FP), R(S0),		      OPT_TrapCodeOperand.StackOverflow()); // 10    } else {      // no stack overflow test, so we remove the IR_Prologue instruction      ptr.remove();    }  }