Index: vm/jitrino/src/codegenerator/ia32/Ia32IRManager.cpp =================================================================== --- vm/jitrino/src/codegenerator/ia32/Ia32IRManager.cpp (revision 520266) +++ vm/jitrino/src/codegenerator/ia32/Ia32IRManager.cpp (working copy) @@ -1281,12 +1281,6 @@ if (opnd->isPlacedIn(regKind)) gpTotalRegUsage |= getRegMask(opnd->getRegName()); } -#ifdef _EM64T_ - //FIXME!! - gpTotalRegUsage |= getRegMask(RegName_R15); - gpTotalRegUsage |= getRegMask(RegName_R13); - gpTotalRegUsage |= getRegMask(RegName_R14); -#endif } //_________________________________________________________________________________________________ uint32 IRManager::getTotalRegUsage(OpndKind regKind)const { Index: vm/jitrino/src/codegenerator/ia32/Ia32Encoder.cpp =================================================================== --- vm/jitrino/src/codegenerator/ia32/Ia32Encoder.cpp (revision 520266) +++ vm/jitrino/src/codegenerator/ia32/Ia32Encoder.cpp (working copy) @@ -233,25 +233,9 @@ RegName indexReg = pindex == NULL ? RegName_Null : pindex->getRegName(); #ifdef _EM64T_ // adapter: all PTR types go as 64 bits - const RegName TMP_BASE = RegName_R13; - bool is_ptr = is_ptr_type(p->getType()); - if (pindex== NULL && pbase == NULL) { - // have only displacement - load displacement to register - RegName reg = (RegName)(TMP_BASE + args.count()); - OPNDS tmp(reg, OPND(OpndSize_64, pdisp->getImmValue())); - stream = (uint8*)EncoderBase::encode((char*)stream, Mnemonic_MOV, tmp); - OPND mem(sz, reg, 0); - args.add(mem); - } - else { - EncoderBase::Operand o(is_ptr ? OpndSize_64 : sz, - baseReg, indexReg, - NULL == pscale ? 0 : (unsigned char)pscale->getImmValue(), - disp - ); - args.add(o); - } -#else + assert(pindex != NULL || pbase != NULL); + sz = is_ptr_type(p->getType()) ? OpndSize_64 : sz; +#endif EncoderBase::Operand o(sz, baseReg, indexReg, @@ -260,7 +244,6 @@ ); args.add( o ); -#endif } break; default: Index: vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp =================================================================== --- vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp (revision 520266) +++ vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp (working copy) @@ -1788,13 +1788,9 @@ #ifndef _EM64T_ Opnd * addr=irManager.newImmOpnd(fieldRefType, Opnd::RuntimeInfo::Kind_StaticFieldAddress, fieldDesc); #else - Opnd * addr; - if(!fieldRefType->isReference()) { - addr = irManager.newOpnd(fieldRefType); - appendInsts(irManager.newCopyPseudoInst(Mnemonic_MOV, addr, irManager.newImmOpnd(fieldRefType, Opnd::RuntimeInfo::Kind_StaticFieldAddress, fieldDesc))); - } else { - addr = irManager.newImmOpnd(irManager.getTypeFromTag(Type::CompressedObject), Opnd::RuntimeInfo::Kind_StaticFieldAddress, fieldDesc); - } + Opnd* immOp = irManager.newImmOpnd(fieldRefType, Opnd::RuntimeInfo::Kind_StaticFieldAddress, fieldDesc); + Opnd* addr = irManager.newOpnd(typeManager.getUnmanagedPtrType(fieldRefType)); + appendInsts(irManager.newCopyPseudoInst(Mnemonic_MOV, addr, immOp)); #endif return addr; } Index: vm/jitrino/src/codegenerator/ia32/Ia32CodeEmitter.cpp =================================================================== --- vm/jitrino/src/codegenerator/ia32/Ia32CodeEmitter.cpp (revision 520266) +++ vm/jitrino/src/codegenerator/ia32/Ia32CodeEmitter.cpp (working copy) @@ -520,7 +520,7 @@ Type* targetType = irManager->getTypeManager().getInt64Type(); Opnd* targetVal = irManager->newImmOpnd(targetType,(int64)targetCodeStartAddr); - Opnd* targetReg = irManager->newRegOpnd(targetType, RegName_R14); + Opnd* targetReg = irManager->newRegOpnd(targetType, RegName_R11); Inst* movInst = irManager->newInst(Mnemonic_MOV, targetReg, targetVal); @@ -605,12 +605,12 @@ /* EncoderBase::Operands args; args.clear(); - args.add(RegName_R14); + args.add(RegName_R11); // direct call is relative, but call use an absolute address to jump args.add(EncoderBase::Operand(OpndSize_64, (int64)targetAddr)); char * ip = EncoderBase::encode((char*)callAddr, Mnemonic_MOV, args); args.clear(); - args.add(RegName_R14); + args.add(RegName_R11); EncoderBase::encode(ip, Mnemonic_CALL, args); */ } else