]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | ! SPDX-License-Identifier: GPL-2.0 |
086e9dc0 JH |
2 | ! Copyright (C) 2012 by Imagination Technologies Ltd. |
3 | ! | |
4 | ! 64-bit multiply routine. | |
5 | ! | |
6 | ||
7 | ! | |
8 | ! 64-bit signed/unsigned multiply | |
9 | ! | |
10 | ! A = D1Ar1:D0Ar2 = a 2^48 + b 2^32 + c 2^16 + d 2^0 | |
11 | ! | |
12 | ! B = D1Ar3:D0Ar4 = w 2^48 + x 2^32 + y 2^16 + z 2^0 | |
13 | ! | |
14 | .text | |
15 | .global ___muldi3 | |
16 | .type ___muldi3,function | |
17 | ||
18 | ___muldi3: | |
19 | MULD D1Re0,D1Ar1,D0Ar4 ! (a 2^48 + b 2^32)(y 2^16 + z 2^0) | |
20 | MULD D0Re0,D0Ar2,D1Ar3 ! (w 2^48 + x 2^32)(c 2^16 + d 2^0) | |
21 | ADD D1Re0,D1Re0,D0Re0 | |
22 | ||
23 | MULW D0Re0,D0Ar2,D0Ar4 ! (d 2^0) * (z 2^0) | |
24 | ||
25 | RTDW D0Ar2,D0Ar2 | |
26 | MULW D0Ar6,D0Ar2,D0Ar4 ! (c 2^16)(z 2^0) | |
27 | LSR D1Ar5,D0Ar6,#16 | |
28 | LSL D0Ar6,D0Ar6,#16 | |
29 | ADDS D0Re0,D0Re0,D0Ar6 | |
30 | ADDCS D1Re0,D1Re0,#1 | |
31 | RTDW D0Ar4,D0Ar4 | |
32 | ADD D1Re0,D1Re0,D1Ar5 | |
33 | ||
34 | MULW D0Ar6,D0Ar2,D0Ar4 ! (c 2^16)(y 2^16) | |
35 | ADD D1Re0,D1Re0,D0Ar6 | |
36 | ||
37 | RTDW D0Ar2,D0Ar2 | |
38 | MULW D0Ar6,D0Ar2,D0Ar4 ! (d 2^0)(y 2^16) | |
39 | LSR D1Ar5,D0Ar6,#16 | |
40 | LSL D0Ar6,D0Ar6,#16 | |
41 | ADDS D0Re0,D0Re0,D0Ar6 | |
42 | ADD D1Re0,D1Re0,D1Ar5 | |
43 | ADDCS D1Re0,D1Re0,#1 | |
44 | MOV PC, D1RtP | |
45 | .size ___muldi3,.-___muldi3 |