The s390x assembly implementation was previously only handling this
case correctly for x = -Pi. Update the special case handling for
any y.
Fixes #35446
Change-Id: I355575e9ec8c7ce8bd9db10d74f42a22f39a2f38
Reviewed-on: https://go-review.googlesource.com/c/go/+/223420
Run-TryBot: Brian Kessler <brian.m.kessler@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michael Munday <mike.munday@ibm.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
{+Pi, Inf(-1)},
{+Pi, 0},
{+Pi, Inf(1)},
+ {1.0, Inf(1)},
+ {-1.0, Inf(1)},
{+Pi, NaN()},
{Inf(1), Inf(-1)},
{Inf(1), -Pi},
Pi, // atan2(+Pi, -Inf)
Pi / 2, // atan2(+Pi, +0)
0, // atan2(+Pi, +Inf)
+ 0, // atan2(+1, +Inf)
+ Copysign(0, -1), // atan2(-1, +Inf)
NaN(), // atan2(+Pi, NaN)
3 * Pi / 4, // atan2(+Inf, -Inf)
Pi / 2, // atan2(+Inf, -Pi)
MOVD $NegInf, R3
CMPUBEQ R3, R1, negInfPosInf
- //special case Atan2(-Pi, +Inf) = Pi
- MOVD $NegPi, R3
- CMPUBEQ R3, R1, negPiPosInf
+ //special case Atan2(x, +Inf) = Copysign(0, x)
+ CMPBLT R1, $0, returnNegZero
+ BR returnPosZero
Normal:
FMOVD x+0(FP), F0
MOVD $NegPiDiv4, R1
MOVD R1, ret+16(FP)
RET
-negPiPosInf:
+returnNegZero:
MOVD $NegZero, R1
MOVD R1, ret+16(FP)
RET
+returnPosZero:
+ MOVD $0, ret+16(FP)
+ RET