Commit f570d9d7 authored by Anthony Martin's avatar Anthony Martin Committed by Russ Cox

8g: fix conversion from float to uint64

The code for converting negative floats was
incorrectly loading an FP control word from
the stack without ever having stored it there.

Thanks to Lars Pensjö for reporting this bug.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/4515091
parent de7c28fe
......@@ -1429,11 +1429,11 @@ gmove(Node *f, Node *t)
split64(t, &tlo, &thi);
gins(AXORL, ncon(0x80000000), &thi); // + 2^63
patch(p3, pc);
patch(p1, pc);
splitclean();
// restore rounding mode
gins(AFLDCW, &t1, N);
patch(p1, pc);
return;
/*
......
// $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG: bug341
// 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.
// Used to panic because 8g was generating incorrect
// code for converting a negative float to a uint64.
package main
func main() {
var x float32 = -2.5
_ = uint64(x)
_ = float32(0)
}
/*
panic: runtime error: floating point error
[signal 0x8 code=0x6 addr=0x8048c64 pc=0x8048c64]
*/
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment