IC(VM_Entrypoints.takeYieldpointField.getOffset())));
IC(VM_Entrypoints.takeYieldpointField.getOffsetAsInt())));
  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 = 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, A(R0),                                     A(phys.getLR()))); // 1     if (yp) {      ptr.insertBefore(MIR_Load.create(PPC_LInt, I(S1), A(PR),                                       IC(VM_Entrypoints.takeYieldpointField.getOffset()))); // 2    }    ptr.insertBefore(MIR_StoreUpdate.create(PPC_STAddrU, A(FP), A(FP),                                            IC(-frameSize))); // 3    if (stackOverflow) {      ptr.insertBefore(MIR_Load.create(PPC_LAddr, A(S0),                                       A(phys.getPR()),                                        IC(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, I(TSR), I(S1), IC(0))); // 6    }    int cmid = ir.compiledMethod.getId();    if (cmid <= 0x7fff) {      ptr.insertBefore(MIR_Unary.create(PPC_LDI, I(S1), IC(cmid))); // 7    } else {      ptr.insertBefore(MIR_Unary.create(PPC_LDIS, I(S1),IC(cmid>>>16))); // 7 (a)      ptr.insertBefore(MIR_Binary.create(PPC_ORI, I(S1), I(S1),                                         IC(cmid&0xffff))); // 7 (b)    }    ptr.insertBefore(MIR_Store.create(PPC_STAddr, A(R0), A(FP),                                       IC(frameSize + STACKFRAME_NEXT_INSTRUCTION_OFFSET))); // 8    ptr.insertBefore(MIR_Store.create(PPC_STW, I(S1), A(FP),                                       IC(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_TAddr, OPT_PowerPCTrapOperand.GREATER(), A(S0), A(FP),                      OPT_TrapCodeOperand.StackOverflow()); // 10    } else {      // no stack overflow test, so we remove the IR_Prologue instruction      ptr.remove();    }  }