int tsr = VM_Entrypoints.takeYieldpointField.getOffsetAsInt();
Offset tsr = VM_Entrypoints.takeYieldpointField.getOffset();
  private static OPT_Instruction yield_point(OPT_Instruction s, OPT_IR ir) {    OPT_Instruction nextInstr = s.nextInstructionInCodeOrder();    if (ir.options.FIXED_JTOC) return nextInstr; // defer expansion until later    s.insertBefore(MIR_UnaryNoRes.create(REQUIRE_ESP, IC(0)));        // get the correct method and condition for a yieldpoint    VM_Method meth;    OPT_IA32ConditionOperand ypCond;    if (s.getOpcode() == YIELDPOINT_PROLOGUE_opcode) {      meth = VM_Entrypoints.optThreadSwitchFromPrologueMethod;      ypCond = OPT_IA32ConditionOperand.NE();    } else if (s.getOpcode() == YIELDPOINT_EPILOGUE_opcode) {      meth = VM_Entrypoints.optThreadSwitchFromEpilogueMethod;      ypCond = OPT_IA32ConditionOperand.NE();    } else {       meth = VM_Entrypoints.optThreadSwitchFromBackedgeMethod;      ypCond = OPT_IA32ConditionOperand.GT();    }    // 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, .00001f);    thisBlock.insertOut(yieldpoint);    yieldpoint.insertOut(nextBlock);    ir.cfg.addLastInCodeOrder(yieldpoint);        int offset = meth.getOffsetAsInt();    OPT_Operand jtoc =       OPT_MemoryOperand.BD(R(ir.regpool.getPhysicalRegisterSet().getPR()),                           VM_Entrypoints.jtocField.getOffsetAsInt(),                            (byte)4, null, TG());    OPT_RegisterOperand regOp = ir.regpool.makeTempInt();    yieldpoint.appendInstruction(MIR_Move.create(IA32_MOV, regOp, jtoc));    OPT_Operand target =      OPT_MemoryOperand.BD(regOp.copyD2U(), offset, (byte)4,                            new OPT_LocationOperand(offset), TG());        // 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.takeYieldpointField.getOffsetAsInt();    OPT_MemoryOperand M = OPT_MemoryOperand.BD(R(PR),tsr,(byte)4,null,null);    OPT_Instruction compare = MIR_Compare.create(IA32_CMP, M, IC(0));    s.insertBefore(compare);    MIR_CondBranch.mutate(s, IA32_JCC, ypCond,                          yieldpoint.makeJumpTarget(),                          OPT_BranchProfileOperand.unlikely());    return nextInstr;  }