Mercurial > hg > truffle
changeset 21349:25bd9e2320de
Merge
author | Stefan Anzinger <stefan.anzinger@oracle.com> |
---|---|
date | Tue, 12 May 2015 20:56:04 +0200 |
parents | d24e4f349cbc (diff) a818a6a57ef4 (current diff) |
children | f85738837dae |
files | graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/TestCopyOfVirtualization.java graal/com.oracle.graal.java/src/com/oracle/graal/java/IntrinsicContext.java graal/com.oracle.graal.java/src/com/oracle/graal/java/ReplacementContext.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/CollapseFrameForSingleSideEffectPhase.java |
diffstat | 5 files changed, 86 insertions(+), 38 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Tue May 12 17:56:02 2015 +0200 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Tue May 12 20:56:04 2015 +0200 @@ -52,15 +52,7 @@ import com.oracle.graal.lir.sparc.SPARCControlFlow.ReturnOp; import com.oracle.graal.lir.sparc.SPARCControlFlow.StrategySwitchOp; import com.oracle.graal.lir.sparc.SPARCControlFlow.TableSwitchOp; -import com.oracle.graal.lir.sparc.SPARCMove.LoadAddressOp; -import com.oracle.graal.lir.sparc.SPARCMove.LoadDataAddressOp; -import com.oracle.graal.lir.sparc.SPARCMove.MembarOp; -import com.oracle.graal.lir.sparc.SPARCMove.MoveFpGp; -import com.oracle.graal.lir.sparc.SPARCMove.MoveFpGpVIS3; -import com.oracle.graal.lir.sparc.SPARCMove.MoveFromRegOp; -import com.oracle.graal.lir.sparc.SPARCMove.MoveToRegOp; -import com.oracle.graal.lir.sparc.SPARCMove.SPARCStackMove; -import com.oracle.graal.lir.sparc.SPARCMove.StackLoadAddressOp; +import com.oracle.graal.lir.sparc.SPARCMove.*; import com.oracle.graal.phases.util.*; import com.oracle.graal.sparc.*; import com.oracle.graal.sparc.SPARC.CPUFeature; @@ -1074,4 +1066,11 @@ append(new ReturnOp(Value.ILLEGAL)); } + public Value emitSignExtendLoad(LIRKind kind, Value address, LIRFrameState state) { + SPARCAddressValue loadAddress = asAddressValue(address); + Variable result = newVariable(kind); + append(new LoadOp((Kind) kind.getPlatformKind(), result, loadAddress, state, true)); + return result; + } + }
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCNodeLIRBuilder.java Tue May 12 17:56:02 2015 +0200 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCNodeLIRBuilder.java Tue May 12 20:56:04 2015 +0200 @@ -29,7 +29,7 @@ import com.oracle.graal.compiler.gen.*; import com.oracle.graal.compiler.match.*; import com.oracle.graal.lir.*; -import com.oracle.graal.lir.StandardOp.*; +import com.oracle.graal.lir.StandardOp.JumpOp; import com.oracle.graal.lir.gen.*; import com.oracle.graal.lir.sparc.*; import com.oracle.graal.nodes.*; @@ -106,7 +106,7 @@ Kind localToKind = toKind; return builder -> { Value address = access.accessLocation().generateAddress(builder, gen, operand(access.object())); - Value v = getLIRGeneratorTool().emitLoad(LIRKind.value(localFromKind), address, getState(access)); + Value v = getLIRGeneratorTool().emitSignExtendLoad(LIRKind.value(localFromKind), address, getState(access)); return getLIRGeneratorTool().emitReinterpret(LIRKind.value(localToKind), v); }; } @@ -116,4 +116,9 @@ public ComplexMatchResult signExtend(SignExtendNode root, Access access) { return emitSignExtendMemory(access, root.getInputBits(), root.getResultBits()); } + + @Override + public SPARCLIRGenerator getLIRGeneratorTool() { + return (SPARCLIRGenerator) super.getLIRGeneratorTool(); + } }
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotMove.java Tue May 12 17:56:02 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotMove.java Tue May 12 20:56:04 2015 +0200 @@ -28,26 +28,29 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.asm.*; +import com.oracle.graal.asm.sparc.*; 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.asm.sparc.SPARCMacroAssembler.ScratchRegister; import com.oracle.graal.compiler.common.*; +import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.HotSpotVMConfig.CompressEncoding; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.MoveOp; import com.oracle.graal.lir.asm.*; import com.oracle.graal.lir.sparc.*; +import com.oracle.graal.sparc.*; public class SPARCHotSpotMove { public static final class HotSpotLoadConstantOp extends SPARCLIRInstruction implements MoveOp { public static final LIRInstructionClass<HotSpotLoadConstantOp> TYPE = LIRInstructionClass.create(HotSpotLoadConstantOp.class); - @Def({REG}) private AllocatableValue result; + @Def({REG, STACK}) private AllocatableValue result; private final JavaConstant input; public HotSpotLoadConstantOp(AllocatableValue result, JavaConstant input) { @@ -58,43 +61,71 @@ @Override public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { - assert isRegister(result); - if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(input)) { - masm.mov(0, asRegister(result)); - } else if (input instanceof HotSpotObjectConstant) { - boolean compressed = ((HotSpotObjectConstant) input).isCompressed(); + if (isStackSlot(result)) { + StackSlot ss = asStackSlot(result); + try (ScratchRegister s1 = masm.getScratchRegister()) { + Register sr1 = s1.getRegister(); + loadToRegister(crb, masm, sr1.asValue(), input); + try (ScratchRegister s2 = masm.getScratchRegister()) { + Register sr2 = s2.getRegister(); + int stackBias = HotSpotGraalRuntime.runtime().getConfig().stackBias; + new SPARCMacroAssembler.Setx(ss.getOffset(crb.frameMap.currentFrameSize()) + stackBias, sr2).emit(masm); + SPARCAddress addr = new SPARCAddress(SPARC.sp, sr2); + switch (((Kind) result.getPlatformKind()).getBitCount()) { + case 32: + masm.stw(sr1, addr); + break; + case 64: + masm.stx(sr1, addr); + break; + default: + throw GraalInternalError.shouldNotReachHere(); + } + } + } + } else { + loadToRegister(crb, masm, result, input); + } + } + + private static void loadToRegister(CompilationResultBuilder crb, SPARCMacroAssembler masm, AllocatableValue dest, JavaConstant constant) { + assert isRegister(dest); + if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(constant)) { + masm.mov(0, asRegister(dest)); + } else if (constant instanceof HotSpotObjectConstant) { + boolean compressed = ((HotSpotObjectConstant) constant).isCompressed(); if (crb.target.inlineObjects) { - crb.recordInlineDataInCode(input); + crb.recordInlineDataInCode(constant); if (compressed) { - masm.sethi(0xDEADDEAD >>> 10, asRegister(result)); - masm.add(asRegister(result), 0xAD & 0x3F, asRegister(result)); + masm.sethi(0xDEADDEAD >>> 10, asRegister(dest)); + masm.add(asRegister(dest), 0xAD & 0x3F, asRegister(dest)); } else { - new SPARCMacroAssembler.Setx(0xDEADDEADDEADDEADL, asRegister(result), true).emit(masm); + new SPARCMacroAssembler.Setx(0xDEADDEADDEADDEADL, asRegister(dest), true).emit(masm); } } else { GraalInternalError.unimplemented(); } - } else if (input instanceof HotSpotMetaspaceConstant) { - assert input.getKind() == Kind.Int || input.getKind() == Kind.Long; - boolean compressed = input.getKind() == Kind.Int; + } else if (constant instanceof HotSpotMetaspaceConstant) { + assert constant.getKind() == Kind.Int || constant.getKind() == Kind.Long; + boolean compressed = constant.getKind() == Kind.Int; boolean isImmutable = GraalOptions.ImmutableCode.getValue(); boolean generatePIC = GraalOptions.GeneratePIC.getValue(); - crb.recordInlineDataInCode(input); + crb.recordInlineDataInCode(constant); if (compressed) { if (isImmutable && generatePIC) { GraalInternalError.unimplemented(); } else { - new SPARCMacroAssembler.Setx(input.asInt(), asRegister(result), true).emit(masm); + new SPARCMacroAssembler.Setx(constant.asInt(), asRegister(dest), true).emit(masm); } } else { if (isImmutable && generatePIC) { GraalInternalError.unimplemented(); } else { - new SPARCMacroAssembler.Setx(input.asLong(), asRegister(result), true).emit(masm); + new SPARCMacroAssembler.Setx(constant.asLong(), asRegister(dest), true).emit(masm); } } } else { - SPARCMove.move(crb, masm, result, input, SPARCDelayedControlTransfer.DUMMY); + SPARCMove.move(crb, masm, dest, constant, SPARCDelayedControlTransfer.DUMMY); } } @@ -171,8 +202,7 @@ Register resReg = asRegister(result); if (encoding.shift != 0) { - masm.sllx(resReg, 32, resReg); - masm.srlx(resReg, 32 - encoding.shift, resReg); + masm.sll(resReg, encoding.shift, resReg); } if (encoding.base != 0) {
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Tue May 12 17:56:02 2015 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Tue May 12 20:56:04 2015 +0200 @@ -343,10 +343,16 @@ public static final LIRInstructionClass<LoadOp> TYPE = LIRInstructionClass.create(LoadOp.class); @Def({REG}) protected AllocatableValue result; + protected boolean signExtend; public LoadOp(Kind kind, AllocatableValue result, SPARCAddressValue address, LIRFrameState state) { + this(kind, result, address, state, false); + } + + public LoadOp(Kind kind, AllocatableValue result, SPARCAddressValue address, LIRFrameState state, boolean signExtend) { super(TYPE, kind, address, state); this.result = result; + this.signExtend = signExtend; } @Override @@ -362,16 +368,28 @@ switch ((Kind) kind) { case Boolean: case Byte: - masm.ldsb(addr, dst); + if (signExtend) { + masm.ldsb(addr, dst); + } else { + masm.ldub(addr, dst); + } break; case Short: - masm.ldsh(addr, dst); + if (signExtend) { + masm.ldsh(addr, dst); + } else { + masm.lduh(addr, dst); + } break; case Char: masm.lduh(addr, dst); break; case Int: - masm.ldsw(addr, dst); + if (signExtend) { + masm.ldsw(addr, dst); + } else { + masm.lduw(addr, dst); + } break; case Long: masm.ldx(addr, dst);
--- a/src/share/vm/runtime/arguments.cpp Tue May 12 17:56:02 2015 +0200 +++ b/src/share/vm/runtime/arguments.cpp Tue May 12 20:56:04 2015 +0200 @@ -1502,9 +1502,6 @@ // to use UseCompressedOops is InitialHeapSize. size_t max_heap_size = MAX2(MaxHeapSize, InitialHeapSize); // Set default on graal with sparc to not use compressed oops as long they are not implemented -/*#if defined(GRAAL) && defined(TARGET_ARCH_sparc) - FLAG_SET_DEFAULT(UseCompressedOops, false); -#else // if !(GRAAL && SOLARIS)*/ if (max_heap_size <= max_heap_for_compressed_oops()) { #if !defined(COMPILER1) || defined(TIERED) if (FLAG_IS_DEFAULT(UseCompressedOops)) { @@ -1529,7 +1526,6 @@ } #endif // _LP64 #endif // ZERO -//#endif // !(GRAAL && SOLARIS) }