cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

fls.S (1179B)


      1/* fls.S: SPARC default fls definition.
      2 *
      3 * SPARC default fls definition, which follows the same algorithm as
      4 * in generic fls(). This function will be boot time patched on T4
      5 * and onward.
      6 */
      7
      8#include <linux/linkage.h>
      9#include <asm/export.h>
     10
     11	.text
     12	.register	%g2, #scratch
     13	.register	%g3, #scratch
     14ENTRY(fls)
     15	brz,pn	%o0, 6f
     16	 mov	0, %o1
     17	sethi	%hi(0xffff0000), %g3
     18	mov	%o0, %g2
     19	andcc	%o0, %g3, %g0
     20	be,pt	%icc, 8f
     21	 mov	32, %o1
     22	sethi	%hi(0xff000000), %g3
     23	andcc	%g2, %g3, %g0
     24	bne,pt	%icc, 3f
     25	 sethi	%hi(0xf0000000), %g3
     26	sll	%o0, 8, %o0
     271:
     28	add	%o1, -8, %o1
     29	sra	%o0, 0, %o0
     30	mov	%o0, %g2
     312:
     32	sethi	%hi(0xf0000000), %g3
     333:
     34	andcc	%g2, %g3, %g0
     35	bne,pt	%icc, 4f
     36	 sethi	%hi(0xc0000000), %g3
     37	sll	%o0, 4, %o0
     38	add	%o1, -4, %o1
     39	sra	%o0, 0, %o0
     40	mov	%o0, %g2
     414:
     42	andcc	%g2, %g3, %g0
     43	be,a,pt	%icc, 7f
     44	 sll	%o0, 2, %o0
     455:
     46	xnor	%g0, %o0, %o0
     47	srl	%o0, 31, %o0
     48	sub	%o1, %o0, %o1
     496:
     50	jmp	%o7 + 8
     51	 sra	%o1, 0, %o0
     527:
     53	add	%o1, -2, %o1
     54	ba,pt	%xcc, 5b
     55	 sra	%o0, 0, %o0
     568:
     57	sll	%o0, 16, %o0
     58	sethi	%hi(0xff000000), %g3
     59	sra	%o0, 0, %o0
     60	mov	%o0, %g2
     61	andcc	%g2, %g3, %g0
     62	bne,pt	%icc, 2b
     63	 mov	16, %o1
     64	ba,pt	%xcc, 1b
     65	 sll	%o0, 8, %o0
     66ENDPROC(fls)
     67EXPORT_SYMBOL(fls)