root/arch/sparc/lib/fls.S

/* [<][>][^][v][top][bottom][index][help] */
   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
  14 ENTRY(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
  27 1:
  28         add     %o1, -8, %o1
  29         sra     %o0, 0, %o0
  30         mov     %o0, %g2
  31 2:
  32         sethi   %hi(0xf0000000), %g3
  33 3:
  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
  41 4:
  42         andcc   %g2, %g3, %g0
  43         be,a,pt %icc, 7f
  44          sll    %o0, 2, %o0
  45 5:
  46         xnor    %g0, %o0, %o0
  47         srl     %o0, 31, %o0
  48         sub     %o1, %o0, %o1
  49 6:
  50         jmp     %o7 + 8
  51          sra    %o1, 0, %o0
  52 7:
  53         add     %o1, -2, %o1
  54         ba,pt   %xcc, 5b
  55          sra    %o0, 0, %o0
  56 8:
  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
  66 ENDPROC(fls)
  67 EXPORT_SYMBOL(fls)

/* [<][>][^][v][top][bottom][index][help] */