• Christophe Leroy's avatar
    powerpc: Remove __ilog2()s and use generic ones · f782ddf2
    Christophe Leroy authored
    With the __ilog2() function as defined in
    arch/powerpc/include/asm/bitops.h, GCC will not optimise the code
    in case of constant parameter.
    
    The generic ilog2() function in include/linux/log2.h is written
    to handle the case of the constant parameter.
    
    This patch discards the three __ilog2() functions and
    defines __ilog2() as ilog2()
    
    For non constant calls, the generated code is doing the same:
    int test__ilog2(unsigned long x)
    {
    	return __ilog2(x);
    }
    
    int test__ilog2_u32(u32 n)
    {
    	return __ilog2_u32(n);
    }
    
    int test__ilog2_u64(u64 n)
    {
    	return __ilog2_u64(n);
    }
    
    On PPC32 before the patch:
    00000000 <test__ilog2>:
       0:	7c 63 00 34 	cntlzw  r3,r3
       4:	20 63 00 1f 	subfic  r3,r3,31
       8:	4e 80 00 20 	blr
    
    0000000c <test__ilog2_u32>:
       c:	7c 63 00 34 	cntlzw  r3,r3
      10:	20 63 00 1f 	subfic  r3,r3,31
      14:	4e 80 00 20 	blr
    
    On PPC32 after the patch:
    00000000 <test__ilog2>:
       0:	7c 63 00 34 	cntlzw  r3,r3
       4:	20 63 00 1f 	subfic  r3,r3,31
       8:	4e 80 00 20 	blr
    
    0000000c <test__ilog2_u32>:
       c:	7c 63 00 34 	cntlzw  r3,r3
      10:	20 63 00 1f 	subfic  r3,r3,31
      14:	4e 80 00 20 	blr
    
    On PPC64 before the patch:
    0000000000000000 <.test__ilog2>:
       0:	7c 63 00 74 	cntlzd  r3,r3
       4:	20 63 00 3f 	subfic  r3,r3,63
       8:	7c 63 07 b4 	extsw   r3,r3
       c:	4e 80 00 20 	blr
    
    0000000000000010 <.test__ilog2_u32>:
      10:	7c 63 00 34 	cntlzw  r3,r3
      14:	20 63 00 1f 	subfic  r3,r3,31
      18:	7c 63 07 b4 	extsw   r3,r3
      1c:	4e 80 00 20 	blr
    
    0000000000000020 <.test__ilog2_u64>:
      20:	7c 63 00 74 	cntlzd  r3,r3
      24:	20 63 00 3f 	subfic  r3,r3,63
      28:	7c 63 07 b4 	extsw   r3,r3
      2c:	4e 80 00 20 	blr
    
    On PPC64 after the patch:
    0000000000000000 <.test__ilog2>:
       0:	7c 63 00 74 	cntlzd  r3,r3
       4:	20 63 00 3f 	subfic  r3,r3,63
       8:	7c 63 07 b4 	extsw   r3,r3
       c:	4e 80 00 20 	blr
    
    0000000000000010 <.test__ilog2_u32>:
      10:	7c 63 00 34 	cntlzw  r3,r3
      14:	20 63 00 1f 	subfic  r3,r3,31
      18:	7c 63 07 b4 	extsw   r3,r3
      1c:	4e 80 00 20 	blr
    
    0000000000000020 <.test__ilog2_u64>:
      20:	7c 63 00 74 	cntlzd  r3,r3
      24:	20 63 00 3f 	subfic  r3,r3,63
      28:	7c 63 07 b4 	extsw   r3,r3
      2c:	4e 80 00 20 	blr
    Signed-off-by: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    f782ddf2
bitops.h 7.35 KB