diff options
| author | rsc <devnull@localhost> | 2006-04-21 04:25:28 +0000 |
|---|---|---|
| committer | rsc <devnull@localhost> | 2006-04-21 04:25:28 +0000 |
| commit | 4e3a81b98b7fe89d4e081be810f76f87300c11e5 (patch) | |
| tree | bdf31d21178a558600595b88ef7e645c27375851 /src/libmp/386/mpdigdiv-Darwin.s | |
| parent | 12e997d87c3f057018fb8f3411cd9676b416cc04 (diff) | |
| download | plan9port-4e3a81b98b7fe89d4e081be810f76f87300c11e5.tar.gz plan9port-4e3a81b98b7fe89d4e081be810f76f87300c11e5.zip | |
darawin
Diffstat (limited to 'src/libmp/386/mpdigdiv-Darwin.s')
| -rw-r--r-- | src/libmp/386/mpdigdiv-Darwin.s | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/libmp/386/mpdigdiv-Darwin.s b/src/libmp/386/mpdigdiv-Darwin.s new file mode 100644 index 00000000..be96bf38 --- /dev/null +++ b/src/libmp/386/mpdigdiv-Darwin.s @@ -0,0 +1,33 @@ +.text +.p2align 2,0x90 +.globl _mpdigdiv +_mpdigdiv: + /* Prelude */ + pushl %ebp /* save on stack */ + pushl %ebx + + leal 12(%esp), %ebp /* %ebp = FP for now */ + movl 0(%ebp), %ebx /* dividend */ + movl 0(%ebx), %eax + movl 4(%ebx), %edx + movl 4(%ebp), %ebx /* divisor */ + movl 8(%ebp), %ebp /* quotient */ + + 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) +done: + /* Postlude */ + popl %ebx + popl %ebp + ret + + /* return all 1's */ +divovfl: + notl %ecx + movl %ecx, (%ebp) + jmp done |
