.text | |
.p2align 2,0x90 | |
.globl mpdigdiv | |
.type mpdigdiv, @function | |
mpdigdiv: | |
/* Prelude */ | |
pushl %ebp | |
movl %ebx, -4(%esp) /* save on stack */ | |
movl 8(%esp), %ebx | |
movl (%ebx), %eax | |
movl 4(%ebx), %edx | |
movl 12(%esp), %ebx | |
movl 16(%esp), %ebp | |
xorl %ecx, %ecx | |
cmpl %ebx, %edx /* dividend >= 2^32 * divisor */ | |
jae divovfl | |
cmpl %ecx, %ebx /* divisor == 1 */ | |
je divovfl | |
divl %ebx /* AX = DX:AX/BX */ | |
movl %eax, (%ebp) | |
jmp done | |
/* return all 1's */ | |
divovfl: | |
notl %ecx | |
movl %ecx, (%ebp) | |
done: | |
/* Postlude */ | |
movl -4(%esp), %ebx /* restore from stack */ | |
movl %esp, %ebp | |
leave | |
ret | |
.endmpdigdiv: | |
.size mpdigdiv,.endmpdigdiv-mpdigdiv |