# HG changeset patch # User Stefan Anzinger # Date 1408987724 25200 # Node ID 8471d4be5a956c2b14e99210c0e57459056ea411 # Parent c40b258d83ab726cdd25fa6e9497b68f982073c5 [SPARC] Fix loading of constants and add debug messages to assertions diff -r c40b258d83ab -r 8471d4be5a95 graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java --- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Mon Aug 25 10:25:17 2014 -0700 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Mon Aug 25 10:28:44 2014 -0700 @@ -286,10 +286,11 @@ } private static void loadEffectiveAddress(SPARCAddress address, Register result, SPARCMacroAssembler masm) { - if (address.getIndex() == Register.None) { + if (address.getIndex().equals(Register.None)) { if (isSimm13(address.getDisplacement())) { new Add(address.getBase(), address.getDisplacement(), result).emit(masm); } else { + assert result.encoding() != address.getBase().encoding(); new Setx(address.getDisplacement(), result).emit(masm); new Add(address.getBase(), result, result).emit(masm); } @@ -473,7 +474,7 @@ * @return a loadable SPARCAddress */ public static SPARCAddress guaranueeLoadable(SPARCAddress addr, SPARCMacroAssembler masm) { - boolean displacementOutOfBound = addr.getIndex() == Register.None && !SPARCAssembler.isSimm13(addr.getDisplacement()); + boolean displacementOutOfBound = addr.getIndex().equals(Register.None) && !SPARCAssembler.isSimm13(addr.getDisplacement()); if (displacementOutOfBound) { Register scratch = g3; new Setx(addr.getDisplacement(), scratch, false).emit(masm); @@ -551,28 +552,10 @@ Register scratch = g5; switch (input.getKind().getStackKind()) { case Int: - if (crb.codeCache.needsDataPatch(input)) { - crb.recordInlineDataInCode(input); - new Setuw(input.asInt(), asRegister(result)).emit(masm); - } else { - if (input.isDefaultForKind()) { - new Clr(asRegister(result)).emit(masm); - } else { - new Setuw(input.asInt(), asRegister(result)).emit(masm); - } - } + new Setx(input.asLong(), asIntReg(result)).emit(masm); break; case Long: - if (crb.codeCache.needsDataPatch(input)) { - crb.recordInlineDataInCode(input); - new Setx(input.asLong(), asRegister(result), true).emit(masm); - } else { - if (input.isDefaultForKind()) { - new Clr(asRegister(result)).emit(masm); - } else { - new Setx(input.asLong(), asRegister(result)).emit(masm); - } - } + new Setx(input.asLong(), asLongReg(result)).emit(masm); break; case Float: // TODO: Handle it the same way, as in the double case with Movwtos diff -r c40b258d83ab -r 8471d4be5a95 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/FrameMap.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/FrameMap.java Mon Aug 25 10:25:17 2014 -0700 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/FrameMap.java Mon Aug 25 10:28:44 2014 -0700 @@ -204,7 +204,8 @@ // @formatter:off assert (!slot.getRawAddFrameSize() && slot.getRawOffset() < outgoingSize) || ( slot.getRawAddFrameSize() && slot.getRawOffset() < 0 && -slot.getRawOffset() <= spillSize) || - ( slot.getRawAddFrameSize() && slot.getRawOffset() >= 0); + ( slot.getRawAddFrameSize() && slot.getRawOffset() >= 0) : + String.format("RawAddFrameSize: %b RawOffset: 0x%x spillSize: 0x%x outgoingSize: 0x%x", slot.getRawAddFrameSize(), slot.getRawOffset(), spillSize, outgoingSize); // @formatter:on if (slot.isInCallerFrame()) { accessesCallerFrame = true;