ltypes[i] = op.getType().getName().parseForTypeCode();
VM_TypeReference typ = op.getType(); if (typ.isWordType() || (typ == VM_TypeReference.NULL_TYPE)) { ltypes[i] = WordTypeCode; } else { ltypes[i] = typ.getName().parseForTypeCode(); }
  private OPT_Instruction _createOsrBarrier() {    LinkedList livevars = new LinkedList();     /* for local variables, we have to use helper to make a register. */    /* ltypes and stypes should be the full length     * WARNING: what's the order of DUMMY and LONG?     */    int localnum = _localState.length;    byte[] ltypes = new byte[localnum];     int num_llocals = 0;    for (int i=0, n=_localState.length; i<n; i++) {      OPT_Operand op = _localState[i];      if ((op != null) && (op != DUMMY)) {        livevars.add(_loadLocalForOSR(op));        num_llocals++;         if (op instanceof ReturnAddressOperand) {          ltypes[i] = AddressTypeCode;        } else {          ltypes[i] = op.getType().getName().parseForTypeCode();        }       } else {        ltypes[i] = VoidTypeCode;      }    }    int stacknum = stack.getSize();    byte[] stypes = new byte[stacknum];     /* the variabel on stack can be used directly ? */    int num_lstacks = 0;    for (int i=0, n=stack.getSize(); i<n; i++) {      OPT_Operand op = stack.peekAt(i);       if ((op != null) && (op != DUMMY)) {         if (op.isRegister()) {          livevars.add(op.asRegister().copyU2U());        } else {          livevars.add(op);        }        num_lstacks++;         if (op instanceof ReturnAddressOperand) {          stypes[i] = AddressTypeCode;        } else {          /* for stack operand, reverse the order for long and double */          byte tcode = op.getType().getName().parseForTypeCode();          if ((tcode == LongTypeCode)              || (tcode == DoubleTypeCode)) {            stypes[i-1] = tcode;            stypes[i] = VoidTypeCode;          } else {            stypes[i] = op.getType().getName().parseForTypeCode();          }        }       } else {        stypes[i] = VoidTypeCode;      }    }     OPT_Instruction barrier = OsrBarrier.create(OSR_BARRIER,                                                null, // temporarily                                                num_llocals+num_lstacks);    for (int i=0, n=livevars.size(); i<n; i++) {      OPT_Operand op = (OPT_Operand)livevars.get(i);      if (op instanceof ReturnAddressOperand) {        int tgtpc = ((ReturnAddressOperand)op).retIndex                        - gc.method.getOsrPrologueLength();        op = new OPT_IntConstantOperand(tgtpc);      } else if (op instanceof OPT_LongConstantOperand) {        op = _prepareLongConstant(op);      } else if (op instanceof OPT_DoubleConstantOperand) {        op = _prepareDoubleConstant(op);      }      if (VM.VerifyAssertions) VM._assert(op != null);      OsrBarrier.setElement(barrier, i, op);    }     // patch type info operand    OPT_OsrTypeInfoOperand typeinfo =      new OPT_OsrTypeInfoOperand(ltypes, stypes);     OsrBarrier.setTypeInfo(barrier, typeinfo);    /* if the current method is for specialization, the bcIndex     * has to be adjusted at "OPT_OsrPointConstructor".     */    barrier.position = gc.inlineSequence;    barrier.bcIndex = instrIndex;       return barrier;  }