From: Russ Cox Date: Thu, 14 Feb 2013 19:49:04 +0000 (-0500) Subject: cmd/8g: fix sse2 compare code gen X-Git-Tag: go1.1rc2~1028 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=ac1015e7f3ef68be5d1c0721d76296ad84fe6768;p=gostls13.git cmd/8g: fix sse2 compare code gen Fixes #4785. R=ken2 CC=golang-dev https://golang.org/cl/7300109 --- diff --git a/src/cmd/8g/ggen.c b/src/cmd/8g/ggen.c index 465177f136..30663aabe5 100644 --- a/src/cmd/8g/ggen.c +++ b/src/cmd/8g/ggen.c @@ -1053,35 +1053,16 @@ x87: goto ret; sse: - if(nr->ullman >= UINF) { - if(!nl->addable) { - tempname(&n1, nl->type); - cgen(nl, &n1); - nl = &n1; - } - if(!nr->addable) { - tempname(&tmp, nr->type); - cgen(nr, &tmp); - nr = &tmp; - } - regalloc(&n2, nr->type, N); - cgen(nr, &n2); - nr = &n2; - goto ssecmp; - } - if(!nl->addable) { tempname(&n1, nl->type); cgen(nl, &n1); nl = &n1; } - if(!nr->addable) { tempname(&tmp, nr->type); cgen(nr, &tmp); nr = &tmp; } - regalloc(&n2, nr->type, N); gmove(nr, &n2); nr = &n2; @@ -1092,7 +1073,6 @@ sse: nl = &n3; } -ssecmp: if(a == OGE || a == OGT) { // only < and <= work right with NaN; reverse if needed r = nr; diff --git a/test/fixedbugs/issue4785.go b/test/fixedbugs/issue4785.go new file mode 100644 index 0000000000..c3dd6297d8 --- /dev/null +++ b/test/fixedbugs/issue4785.go @@ -0,0 +1,20 @@ +// run + +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// issue 4785: used to fail to compile + +package main + +func t(x, y interface{}) interface{} { + return x.(float64) > y.(float64) +} + +func main() { + v := t(1.0, 2.0) + if v != false { + panic("bad comparison") + } +}