Mercurial > hg > graal-jvmci-8
changeset 22204: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); } }