mirror of
https://github.com/golang/go
synced 2024-11-25 21:07:56 -07:00
cmd/6g: fix internal error with SSE registers.
Revision 63f7abcae015 introduced a bug caused by code assuming registers started at X5, not X0. Fixes #4138. R=rsc CC=golang-dev, remy https://golang.org/cl/6558043
This commit is contained in:
parent
ca5e9bfabc
commit
36df358a30
@ -1600,16 +1600,16 @@ BtoR(int32 b)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* bit reg
|
* bit reg
|
||||||
* 16 X5 (FREGMIN)
|
* 16 X0
|
||||||
* ...
|
* ...
|
||||||
* 26 X15 (FREGEXT)
|
* 31 X15
|
||||||
*/
|
*/
|
||||||
int32
|
int32
|
||||||
FtoB(int f)
|
FtoB(int f)
|
||||||
{
|
{
|
||||||
if(f < FREGMIN || f > FREGEXT)
|
if(f < D_X0 || f > D_X15)
|
||||||
return 0;
|
return 0;
|
||||||
return 1L << (f - FREGMIN + 16);
|
return 1L << (f - D_X0 + 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -1619,7 +1619,7 @@ BtoF(int32 b)
|
|||||||
b &= 0xFFFF0000L;
|
b &= 0xFFFF0000L;
|
||||||
if(b == 0)
|
if(b == 0)
|
||||||
return 0;
|
return 0;
|
||||||
return bitno(b) - 16 + FREGMIN;
|
return bitno(b) - 16 + D_X0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
39
test/fixedbugs/bug453.go
Normal file
39
test/fixedbugs/bug453.go
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
// run
|
||||||
|
|
||||||
|
// Copyright 2012 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 4138: bug in floating-point registers numbering.
|
||||||
|
// Makes 6g unable to use more than 11 registers.
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
func formula() float32 {
|
||||||
|
mA := [1]float32{1.0}
|
||||||
|
det1 := mA[0]
|
||||||
|
det2 := mA[0]
|
||||||
|
det3 := mA[0]
|
||||||
|
det4 := mA[0]
|
||||||
|
det5 := mA[0]
|
||||||
|
det6 := mA[0]
|
||||||
|
det7 := mA[0]
|
||||||
|
det8 := mA[0]
|
||||||
|
det9 := mA[0]
|
||||||
|
det10 := mA[0]
|
||||||
|
det11 := mA[0]
|
||||||
|
det12 := mA[0]
|
||||||
|
|
||||||
|
return det1 + det2*det3 +
|
||||||
|
det4*det5 + det6*det7 +
|
||||||
|
det8*det9 + det10*det11 +
|
||||||
|
det12
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
x := formula()
|
||||||
|
if x != 7.0 {
|
||||||
|
println(x, 7.0)
|
||||||
|
panic("x != 7.0")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user