diff options
Diffstat (limited to 'vere/ext/gmp/gen/aarch64-macos/mpn/sqr_diag_addlsh1.s')
-rw-r--r-- | vere/ext/gmp/gen/aarch64-macos/mpn/sqr_diag_addlsh1.s | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/vere/ext/gmp/gen/aarch64-macos/mpn/sqr_diag_addlsh1.s b/vere/ext/gmp/gen/aarch64-macos/mpn/sqr_diag_addlsh1.s new file mode 100644 index 0000000..0255158 --- /dev/null +++ b/vere/ext/gmp/gen/aarch64-macos/mpn/sqr_diag_addlsh1.s @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .text + .align 3 + .globl ___gmpn_sqr_diag_addlsh1 + +___gmpn_sqr_diag_addlsh1: + ldr x15, [x2],#8 + lsr x14, x3, #1 + tbz x3, #0, Lbx0 + +Lbx1: adds x7, xzr, xzr + mul x12, x15, x15 + ldr x16, [x2],#8 + ldp x4, x5, [x1],#16 + umulh x11, x15, x15 + b Lmid + +Lbx0: adds x5, xzr, xzr + mul x12, x15, x15 + ldr x17, [x2],#16 + ldp x6, x7, [x1],#32 + umulh x11, x15, x15 + sub x14, x14, #1 + cbz x14, Lend + + .align 4 +Ltop: extr x9, x6, x5, #63 + mul x10, x17, x17 + ldr x16, [x2,#-8] + adcs x13, x9, x11 + ldp x4, x5, [x1,#-16] + umulh x11, x17, x17 + extr x8, x7, x6, #63 + stp x12, x13, [x0],#16 + adcs x12, x8, x10 +Lmid: extr x9, x4, x7, #63 + mul x10, x16, x16 + ldr x17, [x2],#16 + adcs x13, x9, x11 + ldp x6, x7, [x1],#32 + umulh x11, x16, x16 + extr x8, x5, x4, #63 + stp x12, x13, [x0],#16 + adcs x12, x8, x10 + sub x14, x14, #1 + cbnz x14, Ltop + +Lend: extr x9, x6, x5, #63 + mul x10, x17, x17 + adcs x13, x9, x11 + umulh x11, x17, x17 + extr x8, x7, x6, #63 + stp x12, x13, [x0] + adcs x12, x8, x10 + extr x9, xzr, x7, #63 + adcs x13, x9, x11 + stp x12, x13, [x0,#16] + + ret + |