xref: /openbmc/linux/arch/sparc/lib/fls.S (revision 4cdb71b6)
141413a60SVijay Kumar/* fls.S: SPARC default fls definition.
241413a60SVijay Kumar *
341413a60SVijay Kumar * SPARC default fls definition, which follows the same algorithm as
441413a60SVijay Kumar * in generic fls(). This function will be boot time patched on T4
541413a60SVijay Kumar * and onward.
641413a60SVijay Kumar */
741413a60SVijay Kumar
8*4cdb71b6SMasahiro Yamada#include <linux/export.h>
941413a60SVijay Kumar#include <linux/linkage.h>
1041413a60SVijay Kumar
1141413a60SVijay Kumar	.text
1241413a60SVijay Kumar	.register	%g2, #scratch
1341413a60SVijay Kumar	.register	%g3, #scratch
1441413a60SVijay KumarENTRY(fls)
1541413a60SVijay Kumar	brz,pn	%o0, 6f
1641413a60SVijay Kumar	 mov	0, %o1
1741413a60SVijay Kumar	sethi	%hi(0xffff0000), %g3
1841413a60SVijay Kumar	mov	%o0, %g2
1941413a60SVijay Kumar	andcc	%o0, %g3, %g0
2041413a60SVijay Kumar	be,pt	%icc, 8f
2141413a60SVijay Kumar	 mov	32, %o1
2241413a60SVijay Kumar	sethi	%hi(0xff000000), %g3
2341413a60SVijay Kumar	andcc	%g2, %g3, %g0
2441413a60SVijay Kumar	bne,pt	%icc, 3f
2541413a60SVijay Kumar	 sethi	%hi(0xf0000000), %g3
2641413a60SVijay Kumar	sll	%o0, 8, %o0
2741413a60SVijay Kumar1:
2841413a60SVijay Kumar	add	%o1, -8, %o1
2941413a60SVijay Kumar	sra	%o0, 0, %o0
3041413a60SVijay Kumar	mov	%o0, %g2
3141413a60SVijay Kumar2:
3241413a60SVijay Kumar	sethi	%hi(0xf0000000), %g3
3341413a60SVijay Kumar3:
3441413a60SVijay Kumar	andcc	%g2, %g3, %g0
3541413a60SVijay Kumar	bne,pt	%icc, 4f
3641413a60SVijay Kumar	 sethi	%hi(0xc0000000), %g3
3741413a60SVijay Kumar	sll	%o0, 4, %o0
3841413a60SVijay Kumar	add	%o1, -4, %o1
3941413a60SVijay Kumar	sra	%o0, 0, %o0
4041413a60SVijay Kumar	mov	%o0, %g2
4141413a60SVijay Kumar4:
4241413a60SVijay Kumar	andcc	%g2, %g3, %g0
4341413a60SVijay Kumar	be,a,pt	%icc, 7f
4441413a60SVijay Kumar	 sll	%o0, 2, %o0
4541413a60SVijay Kumar5:
4641413a60SVijay Kumar	xnor	%g0, %o0, %o0
4741413a60SVijay Kumar	srl	%o0, 31, %o0
4841413a60SVijay Kumar	sub	%o1, %o0, %o1
4941413a60SVijay Kumar6:
5041413a60SVijay Kumar	jmp	%o7 + 8
5141413a60SVijay Kumar	 sra	%o1, 0, %o0
5241413a60SVijay Kumar7:
5341413a60SVijay Kumar	add	%o1, -2, %o1
5441413a60SVijay Kumar	ba,pt	%xcc, 5b
5541413a60SVijay Kumar	 sra	%o0, 0, %o0
5641413a60SVijay Kumar8:
5741413a60SVijay Kumar	sll	%o0, 16, %o0
5841413a60SVijay Kumar	sethi	%hi(0xff000000), %g3
5941413a60SVijay Kumar	sra	%o0, 0, %o0
6041413a60SVijay Kumar	mov	%o0, %g2
6141413a60SVijay Kumar	andcc	%g2, %g3, %g0
6241413a60SVijay Kumar	bne,pt	%icc, 2b
6341413a60SVijay Kumar	 mov	16, %o1
6441413a60SVijay Kumar	ba,pt	%xcc, 1b
6541413a60SVijay Kumar	 sll	%o0, 8, %o0
6641413a60SVijay KumarENDPROC(fls)
6741413a60SVijay KumarEXPORT_SYMBOL(fls)
68