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