.text | |
.globl _mpdigdiv | |
_mpdigdiv: | |
/* Prelude */ | |
pushl %ebp /* save on stack */ | |
pushl %ebx | |
leal 12(%esp), %ebp /* %ebp = FP for now */ | |
movl 0(%ebp), %ebx /* dividend */ | |
movl 0(%ebx), %eax | |
movl 4(%ebx), %edx | |
movl 4(%ebp), %ebx /* divisor */ | |
movl 8(%ebp), %ebp /* quotient */ | |
xorl %ecx, %ecx | |
cmpl %ebx, %edx /* dividend >= 2^32 * divisor */ | |
jae 2f | |
cmpl %ecx, %ebx /* divisor == 1 */ | |
je 2f | |
divl %ebx /* AX = DX:AX/BX */ | |
movl %eax, (%ebp) | |
1: | |
/* Postlude */ | |
popl %ebx | |
popl %ebp | |
ret | |
/* return all 1's */ | |
2: | |
notl %ecx | |
movl %ecx, (%ebp) | |
jmp 1b |