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

fls64.S (1059B)


      1/* fls64.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	mov	-1, %g2
     16	sllx	%g2, 32, %g2
     17	and	%o0, %g2, %g2
     18	brnz,pt	%g2, 1f
     19	 mov	63, %g1
     20	sllx	%o0, 32, %o0
     21	mov	31, %g1
     221:
     23	mov	-1, %g2
     24	sllx	%g2, 48, %g2
     25	and	%o0, %g2, %g2
     26	brnz,pt	%g2, 2f
     27	 mov	-1, %g2
     28	sllx	%o0, 16, %o0
     29	add	%g1, -16, %g1
     302:
     31	mov	-1, %g2
     32	sllx	%g2, 56, %g2
     33	and	%o0, %g2, %g2
     34	brnz,pt	%g2, 3f
     35	 mov	-1, %g2
     36	sllx	%o0, 8, %o0
     37	add	%g1, -8, %g1
     383:
     39	sllx	%g2, 60, %g2
     40	and	%o0, %g2, %g2
     41	brnz,pt	%g2, 4f
     42	 mov	-1, %g2
     43	sllx	%o0, 4, %o0
     44	add	%g1, -4, %g1
     454:
     46	sllx	%g2, 62, %g2
     47	and	%o0, %g2, %g2
     48	brnz,pt	%g2, 5f
     49	 mov	-1, %g3
     50	sllx	%o0, 2, %o0
     51	add	%g1, -2, %g1
     525:
     53	mov	0, %g2
     54	sllx	%g3, 63, %g3
     55	and	%o0, %g3, %o0
     56	movre	%o0, 1, %g2
     57	sub	%g1, %g2, %g1
     58	jmp	%o7+8
     59	 sra	%g1, 0, %o0
     60ENDPROC(__fls)
     61EXPORT_SYMBOL(__fls)