• Christophe Leroy's avatar
    powerpc: Replace ffz() by equivalent generic function · 22ef33b3
    Christophe Leroy authored
    With the ffz() function as defined in arch/powerpc/include/asm/bitops.h
    GCC will not optimise the code in case of constant parameter.
    
    This patch replaces ffz() by the generic function.
    
    The generic ffz(x) expects to never be called with ~x == 0
    as written in the comment in include/asm-generic/bitops/ffz.h
    The only user of ffz() within arch/powerpc/ is
    platforms/512x/mpc5121_ads_cpld.c, which checks if x is not 0xff
    
    For non constant calls, the generated code is doing the same:
    
    unsigned long testffz(unsigned long x)
    {
    	return ffz(x);
    }
    
    On PPC32, before the patch:
    00000018 <testffz>:
      18:	7c 63 18 f9 	not.    r3,r3
      1c:	40 82 00 0c 	bne     28 <testffz+0x10>
      20:	38 60 00 20 	li      r3,32
      24:	4e 80 00 20 	blr
      28:	7d 23 00 d0 	neg     r9,r3
      2c:	7d 23 18 38 	and     r3,r9,r3
      30:	7c 63 00 34 	cntlzw  r3,r3
      34:	20 63 00 1f 	subfic  r3,r3,31
      38:	4e 80 00 20 	blr
    
    On PPC32, after the patch:
    00000018 <testffz>:
      18:	39 23 00 01 	addi    r9,r3,1
      1c:	7d 23 18 78 	andc    r3,r9,r3
      20:	7c 63 00 34 	cntlzw  r3,r3
      24:	20 63 00 1f 	subfic  r3,r3,31
      28:	4e 80 00 20 	blr
    
    On PPC64, before the patch:
    0000000000000030 <.testffz>:
      30:	7c 60 18 f9 	not.    r0,r3
      34:	38 60 00 40 	li      r3,64
      38:	4d 82 00 20 	beqlr
      3c:	7c 60 00 d0 	neg     r3,r0
      40:	7c 63 00 38 	and     r3,r3,r0
      44:	7c 63 00 74 	cntlzd  r3,r3
      48:	20 63 00 3f 	subfic  r3,r3,63
      4c:	7c 63 07 b4 	extsw   r3,r3
      50:	4e 80 00 20 	blr
    
    On PPC64, after the patch:
    0000000000000030 <.testffz>:
      30:	38 03 00 01 	addi    r0,r3,1
      34:	7c 03 18 78 	andc    r3,r0,r3
      38:	7c 63 00 74 	cntlzd  r3,r3
      3c:	20 63 00 3f 	subfic  r3,r3,63
      40:	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>
    22ef33b3
bitops.h 7.78 KB