1222656Sed// This file is dual licensed under the MIT and the University of Illinois Open
2222656Sed// Source Licenses. See LICENSE.TXT for details.
3214152Sed
4214152Sed#include "../assembly.h"
5214152Sed
6214152Sed// di_int __muldi3(di_int a, di_int b);
7214152Sed
8214152Sed#ifdef __i386__
9214152Sed
10214152Sed.text
11214152Sed.align 4
12214152SedDEFINE_COMPILERRT_FUNCTION(__muldi3)
13214152Sed	pushl	%ebx
14214152Sed	movl  16(%esp),		%eax	// b.lo
15214152Sed	movl  12(%esp),		%ecx	// a.hi
16214152Sed	imull	%eax,		%ecx	// b.lo * a.hi
17214152Sed
18214152Sed	movl   8(%esp),		%edx	// a.lo
19214152Sed	movl  20(%esp),		%ebx	// b.hi
20214152Sed	imull	%edx,		%ebx	// a.lo * b.hi
21214152Sed
22214152Sed	mull	%edx				// EDX:EAX = a.lo * b.lo
23214152Sed	addl	%ecx,		%ebx	// EBX = (a.lo*b.hi + a.hi*b.lo)
24214152Sed	addl	%ebx,		%edx
25214152Sed
26214152Sed	popl	%ebx
27214152Sed	retl
28214152Sed
29214152Sed#endif // __i386__
30