]> Cypherpunks repositories - gostls13.git/commitdiff
undo 4439044
authorRuss Cox <rsc@golang.org>
Fri, 15 Apr 2011 23:17:16 +0000 (19:17 -0400)
committerRuss Cox <rsc@golang.org>
Fri, 15 Apr 2011 23:17:16 +0000 (19:17 -0400)
cannot use regalloc with floating point on 386.
will redo some other way.

R=ken2
CC=golang-dev
https://golang.org/cl/4439045

src/cmd/gc/cplx.c
test/fixedbugs/bug329.go [deleted file]

index 6eb220db9fd67bff8ff2c246ddf9001276bc93ef..3ec9fe5a2c6b537222dd9b563333b3f28a4a1184 100644 (file)
@@ -21,7 +21,7 @@ void
 complexmove(Node *f, Node *t)
 {
        int ft, tt;
-       Node n1, n2, n3, n4, t3, t4;
+       Node n1, n2, n3, n4;
 
        if(debug['g']) {
                dump("\ncomplexmove-f", f);
@@ -54,21 +54,8 @@ complexmove(Node *f, Node *t)
                subnode(&n1, &n2, f);
                subnode(&n3, &n4, t);
 
-               // Copy fully into registers before doing stores,
-               // in case the source and destination overlap.
-               // Might be picking up a complex128 from one
-               // location on the stack and writing it 8 bytes
-               // (half a complex128) later, in which case the
-               // first write would smash the source for the second read.
-               regalloc(&t3, types[tt+TFLOAT64-TCOMPLEX128], N);
-               regalloc(&t4, types[tt+TFLOAT64-TCOMPLEX128], N);
-               cgen(&n1, &t3);
-               cgen(&n2, &t4);
-
-               cgen(&t3, &n3);
-               cgen(&t4, &n4);
-               regfree(&t3);
-               regfree(&t4);
+               cgen(&n1, &n3);
+               cgen(&n2, &n4);
                break;
        }
 }
diff --git a/test/fixedbugs/bug329.go b/test/fixedbugs/bug329.go
deleted file mode 100644 (file)
index ea379c3..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-// $G $D/$F.go && $L $F.$A && ./$A.out
-
-// Copyright 2011 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.
-
-// Test that when moving a complex128 returned by one function
-// into the argument position for another function, the right thing
-// happens, even when the two positions half-overlap.
-
-package main
-
-type Value struct {
-       X interface{}
-       Y int
-}
-
-type Struct struct {
-       X complex128
-}
-
-const magic = 1+2i
-
-func (Value) Complex(x complex128) {
-       if x != magic {
-               println(x)
-               panic("bad complex magic")
-       }
-}
-
-func f(x *byte, y, z int) complex128 {
-       return magic
-}
-
-func (Value) Struct(x Struct) {
-       if x.X != magic {
-               println(x.X)
-               panic("bad struct magic")
-       }
-}
-
-func f1(x *byte, y, z int) Struct {
-       return Struct{magic}
-}
-
-func main() {
-       var v Value
-       v.Struct(f1(nil, 0, 0))  // ok
-       v.Complex(f(nil, 0, 0))  // used to fail
-}