diff options
author | Torbjorn Granlund <tg@gmplib.org> | 2021-10-31 02:08:34 +0100 |
---|---|---|
committer | Torbjorn Granlund <tg@gmplib.org> | 2021-10-31 02:08:34 +0100 |
commit | ae427956fe90e72a2482fa66f9a6904b94a7c5fb (patch) | |
tree | f8f68b681167e219bda63d0ff4f5f401544ddd6d /mpn/x86 | |
parent | ef888e83544f6d0cc9d04205de1b6c119c6dff0c (diff) | |
download | gmp-ae427956fe90e72a2482fa66f9a6904b94a7c5fb.tar.gz |
Streamline.
Diffstat (limited to 'mpn/x86')
-rw-r--r-- | mpn/x86/sec_tabselect.asm | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/mpn/x86/sec_tabselect.asm b/mpn/x86/sec_tabselect.asm index c7c2e059f..a3f72153a 100644 --- a/mpn/x86/sec_tabselect.asm +++ b/mpn/x86/sec_tabselect.asm @@ -1,6 +1,6 @@ dnl x86 mpn_sec_tabselect. -dnl Copyright 2011 Free Software Foundation, Inc. +dnl Copyright 2011, 2021 Free Software Foundation, Inc. dnl This file is part of the GNU MP Library. dnl @@ -56,12 +56,11 @@ C mpn_sec_tabselect (mp_limb_t *rp, mp_limb_t *tp, mp_size_t n, mp_size_t nents, define(`rp', `%edi') define(`tp', `%esi') define(`n', `%ebx') -define(`nents', `%ecx') +define(`nents', `32(%esp)') define(`which', `36(%esp)') define(`i', `%ebp') -define(`maskp', `20(%esp)') -define(`maskn', `32(%esp)') +define(`mask', `%ecx') ASM_START() TEXT @@ -74,36 +73,28 @@ PROLOGUE(mpn_sec_tabselect) mov 20(%esp), rp mov 24(%esp), tp mov 28(%esp), n - mov 32(%esp), nents lea (rp,n,4), rp lea (tp,n,4), tp - sub nents, which L(outer): - mov which, %eax - add nents, %eax - neg %eax C set CF iff 'which' != k - sbb %eax, %eax - mov %eax, maskn - not %eax - mov %eax, maskp + sub $1, which + sbb mask, mask mov n, i neg i ALIGN(16) L(top): mov (tp,i,4), %eax - and maskp, %eax mov (rp,i,4), %edx - and maskn, %edx - or %edx, %eax + xor %edx, %eax + and mask, %eax + xor %edx, %eax mov %eax, (rp,i,4) inc i js L(top) -L(end): mov n, %eax - lea (tp,%eax,4), tp - dec nents +L(end): lea (tp,n,4), tp + decl nents jne L(outer) L(outer_end): |