src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc/src/org/graalvm/compiler/hotspot/sparc/SPARCHotSpotBackend.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc/src/org/graalvm/compiler/hotspot/sparc/SPARCHotSpotBackend.java
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc/src/org/graalvm/compiler/hotspot/sparc/SPARCHotSpotBackend.java
Print this page
*** 20,36 ****
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package org.graalvm.compiler.hotspot.sparc;
- import static org.graalvm.compiler.asm.sparc.SPARCAssembler.BPCC;
- import static org.graalvm.compiler.asm.sparc.SPARCAssembler.isGlobalRegister;
- import static org.graalvm.compiler.asm.sparc.SPARCAssembler.Annul.NOT_ANNUL;
- import static org.graalvm.compiler.asm.sparc.SPARCAssembler.BranchPredict.PREDICT_NOT_TAKEN;
- import static org.graalvm.compiler.asm.sparc.SPARCAssembler.CC.Xcc;
- import static org.graalvm.compiler.asm.sparc.SPARCAssembler.ConditionFlag.NotEqual;
- import static org.graalvm.compiler.core.common.GraalOptions.ZapStackOnMethodEntry;
import static jdk.vm.ci.code.ValueUtil.asRegister;
import static jdk.vm.ci.code.ValueUtil.isRegister;
import static jdk.vm.ci.sparc.SPARC.g0;
import static jdk.vm.ci.sparc.SPARC.g5;
import static jdk.vm.ci.sparc.SPARC.i0;
--- 20,29 ----
*** 38,51 ****
import static jdk.vm.ci.sparc.SPARC.l0;
import static jdk.vm.ci.sparc.SPARC.l7;
import static jdk.vm.ci.sparc.SPARC.o0;
import static jdk.vm.ci.sparc.SPARC.o7;
import static jdk.vm.ci.sparc.SPARC.sp;
import java.util.HashSet;
- import java.util.List;
- import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.graalvm.compiler.asm.Assembler;
import org.graalvm.compiler.asm.Label;
--- 31,50 ----
import static jdk.vm.ci.sparc.SPARC.l0;
import static jdk.vm.ci.sparc.SPARC.l7;
import static jdk.vm.ci.sparc.SPARC.o0;
import static jdk.vm.ci.sparc.SPARC.o7;
import static jdk.vm.ci.sparc.SPARC.sp;
+ import static org.graalvm.compiler.asm.sparc.SPARCAssembler.BPCC;
+ import static org.graalvm.compiler.asm.sparc.SPARCAssembler.isGlobalRegister;
+ import static org.graalvm.compiler.asm.sparc.SPARCAssembler.Annul.NOT_ANNUL;
+ import static org.graalvm.compiler.asm.sparc.SPARCAssembler.BranchPredict.PREDICT_NOT_TAKEN;
+ import static org.graalvm.compiler.asm.sparc.SPARCAssembler.CC.Xcc;
+ import static org.graalvm.compiler.asm.sparc.SPARCAssembler.ConditionFlag.NotEqual;
+ import static org.graalvm.compiler.core.common.GraalOptions.ZapStackOnMethodEntry;
+ import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.graalvm.compiler.asm.Assembler;
import org.graalvm.compiler.asm.Label;
*** 60,74 ****
import org.graalvm.compiler.core.common.alloc.RegisterAllocationConfig;
import org.graalvm.compiler.core.common.cfg.AbstractBlockBase;
import org.graalvm.compiler.core.sparc.SPARCNodeMatchRules;
import org.graalvm.compiler.debug.Debug;
import org.graalvm.compiler.debug.DebugCounter;
import org.graalvm.compiler.hotspot.HotSpotDataBuilder;
import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider;
import org.graalvm.compiler.hotspot.HotSpotHostBackend;
import org.graalvm.compiler.hotspot.HotSpotLIRGenerationResult;
- import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
import org.graalvm.compiler.hotspot.meta.HotSpotForeignCallsProvider;
import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
import org.graalvm.compiler.hotspot.stubs.Stub;
import org.graalvm.compiler.lir.InstructionValueConsumer;
import org.graalvm.compiler.lir.LIR;
--- 59,73 ----
import org.graalvm.compiler.core.common.alloc.RegisterAllocationConfig;
import org.graalvm.compiler.core.common.cfg.AbstractBlockBase;
import org.graalvm.compiler.core.sparc.SPARCNodeMatchRules;
import org.graalvm.compiler.debug.Debug;
import org.graalvm.compiler.debug.DebugCounter;
+ import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
import org.graalvm.compiler.hotspot.HotSpotDataBuilder;
import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider;
import org.graalvm.compiler.hotspot.HotSpotHostBackend;
import org.graalvm.compiler.hotspot.HotSpotLIRGenerationResult;
import org.graalvm.compiler.hotspot.meta.HotSpotForeignCallsProvider;
import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
import org.graalvm.compiler.hotspot.stubs.Stub;
import org.graalvm.compiler.lir.InstructionValueConsumer;
import org.graalvm.compiler.lir.LIR;
*** 90,99 ****
--- 89,102 ----
import org.graalvm.compiler.lir.sparc.SPARCLIRInstructionMixin;
import org.graalvm.compiler.lir.sparc.SPARCLIRInstructionMixin.SizeEstimate;
import org.graalvm.compiler.lir.sparc.SPARCTailDelayedLIRInstruction;
import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
+ import org.graalvm.compiler.options.OptionValues;
+ import org.graalvm.util.EconomicMap;
+ import org.graalvm.util.EconomicSet;
+ import org.graalvm.util.Equivalence;
import jdk.vm.ci.code.CallingConvention;
import jdk.vm.ci.code.Register;
import jdk.vm.ci.code.RegisterConfig;
import jdk.vm.ci.code.StackSlot;
*** 201,211 ****
masm.setx(stackpoinerChange, scratch, false);
masm.save(sp, scratch, sp);
}
}
! if (ZapStackOnMethodEntry.getValue()) {
final int slotSize = 8;
for (int i = 0; i < frameSize / slotSize; ++i) {
// 0xC1C1C1C1
masm.stx(g0, new SPARCAddress(sp, i * slotSize));
}
--- 204,214 ----
masm.setx(stackpoinerChange, scratch, false);
masm.save(sp, scratch, sp);
}
}
! if (ZapStackOnMethodEntry.getValue(crb.getOptions())) {
final int slotSize = 8;
for (int i = 0; i < frameSize / slotSize; ++i) {
// 0xC1C1C1C1
masm.stx(g0, new SPARCAddress(sp, i * slotSize));
}
*** 233,254 ****
Stub stub = gen.getStub();
Assembler masm = createAssembler(frameMap);
// On SPARC we always use stack frames.
HotSpotFrameContext frameContext = new HotSpotFrameContext(stub != null);
DataBuilder dataBuilder = new HotSpotDataBuilder(getCodeCache().getTarget());
! CompilationResultBuilder crb = factory.createBuilder(getProviders().getCodeCache(), getProviders().getForeignCalls(), frameMap, masm, dataBuilder, frameContext, compilationResult);
crb.setTotalFrameSize(frameMap.totalFrameSize());
crb.setMaxInterpreterFrameSize(gen.getMaxInterpreterFrameSize());
StackSlot deoptimizationRescueSlot = gen.getDeoptimizationRescueSlot();
if (deoptimizationRescueSlot != null && stub == null) {
crb.compilationResult.setCustomStackAreaOffset(deoptimizationRescueSlot);
}
if (stub != null) {
// Even on sparc we need to save floating point registers
! Set<Register> destroyedCallerRegisters = gatherDestroyedCallerRegisters(lir);
! Map<LIRFrameState, SaveRegistersOp> calleeSaveInfo = gen.getCalleeSaveInfo();
updateStub(stub, destroyedCallerRegisters, calleeSaveInfo, frameMap);
}
assert registerSizePredictionValidator(crb);
return crb;
}
--- 236,258 ----
Stub stub = gen.getStub();
Assembler masm = createAssembler(frameMap);
// On SPARC we always use stack frames.
HotSpotFrameContext frameContext = new HotSpotFrameContext(stub != null);
DataBuilder dataBuilder = new HotSpotDataBuilder(getCodeCache().getTarget());
! OptionValues options = lir.getOptions();
! CompilationResultBuilder crb = factory.createBuilder(getProviders().getCodeCache(), getProviders().getForeignCalls(), frameMap, masm, dataBuilder, frameContext, options, compilationResult);
crb.setTotalFrameSize(frameMap.totalFrameSize());
crb.setMaxInterpreterFrameSize(gen.getMaxInterpreterFrameSize());
StackSlot deoptimizationRescueSlot = gen.getDeoptimizationRescueSlot();
if (deoptimizationRescueSlot != null && stub == null) {
crb.compilationResult.setCustomStackAreaOffset(deoptimizationRescueSlot);
}
if (stub != null) {
// Even on sparc we need to save floating point registers
! EconomicSet<Register> destroyedCallerRegisters = gatherDestroyedCallerRegisters(lir);
! EconomicMap<LIRFrameState, SaveRegistersOp> calleeSaveInfo = gen.getCalleeSaveInfo();
updateStub(stub, destroyedCallerRegisters, calleeSaveInfo, frameMap);
}
assert registerSizePredictionValidator(crb);
return crb;
}
*** 419,429 ****
* Tries to put DelayedControlTransfer instructions and DelayableLIRInstructions together. Also
* it tries to move the DelayedLIRInstruction to the DelayedControlTransfer instruction, if
* possible.
*/
private static void stuffDelayedControlTransfers(LIR l, AbstractBlockBase<?> block) {
! List<LIRInstruction> instructions = l.getLIRforBlock(block);
if (instructions.size() >= 2) {
LIRDependencyAccumulator acc = new LIRDependencyAccumulator();
SPARCDelayedControlTransfer delayedTransfer = null;
int delayTransferPosition = -1;
for (int i = instructions.size() - 1; i >= 0; i--) {
--- 423,433 ----
* Tries to put DelayedControlTransfer instructions and DelayableLIRInstructions together. Also
* it tries to move the DelayedLIRInstruction to the DelayedControlTransfer instruction, if
* possible.
*/
private static void stuffDelayedControlTransfers(LIR l, AbstractBlockBase<?> block) {
! ArrayList<LIRInstruction> instructions = l.getLIRforBlock(block);
if (instructions.size() >= 2) {
LIRDependencyAccumulator acc = new LIRDependencyAccumulator();
SPARCDelayedControlTransfer delayedTransfer = null;
int delayTransferPosition = -1;
for (int i = instructions.size() - 1; i >= 0; i--) {
*** 495,512 ****
return overlap;
}
}
@Override
! public RegisterAllocationConfig newRegisterAllocationConfig(RegisterConfig registerConfig) {
RegisterConfig registerConfigNonNull = registerConfig == null ? getCodeCache().getRegisterConfig() : registerConfig;
! return new SPARCHotSpotRegisterAllocationConfig(registerConfigNonNull);
}
@Override
! public Set<Register> translateToCallerRegisters(Set<Register> calleeRegisters) {
! HashSet<Register> callerRegisters = new HashSet<>(calleeRegisters.size());
for (Register register : calleeRegisters) {
if (l0.number <= register.number && register.number <= l7.number) {
// do nothing
} else if (o0.number <= register.number && register.number <= o7.number) {
// do nothing
--- 499,516 ----
return overlap;
}
}
@Override
! public RegisterAllocationConfig newRegisterAllocationConfig(RegisterConfig registerConfig, String[] allocationRestrictedTo) {
RegisterConfig registerConfigNonNull = registerConfig == null ? getCodeCache().getRegisterConfig() : registerConfig;
! return new SPARCHotSpotRegisterAllocationConfig(registerConfigNonNull, allocationRestrictedTo);
}
@Override
! public EconomicSet<Register> translateToCallerRegisters(EconomicSet<Register> calleeRegisters) {
! EconomicSet<Register> callerRegisters = EconomicSet.create(Equivalence.IDENTITY, calleeRegisters.size());
for (Register register : calleeRegisters) {
if (l0.number <= register.number && register.number <= l7.number) {
// do nothing
} else if (o0.number <= register.number && register.number <= o7.number) {
// do nothing
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc/src/org/graalvm/compiler/hotspot/sparc/SPARCHotSpotBackend.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File