xref: /linux/arch/sparc/lib/ashrdi3.S (revision 24bce201d79807b668bf9d9e0aca801c5c0d5f78)
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * ashrdi3.S:	The filesystem code creates all kinds of references to
4 *              this little routine on the sparc with gcc.
5 *
6 * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
7 */
8
9#include <linux/linkage.h>
10#include <asm/export.h>
11
12	.text
13ENTRY(__ashrdi3)
14	tst	%o2
15	be	3f
16	 or	%g0, 32, %g2
17
18	sub	%g2, %o2, %g2
19
20	tst	%g2
21	bg	1f
22	 sra	%o0, %o2, %o4
23
24	sra	%o0, 31, %o4
25	sub	%g0, %g2, %g2
26	ba	2f
27	 sra	%o0, %g2, %o5
28
291:
30	sll	%o0, %g2, %g3
31	srl	%o1, %o2, %g2
32	or	%g2, %g3, %o5
332:
34	or	%g0, %o4, %o0
35	or	%g0, %o5, %o1
363:
37	jmpl	%o7 + 8, %g0
38	 nop
39ENDPROC(__ashrdi3)
40EXPORT_SYMBOL(__ashrdi3)
41