1
2
3
4
5
6
7
8
9
10
11
12
13#include <linux/linkage.h>
14
15#ifdef __ARMEB__
16#define xh r0
17#define xl r1
18#define yh r2
19#define yl r3
20#else
21#define xl r0
22#define xh r1
23#define yl r2
24#define yh r3
25#endif
26
27ENTRY(__muldi3)
28ENTRY(__aeabi_lmul)
29
30 mul xh, yl, xh
31 mla xh, xl, yh, xh
32 mov ip, xl, lsr
33 mov yh, yl, lsr
34 bic xl, xl, ip, lsl
35 bic yl, yl, yh, lsl
36 mla xh, yh, ip, xh
37 mul yh, xl, yh
38 mul xl, yl, xl
39 mul ip, yl, ip
40 adds xl, xl, yh, lsl
41 adc xh, xh, yh, lsr
42 adds xl, xl, ip, lsl
43 adc xh, xh, ip, lsr
44 mov pc, lr
45
46ENDPROC(__muldi3)
47ENDPROC(__aeabi_lmul)
48