Linux-libre 4.15.7-gnu
[librecmc/linux-libre.git] / arch / sparc / lib / ashrdi3.S
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * ashrdi3.S:   The filesystem code creates all kinds of references to
4  *              this little routine on the sparc with gcc.
5  *
6  * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
7  */
8
9 #include <linux/linkage.h>
10 #include <asm/export.h>
11
12         .text
13 ENTRY(__ashrdi3)
14         tst     %o2
15         be      3f
16          or     %g0, 32, %g2
17
18         sub     %g2, %o2, %g2
19
20         tst     %g2
21         bg      1f
22          sra    %o0, %o2, %o4
23
24         sra     %o0, 31, %o4
25         sub     %g0, %g2, %g2
26         ba      2f
27          sra    %o0, %g2, %o5
28
29 1:
30         sll     %o0, %g2, %g3
31         srl     %o1, %o2, %g2
32         or      %g2, %g3, %o5
33 2:
34         or      %g0, %o4, %o0
35         or      %g0, %o5, %o1
36 3:
37         jmpl    %o7 + 8, %g0
38          nop
39 ENDPROC(__ashrdi3)
40 EXPORT_SYMBOL(__ashrdi3)