# HG changeset patch # User Christos Kotselidis # Date 1370364742 -7200 # Node ID d14b65dac937c393e25fc6681ba6ce9d775d4dc3 # Parent ed86945795d562db7d55201abc61bac76bf6718b Reserve r12 for heap base address when compressed oops are enabled diff -r ed86945795d5 -r d14b65dac937 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java Tue Jun 04 18:06:57 2013 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java Tue Jun 04 18:52:22 2013 +0200 @@ -38,7 +38,7 @@ private final Architecture architecture; - private final Register[] allocatable = initAllocatable(); + private final Register[] allocatable; private final HashMap categorized = new HashMap<>(); @@ -86,25 +86,34 @@ throw new IllegalArgumentException("register " + name + " is not allocatable"); } - private static Register[] initAllocatable() { + private static Register[] initAllocatable(boolean reserveForHeapBase) { + Register[] registers = null; // @formatter:off - Register[] allocatable = { + if (reserveForHeapBase) { + registers = new Register[] { + rax, rbx, rcx, rdx, /*rsp,*/ rbp, rsi, rdi, r8, r9, r10, r11, /*r12,*/ r13, r14, /*r15, */ + xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, + xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15 + }; + } else { + registers = new Register[] { rax, rbx, rcx, rdx, /*rsp,*/ rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, /*r15, */ xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15 - }; - // @formatter:on + }; + } + // @formatter:on if (GraalOptions.RegisterPressure != null) { String[] names = GraalOptions.RegisterPressure.split(","); Register[] regs = new Register[names.length]; for (int i = 0; i < names.length; i++) { - regs[i] = findRegister(names[i], allocatable); + regs[i] = findRegister(names[i], registers); } return regs; } - return allocatable; + return registers; } public AMD64HotSpotRegisterConfig(Architecture architecture, HotSpotVMConfig config) { @@ -119,6 +128,7 @@ } csl = null; + allocatable = initAllocatable(config.useCompressedOops && (config.narrowOopBase != 0)); attributesMap = RegisterAttributes.createMap(this, AMD64.allRegisters); }