xref: /openbmc/linux/arch/sparc/lib/ashldi3.S (revision bc5aa3a0)
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
10	.text
11ENTRY(__ashldi3)
12	cmp	%o2, 0
13	be	9f
14	 mov	0x20, %g2
15
16	sub	%g2, %o2, %g2
17	cmp	%g2, 0
18	bg	7f
19	 sll	%o0, %o2, %g3
20
21	neg	%g2
22	clr	%o5
23	b	8f
24	 sll	%o1, %g2, %o4
257:
26	srl	%o1, %g2, %g2
27	sll	%o1, %o2, %o5
28	or	%g3, %g2, %o4
298:
30	mov	%o4, %o0
31	mov	%o5, %o1
329:
33	retl
34	 nop
35ENDPROC(__ashldi3)
36