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