Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / compiler-rt / lib / builtins / i386 / muldi3.S
bloba898e24146707cf37c03ef6ad8ffd62445e2891f
1 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
2 // See https://llvm.org/LICENSE.txt for license information.
3 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5 #include "../assembly.h"
7 // di_int __muldi3(di_int a, di_int b);
9 #ifdef __i386__
11 .text
12 .balign 4
13 DEFINE_COMPILERRT_FUNCTION(__muldi3)
14         pushl   %ebx
15         movl  16(%esp),         %eax    // b.lo
16         movl  12(%esp),         %ecx    // a.hi
17         imull   %eax,           %ecx    // b.lo * a.hi
19         movl   8(%esp),         %edx    // a.lo
20         movl  20(%esp),         %ebx    // b.hi
21         imull   %edx,           %ebx    // a.lo * b.hi
23         mull    %edx                            // EDX:EAX = a.lo * b.lo
24         addl    %ecx,           %ebx    // EBX = (a.lo*b.hi + a.hi*b.lo)
25         addl    %ebx,           %edx
27         popl    %ebx
28         retl
29 END_COMPILERRT_FUNCTION(__muldi3)
31 #endif // __i386__
33 NO_EXEC_STACK_DIRECTIVE