Mercurial > hg > graal-compiler
changeset 22567:6de3a450bc17
[SPARC] Fix issues with new ConstantValue and JavaConstant handling
author | Stefan Anzinger <stefan.anzinger@oracle.com> |
---|---|
date | Tue, 01 Sep 2015 14:30:54 +0200 |
parents | e0bcb1f067cd |
children | 3714119dfbc0 |
files | graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCCompare.java graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCLoadConstantTableBaseOp.java graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java |
diffstat | 4 files changed, 24 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Tue Sep 01 14:49:24 2015 +0200 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Tue Sep 01 14:30:54 2015 +0200 @@ -172,6 +172,15 @@ append(new LoadDataAddressOp(dst, data)); } + @Override + public Value emitConstant(LIRKind kind, Constant constant) { + if (JavaConstant.isNull(constant)) { + return new ConstantValue(kind, kind.getPlatformKind().getDefaultValue()); + } else { + return super.emitConstant(kind, constant); + } + } + protected SPARCAddressValue asAddressValue(Value address) { if (address instanceof SPARCAddressValue) { return (SPARCAddressValue) address; @@ -796,7 +805,7 @@ private Variable emitShift(SPARCArithmetic op, Value a, Value b) { Variable result = newVariable(LIRKind.combine(a, b).changeType(a.getPlatformKind())); - if (isJavaConstant(b) && canInlineConstant((JavaConstant) b)) { + if (isJavaConstant(b) && canInlineConstant(asJavaConstant(b))) { append(new BinaryRegConst(op, result, load(a), asJavaConstant(b), null)); } else { append(new BinaryRegReg(op, result, load(a), load(b)));
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCCompare.java Tue Sep 01 14:49:24 2015 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCCompare.java Tue Sep 01 14:30:54 2015 +0200 @@ -113,7 +113,7 @@ masm.cmp(asIntReg(x), crb.asIntConst(y)); break; case ACMP: - if (((JavaConstant) y).isNull()) { + if (asJavaConstant(y).isNull()) { masm.cmp(asObjectReg(x), 0); break; } else {
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCLoadConstantTableBaseOp.java Tue Sep 01 14:49:24 2015 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCLoadConstantTableBaseOp.java Tue Sep 01 14:30:54 2015 +0200 @@ -51,7 +51,7 @@ * this case absolute addressing (without using the base pointer is used). See also: * CodeInstaller::pd_patch_DataSectionReference * - * @see SPARCMove#loadFromConstantTable(CompilationResultBuilder, SPARCMacroAssembler, PlatformKind, + * @see SPARCMove#loadFromConstantTable(CompilationResultBuilder, SPARCMacroAssembler, int, * Register, Register, SPARCDelayedControlTransfer, Runnable) */ public class SPARCLoadConstantTableBaseOp extends SPARCLIRInstruction {
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Tue Sep 01 14:49:24 2015 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Tue Sep 01 14:30:54 2015 +0200 @@ -99,18 +99,17 @@ @Override public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { - final int byteCount = crb.target.getSizeInBytes(constant.getKind()); - assert byteCount >= 1 : "Byte values must not be loaded via constant table"; - final Kind constantKind = constant.getKind(); + final int byteCount = crb.target.getSizeInBytes(result.getPlatformKind()); + assert byteCount > 1 : "Byte values must not be loaded via constant table"; final Runnable recordReference = () -> crb.recordDataReferenceInCode(constant, byteCount); Register baseRegister = asRegister(constantTableBase); if (isRegister(result)) { Register resultRegister = asRegister(result); - loadFromConstantTable(crb, masm, constantKind, baseRegister, resultRegister, getDelayedControlTransfer(), recordReference); + loadFromConstantTable(crb, masm, byteCount, baseRegister, resultRegister, getDelayedControlTransfer(), recordReference); } else if (isStackSlot(result)) { try (ScratchRegister scratch = masm.getScratchRegister()) { Register scratchRegister = scratch.getRegister(); - loadFromConstantTable(crb, masm, constantKind, baseRegister, scratchRegister, getDelayedControlTransfer(), recordReference); + loadFromConstantTable(crb, masm, byteCount, baseRegister, scratchRegister, getDelayedControlTransfer(), recordReference); StackSlot slot = asStackSlot(result); reg2stack(crb, masm, slot, scratchRegister.asValue(), getDelayedControlTransfer()); } @@ -608,6 +607,8 @@ boolean hasVIS1 = cpuFeatures.contains(CPUFeature.VIS1); boolean hasVIS3 = cpuFeatures.contains(CPUFeature.VIS3); Register resultRegister = asRegister(result); + int byteCount = crb.target.getSizeInBytes(result.getPlatformKind()); + Runnable recordReference = () -> crb.recordDataReferenceInCode(input, byteCount); switch (input.getKind().getStackKind()) { case Int: if (input.isDefaultForKind()) { @@ -620,8 +621,7 @@ if (constantTableBase.equals(g0)) { throw JVMCIError.shouldNotReachHere(); } else { - Runnable recordReference = () -> crb.recordDataReferenceInCode(input, input.getKind().getByteCount()); - loadFromConstantTable(crb, masm, Int, constantTableBase, resultRegister, delaySlotLir, recordReference); + loadFromConstantTable(crb, masm, byteCount, constantTableBase, resultRegister, delaySlotLir, recordReference); } } break; @@ -633,8 +633,7 @@ delaySlotLir.emitControlTransfer(crb, masm); masm.or(g0, (int) input.asLong(), resultRegister); } else { - Runnable recordReference = () -> crb.asLongConstRef(input); - loadFromConstantTable(crb, masm, Long, constantTableBase, resultRegister, delaySlotLir, recordReference); + loadFromConstantTable(crb, masm, byteCount, constantTableBase, resultRegister, delaySlotLir, recordReference); } break; case Float: { @@ -649,9 +648,8 @@ delaySlotLir.emitControlTransfer(crb, masm); masm.movwtos(scratch, resultRegister); } else { - Runnable recordReference = () -> crb.asFloatConstRef(input); // First load the address into the scratch register - loadFromConstantTable(crb, masm, Float, constantTableBase, resultRegister, delaySlotLir, recordReference); + loadFromConstantTable(crb, masm, byteCount, constantTableBase, resultRegister, delaySlotLir, recordReference); } } break; @@ -668,8 +666,7 @@ delaySlotLir.emitControlTransfer(crb, masm); masm.movxtod(scratch, resultRegister); } else { - Runnable recordReference = () -> crb.asDoubleConstRef(input); - loadFromConstantTable(crb, masm, Double, constantTableBase, resultRegister, delaySlotLir, recordReference); + loadFromConstantTable(crb, masm, byteCount, constantTableBase, resultRegister, delaySlotLir, recordReference); } } break; @@ -679,8 +676,7 @@ delaySlotLir.emitControlTransfer(crb, masm); masm.clr(resultRegister); } else { - Runnable recordReference = () -> crb.recordDataReferenceInCode(input, 8); - loadFromConstantTable(crb, masm, Long, constantTableBase, resultRegister, delaySlotLir, recordReference); + loadFromConstantTable(crb, masm, byteCount, constantTableBase, resultRegister, delaySlotLir, recordReference); } break; default: @@ -740,7 +736,7 @@ * generated patterns by this method must be understood by * CodeInstaller::pd_patch_DataSectionReference (jvmciCodeInstaller_sparc.cpp). */ - public static void loadFromConstantTable(CompilationResultBuilder crb, SPARCMacroAssembler masm, PlatformKind kind, Register constantTableBase, Register dest, + public static void loadFromConstantTable(CompilationResultBuilder crb, SPARCMacroAssembler masm, int byteCount, Register constantTableBase, Register dest, SPARCDelayedControlTransfer delaySlotInstruction, Runnable recordReference) { SPARCAddress address; ScratchRegister scratch = null; @@ -757,7 +753,6 @@ new Sethix(0, sr, true).emit(masm); address = new SPARCAddress(sr, 0); } - int byteCount = crb.target.getSizeInBytes(kind); masm.ld(address, dest, byteCount, false); } finally { if (scratch != null) {