Mercurial > hg > graal-jvmci-8
changeset 17018:e91533b86166
[SPARC] Fix dacapo sunflow test (Unordered branching is now implemented right)
author | Stefan Anzinger <stefan.anzinger@oracle.com> |
---|---|
date | Thu, 28 Aug 2014 19:24:52 -0700 |
parents | e4cfc9ea2bd3 |
children | 1013a8444746 |
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/SPARCControlFlow.java |
diffstat | 2 files changed, 27 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Thu Aug 28 17:49:37 2014 -0700 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Thu Aug 28 19:24:52 2014 -0700 @@ -224,7 +224,6 @@ double trueDestinationProbability) { boolean mirrored = emitCompare(cmpKind, left, right); Condition finalCondition = mirrored ? cond.mirror() : cond; - boolean finalUnorderedIsTrue = mirrored ? !unorderedIsTrue : unorderedIsTrue; Kind kind = left.getKind().getStackKind(); switch (kind) { @@ -235,7 +234,7 @@ break; case Float: case Double: - append(new BranchOp(finalCondition, trueDestination, falseDestination, kind, finalUnorderedIsTrue)); + append(new BranchOp(finalCondition, trueDestination, falseDestination, kind, unorderedIsTrue)); break; default: throw GraalInternalError.shouldNotReachHere("" + left.getKind());
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCControlFlow.java Thu Aug 28 17:49:37 2014 -0700 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCControlFlow.java Thu Aug 28 19:24:52 2014 -0700 @@ -139,28 +139,44 @@ } private static void emitFloatCompare(SPARCMacroAssembler masm, Label target, Condition actualCondition, boolean branchOnUnordered) { - if (branchOnUnordered) { - // new Fbu(false, target).emit(masm); - // new Nop().emit(masm); - } switch (actualCondition) { case EQ: - new Fbe(false, target).emit(masm); + if (branchOnUnordered) { + new Fbue(false, target).emit(masm); + } else { + new Fbe(false, target).emit(masm); + } break; case NE: - new Fbne(false, target).emit(masm); + new Fbne(false, target).emit(masm); // Is also unordered break; case LT: - new Fbl(false, target).emit(masm); + if (branchOnUnordered) { + new Fbul(false, target).emit(masm); + } else { + new Fbl(false, target).emit(masm); + } break; case LE: - new Fble(false, target).emit(masm); + if (branchOnUnordered) { + new Fbule(false, target).emit(masm); + } else { + new Fble(false, target).emit(masm); + } break; case GT: - new Fbg(false, target).emit(masm); + if (branchOnUnordered) { + new Fbug(false, target).emit(masm); + } else { + new Fbg(false, target).emit(masm); + } break; case GE: - new Fbge(false, target).emit(masm); + if (branchOnUnordered) { + new Fbuge(false, target).emit(masm); + } else { + new Fbge(false, target).emit(masm); + } break; case AE: case AT: