summaryrefslogtreecommitdiff
path: root/mpn/s390_32
diff options
context:
space:
mode:
authorTorbjorn Granlund <tege@gmplib.org>2011-11-01 13:31:12 +0100
committerTorbjorn Granlund <tege@gmplib.org>2011-11-01 13:31:12 +0100
commit9936113052389e9b825c1da6f90d8077a887a8d6 (patch)
treeb7ce644af8dcdf43698d606b1fbda9c2f5c97568 /mpn/s390_32
parent8badaa7fec3b7661e5cf21a16bd77588a492849e (diff)
downloadgmp-9936113052389e9b825c1da6f90d8077a887a8d6.tar.gz
Rewrite sqr_diag_addlsh1 code.
Diffstat (limited to 'mpn/s390_32')
-rw-r--r--mpn/s390_32/esame/sqr_basecase.asm44
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