diff options
Diffstat (limited to 'vere/ext/gmp/gen/x86_64-macos/mpn/bdiv_q_1.s')
-rw-r--r-- | vere/ext/gmp/gen/x86_64-macos/mpn/bdiv_q_1.s | 215 |
1 files changed, 215 insertions, 0 deletions
diff --git a/vere/ext/gmp/gen/x86_64-macos/mpn/bdiv_q_1.s b/vere/ext/gmp/gen/x86_64-macos/mpn/bdiv_q_1.s new file mode 100644 index 0000000..c21f024 --- /dev/null +++ b/vere/ext/gmp/gen/x86_64-macos/mpn/bdiv_q_1.s @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .text + .align 4, 0x90 + .globl ___gmpn_bdiv_q_1 + + +___gmpn_bdiv_q_1: + + + 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 + + +___gmpn_pi1_bdiv_q_1: + + + + + push %rbx + + mov %rcx, %r11 + mov %rdx, %r10 + mov %r9, %rcx + +Lpi1: mov (%rsi), %rax + + dec %r10 + jz Lone + + lea 8(%rsi,%r10,8), %rsi + lea (%rdi,%r10,8), %rdi + neg %r10 + + test %ecx, %ecx + jnz Lunorm + xor %ebx, %ebx + jmp Lnent + + .align 3, 0x90 +Lntop:mul %r11 + mov -8(%rsi,%r10,8), %rax + sub %rbx, %rax + setc %bl + sub %rdx, %rax + adc $0, %ebx +Lnent:imul %r8, %rax + mov %rax, (%rdi,%r10,8) + inc %r10 + jnz Lntop + + mov -8(%rsi), %r9 + jmp Lcom + +Lunorm: + mov (%rsi,%r10,8), %r9 + shr %cl, %rax + neg %ecx + shl %cl, %r9 + neg %ecx + or %r9, %rax + xor %ebx, %ebx + jmp Luent + + .align 3, 0x90 +Lutop:mul %r11 + mov (%rsi,%r10,8), %rax + shl %cl, %rax + neg %ecx + or %r9, %rax + sub %rbx, %rax + setc %bl + sub %rdx, %rax + adc $0, %ebx +Luent:imul %r8, %rax + mov (%rsi,%r10,8), %r9 + shr %cl, %r9 + neg %ecx + mov %rax, (%rdi,%r10,8) + inc %r10 + jnz Lutop + +Lcom: mul %r11 + sub %rbx, %r9 + sub %rdx, %r9 + imul %r8, %r9 + mov %r9, (%rdi) + pop %rbx + + ret + +Lone: shr %cl, %rax + imul %r8, %rax + mov %rax, (%rdi) + pop %rbx + + ret + |