diff options
author | Torbjorn Granlund <tg@gmplib.org> | 2017-02-12 21:55:15 +0100 |
---|---|---|
committer | Torbjorn Granlund <tg@gmplib.org> | 2017-02-12 21:55:15 +0100 |
commit | 8babf2ca96a6c65c0b4be013b10a26661981a81b (patch) | |
tree | 7bf42e46fcaa404aea070394c3840ae00f2c5d97 /mpn/powerpc64 | |
parent | 5ea635f229392324630ca25671fb378982ce961c (diff) | |
download | gmp-8babf2ca96a6c65c0b4be013b10a26661981a81b.tar.gz |
For AIX, don't jump from mpn_bdiv_q_1 to middle of mpn_pi1_bdiv_q_1.
Streamline.
Diffstat (limited to 'mpn/powerpc64')
-rw-r--r-- | mpn/powerpc64/mode64/bdiv_q_1.asm | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/mpn/powerpc64/mode64/bdiv_q_1.asm b/mpn/powerpc64/mode64/bdiv_q_1.asm index a2851233b..30b4f8793 100644 --- a/mpn/powerpc64/mode64/bdiv_q_1.asm +++ b/mpn/powerpc64/mode64/bdiv_q_1.asm @@ -55,44 +55,46 @@ ASM_START() EXTERN(binvert_limb_table) PROLOGUE(mpn_bdiv_q_1,toc) - addic r7, n, -1 + addi r7, n, -1 cmpi cr1, n, 1 ld r12, 0(up) - rldicl. r0, d, 0, 63 li cnt, 0 - bne cr0, L(7) neg r0, d and r0, d, r0 cntlzd r0, r0 - subfic r0, r0, 63 - rldicl cnt, r0, 0, 32 - srd d, d, r0 + subfic cnt, r0, 63 + srd d, d, cnt L(7): mtctr r7 - LEA( r5, binvert_limb_table) + LEA( r10, binvert_limb_table) rldicl r11, d, 63, 57 - lbzx r0, r5, r11 + lbzx r0, r10, r11 mulld r9, r0, r0 sldi r0, r0, 1 mulld r9, d, r9 subf r0, r9, r0 - mulld r5, r0, r0 + mulld r10, r0, r0 sldi r0, r0, 1 - mulld r5, d, r5 - subf r0, r5, r0 + mulld r10, d, r10 + subf r0, r10, r0 mulld r9, r0, r0 sldi r0, r0, 1 mulld r9, d, r9 subf di, r9, r0 C di = 1/d mod 2^64 - +ifdef(`AIX', +` C For AIX it is not clear how to jump into another function. + b .mpn_pi1_bdiv_q_1 +',` + C For non-AIX, dispatch into the pi1 variant. bne cr0, L(norm) b L(unorm) +') EPILOGUE() -PROLOGUE(mpn_pi1_bdiv_q_1,toc) +PROLOGUE(mpn_pi1_bdiv_q_1) cmpi cr0, cnt, 0 ld r12, 0(up) - addic r0, n, -1 + addic r0, n, -1 C set carry as side effect cmpi cr1, n, 1 mtctr r0 beq cr0, L(norm) |