18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
28c2ecf20Sopenharmony_ci *
38c2ecf20Sopenharmony_ci * Copyright (C) 2017-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#include <linux/linkage.h>
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#include <asm/assembler.h>
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ciSYM_FUNC_START(__ashlti3)
118c2ecf20Sopenharmony_ci	cbz	x2, 1f
128c2ecf20Sopenharmony_ci	mov	x3, #64
138c2ecf20Sopenharmony_ci	sub	x3, x3, x2
148c2ecf20Sopenharmony_ci	cmp	x3, #0
158c2ecf20Sopenharmony_ci	b.le	2f
168c2ecf20Sopenharmony_ci	lsl	x1, x1, x2
178c2ecf20Sopenharmony_ci	lsr	x3, x0, x3
188c2ecf20Sopenharmony_ci	lsl	x2, x0, x2
198c2ecf20Sopenharmony_ci	orr	x1, x1, x3
208c2ecf20Sopenharmony_ci	mov	x0, x2
218c2ecf20Sopenharmony_ci1:
228c2ecf20Sopenharmony_ci	ret
238c2ecf20Sopenharmony_ci2:
248c2ecf20Sopenharmony_ci	neg	w1, w3
258c2ecf20Sopenharmony_ci	mov	x2, #0
268c2ecf20Sopenharmony_ci	lsl	x1, x0, x1
278c2ecf20Sopenharmony_ci	mov	x0, x2
288c2ecf20Sopenharmony_ci	ret
298c2ecf20Sopenharmony_ciSYM_FUNC_END(__ashlti3)
308c2ecf20Sopenharmony_ciEXPORT_SYMBOL(__ashlti3)
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ciSYM_FUNC_START(__ashrti3)
338c2ecf20Sopenharmony_ci	cbz	x2, 1f
348c2ecf20Sopenharmony_ci	mov	x3, #64
358c2ecf20Sopenharmony_ci	sub	x3, x3, x2
368c2ecf20Sopenharmony_ci	cmp	x3, #0
378c2ecf20Sopenharmony_ci	b.le	2f
388c2ecf20Sopenharmony_ci	lsr	x0, x0, x2
398c2ecf20Sopenharmony_ci	lsl	x3, x1, x3
408c2ecf20Sopenharmony_ci	asr	x2, x1, x2
418c2ecf20Sopenharmony_ci	orr	x0, x0, x3
428c2ecf20Sopenharmony_ci	mov	x1, x2
438c2ecf20Sopenharmony_ci1:
448c2ecf20Sopenharmony_ci	ret
458c2ecf20Sopenharmony_ci2:
468c2ecf20Sopenharmony_ci	neg	w0, w3
478c2ecf20Sopenharmony_ci	asr	x2, x1, #63
488c2ecf20Sopenharmony_ci	asr	x0, x1, x0
498c2ecf20Sopenharmony_ci	mov	x1, x2
508c2ecf20Sopenharmony_ci	ret
518c2ecf20Sopenharmony_ciSYM_FUNC_END(__ashrti3)
528c2ecf20Sopenharmony_ciEXPORT_SYMBOL(__ashrti3)
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ciSYM_FUNC_START(__lshrti3)
558c2ecf20Sopenharmony_ci	cbz	x2, 1f
568c2ecf20Sopenharmony_ci	mov	x3, #64
578c2ecf20Sopenharmony_ci	sub	x3, x3, x2
588c2ecf20Sopenharmony_ci	cmp	x3, #0
598c2ecf20Sopenharmony_ci	b.le	2f
608c2ecf20Sopenharmony_ci	lsr	x0, x0, x2
618c2ecf20Sopenharmony_ci	lsl	x3, x1, x3
628c2ecf20Sopenharmony_ci	lsr	x2, x1, x2
638c2ecf20Sopenharmony_ci	orr	x0, x0, x3
648c2ecf20Sopenharmony_ci	mov	x1, x2
658c2ecf20Sopenharmony_ci1:
668c2ecf20Sopenharmony_ci	ret
678c2ecf20Sopenharmony_ci2:
688c2ecf20Sopenharmony_ci	neg	w0, w3
698c2ecf20Sopenharmony_ci	mov	x2, #0
708c2ecf20Sopenharmony_ci	lsr	x0, x1, x0
718c2ecf20Sopenharmony_ci	mov	x1, x2
728c2ecf20Sopenharmony_ci	ret
738c2ecf20Sopenharmony_ciSYM_FUNC_END(__lshrti3)
748c2ecf20Sopenharmony_ciEXPORT_SYMBOL(__lshrti3)
75