Linux-libre 5.4.48-gnu
[librecmc/linux-libre.git] / arch / arm64 / lib / tishift.S
1 /* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
2  *
3  * Copyright (C) 2017-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
4  */
5
6 #include <linux/linkage.h>
7
8 #include <asm/assembler.h>
9
10 ENTRY(__ashlti3)
11         cbz     x2, 1f
12         mov     x3, #64
13         sub     x3, x3, x2
14         cmp     x3, #0
15         b.le    2f
16         lsl     x1, x1, x2
17         lsr     x3, x0, x3
18         lsl     x2, x0, x2
19         orr     x1, x1, x3
20         mov     x0, x2
21 1:
22         ret
23 2:
24         neg     w1, w3
25         mov     x2, #0
26         lsl     x1, x0, x1
27         mov     x0, x2
28         ret
29 ENDPROC(__ashlti3)
30 EXPORT_SYMBOL(__ashlti3)
31
32 ENTRY(__ashrti3)
33         cbz     x2, 1f
34         mov     x3, #64
35         sub     x3, x3, x2
36         cmp     x3, #0
37         b.le    2f
38         lsr     x0, x0, x2
39         lsl     x3, x1, x3
40         asr     x2, x1, x2
41         orr     x0, x0, x3
42         mov     x1, x2
43 1:
44         ret
45 2:
46         neg     w0, w3
47         asr     x2, x1, #63
48         asr     x0, x1, x0
49         mov     x1, x2
50         ret
51 ENDPROC(__ashrti3)
52 EXPORT_SYMBOL(__ashrti3)
53
54 ENTRY(__lshrti3)
55         cbz     x2, 1f
56         mov     x3, #64
57         sub     x3, x3, x2
58         cmp     x3, #0
59         b.le    2f
60         lsr     x0, x0, x2
61         lsl     x3, x1, x3
62         lsr     x2, x1, x2
63         orr     x0, x0, x3
64         mov     x1, x2
65 1:
66         ret
67 2:
68         neg     w0, w3
69         mov     x2, #0
70         lsr     x0, x1, x0
71         mov     x1, x2
72         ret
73 ENDPROC(__lshrti3)
74 EXPORT_SYMBOL(__lshrti3)