root/arch/sparc/lib/fls64.S

/* [<][>][^][v][top][bottom][index][help] */
   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
  14 ENTRY(__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
  22 1:
  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
  30 2:
  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
  38 3:
  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
  45 4:
  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
  52 5:
  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
  60 ENDPROC(__fls)
  61 EXPORT_SYMBOL(__fls)

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