Blame


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