Blame


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