1142403Snectar// This file is dual licensed under the MIT and the University of Illinois Open 2233294Sstas// Source Licenses. See LICENSE.TXT for details. 3142403Snectar 4233294Sstas#include "../assembly.h" 5142403Snectar 6233294Sstas// di_int __muldi3(di_int a, di_int b); 7233294Sstas 8233294Sstas#ifdef __i386__ 9142403Snectar 10233294Sstas.text 11233294Sstas.balign 4 12233294SstasDEFINE_COMPILERRT_FUNCTION(__muldi3) 13142403Snectar pushl %ebx 14233294Sstas movl 16(%esp), %eax // b.lo 15233294Sstas movl 12(%esp), %ecx // a.hi 16233294Sstas imull %eax, %ecx // b.lo * a.hi 17233294Sstas 18142403Snectar movl 8(%esp), %edx // a.lo 19233294Sstas movl 20(%esp), %ebx // b.hi 20233294Sstas imull %edx, %ebx // a.lo * b.hi 21233294Sstas 22142403Snectar mull %edx // EDX:EAX = a.lo * b.lo 23233294Sstas addl %ecx, %ebx // EBX = (a.lo*b.hi + a.hi*b.lo) 24178825Sdfr addl %ebx, %edx 25233294Sstas 26178825Sdfr popl %ebx 27233294Sstas retl 28178825SdfrEND_COMPILERRT_FUNCTION(__muldi3) 29233294Sstas 30178825Sdfr#endif // __i386__ 31233294Sstas