Index: vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp =================================================================== --- vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp (revision 521205) +++ vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp (working copy) @@ -1986,9 +1986,11 @@ Opnd* dst = irManager.newMemOpndAutoKind(irManager.getTypeFromTag(memType), addr); copyOpnd(dst, src); } else if(memType > Type::Float) { - src = simpleOp_I8(Mnemonic_SUB, src->getType(), src, irManager.newImmOpnd(typeManager.getIntPtrType(), (POINTER_SIZE_INT)compilationInterface.getHeapBase())); + Opnd * heap_base = irManager.newImmOpnd(typeManager.getIntPtrType(), (POINTER_SIZE_INT)compilationInterface.getHeapBase()); + Opnd * compressed_src = irManager.newOpnd(typeManager.compressType(src->getType())); Opnd * opnd = irManager.newMemOpndAutoKind(typeManager.compressType(src->getType()), addr); - appendInsts(irManager.newCopyPseudoInst(Mnemonic_MOV, opnd, src)); + appendInsts(irManager.newInstEx(Mnemonic_SUB, 1, compressed_src, src, heap_base)); + appendInsts(irManager.newCopyPseudoInst(Mnemonic_MOV, opnd, compressed_src)); } else { Opnd * dst = irManager.newMemOpndAutoKind(irManager.getTypeFromTag(memType), addr); copyOpnd(dst, src);