]> git.ipfire.org Git - thirdparty/kernel/linux.git/blob - arch/metag/lib/muldi3.S
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[thirdparty/kernel/linux.git] / arch / metag / lib / muldi3.S
1 ! SPDX-License-Identifier: GPL-2.0
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