summaryrefslogtreecommitdiffstats
path: root/arch/loongarch/lib/tishift.S
blob: fa1d310012bc37e026a9367263e23880c4903ce7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/* SPDX-License-Identifier: GPL-2.0-only */

#include <asm/asmmacro.h>
#include <linux/export.h>
#include <linux/linkage.h>

SYM_FUNC_START(__ashlti3)
	srli.d	t2, a0, 1
	nor	t3, zero, a2
	sll.d	t1, a1, a2
	srl.d	t2, t2, t3
	andi	t0, a2, 64
	sll.d	a0, a0, a2
	or	t1, t2, t1
	maskeqz	a1, a0, t0
	masknez	a0, a0, t0
	masknez	t0, t1, t0
	or	a1, t0, a1
	jr	ra
SYM_FUNC_END(__ashlti3)
EXPORT_SYMBOL(__ashlti3)

SYM_FUNC_START(__ashrti3)
	nor	t3, zero, a2
	slli.d	t2, a1, 1
	srl.d	t1, a0, a2
	sll.d	t2, t2, t3
	andi	t0, a2, 64
	or	t1, t2, t1
	sra.d	a2, a1, a2
	srai.d	a1, a1, 63
	maskeqz	a0, a2, t0
	maskeqz	a1, a1, t0
	masknez	a2, a2, t0
	masknez	t0, t1, t0
	or	a1, a1, a2
	or	a0, t0, a0
	jr	ra
SYM_FUNC_END(__ashrti3)
EXPORT_SYMBOL(__ashrti3)

SYM_FUNC_START(__lshrti3)
	slli.d	t2, a1, 1
	nor	t3, zero, a2
	srl.d	t1, a0, a2
	sll.d	t2, t2, t3
	andi	t0, a2, 64
	srl.d	a1, a1, a2
	or	t1, t2, t1
	maskeqz	a0, a1, t0
	masknez	a1, a1, t0
	masknez	t0, t1, t0
	or	a0, t0, a0
	jr	ra
SYM_FUNC_END(__lshrti3)
EXPORT_SYMBOL(__lshrti3)