xref: /openbmc/linux/arch/s390/lib/tishift.S (revision 18afb028)
1/* SPDX-License-Identifier: GPL-2.0 */
2
3#include <linux/export.h>
4#include <linux/linkage.h>
5#include <asm/nospec-insn.h>
6
7	.section .noinstr.text, "ax"
8
9	GEN_BR_THUNK %r14
10
11SYM_FUNC_START(__ashlti3)
12	lmg	%r0,%r1,0(%r3)
13	cije	%r4,0,1f
14	lhi	%r3,64
15	sr	%r3,%r4
16	jnh	0f
17	srlg	%r3,%r1,0(%r3)
18	sllg	%r0,%r0,0(%r4)
19	sllg	%r1,%r1,0(%r4)
20	ogr	%r0,%r3
21	j	1f
220:	sllg	%r0,%r1,-64(%r4)
23	lghi	%r1,0
241:	stmg	%r0,%r1,0(%r2)
25	BR_EX	%r14
26SYM_FUNC_END(__ashlti3)
27EXPORT_SYMBOL(__ashlti3)
28
29SYM_FUNC_START(__ashrti3)
30	lmg	%r0,%r1,0(%r3)
31	cije	%r4,0,1f
32	lhi	%r3,64
33	sr	%r3,%r4
34	jnh	0f
35	sllg	%r3,%r0,0(%r3)
36	srlg	%r1,%r1,0(%r4)
37	srag	%r0,%r0,0(%r4)
38	ogr	%r1,%r3
39	j	1f
400:	srag	%r1,%r0,-64(%r4)
41	srag	%r0,%r0,63
421:	stmg	%r0,%r1,0(%r2)
43	BR_EX	%r14
44SYM_FUNC_END(__ashrti3)
45EXPORT_SYMBOL(__ashrti3)
46
47SYM_FUNC_START(__lshrti3)
48	lmg	%r0,%r1,0(%r3)
49	cije	%r4,0,1f
50	lhi	%r3,64
51	sr	%r3,%r4
52	jnh	0f
53	sllg	%r3,%r0,0(%r3)
54	srlg	%r1,%r1,0(%r4)
55	srlg	%r0,%r0,0(%r4)
56	ogr	%r1,%r3
57	j	1f
580:	srlg	%r1,%r0,-64(%r4)
59	lghi	%r0,0
601:	stmg	%r0,%r1,0(%r2)
61	BR_EX	%r14
62SYM_FUNC_END(__lshrti3)
63EXPORT_SYMBOL(__lshrti3)
64