root/arch/powerpc/lib/hweight_64.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /*
   3  *
   4  * Copyright (C) IBM Corporation, 2010
   5  *
   6  * Author: Anton Blanchard <anton@au.ibm.com>
   7  */
   8 #include <asm/processor.h>
   9 #include <asm/ppc_asm.h>
  10 #include <asm/export.h>
  11 #include <asm/feature-fixups.h>
  12 
  13 /* Note: This code relies on -mminimal-toc */
  14 
  15 _GLOBAL(__arch_hweight8)
  16 BEGIN_FTR_SECTION
  17         b __sw_hweight8
  18         nop
  19         nop
  20 FTR_SECTION_ELSE
  21         PPC_POPCNTB(R3,R3)
  22         clrldi  r3,r3,64-8
  23         blr
  24 ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
  25 EXPORT_SYMBOL(__arch_hweight8)
  26 
  27 _GLOBAL(__arch_hweight16)
  28 BEGIN_FTR_SECTION
  29         b __sw_hweight16
  30         nop
  31         nop
  32         nop
  33         nop
  34 FTR_SECTION_ELSE
  35   BEGIN_FTR_SECTION_NESTED(50)
  36         PPC_POPCNTB(R3,R3)
  37         srdi    r4,r3,8
  38         add     r3,r4,r3
  39         clrldi  r3,r3,64-8
  40         blr
  41   FTR_SECTION_ELSE_NESTED(50)
  42         clrlwi  r3,r3,16
  43         PPC_POPCNTW(R3,R3)
  44         clrldi  r3,r3,64-8
  45         blr
  46   ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 50)
  47 ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
  48 EXPORT_SYMBOL(__arch_hweight16)
  49 
  50 _GLOBAL(__arch_hweight32)
  51 BEGIN_FTR_SECTION
  52         b __sw_hweight32
  53         nop
  54         nop
  55         nop
  56         nop
  57         nop
  58         nop
  59 FTR_SECTION_ELSE
  60   BEGIN_FTR_SECTION_NESTED(51)
  61         PPC_POPCNTB(R3,R3)
  62         srdi    r4,r3,16
  63         add     r3,r4,r3
  64         srdi    r4,r3,8
  65         add     r3,r4,r3
  66         clrldi  r3,r3,64-8
  67         blr
  68   FTR_SECTION_ELSE_NESTED(51)
  69         PPC_POPCNTW(R3,R3)
  70         clrldi  r3,r3,64-8
  71         blr
  72   ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 51)
  73 ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
  74 EXPORT_SYMBOL(__arch_hweight32)
  75 
  76 _GLOBAL(__arch_hweight64)
  77 BEGIN_FTR_SECTION
  78         b __sw_hweight64
  79         nop
  80         nop
  81         nop
  82         nop
  83         nop
  84         nop
  85         nop
  86         nop
  87 FTR_SECTION_ELSE
  88   BEGIN_FTR_SECTION_NESTED(52)
  89         PPC_POPCNTB(R3,R3)
  90         srdi    r4,r3,32
  91         add     r3,r4,r3
  92         srdi    r4,r3,16
  93         add     r3,r4,r3
  94         srdi    r4,r3,8
  95         add     r3,r4,r3
  96         clrldi  r3,r3,64-8
  97         blr
  98   FTR_SECTION_ELSE_NESTED(52)
  99         PPC_POPCNTD(R3,R3)
 100         clrldi  r3,r3,64-8
 101         blr
 102   ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 52)
 103 ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
 104 EXPORT_SYMBOL(__arch_hweight64)

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