Mercurial > hg > graal-compiler
changeset 22631:9dc01668ba32
[SPARC] Handle loading of HotSpotMetaspaceConstant
author | Stefan Anzinger <stefan.anzinger@oracle.com> |
---|---|
date | Tue, 15 Sep 2015 15:50:36 +0200 |
parents | 4ec85353fb1b |
children | 8b18c68ac486 |
files | graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotMove.java graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotStrategySwitchOp.java graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCControlFlow.java graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java |
diffstat | 5 files changed, 29 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Tue Sep 15 12:01:41 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Tue Sep 15 15:50:36 2015 +0200 @@ -264,7 +264,11 @@ } else { usedSource = src; } - return super.createMoveConstant(dst, usedSource); + if (usedSource instanceof HotSpotMetaspaceConstant) { + return new SPARCMove.LoadConstantFromTable(usedSource, getConstantTableBase(), dst); + } else { + return super.createMoveConstant(dst, usedSource); + } } @Override
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotMove.java Tue Sep 15 12:01:41 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotMove.java Tue Sep 15 15:50:36 2015 +0200 @@ -22,22 +22,23 @@ */ package com.oracle.graal.hotspot.sparc; -import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; -import static jdk.internal.jvmci.code.ValueUtil.*; -import jdk.internal.jvmci.code.*; +import static com.oracle.graal.lir.LIRInstruction.OperandFlag.ILLEGAL; +import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; +import static jdk.internal.jvmci.code.ValueUtil.asRegister; +import jdk.internal.jvmci.code.Register; import jdk.internal.jvmci.hotspot.HotSpotVMConfig.CompressEncoding; -import jdk.internal.jvmci.meta.*; +import jdk.internal.jvmci.meta.AllocatableValue; -import com.oracle.graal.asm.*; +import com.oracle.graal.asm.Label; import com.oracle.graal.asm.sparc.SPARCAssembler.Annul; import com.oracle.graal.asm.sparc.SPARCAssembler.BranchPredict; import com.oracle.graal.asm.sparc.SPARCAssembler.CC; import com.oracle.graal.asm.sparc.SPARCAssembler.ConditionFlag; import com.oracle.graal.asm.sparc.SPARCAssembler.RCondition; -import com.oracle.graal.asm.sparc.*; -import com.oracle.graal.lir.*; -import com.oracle.graal.lir.asm.*; -import com.oracle.graal.lir.sparc.*; +import com.oracle.graal.asm.sparc.SPARCMacroAssembler; +import com.oracle.graal.lir.LIRInstructionClass; +import com.oracle.graal.lir.asm.CompilationResultBuilder; +import com.oracle.graal.lir.sparc.SPARCLIRInstruction; public class SPARCHotSpotMove { public static final class CompressPointer extends SPARCLIRInstruction {
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotStrategySwitchOp.java Tue Sep 15 12:01:41 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotStrategySwitchOp.java Tue Sep 15 15:50:36 2015 +0200 @@ -25,9 +25,12 @@ import static com.oracle.graal.asm.sparc.SPARCAssembler.CBCOND; import static com.oracle.graal.asm.sparc.SPARCAssembler.Annul.ANNUL; import static com.oracle.graal.asm.sparc.SPARCAssembler.BranchPredict.PREDICT_TAKEN; +import static com.oracle.graal.lir.sparc.SPARCMove.loadFromConstantTable; import static jdk.internal.jvmci.code.ValueUtil.asRegister; +import static jdk.internal.jvmci.sparc.SPARC.g0; import jdk.internal.jvmci.code.Register; import jdk.internal.jvmci.hotspot.HotSpotMetaspaceConstant; +import jdk.internal.jvmci.meta.AllocatableValue; import jdk.internal.jvmci.meta.Constant; import jdk.internal.jvmci.meta.Value; import jdk.internal.jvmci.sparc.SPARC; @@ -45,7 +48,6 @@ import com.oracle.graal.lir.asm.CompilationResultBuilder; import com.oracle.graal.lir.sparc.SPARCControlFlow; import com.oracle.graal.lir.sparc.SPARCDelayedControlTransfer; -import com.oracle.graal.lir.sparc.SPARCMove; final class SPARCHotSpotStrategySwitchOp extends SPARCControlFlow.StrategySwitchOp { public static final LIRInstructionClass<SPARCHotSpotStrategySwitchOp> TYPE = LIRInstructionClass.create(SPARCHotSpotStrategySwitchOp.class); @@ -74,7 +76,7 @@ Register scratchRegister = asRegister(scratch); final int byteCount = constant.isCompressed() ? 4 : 8; Runnable recordReference = () -> crb.recordDataReferenceInCode(constant, byteCount); - SPARCMove.loadFromConstantTable(crb, masm, byteCount, asRegister(constantTableBase), scratchRegister, SPARCDelayedControlTransfer.DUMMY, recordReference); + loadFromConstantTable(crb, masm, byteCount, asRegister(constantTableBase), scratchRegister, SPARCDelayedControlTransfer.DUMMY, recordReference); if (canUseShortBranch) { CBCOND.emit(masm, conditionFlag, conditionCode == CC.Xcc, keyRegister, scratchRegister, target); @@ -97,4 +99,11 @@ return super.estimateEmbeddedSize(c); } } + + @Override + public void emitCode(final CompilationResultBuilder crb, final SPARCMacroAssembler masm) { + final Register keyRegister = asRegister(key); + final Register constantBaseRegister = AllocatableValue.ILLEGAL.equals(constantTableBase) ? g0 : asRegister(constantTableBase); + strategy.run(new HotSpotSwitchClosure(keyRegister, constantBaseRegister, crb, masm)); + } }
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCControlFlow.java Tue Sep 15 12:01:41 2015 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCControlFlow.java Tue Sep 15 15:50:36 2015 +0200 @@ -403,7 +403,7 @@ @Alive({REG}) protected Value key; @Alive({REG, ILLEGAL}) protected Value constantTableBase; @Temp({REG}) protected Value scratch; - private final SwitchStrategy strategy; + protected final SwitchStrategy strategy; private final Map<Label, LabelHint> labelHints; private final List<Label> conditionalLabels = new ArrayList<>();
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Tue Sep 15 12:01:41 2015 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Tue Sep 15 15:50:36 2015 +0200 @@ -86,11 +86,11 @@ public static final LIRInstructionClass<LoadConstantFromTable> TYPE = LIRInstructionClass.create(LoadConstantFromTable.class); public static final SizeEstimate SIZE = SizeEstimate.create(1, 8); - private JavaConstant constant; + private Constant constant; @Def({REG, STACK}) AllocatableValue result; @Use({REG}) private AllocatableValue constantTableBase; - public LoadConstantFromTable(JavaConstant constant, AllocatableValue constantTableBase, AllocatableValue result) { + public LoadConstantFromTable(Constant constant, AllocatableValue constantTableBase, AllocatableValue result) { super(TYPE, SIZE); this.constant = constant; this.result = result;