1
0
mirror of https://github.com/golang/go synced 2024-10-05 14:01:21 -06:00

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

LGTM=minux
R=minux
CC=golang-codereviews
https://golang.org/cl/127300043
This commit is contained in:
Russ Cox 2014-08-13 15:49:19 -04:00
parent f3f332851f
commit 27e657ef68

View File

@ -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;