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-linux/mpn/divrem_1.s |
claude is gud
Diffstat (limited to 'vere/ext/gmp/gen/x86_64-linux/mpn/divrem_1.s')
-rw-r--r-- | vere/ext/gmp/gen/x86_64-linux/mpn/divrem_1.s | 335 |
1 files changed, 335 insertions, 0 deletions
diff --git a/vere/ext/gmp/gen/x86_64-linux/mpn/divrem_1.s b/vere/ext/gmp/gen/x86_64-linux/mpn/divrem_1.s new file mode 100644 index 0000000..e689bd2 --- /dev/null +++ b/vere/ext/gmp/gen/x86_64-linux/mpn/divrem_1.s @@ -0,0 +1,335 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .text + .align 16, 0x90 + .globl __gmpn_preinv_divrem_1 + .type __gmpn_preinv_divrem_1,@function + +__gmpn_preinv_divrem_1: + + + + + xor %eax, %eax + push %r13 + push %r12 + push %rbp + push %rbx + + mov %rsi, %r12 + mov %rcx, %rbx + add %rsi, %rcx + mov %rdx, %rsi + + lea -8(%rdi,%rcx,8), %rdi + + test %r8, %r8 + js .Lnent + + mov 40(%rsp), %cl + shl %cl, %r8 + jmp .Luent + .size __gmpn_preinv_divrem_1,.-__gmpn_preinv_divrem_1 + + .align 16, 0x90 + .globl __gmpn_divrem_1 + .type __gmpn_divrem_1,@function + +__gmpn_divrem_1: + + + + xor %eax, %eax + push %r13 + push %r12 + push %rbp + push %rbx + + mov %rsi, %r12 + mov %rcx, %rbx + add %rsi, %rcx + mov %rdx, %rsi + je .Lret + + lea -8(%rdi,%rcx,8), %rdi + xor %ebp, %ebp + + test %r8, %r8 + jns .Lunnormalized + +.Lnormalized: + test %rbx, %rbx + je .L8 + mov -8(%rsi,%rbx,8), %rbp + dec %rbx + mov %rbp, %rax + sub %r8, %rbp + cmovc %rax, %rbp + sbb %eax, %eax + inc %eax + mov %rax, (%rdi) + lea -8(%rdi), %rdi +.L8: + push %rdi + push %rsi + push %r8 + mov %r8, %rdi + + + + call __gmpn_invert_limb@PLT + + + pop %r8 + pop %rsi + pop %rdi + + mov %rax, %r9 + mov %rbp, %rax + jmp .Lnent + + .align 16, 0x90 +.Lntop:mov (%rsi,%rbx,8), %r10 + mul %r9 + add %r10, %rax + adc %rbp, %rdx + mov %rax, %rbp + mov %rdx, %r13 + imul %r8, %rdx + sub %rdx, %r10 + mov %r8, %rax + add %r10, %rax + cmp %rbp, %r10 + cmovc %r10, %rax + adc $-1, %r13 + cmp %r8, %rax + jae .Lnfx +.Lnok: mov %r13, (%rdi) + sub $8, %rdi +.Lnent:lea 1(%rax), %rbp + dec %rbx + jns .Lntop + + xor %ecx, %ecx + jmp .Lfrac + +.Lnfx: sub %r8, %rax + inc %r13 + jmp .Lnok + +.Lunnormalized: + test %rbx, %rbx + je .L44 + mov -8(%rsi,%rbx,8), %rax + cmp %r8, %rax + jae .L44 + mov %rbp, (%rdi) + mov %rax, %rbp + lea -8(%rdi), %rdi + je .Lret + dec %rbx +.L44: + bsr %r8, %rcx + not %ecx + shl %cl, %r8 + shl %cl, %rbp + + push %rcx + push %rdi + push %rsi + push %r8 + sub $8, %rsp + mov %r8, %rdi + + + + call __gmpn_invert_limb@PLT + + add $8, %rsp + + pop %r8 + pop %rsi + pop %rdi + pop %rcx + + mov %rax, %r9 + mov %rbp, %rax + test %rbx, %rbx + je .Lfrac + +.Luent:dec %rbx + mov (%rsi,%rbx,8), %rbp + neg %ecx + shr %cl, %rbp + neg %ecx + or %rbp, %rax + jmp .Lent + + .align 16, 0x90 +.Lutop:mov (%rsi,%rbx,8), %r10 + shl %cl, %rbp + neg %ecx + shr %cl, %r10 + neg %ecx + or %r10, %rbp + mul %r9 + add %rbp, %rax + adc %r11, %rdx + mov %rax, %r11 + mov %rdx, %r13 + imul %r8, %rdx + sub %rdx, %rbp + mov %r8, %rax + add %rbp, %rax + cmp %r11, %rbp + cmovc %rbp, %rax + adc $-1, %r13 + cmp %r8, %rax + jae .Lufx +.Luok: mov %r13, (%rdi) + sub $8, %rdi +.Lent: mov (%rsi,%rbx,8), %rbp + dec %rbx + lea 1(%rax), %r11 + jns .Lutop + +.Luend:shl %cl, %rbp + mul %r9 + add %rbp, %rax + adc %r11, %rdx + mov %rax, %r11 + mov %rdx, %r13 + imul %r8, %rdx + sub %rdx, %rbp + mov %r8, %rax + add %rbp, %rax + cmp %r11, %rbp + cmovc %rbp, %rax + adc $-1, %r13 + cmp %r8, %rax + jae .Lefx +.Leok: mov %r13, (%rdi) + sub $8, %rdi + jmp .Lfrac + +.Lufx: sub %r8, %rax + inc %r13 + jmp .Luok +.Lefx: sub %r8, %rax + inc %r13 + jmp .Leok + +.Lfrac:mov %r8, %rbp + neg %rbp + jmp .Lfent + + .align 16, 0x90 +.Lftop:mul %r9 + add %r11, %rdx + mov %rax, %r11 + mov %rdx, %r13 + imul %rbp, %rdx + mov %r8, %rax + add %rdx, %rax + cmp %r11, %rdx + cmovc %rdx, %rax + adc $-1, %r13 + mov %r13, (%rdi) + sub $8, %rdi +.Lfent:lea 1(%rax), %r11 + dec %r12 + jns .Lftop + + shr %cl, %rax +.Lret: pop %rbx + pop %rbp + pop %r12 + pop %r13 + + ret + .size __gmpn_divrem_1,.-__gmpn_divrem_1 |