[alpha,v2] : Fix sysdeps/alpha/remqu.S clobbering $f3 reg
Commit Message
Attached patch fixes sysdeps/alpha/remqu.S clobbering $f3 register via
$y_is_neg path. There was missing restore of $f3 before the return
from the function.
Without the patch, math/big testcase from Go-1.11 testsuite (that
includes lots of corner cases that exercise remqu) FAIL, with patched
function, the testcase PASSes without problems.
Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
2019-24-01 Uroš Bizjak <ubizjak@gmail.com>
* sysdeps/alpha/remqu.S (__remqu): Add missing restore
of $f3 register on $y_is_neg path.
Uros.
Comments
On 1/24/19 1:40 AM, Uros Bizjak wrote:
> Attached patch fixes sysdeps/alpha/remqu.S clobbering $f3 register via
> $y_is_neg path. There was missing restore of $f3 before the return
> from the function.
>
> Without the patch, math/big testcase from Go-1.11 testsuite (that
> includes lots of corner cases that exercise remqu) FAIL, with patched
> function, the testcase PASSes without problems.
>
> Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
>
> 2019-24-01 Uroš Bizjak <ubizjak@gmail.com>
>
> * sysdeps/alpha/remqu.S (__remqu): Add missing restore
> of $f3 register on $y_is_neg path.
Thanks. I've created BZ# 24130 to go with this.
Siddhesh, ok to commit at this stage?
r~
On 24/01/19 11:34 PM, Richard Henderson wrote:
> On 1/24/19 1:40 AM, Uros Bizjak wrote:
>> Attached patch fixes sysdeps/alpha/remqu.S clobbering $f3 register via
>> $y_is_neg path. There was missing restore of $f3 before the return
>> from the function.
>>
>> Without the patch, math/big testcase from Go-1.11 testsuite (that
>> includes lots of corner cases that exercise remqu) FAIL, with patched
>> function, the testcase PASSes without problems.
>>
>> Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
>>
>> 2019-24-01 Uroš Bizjak <ubizjak@gmail.com>
>>
>> * sysdeps/alpha/remqu.S (__remqu): Add missing restore
>> of $f3 register on $y_is_neg path.
>
> Thanks. I've created BZ# 24130 to go with this.
> Siddhesh, ok to commit at this stage?
This is fine.
Thanks,
Siddhesh
@@ -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