From fcedfddf00b3f994e4f4e40332ac7fc192c63244 Mon Sep 17 00:00:00 2001 From: polwex Date: Sun, 5 Oct 2025 21:56:51 +0700 Subject: claude is gud --- vere/ext/gmp/gen/x86_64-linux/mpn/divrem_2.s | 208 +++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 vere/ext/gmp/gen/x86_64-linux/mpn/divrem_2.s (limited to 'vere/ext/gmp/gen/x86_64-linux/mpn/divrem_2.s') diff --git a/vere/ext/gmp/gen/x86_64-linux/mpn/divrem_2.s b/vere/ext/gmp/gen/x86_64-linux/mpn/divrem_2.s new file mode 100644 index 0000000..b1c0d5b --- /dev/null +++ b/vere/ext/gmp/gen/x86_64-linux/mpn/divrem_2.s @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .text + .align 16, 0x90 + .globl __gmpn_divrem_2 + .type __gmpn_divrem_2,@function + +__gmpn_divrem_2: + + + + push %r15 + push %r14 + push %r13 + push %r12 + lea -24(%rdx,%rcx,8), %r12 + mov %rsi, %r13 + push %rbp + mov %rdi, %rbp + push %rbx + mov 8(%r8), %r11 + mov 16(%r12), %rbx + mov (%r8), %r8 + mov 8(%r12), %r10 + + xor %r15d, %r15d + cmp %rbx, %r11 + ja .L2 + setb %dl + cmp %r10, %r8 + setbe %al + orb %al, %dl + je .L2 + inc %r15d + sub %r8, %r10 + sbb %r11, %rbx +.L2: + lea -3(%rcx,%r13), %r14 + test %r14, %r14 + js .Lend + + push %r8 + push %r10 + push %r11 + mov %r11, %rdi + + + + call __gmpn_invert_limb@PLT + + + pop %r11 + pop %r10 + pop %r8 + + mov %r11, %rdx + mov %rax, %rdi + imul %rax, %rdx + mov %rdx, %r9 + mul %r8 + xor %ecx, %ecx + add %r8, %r9 + adc $-1, %rcx + add %rdx, %r9 + adc $0, %rcx + js 2f +1: dec %rdi + sub %r11, %r9 + sbb $0, %rcx + jns 1b +2: + + lea (%rbp,%r14,8), %rbp + mov %r11, %rsi + neg %rsi + + + + + .align 16, 0x90 +.Ltop: mov %rdi, %rax + mul %rbx + mov %r10, %rcx + add %rax, %rcx + adc %rbx, %rdx + mov %rdx, %r9 + imul %rsi, %rdx + mov %r8, %rax + lea (%rdx, %r10), %rbx + xor %r10d, %r10d + mul %r9 + cmp %r14, %r13 + jg .L19 + mov (%r12), %r10 + sub $8, %r12 +.L19: sub %r8, %r10 + sbb %r11, %rbx + sub %rax, %r10 + sbb %rdx, %rbx + xor %eax, %eax + xor %edx, %edx + cmp %rcx, %rbx + cmovnc %r8, %rax + cmovnc %r11, %rdx + adc $0, %r9 + nop + add %rax, %r10 + adc %rdx, %rbx + cmp %r11, %rbx + jae .Lfix +.Lbck: mov %r9, (%rbp) + sub $8, %rbp + dec %r14 + jns .Ltop + +.Lend: mov %r10, 8(%r12) + mov %rbx, 16(%r12) + pop %rbx + pop %rbp + pop %r12 + pop %r13 + pop %r14 + mov %r15, %rax + pop %r15 + + ret + +.Lfix: seta %dl + cmp %r8, %r10 + setae %al + orb %dl, %al + je .Lbck + inc %r9 + sub %r8, %r10 + sbb %r11, %rbx + jmp .Lbck + .size __gmpn_divrem_2,.-__gmpn_divrem_2 -- cgit v1.2.3