# HG changeset patch # User Stefan Anzinger # Date 1436450281 -7200 # Node ID a0d0ecbceeb432c01cb2dc46a11164b679794e8e # Parent b8c1c277a6efc926ebb4a2faccf0718a55f9720f [SPARC] Use rdpc for constructing constant table base diff -r b8c1c277a6ef -r a0d0ecbceeb4 graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCNodeLIRBuilder.java --- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCNodeLIRBuilder.java Thu Jul 09 15:57:22 2015 +0200 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCNodeLIRBuilder.java Thu Jul 09 15:58:01 2015 +0200 @@ -25,7 +25,6 @@ import jdk.internal.jvmci.code.*; import jdk.internal.jvmci.common.*; -import jdk.internal.jvmci.debug.*; import jdk.internal.jvmci.meta.*; import com.oracle.graal.compiler.gen.*; diff -r b8c1c277a6ef -r a0d0ecbceeb4 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Thu Jul 09 15:57:22 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Thu Jul 09 15:58:01 2015 +0200 @@ -283,7 +283,7 @@ // TODO: (sa) Fold the two traversals into one stuffDelayedControlTransfers(lir); int constantSize = calculateConstantSize(lir); - boolean canUseImmediateConstantLoad = constantSize < (1 << 13) - 1; + boolean canUseImmediateConstantLoad = constantSize < (1 << 12) - 1; masm.setImmediateConstantLoad(canUseImmediateConstantLoad); FrameMap frameMap = crb.frameMap; RegisterConfig regConfig = frameMap.getRegisterConfig(); diff -r b8c1c277a6ef -r a0d0ecbceeb4 graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCLoadConstantTableBaseOp.java --- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCLoadConstantTableBaseOp.java Thu Jul 09 15:57:22 2015 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCLoadConstantTableBaseOp.java Thu Jul 09 15:58:01 2015 +0200 @@ -24,7 +24,6 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; import static jdk.internal.jvmci.code.ValueUtil.*; -import jdk.internal.jvmci.code.CompilationResult.DataSectionReference; import jdk.internal.jvmci.code.*; import jdk.internal.jvmci.meta.*; @@ -71,16 +70,9 @@ @Override public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { Register baseRegister = asRegister(base); - DataSectionReference ref = new DataSectionReference(); - ref.setOffset(0); - crb.compilationResult.recordDataPatch(masm.position(), ref); - // TODO: (sa) Make this relocation shorter (right now it takes always 8 instructions) - new SPARCMacroAssembler.Setx(0, baseRegister, true).emit(masm); - /** - * Place the base register into the center of the reachable 8k range. This bias is reflected - * in CodeInstaller::pd_patch_DataSectionReference (jvmciCodeInstaller_sparc.cpp) - */ - masm.sub(baseRegister, -1 & ~((1 << 12) - 1), baseRegister); + int beforePosition = masm.position(); + masm.rdpc(baseRegister); + masm.sub(baseRegister, beforePosition, baseRegister); } public AllocatableValue getResult() { diff -r b8c1c277a6ef -r a0d0ecbceeb4 src/cpu/sparc/vm/jvmciCodeInstaller_sparc.cpp --- a/src/cpu/sparc/vm/jvmciCodeInstaller_sparc.cpp Thu Jul 09 15:57:22 2015 +0200 +++ b/src/cpu/sparc/vm/jvmciCodeInstaller_sparc.cpp Thu Jul 09 15:58:01 2015 +0200 @@ -76,10 +76,10 @@ _instructions->relocate(pc + NativeMovConstReg::add_offset, internal_word_Relocation::spec((address) dest)); } TRACE_jvmci_3("relocating at %p (+%d) with destination at %d", pc, pc_offset, data_offset); - } else { + }else { + int const_size = align_size_up(_constants->end()-_constants->start(), CodeEntryAlignment); NativeMovRegMem* load = nativeMovRegMem_at(pc); - // The base pointer is set 4k off (see SPARCLoadConstantTableBaseOp) - load->set_offset(data_offset - (1<<12)); + load->set_offset(- (const_size - data_offset)); TRACE_jvmci_3("relocating ld at %p (+%d) with destination at %d", pc, pc_offset, data_offset); } }