xref: /openbmc/linux/arch/riscv/lib/tishift.S (revision 8dd06ef34b6e2f41b29fbf5fc1663780f2524285)
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*fc585d4aSOlof Johansson#include <asm-generic/export.h>
8a266cdbaSOlof Johansson
9*fc585d4aSOlof 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
17*fc585d4aSOlof Johansson	sll	a4,a1,a4
18*fc585d4aSOlof Johansson	srl	a2,a1,a2
19a89757daSAlex Guo	or	a0,a0,a4
20*fc585d4aSOlof Johansson	mv	a1,a2
21a89757daSAlex Guo.L1:
22a89757daSAlex Guo	ret
23a89757daSAlex Guo.L2:
24*fc585d4aSOlof Johansson	negw	a0,a4
25*fc585d4aSOlof Johansson	li	a2,0
26*fc585d4aSOlof Johansson	srl	a0,a1,a0
27*fc585d4aSOlof Johansson	mv	a1,a2
28a89757daSAlex Guo	ret
29*fc585d4aSOlof JohanssonSYM_FUNC_END(__lshrti3)
30*fc585d4aSOlof JohanssonEXPORT_SYMBOL(__lshrti3)
31*fc585d4aSOlof Johansson
32*fc585d4aSOlof JohanssonSYM_FUNC_START(__ashrti3)
33*fc585d4aSOlof Johansson	beqz	a2, .L3
34*fc585d4aSOlof Johansson	li	a5,64
35*fc585d4aSOlof Johansson	sub	a5,a5,a2
36*fc585d4aSOlof Johansson	sext.w	a4,a5
37*fc585d4aSOlof Johansson	blez	a5, .L4
38*fc585d4aSOlof Johansson	sext.w	a2,a2
39*fc585d4aSOlof Johansson	srl	a0,a0,a2
40*fc585d4aSOlof Johansson	sll	a4,a1,a4
41*fc585d4aSOlof Johansson	sra	a2,a1,a2
42*fc585d4aSOlof Johansson	or	a0,a0,a4
43*fc585d4aSOlof Johansson	mv	a1,a2
44*fc585d4aSOlof Johansson.L3:
45*fc585d4aSOlof Johansson	ret
46*fc585d4aSOlof Johansson.L4:
47*fc585d4aSOlof Johansson	negw	a0,a4
48*fc585d4aSOlof Johansson	srai	a2,a1,0x3f
49*fc585d4aSOlof Johansson	sra	a0,a1,a0
50*fc585d4aSOlof Johansson	mv	a1,a2
51*fc585d4aSOlof Johansson	ret
52*fc585d4aSOlof JohanssonSYM_FUNC_END(__ashrti3)
53*fc585d4aSOlof JohanssonEXPORT_SYMBOL(__ashrti3)
54*fc585d4aSOlof Johansson
55*fc585d4aSOlof JohanssonSYM_FUNC_START(__ashlti3)
56*fc585d4aSOlof Johansson	beqz	a2, .L5
57*fc585d4aSOlof Johansson	li	a5,64
58*fc585d4aSOlof Johansson	sub	a5,a5,a2
59*fc585d4aSOlof Johansson	sext.w	a4,a5
60*fc585d4aSOlof Johansson	blez	a5, .L6
61*fc585d4aSOlof Johansson	sext.w	a2,a2
62*fc585d4aSOlof Johansson	sll	a1,a1,a2
63*fc585d4aSOlof Johansson	srl	a4,a0,a4
64*fc585d4aSOlof Johansson	sll	a2,a0,a2
65*fc585d4aSOlof Johansson	or	a1,a1,a4
66*fc585d4aSOlof Johansson	mv	a0,a2
67*fc585d4aSOlof Johansson.L5:
68*fc585d4aSOlof Johansson	ret
69*fc585d4aSOlof Johansson.L6:
70*fc585d4aSOlof Johansson	negw	a1,a4
71*fc585d4aSOlof Johansson	li	a2,0
72*fc585d4aSOlof Johansson	sll	a1,a0,a1
73*fc585d4aSOlof Johansson	mv	a0,a2
74*fc585d4aSOlof Johansson	ret
75*fc585d4aSOlof JohanssonSYM_FUNC_END(__ashlti3)
76*fc585d4aSOlof JohanssonEXPORT_SYMBOL(__ashlti3)
77