root/arch/s390/lib/tishift.S
/* SPDX-License-Identifier: GPL-2.0 */

#include <linux/export.h>
#include <linux/linkage.h>
#include <asm/nospec-insn.h>

        .section .noinstr.text, "ax"

        GEN_BR_THUNK %r14

SYM_FUNC_START(__ashlti3)
        lmg     %r0,%r1,0(%r3)
        cije    %r4,0,1f
        lhi     %r3,64
        sr      %r3,%r4
        jnh     0f
        srlg    %r3,%r1,0(%r3)
        sllg    %r0,%r0,0(%r4)
        sllg    %r1,%r1,0(%r4)
        ogr     %r0,%r3
        j       1f
0:      sllg    %r0,%r1,-64(%r4)
        lghi    %r1,0
1:      stmg    %r0,%r1,0(%r2)
        BR_EX   %r14
SYM_FUNC_END(__ashlti3)
EXPORT_SYMBOL(__ashlti3)

SYM_FUNC_START(__ashrti3)
        lmg     %r0,%r1,0(%r3)
        cije    %r4,0,1f
        lhi     %r3,64
        sr      %r3,%r4
        jnh     0f
        sllg    %r3,%r0,0(%r3)
        srlg    %r1,%r1,0(%r4)
        srag    %r0,%r0,0(%r4)
        ogr     %r1,%r3
        j       1f
0:      srag    %r1,%r0,-64(%r4)
        srag    %r0,%r0,63
1:      stmg    %r0,%r1,0(%r2)
        BR_EX   %r14
SYM_FUNC_END(__ashrti3)
EXPORT_SYMBOL(__ashrti3)

SYM_FUNC_START(__lshrti3)
        lmg     %r0,%r1,0(%r3)
        cije    %r4,0,1f
        lhi     %r3,64
        sr      %r3,%r4
        jnh     0f
        sllg    %r3,%r0,0(%r3)
        srlg    %r1,%r1,0(%r4)
        srlg    %r0,%r0,0(%r4)
        ogr     %r1,%r3
        j       1f
0:      srlg    %r1,%r0,-64(%r4)
        lghi    %r0,0
1:      stmg    %r0,%r1,0(%r2)
        BR_EX   %r14
SYM_FUNC_END(__lshrti3)
EXPORT_SYMBOL(__lshrti3)