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