summaryrefslogtreecommitdiff
path: root/vere/ext/gmp/gen/x86_64-macos/mpn/divrem_1.s
diff options
context:
space:
mode:
Diffstat (limited to 'vere/ext/gmp/gen/x86_64-macos/mpn/divrem_1.s')
-rw-r--r--vere/ext/gmp/gen/x86_64-macos/mpn/divrem_1.s348
1 files changed, 348 insertions, 0 deletions
diff --git a/vere/ext/gmp/gen/x86_64-macos/mpn/divrem_1.s b/vere/ext/gmp/gen/x86_64-macos/mpn/divrem_1.s
new file mode 100644
index 0000000..c0d5b59
--- /dev/null
+++ b/vere/ext/gmp/gen/x86_64-macos/mpn/divrem_1.s
@@ -0,0 +1,348 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .text
+ .align 4, 0x90
+ .globl ___gmpn_preinv_divrem_1
+
+
+___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
+
+
+ .align 4, 0x90
+ .globl ___gmpn_divrem_1
+
+
+___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
+
+ pop %r8
+ pop %rsi
+ pop %rdi
+
+ mov %rax, %r9
+ mov %rbp, %rax
+ jmp Lnent
+
+ .align 4, 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
+ 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 4, 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 4, 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
+
+