xref: /openbmc/linux/arch/sparc/lib/ashrdi3.S (revision 8695c37d)
188278ca2SAdrian Bunk/*
21da177e4SLinus Torvalds * ashrdi3.S:	The filesystem code creates all kinds of references to
31da177e4SLinus Torvalds *              this little routine on the sparc with gcc.
41da177e4SLinus Torvalds *
51da177e4SLinus Torvalds * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
61da177e4SLinus Torvalds */
71da177e4SLinus Torvalds
88695c37dSDavid S. Miller#include <linux/linkage.h>
98695c37dSDavid S. Miller
101da177e4SLinus Torvalds	.text
118695c37dSDavid S. MillerENTRY(__ashrdi3)
121da177e4SLinus Torvalds	tst	%o2
131da177e4SLinus Torvalds	be	3f
141da177e4SLinus Torvalds	 or	%g0, 32, %g2
151da177e4SLinus Torvalds
161da177e4SLinus Torvalds	sub	%g2, %o2, %g2
171da177e4SLinus Torvalds
181da177e4SLinus Torvalds	tst	%g2
191da177e4SLinus Torvalds	bg	1f
201da177e4SLinus Torvalds	 sra	%o0, %o2, %o4
211da177e4SLinus Torvalds
221da177e4SLinus Torvalds	sra	%o0, 31, %o4
231da177e4SLinus Torvalds	sub	%g0, %g2, %g2
241da177e4SLinus Torvalds	ba	2f
251da177e4SLinus Torvalds	 sra	%o0, %g2, %o5
261da177e4SLinus Torvalds
271da177e4SLinus Torvalds1:
281da177e4SLinus Torvalds	sll	%o0, %g2, %g3
291da177e4SLinus Torvalds	srl	%o1, %o2, %g2
301da177e4SLinus Torvalds	or	%g2, %g3, %o5
311da177e4SLinus Torvalds2:
321da177e4SLinus Torvalds	or	%g0, %o4, %o0
331da177e4SLinus Torvalds	or	%g0, %o5, %o1
341da177e4SLinus Torvalds3:
351da177e4SLinus Torvalds	jmpl	%o7 + 8, %g0
361da177e4SLinus Torvalds	 nop
378695c37dSDavid S. MillerENDPROC(__ashrdi3)
38