--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotBackend.java 2019-05-14 01:06:01.872381907 +0200 +++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotBackend.java 2019-05-14 01:06:01.472378988 +0200 @@ -263,14 +263,19 @@ if (config.useCompressedClassPointers) { Register register = r10; - AMD64HotSpotMove.decodeKlassPointer(crb, asm, register, providers.getRegisters().getHeapBaseRegister(), src, config); + Register heapBase = providers.getRegisters().getHeapBaseRegister(); + AMD64HotSpotMove.decodeKlassPointer(crb, asm, register, heapBase, src, config); if (GeneratePIC.getValue(crb.getOptions())) { - asm.movq(providers.getRegisters().getHeapBaseRegister(), asm.getPlaceholder(-1)); + asm.movq(heapBase, asm.getPlaceholder(-1)); crb.recordMark(config.MARKID_NARROW_OOP_BASE_ADDRESS); } else { if (config.narrowKlassBase != 0) { // The heap base register was destroyed above, so restore it - asm.movq(providers.getRegisters().getHeapBaseRegister(), config.narrowOopBase); + if (config.narrowOopBase == 0L) { + asm.xorq(heapBase, heapBase); + } else { + asm.movq(heapBase, config.narrowOopBase); + } } } asm.cmpq(inlineCacheKlass, register);