diff options
author | Torbjorn Granlund <tege@gmplib.org> | 2011-11-01 13:31:12 +0100 |
---|---|---|
committer | Torbjorn Granlund <tege@gmplib.org> | 2011-11-01 13:31:12 +0100 |
commit | 9936113052389e9b825c1da6f90d8077a887a8d6 (patch) | |
tree | b7ce644af8dcdf43698d606b1fbda9c2f5c97568 /mpn/s390_32 | |
parent | 8badaa7fec3b7661e5cf21a16bd77588a492849e (diff) | |
download | gmp-9936113052389e9b825c1da6f90d8077a887a8d6.tar.gz |
Rewrite sqr_diag_addlsh1 code.
Diffstat (limited to 'mpn/s390_32')
-rw-r--r-- | mpn/s390_32/esame/sqr_basecase.asm | 44 |
1 files changed, 17 insertions, 27 deletions
diff --git a/mpn/s390_32/esame/sqr_basecase.asm b/mpn/s390_32/esame/sqr_basecase.asm index 6e813941e..01a81b1b5 100644 --- a/mpn/s390_32/esame/sqr_basecase.asm +++ b/mpn/s390_32/esame/sqr_basecase.asm @@ -160,42 +160,32 @@ L(outer_end): C sqr_dia_addlsh1 ============================================================ - lr up, up_saved - lr rp, rp_saved - lr n, n_saved +define(`up', `up_saved') +define(`rp', `rp_saved') + la n, 1(n_saved) - lhi %r9, -1 C set non-carry state l %r1, 0(up) mlr %r0, %r1 - ahi n, 1 - l %r7, 4(rp) - lhi %r6, 0 - alr %r7, %r7 - j L(mid) + st %r1, 0(rp) +C clr %r15, %r15 C clear carry (already clear per above) -L(top): lm %r6, %r7, 0(rp) +L(top): l %r11, 4(up) + la up, 4(up) + l %r6, 4(rp) + l %r7, 8(rp) + mlr %r10, %r11 alcr %r6, %r6 alcr %r7, %r7 -L(mid): slbr %r13, %r13 C save carry - ahi %r9, 1 C restore old carry - alcr %r6, %r1 - alcr %r7, %r0 - stm %r6, %r7, 0(rp) + alcr %r10, zero C propagate carry to high product limb + alr %r6, %r0 + alcr %r7, %r11 + stm %r6, %r7, 4(rp) la rp, 8(rp) - l %r1, 4(up) - la up, 4(up) - lr %r9, %r13 C copy carry save register - mlr %r0, %r1 + lr %r0, %r10 C copy carry limb brct n, L(top) - l %r6, 0(rp) - lhi %r7, 0 - alcr %r6, %r6 - alcr %r7, %r7 - ahi %r9, 1 C restore old carry - alcr %r6, %r1 - alcr %r7, %r0 - stm %r6, %r7, 0(rp) + alcr %r0, zero + st %r0, 4(rp) lm %r6, %r14, 24(%r15) br %r14 |