Merge branch 'gup_flag-cleanups'
[cascardo/linux.git] / arch / sparc / lib / ashldi3.S
1 /*
2  * ashldi3.S:   GCC emits these for certain drivers playing
3  *              with long longs.
4  *
5  * Copyright (C) 1999 David S. Miller (davem@redhat.com)
6  */
7
8 #include <linux/linkage.h>
9 #include <asm/export.h>
10
11         .text
12 ENTRY(__ashldi3)
13         cmp     %o2, 0
14         be      9f
15          mov    0x20, %g2
16
17         sub     %g2, %o2, %g2
18         cmp     %g2, 0
19         bg      7f
20          sll    %o0, %o2, %g3
21
22         neg     %g2
23         clr     %o5
24         b       8f
25          sll    %o1, %g2, %o4
26 7:
27         srl     %o1, %g2, %g2
28         sll     %o1, %o2, %o5
29         or      %g3, %g2, %o4
30 8:
31         mov     %o4, %o0
32         mov     %o5, %o1
33 9:
34         retl
35          nop
36 ENDPROC(__ashldi3)
37 EXPORT_SYMBOL(__ashldi3)