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 SYM_FUNC_START(__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 SYM_FUNC_END(__ashlti3)
30 EXPORT_SYMBOL(__ashlti3)
31 
32 SYM_FUNC_START(__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 SYM_FUNC_END(__ashrti3)
52 EXPORT_SYMBOL(__ashrti3)
53 
54 SYM_FUNC_START(__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 SYM_FUNC_END(__lshrti3)
74 EXPORT_SYMBOL(__lshrti3)
75