Blob


1 .text
2 .p2align 2,0x90
3 .globl mpdigdiv
4 mpdigdiv:
5 /* Prelude */
6 pushl %ebp /* save on stack */
7 pushl %ebx
9 leal 12(%esp), %ebp /* %ebp = FP for now */
10 movl 0(%ebp), %ebx /* dividend */
11 movl 0(%ebx), %eax
12 movl 4(%ebx), %edx
13 movl 4(%ebp), %ebx /* divisor */
14 movl 8(%ebp), %ebp /* quotient */
16 xorl %ecx, %ecx
17 cmpl %ebx, %edx /* dividend >= 2^32 * divisor */
18 jae divovfl
19 cmpl %ecx, %ebx /* divisor == 1 */
20 je divovfl
21 divl %ebx /* AX = DX:AX/BX */
22 movl %eax, (%ebp)
23 done:
24 /* Postlude */
25 popl %ebx
26 popl %ebp
27 ret
29 /* return all 1's */
30 divovfl:
31 notl %ecx
32 movl %ecx, (%ebp)
33 jmp done