xref: /openbmc/linux/arch/arm64/lib/tishift.S (revision 9bfe7553)
1fb872273SJason A. Donenfeld/*
2fb872273SJason A. Donenfeld * Copyright (C) 2017 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
3fb872273SJason A. Donenfeld *
4fb872273SJason A. Donenfeld * This program is free software; you can redistribute it and/or modify
5fb872273SJason A. Donenfeld * it under the terms of the GNU General Public License version 2 as
6fb872273SJason A. Donenfeld * published by the Free Software Foundation.
7fb872273SJason A. Donenfeld *
8fb872273SJason A. Donenfeld * This program is distributed in the hope that it will be useful,
9fb872273SJason A. Donenfeld * but WITHOUT ANY WARRANTY; without even the implied warranty of
10fb872273SJason A. Donenfeld * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11fb872273SJason A. Donenfeld * GNU General Public License for more details.
12fb872273SJason A. Donenfeld *
13fb872273SJason A. Donenfeld * You should have received a copy of the GNU General Public License
14fb872273SJason A. Donenfeld * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15fb872273SJason A. Donenfeld */
16fb872273SJason A. Donenfeld
17fb872273SJason A. Donenfeld#include <linux/linkage.h>
18fb872273SJason A. Donenfeld
19fb872273SJason A. DonenfeldENTRY(__ashlti3)
20fb872273SJason A. Donenfeld	cbz	x2, 1f
21fb872273SJason A. Donenfeld	mov	x3, #64
22fb872273SJason A. Donenfeld	sub	x3, x3, x2
23fb872273SJason A. Donenfeld	cmp	x3, #0
24fb872273SJason A. Donenfeld	b.le	2f
25fb872273SJason A. Donenfeld	lsl	x1, x1, x2
26fb872273SJason A. Donenfeld	lsr	x3, x0, x3
27fb872273SJason A. Donenfeld	lsl	x2, x0, x2
28fb872273SJason A. Donenfeld	orr	x1, x1, x3
29fb872273SJason A. Donenfeld	mov	x0, x2
30fb872273SJason A. Donenfeld1:
31fb872273SJason A. Donenfeld	ret
32fb872273SJason A. Donenfeld2:
33fb872273SJason A. Donenfeld	neg	w1, w3
34fb872273SJason A. Donenfeld	mov	x2, #0
35fb872273SJason A. Donenfeld	lsl	x1, x0, x1
36fb872273SJason A. Donenfeld	mov	x0, x2
37fb872273SJason A. Donenfeld	ret
38fb872273SJason A. DonenfeldENDPROC(__ashlti3)
39fb872273SJason A. Donenfeld
40fb872273SJason A. DonenfeldENTRY(__ashrti3)
41fb872273SJason A. Donenfeld	cbz	x2, 3f
42fb872273SJason A. Donenfeld	mov	x3, #64
43fb872273SJason A. Donenfeld	sub	x3, x3, x2
44fb872273SJason A. Donenfeld	cmp	x3, #0
45fb872273SJason A. Donenfeld	b.le	4f
46fb872273SJason A. Donenfeld	lsr	x0, x0, x2
47fb872273SJason A. Donenfeld	lsl	x3, x1, x3
48fb872273SJason A. Donenfeld	asr	x2, x1, x2
49fb872273SJason A. Donenfeld	orr	x0, x0, x3
50fb872273SJason A. Donenfeld	mov	x1, x2
51fb872273SJason A. Donenfeld3:
52fb872273SJason A. Donenfeld	ret
53fb872273SJason A. Donenfeld4:
54fb872273SJason A. Donenfeld	neg	w0, w3
55fb872273SJason A. Donenfeld	asr	x2, x1, #63
56fb872273SJason A. Donenfeld	asr	x0, x1, x0
57fb872273SJason A. Donenfeld	mov	x1, x2
58fb872273SJason A. Donenfeld	ret
59fb872273SJason A. DonenfeldENDPROC(__ashrti3)
609bfe7553SJason A. Donenfeld
619bfe7553SJason A. DonenfeldENTRY(__lshrti3)
629bfe7553SJason A. Donenfeld	cbz	x2, 1f
639bfe7553SJason A. Donenfeld	mov	x3, #64
649bfe7553SJason A. Donenfeld	sub	x3, x3, x2
659bfe7553SJason A. Donenfeld	cmp	x3, #0
669bfe7553SJason A. Donenfeld	b.le	2f
679bfe7553SJason A. Donenfeld	lsr	x0, x0, x2
689bfe7553SJason A. Donenfeld	lsl	x3, x1, x3
699bfe7553SJason A. Donenfeld	lsr	x2, x1, x2
709bfe7553SJason A. Donenfeld	orr	x0, x0, x3
719bfe7553SJason A. Donenfeld	mov	x1, x2
729bfe7553SJason A. Donenfeld1:
739bfe7553SJason A. Donenfeld	ret
749bfe7553SJason A. Donenfeld2:
759bfe7553SJason A. Donenfeld	neg	w0, w3
769bfe7553SJason A. Donenfeld	mov	x2, #0
779bfe7553SJason A. Donenfeld	lsr	x0, x1, x0
789bfe7553SJason A. Donenfeld	mov	x1, x2
799bfe7553SJason A. Donenfeld	ret
809bfe7553SJason A. DonenfeldENDPROC(__lshrti3)
81