root/arch/riscv/lib/tishift.S
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (C) 2018 Free Software Foundation, Inc.
 */

#include <linux/linkage.h>
#include <linux/export.h>

SYM_FUNC_START(__lshrti3)
        beqz    a2, .L1
        li      a5,64
        sub     a5,a5,a2
        sext.w  a4,a5
        blez    a5, .L2
        sext.w  a2,a2
        srl     a0,a0,a2
        sll     a4,a1,a4
        srl     a2,a1,a2
        or      a0,a0,a4
        mv      a1,a2
.L1:
        ret
.L2:
        negw    a0,a4
        li      a2,0
        srl     a0,a1,a0
        mv      a1,a2
        ret
SYM_FUNC_END(__lshrti3)
EXPORT_SYMBOL(__lshrti3)

SYM_FUNC_START(__ashrti3)
        beqz    a2, .L3
        li      a5,64
        sub     a5,a5,a2
        sext.w  a4,a5
        blez    a5, .L4
        sext.w  a2,a2
        srl     a0,a0,a2
        sll     a4,a1,a4
        sra     a2,a1,a2
        or      a0,a0,a4
        mv      a1,a2
.L3:
        ret
.L4:
        negw    a0,a4
        srai    a2,a1,0x3f
        sra     a0,a1,a0
        mv      a1,a2
        ret
SYM_FUNC_END(__ashrti3)
EXPORT_SYMBOL(__ashrti3)

SYM_FUNC_START(__ashlti3)
        beqz    a2, .L5
        li      a5,64
        sub     a5,a5,a2
        sext.w  a4,a5
        blez    a5, .L6
        sext.w  a2,a2
        sll     a1,a1,a2
        srl     a4,a0,a4
        sll     a2,a0,a2
        or      a1,a1,a4
        mv      a0,a2
.L5:
        ret
.L6:
        negw    a1,a4
        li      a2,0
        sll     a1,a0,a1
        mv      a0,a2
        ret
SYM_FUNC_END(__ashlti3)
EXPORT_SYMBOL(__ashlti3)