xref: /linux/arch/riscv/lib/tishift.S (revision 06d07429858317ded2db7986113a9e0129cd599b)
150acfb2bSThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */
2a89757daSAlex Guo/*
3a89757daSAlex Guo * Copyright (C) 2018 Free Software Foundation, Inc.
4a89757daSAlex Guo */
5a266cdbaSOlof Johansson
6a266cdbaSOlof Johansson#include <linux/linkage.h>
7*62694797SAl Viro#include <linux/export.h>
8a266cdbaSOlof Johansson
9fc585d4aSOlof JohanssonSYM_FUNC_START(__lshrti3)
10a89757daSAlex Guo	beqz	a2, .L1
11a89757daSAlex Guo	li	a5,64
12a89757daSAlex Guo	sub	a5,a5,a2
13a89757daSAlex Guo	sext.w	a4,a5
14a89757daSAlex Guo	blez	a5, .L2
15a89757daSAlex Guo	sext.w	a2,a2
16a89757daSAlex Guo	srl	a0,a0,a2
17fc585d4aSOlof Johansson	sll	a4,a1,a4
18fc585d4aSOlof Johansson	srl	a2,a1,a2
19a89757daSAlex Guo	or	a0,a0,a4
20fc585d4aSOlof Johansson	mv	a1,a2
21a89757daSAlex Guo.L1:
22a89757daSAlex Guo	ret
23a89757daSAlex Guo.L2:
24fc585d4aSOlof Johansson	negw	a0,a4
25fc585d4aSOlof Johansson	li	a2,0
26fc585d4aSOlof Johansson	srl	a0,a1,a0
27fc585d4aSOlof Johansson	mv	a1,a2
28a89757daSAlex Guo	ret
29fc585d4aSOlof JohanssonSYM_FUNC_END(__lshrti3)
30fc585d4aSOlof JohanssonEXPORT_SYMBOL(__lshrti3)
31fc585d4aSOlof Johansson
32fc585d4aSOlof JohanssonSYM_FUNC_START(__ashrti3)
33fc585d4aSOlof Johansson	beqz	a2, .L3
34fc585d4aSOlof Johansson	li	a5,64
35fc585d4aSOlof Johansson	sub	a5,a5,a2
36fc585d4aSOlof Johansson	sext.w	a4,a5
37fc585d4aSOlof Johansson	blez	a5, .L4
38fc585d4aSOlof Johansson	sext.w	a2,a2
39fc585d4aSOlof Johansson	srl	a0,a0,a2
40fc585d4aSOlof Johansson	sll	a4,a1,a4
41fc585d4aSOlof Johansson	sra	a2,a1,a2
42fc585d4aSOlof Johansson	or	a0,a0,a4
43fc585d4aSOlof Johansson	mv	a1,a2
44fc585d4aSOlof Johansson.L3:
45fc585d4aSOlof Johansson	ret
46fc585d4aSOlof Johansson.L4:
47fc585d4aSOlof Johansson	negw	a0,a4
48fc585d4aSOlof Johansson	srai	a2,a1,0x3f
49fc585d4aSOlof Johansson	sra	a0,a1,a0
50fc585d4aSOlof Johansson	mv	a1,a2
51fc585d4aSOlof Johansson	ret
52fc585d4aSOlof JohanssonSYM_FUNC_END(__ashrti3)
53fc585d4aSOlof JohanssonEXPORT_SYMBOL(__ashrti3)
54fc585d4aSOlof Johansson
55fc585d4aSOlof JohanssonSYM_FUNC_START(__ashlti3)
56fc585d4aSOlof Johansson	beqz	a2, .L5
57fc585d4aSOlof Johansson	li	a5,64
58fc585d4aSOlof Johansson	sub	a5,a5,a2
59fc585d4aSOlof Johansson	sext.w	a4,a5
60fc585d4aSOlof Johansson	blez	a5, .L6
61fc585d4aSOlof Johansson	sext.w	a2,a2
62fc585d4aSOlof Johansson	sll	a1,a1,a2
63fc585d4aSOlof Johansson	srl	a4,a0,a4
64fc585d4aSOlof Johansson	sll	a2,a0,a2
65fc585d4aSOlof Johansson	or	a1,a1,a4
66fc585d4aSOlof Johansson	mv	a0,a2
67fc585d4aSOlof Johansson.L5:
68fc585d4aSOlof Johansson	ret
69fc585d4aSOlof Johansson.L6:
70fc585d4aSOlof Johansson	negw	a1,a4
71fc585d4aSOlof Johansson	li	a2,0
72fc585d4aSOlof Johansson	sll	a1,a0,a1
73fc585d4aSOlof Johansson	mv	a0,a2
74fc585d4aSOlof Johansson	ret
75fc585d4aSOlof JohanssonSYM_FUNC_END(__ashlti3)
76fc585d4aSOlof JohanssonEXPORT_SYMBOL(__ashlti3)
77