xref: /openbmc/linux/arch/arm64/lib/tishift.S (revision 3ac0f452)
1255845fcSJason A. Donenfeld/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
2fb872273SJason A. Donenfeld *
3255845fcSJason A. Donenfeld * Copyright (C) 2017-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
4fb872273SJason A. Donenfeld */
5fb872273SJason A. Donenfeld
6fb872273SJason A. Donenfeld#include <linux/linkage.h>
7fb872273SJason A. Donenfeld
8abb77f3dSMark Rutland#include <asm/assembler.h>
9abb77f3dSMark Rutland
103ac0f452SMark BrownSYM_FUNC_START(__ashlti3)
11fb872273SJason A. Donenfeld	cbz	x2, 1f
12fb872273SJason A. Donenfeld	mov	x3, #64
13fb872273SJason A. Donenfeld	sub	x3, x3, x2
14fb872273SJason A. Donenfeld	cmp	x3, #0
15fb872273SJason A. Donenfeld	b.le	2f
16fb872273SJason A. Donenfeld	lsl	x1, x1, x2
17fb872273SJason A. Donenfeld	lsr	x3, x0, x3
18fb872273SJason A. Donenfeld	lsl	x2, x0, x2
19fb872273SJason A. Donenfeld	orr	x1, x1, x3
20fb872273SJason A. Donenfeld	mov	x0, x2
21fb872273SJason A. Donenfeld1:
22fb872273SJason A. Donenfeld	ret
23fb872273SJason A. Donenfeld2:
24fb872273SJason A. Donenfeld	neg	w1, w3
25fb872273SJason A. Donenfeld	mov	x2, #0
26fb872273SJason A. Donenfeld	lsl	x1, x0, x1
27fb872273SJason A. Donenfeld	mov	x0, x2
28fb872273SJason A. Donenfeld	ret
293ac0f452SMark BrownSYM_FUNC_END(__ashlti3)
30abb77f3dSMark RutlandEXPORT_SYMBOL(__ashlti3)
31fb872273SJason A. Donenfeld
323ac0f452SMark BrownSYM_FUNC_START(__ashrti3)
33f5ed22e2SJason A. Donenfeld	cbz	x2, 1f
34fb872273SJason A. Donenfeld	mov	x3, #64
35fb872273SJason A. Donenfeld	sub	x3, x3, x2
36fb872273SJason A. Donenfeld	cmp	x3, #0
37f5ed22e2SJason A. Donenfeld	b.le	2f
38fb872273SJason A. Donenfeld	lsr	x0, x0, x2
39fb872273SJason A. Donenfeld	lsl	x3, x1, x3
40fb872273SJason A. Donenfeld	asr	x2, x1, x2
41fb872273SJason A. Donenfeld	orr	x0, x0, x3
42fb872273SJason A. Donenfeld	mov	x1, x2
43f5ed22e2SJason A. Donenfeld1:
44fb872273SJason A. Donenfeld	ret
45f5ed22e2SJason A. Donenfeld2:
46fb872273SJason A. Donenfeld	neg	w0, w3
47fb872273SJason A. Donenfeld	asr	x2, x1, #63
48fb872273SJason A. Donenfeld	asr	x0, x1, x0
49fb872273SJason A. Donenfeld	mov	x1, x2
50fb872273SJason A. Donenfeld	ret
513ac0f452SMark BrownSYM_FUNC_END(__ashrti3)
52abb77f3dSMark RutlandEXPORT_SYMBOL(__ashrti3)
539bfe7553SJason A. Donenfeld
543ac0f452SMark BrownSYM_FUNC_START(__lshrti3)
559bfe7553SJason A. Donenfeld	cbz	x2, 1f
569bfe7553SJason A. Donenfeld	mov	x3, #64
579bfe7553SJason A. Donenfeld	sub	x3, x3, x2
589bfe7553SJason A. Donenfeld	cmp	x3, #0
599bfe7553SJason A. Donenfeld	b.le	2f
609bfe7553SJason A. Donenfeld	lsr	x0, x0, x2
619bfe7553SJason A. Donenfeld	lsl	x3, x1, x3
629bfe7553SJason A. Donenfeld	lsr	x2, x1, x2
639bfe7553SJason A. Donenfeld	orr	x0, x0, x3
649bfe7553SJason A. Donenfeld	mov	x1, x2
659bfe7553SJason A. Donenfeld1:
669bfe7553SJason A. Donenfeld	ret
679bfe7553SJason A. Donenfeld2:
689bfe7553SJason A. Donenfeld	neg	w0, w3
699bfe7553SJason A. Donenfeld	mov	x2, #0
709bfe7553SJason A. Donenfeld	lsr	x0, x1, x0
719bfe7553SJason A. Donenfeld	mov	x1, x2
729bfe7553SJason A. Donenfeld	ret
733ac0f452SMark BrownSYM_FUNC_END(__lshrti3)
74abb77f3dSMark RutlandEXPORT_SYMBOL(__lshrti3)
75