Blob


1 .text
3 .p2align 2,0x90
4 .globl mpdigdiv
5 .type mpdigdiv, @function
6 mpdigdiv:
7 /* Prelude */
8 pushl %ebp
9 movl %ebx, -4(%esp) /* save on stack */
11 movl 8(%esp), %ebx
12 movl (%ebx), %eax
13 movl 4(%ebx), %edx
15 movl 12(%esp), %ebx
16 movl 16(%esp), %ebp
17 xorl %ecx, %ecx
18 cmpl %ebx, %edx /* dividend >= 2^32 * divisor */
19 jae divovfl
20 cmpl %ecx, %ebx /* divisor == 1 */
21 je divovfl
22 divl %ebx /* AX = DX:AX/BX */
23 movl %eax, (%ebp)
24 jmp done
26 /* return all 1's */
27 divovfl:
28 notl %ecx
29 movl %ecx, (%ebp)
31 done:
32 /* Postlude */
33 movl -4(%esp), %ebx /* restore from stack */
34 movl %esp, %ebp
35 leave
36 ret
38 .endmpdigdiv:
39 .size mpdigdiv,.endmpdigdiv-mpdigdiv