hotspot/src/jdk.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotBackend.java
--- a/hotspot/src/jdk.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotBackend.java Mon Jan 09 19:36:47 2017 +0000
+++ b/hotspot/src/jdk.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotBackend.java Tue Jan 10 21:39:20 2017 +0300
@@ -267,10 +267,15 @@
if (config.useCompressedClassPointers) {
Register register = r10;
- AMD64HotSpotMove.decodeKlassPointer(asm, register, providers.getRegisters().getHeapBaseRegister(), src, config.getKlassEncoding());
- if (config.narrowKlassBase != 0) {
- // The heap base register was destroyed above, so restore it
- asm.movq(providers.getRegisters().getHeapBaseRegister(), config.narrowOopBase);
+ AMD64HotSpotMove.decodeKlassPointer(crb, asm, register, providers.getRegisters().getHeapBaseRegister(), src, config);
+ if (GeneratePIC.getValue()) {
+ asm.movq(providers.getRegisters().getHeapBaseRegister(), 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);
+ }
}
asm.cmpq(inlineCacheKlass, register);
} else {