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