changeset 22206:339beb637508

[SPARC] Offset constant table base pointer to leverage full 13 bit address range for constant loads
author Stefan Anzinger <stefan.anzinger@oracle.com>
date Mon, 13 Jul 2015 11:03:41 +0200
parents 40c1eecbb711
children aff4dce0b9f6
files graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCLoadConstantTableBaseOp.java src/cpu/sparc/vm/jvmciCodeInstaller_sparc.cpp
diffstat 3 files changed, 5 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java	Mon Jul 13 10:14:34 2015 +0200
+++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java	Mon Jul 13 11:03:41 2015 +0200
@@ -283,7 +283,7 @@
         // TODO: (sa) Fold the two traversals into one
         stuffDelayedControlTransfers(lir);
         int constantSize = calculateConstantSize(lir);
-        boolean canUseImmediateConstantLoad = constantSize < (1 << 12) - 1;
+        boolean canUseImmediateConstantLoad = constantSize < (1 << 13);
         masm.setImmediateConstantLoad(canUseImmediateConstantLoad);
         FrameMap frameMap = crb.frameMap;
         RegisterConfig regConfig = frameMap.getRegisterConfig();
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCLoadConstantTableBaseOp.java	Mon Jul 13 10:14:34 2015 +0200
+++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCLoadConstantTableBaseOp.java	Mon Jul 13 11:03:41 2015 +0200
@@ -72,6 +72,8 @@
         Register baseRegister = asRegister(base);
         int beforePosition = masm.position();
         masm.rdpc(baseRegister);
+        // Must match with CodeInstaller::pd_patch_DataSectionReference
+        masm.add(baseRegister, (int) SPARCAssembler.minSimm(13), baseRegister);
         masm.sub(baseRegister, beforePosition, baseRegister);
     }
 
--- a/src/cpu/sparc/vm/jvmciCodeInstaller_sparc.cpp	Mon Jul 13 10:14:34 2015 +0200
+++ b/src/cpu/sparc/vm/jvmciCodeInstaller_sparc.cpp	Mon Jul 13 11:03:41 2015 +0200
@@ -79,7 +79,8 @@
   }else {
     int const_size = align_size_up(_constants->end()-_constants->start(), CodeEntryAlignment);
     NativeMovRegMem* load = nativeMovRegMem_at(pc);
-    load->set_offset(- (const_size - data_offset));
+    // This offset must match with SPARCLoadConstantTableBaseOp.emitCode
+    load->set_offset(- (const_size - data_offset + Assembler::min_simm13()));
     TRACE_jvmci_3("relocating ld at %p (+%d) with destination at %d", pc, pc_offset, data_offset);
   }
 }