xref: /openbmc/linux/arch/sparc/lib/NG4fls.S (revision 2b41ce5d)
170cbec0cSVijay Kumar/* NG4fls.S: SPARC optimized fls and __fls for T4 and above.
270cbec0cSVijay Kumar *
370cbec0cSVijay Kumar * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
470cbec0cSVijay Kumar */
570cbec0cSVijay Kumar
670cbec0cSVijay Kumar#include <linux/linkage.h>
770cbec0cSVijay Kumar
870cbec0cSVijay Kumar#define LZCNT_O0_G2	\
970cbec0cSVijay Kumar	.word	0x85b002e8
1070cbec0cSVijay Kumar
1170cbec0cSVijay Kumar	.text
1270cbec0cSVijay Kumar	.register	%g2, #scratch
1370cbec0cSVijay Kumar	.register	%g3, #scratch
1470cbec0cSVijay Kumar
1570cbec0cSVijay KumarENTRY(NG4fls)
1670cbec0cSVijay Kumar	LZCNT_O0_G2	!lzcnt	%o0, %g2
1770cbec0cSVijay Kumar	mov	64, %g3
1870cbec0cSVijay Kumar	retl
1970cbec0cSVijay Kumar	 sub	%g3, %g2, %o0
2070cbec0cSVijay KumarENDPROC(NG4fls)
212b41ce5dSVijay Kumar
222b41ce5dSVijay KumarENTRY(__NG4fls)
232b41ce5dSVijay Kumar	brz,pn	%o0, 1f
242b41ce5dSVijay Kumar	LZCNT_O0_G2	!lzcnt	%o0, %g2
252b41ce5dSVijay Kumar	mov	63, %g3
262b41ce5dSVijay Kumar	sub	%g3, %g2, %o0
272b41ce5dSVijay Kumar1:
282b41ce5dSVijay Kumar	retl
292b41ce5dSVijay Kumar	 nop
302b41ce5dSVijay KumarENDPROC(__NG4fls)
31