From 8d0168264a689ab82b55887132a4db0081a24f93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uro=C5=A1=20Bizjak?= Date: Thu, 24 Jan 2019 10:22:55 -0800 Subject: [PATCH] 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. --- ChangeLog | 6 ++++++ sysdeps/alpha/remqu.S | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/ChangeLog b/ChangeLog index 60f4e60db0..b9e3d92417 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2019-01-24 Uroš Bizjak + + [BZ #24130] + * sysdeps/alpha/remqu.S (__remqu): Add missing restore + of $f3 register on $y_is_neg path. + 2019-01-24 Samuel Thibault * hurd/hurdsig.c (_hurd_thread_sigstate): Set SS_DISABLE in 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