xref: /openbmc/linux/arch/arm64/lib/tishift.S (revision abb77f3d)
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
10fb872273SJason A. DonenfeldENTRY(__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
29fb872273SJason A. DonenfeldENDPROC(__ashlti3)
30abb77f3dSMark RutlandEXPORT_SYMBOL(__ashlti3)
31fb872273SJason A. Donenfeld
32fb872273SJason A. DonenfeldENTRY(__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
51fb872273SJason A. DonenfeldENDPROC(__ashrti3)
52abb77f3dSMark RutlandEXPORT_SYMBOL(__ashrti3)
539bfe7553SJason A. Donenfeld
549bfe7553SJason A. DonenfeldENTRY(__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
739bfe7553SJason A. DonenfeldENDPROC(__lshrti3)
74abb77f3dSMark RutlandEXPORT_SYMBOL(__lshrti3)
75