xref: /openbmc/linux/arch/sparc/lib/ashldi3.S (revision 8695c37d)
188278ca2SAdrian Bunk/*
21da177e4SLinus Torvalds * ashldi3.S:	GCC emits these for certain drivers playing
31da177e4SLinus Torvalds *		with long longs.
41da177e4SLinus Torvalds *
51da177e4SLinus Torvalds * Copyright (C) 1999 David S. Miller (davem@redhat.com)
61da177e4SLinus Torvalds */
71da177e4SLinus Torvalds
88695c37dSDavid S. Miller#include <linux/linkage.h>
98695c37dSDavid S. Miller
101da177e4SLinus Torvalds	.text
118695c37dSDavid S. MillerENTRY(__ashldi3)
121da177e4SLinus Torvalds	cmp	%o2, 0
131da177e4SLinus Torvalds	be	9f
141da177e4SLinus Torvalds	 mov	0x20, %g2
151da177e4SLinus Torvalds
161da177e4SLinus Torvalds	sub	%g2, %o2, %g2
171da177e4SLinus Torvalds	cmp	%g2, 0
181da177e4SLinus Torvalds	bg	7f
191da177e4SLinus Torvalds	 sll	%o0, %o2, %g3
201da177e4SLinus Torvalds
211da177e4SLinus Torvalds	neg	%g2
221da177e4SLinus Torvalds	clr	%o5
231da177e4SLinus Torvalds	b	8f
241da177e4SLinus Torvalds	 sll	%o1, %g2, %o4
251da177e4SLinus Torvalds7:
261da177e4SLinus Torvalds	srl	%o1, %g2, %g2
271da177e4SLinus Torvalds	sll	%o1, %o2, %o5
281da177e4SLinus Torvalds	or	%g3, %g2, %o4
291da177e4SLinus Torvalds8:
301da177e4SLinus Torvalds	mov	%o4, %o0
311da177e4SLinus Torvalds	mov	%o5, %o1
321da177e4SLinus Torvalds9:
331da177e4SLinus Torvalds	retl
341da177e4SLinus Torvalds	 nop
358695c37dSDavid S. MillerENDPROC(__ashldi3)
36