mirror of
https://github.com/golang/go
synced 2024-11-24 20:50:11 -07:00
undo 4439044
cannot use regalloc with floating point on 386. will redo some other way. R=ken2 CC=golang-dev https://golang.org/cl/4439045
This commit is contained in:
parent
bfb486875a
commit
3d36a81fcc
@ -21,7 +21,7 @@ void
|
|||||||
complexmove(Node *f, Node *t)
|
complexmove(Node *f, Node *t)
|
||||||
{
|
{
|
||||||
int ft, tt;
|
int ft, tt;
|
||||||
Node n1, n2, n3, n4, t3, t4;
|
Node n1, n2, n3, n4;
|
||||||
|
|
||||||
if(debug['g']) {
|
if(debug['g']) {
|
||||||
dump("\ncomplexmove-f", f);
|
dump("\ncomplexmove-f", f);
|
||||||
@ -54,21 +54,8 @@ complexmove(Node *f, Node *t)
|
|||||||
subnode(&n1, &n2, f);
|
subnode(&n1, &n2, f);
|
||||||
subnode(&n3, &n4, t);
|
subnode(&n3, &n4, t);
|
||||||
|
|
||||||
// Copy fully into registers before doing stores,
|
cgen(&n1, &n3);
|
||||||
// in case the source and destination overlap.
|
cgen(&n2, &n4);
|
||||||
// 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);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user