OPT_MemoryOperand.D(offset + VM_Magic.objectAsAddress(VM_Magic.getJTOC()), (byte)4, loc, guard);
OPT_MemoryOperand.D(offset + VM_Magic.getTocPointer(), (byte)4, loc, guard); MIR_Call.mutate0(s, CALL_SAVE_VOLATILE, null, null, target, OPT_MethodOperand.STATIC(meth)); yieldpoint.appendInstruction(s); ir.MIRInfo.gcIRMap.moveToEnd(s);
  private static void expandYieldpoint(OPT_Instruction s,				       OPT_IR ir,				       VM_Method meth) {    if (VM.VerifyAssertions) VM.assert(ir.options.FIXED_JTOC);    // split the basic block after the yieldpoint    OPT_BasicBlock thisBlock = s.getBasicBlock();    OPT_BasicBlock nextBlock = thisBlock.splitNodeWithLinksAt(s,ir);        // create a basic block at the end of the IR to hold the yieldpoint       OPT_BasicBlock yieldpoint = thisBlock.createSubBlock(s.bcIndex, ir);    thisBlock.insertOut(yieldpoint);    yieldpoint.insertOut(nextBlock);    ir.cfg.addLastInCodeOrder(yieldpoint);        int offset = meth.getOffset();    OPT_LocationOperand loc = new OPT_LocationOperand(offset);    OPT_Operand guard = TG();    OPT_Operand target =       OPT_MemoryOperand.D(offset + VM_Magic.objectAsAddress(VM_Magic.getJTOC()),			  (byte)4, loc, guard);    // call thread switch    OPT_Instruction call =       MIR_Call.create0(CALL_SAVE_VOLATILE, null, null, target, 		       OPT_MethodOperand.STATIC(meth));    call.markAsNonPEI();    call.copyPosition(s);    yieldpoint.appendInstruction(call);    yieldpoint.appendInstruction(MIR_Branch.create(IA32_JMP,						 nextBlock.makeJumpTarget()));         // Check to see if threadSwitch requested    OPT_Register PR = ir.regpool.getPhysicalRegisterSet().getPR();    int tsr = VM_Entrypoints.threadSwitchRequestedOffset;    OPT_MemoryOperand M = OPT_MemoryOperand.BD(R(PR),tsr,(byte)4,null,null);    OPT_Instruction compare = MIR_Compare.create(IA32_CMP, M, I(0));    s.insertBefore(compare);    MIR_CondBranch.mutate(s, IA32_JCC, OPT_IA32ConditionOperand.NE(),			  yieldpoint.makeJumpTarget(),			  OPT_BranchProfileOperand.unlikely());  }