diff options
Diffstat (limited to 'vere/ext/gmp/gen/aarch64-linux/mpn/sec_tabselect.s')
-rw-r--r-- | vere/ext/gmp/gen/aarch64-linux/mpn/sec_tabselect.s | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/vere/ext/gmp/gen/aarch64-linux/mpn/sec_tabselect.s b/vere/ext/gmp/gen/aarch64-linux/mpn/sec_tabselect.s new file mode 100644 index 0000000..b966351 --- /dev/null +++ b/vere/ext/gmp/gen/aarch64-linux/mpn/sec_tabselect.s @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .text + .align 3 + .globl __gmpn_sec_tabselect + .type __gmpn_sec_tabselect,@function +__gmpn_sec_tabselect: + dup v7.2d, x4 + + mov x10, #1 + dup v6.2d, x10 + + subs x6, x2, #4 + b.mi .Louter_end + +.Louter_top: + mov x5, x3 + mov x12, x1 + movi v5.16b, #0 + movi v2.16b, #0 + movi v3.16b, #0 + .align 4 +.Ltp4: cmeq v4.2d, v5.2d, v7.2d + ld1 {v0.2d,v1.2d}, [x1] + add v5.2d, v5.2d, v6.2d + bit v2.16b, v0.16b, v4.16b + bit v3.16b, v1.16b, v4.16b + add x1, x1, x2, lsl #3 + sub x5, x5, #1 + cbnz x5, .Ltp4 + st1 {v2.2d,v3.2d}, [x0], #32 + add x1, x12, #32 + subs x6, x6, #4 + b.pl .Louter_top +.Louter_end: + + tbz x2, #1, .Lb0x + mov x5, x3 + mov x12, x1 + movi v5.16b, #0 + movi v2.16b, #0 + .align 4 +.Ltp2: cmeq v4.2d, v5.2d, v7.2d + ld1 {v0.2d}, [x1] + add v5.2d, v5.2d, v6.2d + bit v2.16b, v0.16b, v4.16b + add x1, x1, x2, lsl #3 + sub x5, x5, #1 + cbnz x5, .Ltp2 + st1 {v2.2d}, [x0], #16 + add x1, x12, #16 + +.Lb0x: tbz x2, #0, .Lb00 + mov x5, x3 + mov x12, x1 + movi v5.16b, #0 + movi v2.16b, #0 + .align 4 +.Ltp1: cmeq v4.2d, v5.2d, v7.2d + ld1 {v0.1d}, [x1] + add v5.2d, v5.2d, v6.2d + bit v2.8b, v0.8b, v4.8b + add x1, x1, x2, lsl #3 + sub x5, x5, #1 + cbnz x5, .Ltp1 + st1 {v2.1d}, [x0], #8 + add x1, x12, #8 + +.Lb00: ret + .size __gmpn_sec_tabselect,.-__gmpn_sec_tabselect |