diff options
author | polwex <polwex@sortug.com> | 2025-10-05 21:56:51 +0700 |
---|---|---|
committer | polwex <polwex@sortug.com> | 2025-10-05 21:56:51 +0700 |
commit | fcedfddf00b3f994e4f4e40332ac7fc192c63244 (patch) | |
tree | 51d38e62c7bdfcc5f9a5e9435fe820c93cfc9a3d /vere/ext/gmp/gen/x86_64-windows/mpn/bdiv_q_1.s |
claude is gud
Diffstat (limited to 'vere/ext/gmp/gen/x86_64-windows/mpn/bdiv_q_1.s')
-rw-r--r-- | vere/ext/gmp/gen/x86_64-windows/mpn/bdiv_q_1.s | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/vere/ext/gmp/gen/x86_64-windows/mpn/bdiv_q_1.s b/vere/ext/gmp/gen/x86_64-windows/mpn/bdiv_q_1.s new file mode 100644 index 0000000..acdcfb3 --- /dev/null +++ b/vere/ext/gmp/gen/x86_64-windows/mpn/bdiv_q_1.s @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .text + .align 16, 0x90 + .globl __gmpn_bdiv_q_1 + + .def __gmpn_bdiv_q_1 + .scl 2 + .type 32 + .endef +__gmpn_bdiv_q_1: + + push %rdi + push %rsi + mov %rcx, %rdi + mov %rdx, %rsi + mov %r8, %rdx + mov %r9, %rcx + + push %rbx + + mov %rcx, %rax + xor %ecx, %ecx + mov %rdx, %r10 + + bt $0, %eax + jnc Levn + +Lodd: mov %rax, %rbx + shr %eax + and $127, %eax + + + lea __gmp_binvert_limb_table(%rip), %rdx + + + movzbl (%rdx,%rax), %eax + + mov %rbx, %r11 + + lea (%rax,%rax), %edx + imul %eax, %eax + imul %ebx, %eax + sub %eax, %edx + + lea (%rdx,%rdx), %eax + imul %edx, %edx + imul %ebx, %edx + sub %edx, %eax + + lea (%rax,%rax), %r8 + imul %rax, %rax + imul %rbx, %rax + sub %rax, %r8 + + jmp Lpi1 + +Levn: bsf %rax, %rcx + shr %cl, %rax + jmp Lodd + + + .globl __gmpn_pi1_bdiv_q_1 + + .def __gmpn_pi1_bdiv_q_1 + .scl 2 + .type 32 + .endef +__gmpn_pi1_bdiv_q_1: + + push %rdi + push %rsi + mov %rcx, %rdi + mov %rdx, %rsi + mov %r8, %rdx + mov %r9, %rcx + + mov 56(%rsp), %r8 + mov 64(%rsp), %r9 + push %rbx + + mov %rcx, %r11 + mov %rdx, %r10 + mov %r9, %rcx + +Lpi1: mov (%rsi), %rax + + dec %r10 + jz Lone + + mov 8(%rsi), %rdx + lea (%rsi,%r10,8), %rsi + lea (%rdi,%r10,8), %rdi + neg %r10 + + shrd %cl, %rdx, %rax + + xor %ebx, %ebx + jmp Lent + + .align 8, 0x90 +Ltop: + + + + + + + + mul %r11 + mov (%rsi,%r10,8), %rax + mov 8(%rsi,%r10,8), %r9 + shrd %cl, %r9, %rax + nop + sub %rbx, %rax + setc %bl + sub %rdx, %rax + adc $0, %ebx +Lent: imul %r8, %rax + mov %rax, (%rdi,%r10,8) + inc %r10 + jnz Ltop + + mul %r11 + mov (%rsi), %rax + shr %cl, %rax + sub %rbx, %rax + sub %rdx, %rax + imul %r8, %rax + mov %rax, (%rdi) + pop %rbx + pop %rsi + pop %rdi + ret + +Lone: shr %cl, %rax + imul %r8, %rax + mov %rax, (%rdi) + pop %rbx + pop %rsi + pop %rdi + ret + |