Back to home page

OSCL-LXR

 
 

    


0001 /* fls.S: SPARC default fls definition.
0002  *
0003  * SPARC default fls definition, which follows the same algorithm as
0004  * in generic fls(). This function will be boot time patched on T4
0005  * and onward.
0006  */
0007 
0008 #include <linux/linkage.h>
0009 #include <asm/export.h>
0010 
0011     .text
0012     .register   %g2, #scratch
0013     .register   %g3, #scratch
0014 ENTRY(fls)
0015     brz,pn  %o0, 6f
0016      mov    0, %o1
0017     sethi   %hi(0xffff0000), %g3
0018     mov %o0, %g2
0019     andcc   %o0, %g3, %g0
0020     be,pt   %icc, 8f
0021      mov    32, %o1
0022     sethi   %hi(0xff000000), %g3
0023     andcc   %g2, %g3, %g0
0024     bne,pt  %icc, 3f
0025      sethi  %hi(0xf0000000), %g3
0026     sll %o0, 8, %o0
0027 1:
0028     add %o1, -8, %o1
0029     sra %o0, 0, %o0
0030     mov %o0, %g2
0031 2:
0032     sethi   %hi(0xf0000000), %g3
0033 3:
0034     andcc   %g2, %g3, %g0
0035     bne,pt  %icc, 4f
0036      sethi  %hi(0xc0000000), %g3
0037     sll %o0, 4, %o0
0038     add %o1, -4, %o1
0039     sra %o0, 0, %o0
0040     mov %o0, %g2
0041 4:
0042     andcc   %g2, %g3, %g0
0043     be,a,pt %icc, 7f
0044      sll    %o0, 2, %o0
0045 5:
0046     xnor    %g0, %o0, %o0
0047     srl %o0, 31, %o0
0048     sub %o1, %o0, %o1
0049 6:
0050     jmp %o7 + 8
0051      sra    %o1, 0, %o0
0052 7:
0053     add %o1, -2, %o1
0054     ba,pt   %xcc, 5b
0055      sra    %o0, 0, %o0
0056 8:
0057     sll %o0, 16, %o0
0058     sethi   %hi(0xff000000), %g3
0059     sra %o0, 0, %o0
0060     mov %o0, %g2
0061     andcc   %g2, %g3, %g0
0062     bne,pt  %icc, 2b
0063      mov    16, %o1
0064     ba,pt   %xcc, 1b
0065      sll    %o0, 8, %o0
0066 ENDPROC(fls)
0067 EXPORT_SYMBOL(fls)