Linux 2.6.19-rc1
[linux-2.6/next.git] / arch / sparc / lib / ashldi3.S
blob52418a0cb3ddb40c4ed0bbc9bbae93209b8912bb
1 /* $Id: ashldi3.S,v 1.2 1999/11/19 04:11:46 davem Exp $
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  */
8         .text
9         .align  4
10         .globl  __ashldi3
11 __ashldi3:
12         cmp     %o2, 0
13         be      9f
14          mov    0x20, %g2
16         sub     %g2, %o2, %g2
17         cmp     %g2, 0
18         bg      7f
19          sll    %o0, %o2, %g3
21         neg     %g2
22         clr     %o5
23         b       8f
24          sll    %o1, %g2, %o4
26         srl     %o1, %g2, %g2
27         sll     %o1, %o2, %o5
28         or      %g3, %g2, %o4
30         mov     %o4, %o0
31         mov     %o5, %o1
33         retl
34          nop