aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/alpha
diff options
context:
space:
mode:
authorUroš Bizjak <ubizjak@gmail.com>2019-01-24 10:22:55 -0800
committerRichard Henderson <richard.henderson@linaro.org>2019-01-24 10:28:13 -0800
commit8d0168264a689ab82b55887132a4db0081a24f93 (patch)
tree4335e00088c2d87c5f127b3ae1822965db0bc2bc /sysdeps/alpha
parenta0bb5abd09e3d0f66c3dccf70bf74c8b2d7cc1c2 (diff)
downloadglibc-8d0168264a689ab82b55887132a4db0081a24f93.tar
glibc-8d0168264a689ab82b55887132a4db0081a24f93.tar.gz
glibc-8d0168264a689ab82b55887132a4db0081a24f93.tar.bz2
glibc-8d0168264a689ab82b55887132a4db0081a24f93.zip
alpha: Fix __remqu corrupting $f3 register
There was missing restore of $f3 before the return from the function via the $y_is_neg path. This caused the math/big testcase from Go-1.11 testsuite (that includes lots of corner cases that exercise remqu) FAIL. [BZ #24130] * sysdeps/alpha/remqu.S (__remqu): Add missing restore of $f3 register on $y_is_neg path.
Diffstat (limited to 'sysdeps/alpha')
-rw-r--r--sysdeps/alpha/remqu.S4
1 files changed, 4 insertions, 0 deletions
diff --git a/sysdeps/alpha/remqu.S b/sysdeps/alpha/remqu.S
index c2c5caf3c2..a240ee9735 100644
--- a/sysdeps/alpha/remqu.S
+++ b/sysdeps/alpha/remqu.S
@@ -246,12 +246,16 @@ $y_is_neg:
quotient must be either 0 or 1, so the remainder must be X
or X-Y, so just compute it directly. */
cmpule Y, X, AT
+ excb
+ mt_fpcr $f3
subq X, Y, RV
ldt $f0, 0(sp)
+ ldt $f3, 48(sp)
cmoveq AT, X, RV
lda sp, FRAME(sp)
cfi_restore ($f0)
+ cfi_restore ($f3)
cfi_def_cfa_offset (0)
ret $31, (RA), 1