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_64 | |
parent | 8badaa7fec3b7661e5cf21a16bd77588a492849e (diff) | |
download | gmp-9936113052389e9b825c1da6f90d8077a887a8d6.tar.gz |
Rewrite sqr_diag_addlsh1 code.
Diffstat (limited to 'mpn/s390_64')
-rw-r--r-- | mpn/s390_64/sqr_basecase.asm | 44 |
1 files changed, 17 insertions, 27 deletions
diff --git a/mpn/s390_64/sqr_basecase.asm b/mpn/s390_64/sqr_basecase.asm index c19b84350..7df0ab153 100644 --- a/mpn/s390_64/sqr_basecase.asm +++ b/mpn/s390_64/sqr_basecase.asm @@ -160,42 +160,32 @@ L(outer_end): C sqr_diag_addlsh1 ============================================================ - lgr up, up_saved - lgr rp, rp_saved - lgr n, n_saved +define(`up', `up_saved') +define(`rp', `rp_saved') + la n, 1(n_saved) - lghi %r9, -1 C set non-carry state lg %r1, 0(up) mlgr %r0, %r1 - aghi n, 1 - lg %r7, 8(rp) - lghi %r6, 0 - algr %r7, %r7 - j L(mid) + stg %r1, 0(rp) +C clr %r15, %r15 C clear carry (already clear per above) -L(top): lmg %r6, %r7, 0(rp) +L(top): lg %r11, 8(up) + la up, 8(up) + lg %r6, 8(rp) + lg %r7, 16(rp) + mlgr %r10, %r11 alcgr %r6, %r6 alcgr %r7, %r7 -L(mid): slbgr %r13, %r13 C save carry - aghi %r9, 1 C restore old carry - alcgr %r6, %r1 - alcgr %r7, %r0 - stmg %r6, %r7, 0(rp) + alcgr %r10, zero C propagate carry to high product limb + algr %r6, %r0 + alcgr %r7, %r11 + stmg %r6, %r7, 8(rp) la rp, 16(rp) - lg %r1, 8(up) - la up, 8(up) - lgr %r9, %r13 C copy carry save register - mlgr %r0, %r1 + lgr %r0, %r10 C copy carry limb brctg n, L(top) - lg %r6, 0(rp) - lghi %r7, 0 - alcgr %r6, %r6 - alcgr %r7, %r7 - aghi %r9, 1 C restore old carry - alcgr %r6, %r1 - alcgr %r7, %r0 - stmg %r6, %r7, 0(rp) + alcgr %r0, zero + stg %r0, 8(rp) lmg %r6, %r14, 48(%r15) br %r14 |