/* * arch/i386/libgcc/__muldi3.S * * 64*64 = 64 bit unsigned multiplication */ .text .align 4 .globl __muldi3 .type __muldi3,@function __muldi3: #if __SIZEOF_POINTER__ == 4 /* i386 */ push %esi #ifndef REGPARM movl 8(%esp),%eax movl %eax,%esi movl 16(%esp),%ecx mull %ecx imull 12(%esp),%ecx imull 20(%esp),%esi addl %ecx,%edx addl %esi,%edx #else movl %eax,%esi push %edx mull %ecx imull 8(%esp),%esi addl %esi,%edx pop %esi imull %esi,%ecx addl %ecx,%edx #endif pop %esi ret #elif __SIZEOF_POINTER__ == 8 /* x86_64 */ push %rsi #ifndef REGPARM /* movl 8(%esp),%eax movl %eax,%esi movl 16(%esp),%ecx mull %ecx imull 12(%esp),%ecx imull 20(%esp),%esi addl %ecx,%edx addl %esi,%edx */ movq 8(%rsp),%rax movq %rax,%rsi movq 16(%rsp),%rcx mulq %rcx imulq 12(%rsp),%rcx imulq 20(%rsp),%rsi addq %rcx,%rdx addq %rsi,%rdx #else /* movl %eax,%esi push %edx mull %ecx imull 8(%esp),%esi addl %esi,%edx pop %rsi imull %esi,%ecx addl %ecx,%edx */ movq %rax,%rsi pushq %rdx mulq %rcx imulq 8(%rsp),%rsi addq %rsi,%rdx popq %rsi imulq %rsi,%rcx addq %rcx,%rdx #endif pop %rsi ret #else #error "Unsupported architecture for __muldi3.S" #endif .size __muldi3,.-__muldi3