diff options
Diffstat (limited to 'arch/i386/math-emu/div_small.S')
-rw-r--r-- | arch/i386/math-emu/div_small.S | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/arch/i386/math-emu/div_small.S b/arch/i386/math-emu/div_small.S new file mode 100644 index 000000000000..47099628fa4c --- /dev/null +++ b/arch/i386/math-emu/div_small.S | |||
@@ -0,0 +1,47 @@ | |||
1 | .file "div_small.S" | ||
2 | /*---------------------------------------------------------------------------+ | ||
3 | | div_small.S | | ||
4 | | | | ||
5 | | Divide a 64 bit integer by a 32 bit integer & return remainder. | | ||
6 | | | | ||
7 | | Copyright (C) 1992,1995 | | ||
8 | | W. Metzenthen, 22 Parker St, Ormond, Vic 3163, | | ||
9 | | Australia. E-mail billm@jacobi.maths.monash.edu.au | | ||
10 | | | | ||
11 | | | | ||
12 | +---------------------------------------------------------------------------*/ | ||
13 | |||
14 | /*---------------------------------------------------------------------------+ | ||
15 | | unsigned long FPU_div_small(unsigned long long *x, unsigned long y) | | ||
16 | +---------------------------------------------------------------------------*/ | ||
17 | |||
18 | #include "fpu_emu.h" | ||
19 | |||
20 | .text | ||
21 | ENTRY(FPU_div_small) | ||
22 | pushl %ebp | ||
23 | movl %esp,%ebp | ||
24 | |||
25 | pushl %esi | ||
26 | |||
27 | movl PARAM1,%esi /* pointer to num */ | ||
28 | movl PARAM2,%ecx /* The denominator */ | ||
29 | |||
30 | movl 4(%esi),%eax /* Get the current num msw */ | ||
31 | xorl %edx,%edx | ||
32 | divl %ecx | ||
33 | |||
34 | movl %eax,4(%esi) | ||
35 | |||
36 | movl (%esi),%eax /* Get the num lsw */ | ||
37 | divl %ecx | ||
38 | |||
39 | movl %eax,(%esi) | ||
40 | |||
41 | movl %edx,%eax /* Return the remainder in eax */ | ||
42 | |||
43 | popl %esi | ||
44 | |||
45 | leave | ||
46 | ret | ||
47 | |||