Add memtest support.
[syslinux-debian/hramrach.git] / com32 / lib / libgcc / __muldi3.S
blob424787c81e61ac83adbc8c7a247e6bc9ae67d9c7
1 /*
2  * arch/i386/libgcc/__muldi3.S
3  *
4  * 64*64 = 64 bit unsigned multiplication
5  */
7         .text
8         .align 4
9         .globl __muldi3
10         .type __muldi3,@function
11 __muldi3:
12 #if __SIZEOF_POINTER__ == 4
13         /* i386 */
14         push  %esi
15 #ifndef REGPARM
16         movl  8(%esp),%eax
17         movl  %eax,%esi
18         movl  16(%esp),%ecx
19         mull  %ecx
20         imull 12(%esp),%ecx
21         imull 20(%esp),%esi
22         addl  %ecx,%edx
23         addl  %esi,%edx
24 #else
25         movl  %eax,%esi
26         push  %edx
27         mull  %ecx
28         imull 8(%esp),%esi
29         addl  %esi,%edx
30         pop   %esi
31         imull %esi,%ecx
32         addl  %ecx,%edx
33 #endif
34         pop   %esi
35         ret
36 #elif __SIZEOF_POINTER__ == 8
37         /* x86_64 */
38         push  %rsi
39 #ifndef REGPARM
41         movl  8(%esp),%eax
42         movl %eax,%esi
43         movl  16(%esp),%ecx
44         mull  %ecx
45         imull 12(%esp),%ecx
46         imull 20(%esp),%esi
47         addl  %ecx,%edx
48         addl  %esi,%edx
50         movq  8(%rsp),%rax
51         movq %rax,%rsi
52         movq  16(%rsp),%rcx
53         mulq  %rcx
54         imulq 12(%rsp),%rcx
55         imulq 20(%rsp),%rsi
56         addq  %rcx,%rdx
57         addq  %rsi,%rdx
58 #else
60         movl  %eax,%esi
61         push  %edx
62         mull  %ecx
63         imull 8(%esp),%esi
64         addl  %esi,%edx
65         pop   %rsi
66         imull %esi,%ecx
67         addl  %ecx,%edx
69         movq  %rax,%rsi
70         pushq  %rdx
71         mulq  %rcx
72         imulq 8(%rsp),%rsi
73         addq  %rsi,%rdx
74         popq  %rsi
75         imulq %rsi,%rcx
76         addq  %rcx,%rdx
77 #endif
78         pop   %rsi
79         ret
80 #else
81 #error "Unsupported architecture for __muldi3.S"
82 #endif
83         .size __muldi3,.-__muldi3