# HG changeset patch # User Stefan Anzinger # Date 1401978493 -7200 # Node ID f22e4fd06a7e670dc53f27280805f83e4ed6779b # Parent f96d9c455da50bed03409387afaab40b55d3db6f [SPARC] Fixing BC_new, BC_fcmpxx diff -r f96d9c455da5 -r f22e4fd06a7e graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCCompare.java --- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCCompare.java Thu Jun 05 15:28:25 2014 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCCompare.java Thu Jun 05 16:28:13 2014 +0200 @@ -60,9 +60,17 @@ @Override protected void verify() { super.verify(); - assert (name().startsWith("I") && x.getKind() == Kind.Int && y.getKind().getStackKind() == Kind.Int) || (name().startsWith("L") && x.getKind() == Kind.Long && y.getKind() == Kind.Long) || - (name().startsWith("A") && x.getKind() == Kind.Object && y.getKind() == Kind.Object) || - (name().startsWith("F") && x.getKind() == Kind.Float && y.getKind() == Kind.Float) || (name().startsWith("D") && x.getKind() == Kind.Double && y.getKind() == Kind.Double); + + // @formatter:off + assert (name().startsWith("I") && (x.getKind() == Kind.Int || x.getKind()==Kind.Byte) && + (y.getKind().getStackKind() == Kind.Int || y.getKind().getStackKind() == Kind.Byte)) || + (name().startsWith("L") && x.getKind() == Kind.Long && y.getKind() == Kind.Long) || + (name().startsWith("A") && x.getKind() == Kind.Object && y.getKind() == Kind.Object) || + (name().startsWith("F") && x.getKind() == Kind.Float && y.getKind() == Kind.Float) || + (name().startsWith("D") && x.getKind() == Kind.Double && y.getKind() == Kind.Double) + : "Name; " + name() + " x: " + x + " y: " + y; + + // @formatter:on } } @@ -106,11 +114,11 @@ throw GraalInternalError.shouldNotReachHere("Only null object constants are allowed in comparisons"); } case FCMP: - // masm.ucomiss(asFloatReg(x), (AMD64Address) crb.asFloatConstRef(y)); - // break; + new Fcmp(CC.Fcc0, Opfs.Fcmps, asFloatReg(x), asFloatReg(y)).emit(masm); + break; case DCMP: - // masm.ucomisd(asDoubleReg(x), (AMD64Address) crb.asDoubleConstRef(y)); - // break; + new Fcmp(CC.Fcc0, Opfs.Fcmpd, asDoubleReg(x), asDoubleReg(y)).emit(masm); + break; default: throw GraalInternalError.shouldNotReachHere(); } diff -r f96d9c455da5 -r f22e4fd06a7e graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCControlFlow.java --- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCControlFlow.java Thu Jun 05 15:28:25 2014 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCControlFlow.java Thu Jun 05 16:28:13 2014 +0200 @@ -348,6 +348,7 @@ case Object: new Movcc(cond, CC.Xcc, asRegister(other), asRegister(result)).emit(masm); break; + case Float: case Double: FCond fc = null; switch (cond) { diff -r f96d9c455da5 -r f22e4fd06a7e graal/com.oracle.graal.printer/src/com/oracle/graal/printer/HexCodeFile.java --- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/HexCodeFile.java Thu Jun 05 15:28:25 2014 +0200 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/HexCodeFile.java Thu Jun 05 16:28:13 2014 +0200 @@ -23,6 +23,7 @@ package com.oracle.graal.printer; import java.io.*; +import java.math.*; import java.util.*; import java.util.regex.*; @@ -159,9 +160,19 @@ } public void writeTo(OutputStream out) { + /** + * The BigInteger issue is necessary, as the c1visualizer/mxpaser/Long.parseLong cannot + * parse unsigned strings representing values greater or equal 1<<63 + */ + BigInteger relocatedtartAddress = new BigInteger(Long.toHexString(startAddress), 16); + if (startAddress < 0) { + relocatedtartAddress = relocatedtartAddress.clearBit(63); // Remove the sign bit. + comments.get(0).add(0, String.format("NOTICE: Address value is always 0x%x less than physical.", Long.MIN_VALUE)); + } + // Now generate the output. PrintStream ps = out instanceof PrintStream ? (PrintStream) out : new PrintStream(out); ps.printf("Platform %s %d %s%n", isa, wordWidth, SECTION_DELIM); - ps.printf("HexCode %x %s %s%n", startAddress, HexCodeFile.hexCodeString(code), SECTION_DELIM); + ps.printf("HexCode %x %s %s%n", relocatedtartAddress.longValue(), HexCodeFile.hexCodeString(code), SECTION_DELIM); for (JumpTable table : jumpTables) { ps.printf("JumpTable %d %d %d %d %s%n", table.position, table.entrySize, table.low, table.high, SECTION_DELIM);