alpha: Fix __remqu corrupting $f3 register
authorUroš Bizjak <ubizjak@gmail.com>
Thu, 24 Jan 2019 18:22:55 +0000 (10:22 -0800)
committerRichard Henderson <richard.henderson@linaro.org>
Thu, 24 Jan 2019 18:28:13 +0000 (10:28 -0800)
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.

ChangeLog
sysdeps/alpha/remqu.S

index 60f4e60..b9e3d92 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2019-01-24  Uroš Bizjak  <ubizjak@gmail.com>
+
+       [BZ #24130]
+       * sysdeps/alpha/remqu.S (__remqu): Add missing restore
+       of $f3 register on $y_is_neg path.
+
 2019-01-24  Samuel Thibault  <samuel.thibault@ens-lyon.org>
 
        * hurd/hurdsig.c (_hurd_thread_sigstate): Set SS_DISABLE in
index c2c5caf..a240ee9 100644 (file)
@@ -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