David S. Miller | 1b4af13 | 2017-06-05 11:28:57 -0700 | [diff] [blame] | 1 | #include <linux/linkage.h> |
2 | #include <asm/export.h> | ||||
3 | |||||
4 | .text | ||||
5 | .align 4 | ||||
6 | ENTRY(__multi3) /* %o0 = u, %o1 = v */ | ||||
7 | mov %o1, %g1 | ||||
8 | srl %o3, 0, %g4 | ||||
9 | mulx %g4, %g1, %o1 | ||||
10 | srlx %g1, 0x20, %g3 | ||||
11 | mulx %g3, %g4, %g5 | ||||
12 | sllx %g5, 0x20, %o5 | ||||
13 | srl %g1, 0, %g4 | ||||
14 | sub %o1, %o5, %o5 | ||||
15 | srlx %o5, 0x20, %o5 | ||||
16 | addcc %g5, %o5, %g5 | ||||
17 | srlx %o3, 0x20, %o5 | ||||
18 | mulx %g4, %o5, %g4 | ||||
19 | mulx %g3, %o5, %o5 | ||||
20 | sethi %hi(0x80000000), %g3 | ||||
21 | addcc %g5, %g4, %g5 | ||||
22 | srlx %g5, 0x20, %g5 | ||||
23 | add %g3, %g3, %g3 | ||||
24 | movcc %xcc, %g0, %g3 | ||||
25 | addcc %o5, %g5, %o5 | ||||
26 | sllx %g4, 0x20, %g4 | ||||
27 | add %o1, %g4, %o1 | ||||
28 | add %o5, %g3, %g2 | ||||
29 | mulx %g1, %o2, %g1 | ||||
30 | add %g1, %g2, %g1 | ||||
31 | mulx %o0, %o3, %o0 | ||||
32 | retl | ||||
33 | add %g1, %o0, %o0 | ||||
34 | ENDPROC(__multi3) | ||||
35 | EXPORT_SYMBOL(__multi3) |