mirror of
https://github.com/golang/go
synced 2024-11-19 02:04:42 -07:00
[dev.power64] runtime: fix fastrand1 on power64x
fastrand1 depends on testing the high bit of its uint32 state. For efficiency, all of the architectures implement this as a sign bit test. However, on power64, fastrand1 was using a 64-bit sign test on the zero-extended 32-bit state. This always failed, causing fastrand1 to have very short periods and often decay to 0 and get stuck. Fix this by using a 32-bit signed compare instead of a 64-bit compare. This fixes various tests for the randomization of select of map iteration. LGTM=rsc R=rsc, dave CC=golang-codereviews https://golang.org/cl/166990043
This commit is contained in:
parent
6e86003651
commit
40a5b3ecb1
@ -965,7 +965,7 @@ TEXT runtime·fastrand1(SB), NOSPLIT, $0-4
|
|||||||
MOVD g_m(g), R4
|
MOVD g_m(g), R4
|
||||||
MOVWZ m_fastrand(R4), R3
|
MOVWZ m_fastrand(R4), R3
|
||||||
ADD R3, R3
|
ADD R3, R3
|
||||||
CMP R3, $0
|
CMPW R3, $0
|
||||||
BGE 2(PC)
|
BGE 2(PC)
|
||||||
XOR $0x88888eef, R3
|
XOR $0x88888eef, R3
|
||||||
MOVW R3, m_fastrand(R4)
|
MOVW R3, m_fastrand(R4)
|
||||||
|
Loading…
Reference in New Issue
Block a user