Commit 27e657ef authored by Russ Cox's avatar Russ Cox

[dev.power64] cmd/9g: fix floating-point comparison for NaN

LGTM=minux
R=minux
CC=golang-codereviews
https://golang.org/cl/127300043
parent f3f33285
......@@ -1267,12 +1267,21 @@ bgen(Node *n, int true, int likely, Prog *to)
l = &n1;
r = &n2;
gins(optoas(OCMP, nr->type), l, r);
// TODO(minux): determine the reason for failed test/floatcmp.go.
// we might need to specially handle floating point comparisons.
/*if(isfloat[nr->type->etype] && (n->op == OEQ || n->op == ONE)) {
} else*/
if(isfloat[nr->type->etype] && (n->op == OLE || n->op == OGE)) {
// To get NaN right, must rewrite x <= y into separate x < y or x = y.
switch(n->op) {
case OLE:
a = OLT;
break;
case OGE:
a = OGT;
break;
}
patch(gbranch(optoas(a, nr->type), nr->type, likely), to);
patch(gbranch(optoas(OEQ, nr->type), nr->type, likely), to);
} else {
patch(gbranch(optoas(a, nr->type), nr->type, likely), to);
}
regfree(&n1);
regfree(&n2);
break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment