https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85830

Carl Love <cel at us dot ibm.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |cel at us dot ibm.com

--- Comment #1 from Carl Love <cel at us dot ibm.com> ---
The Power 64-Bi ELF V2 ABI specification revision 1.4 May 10, 2017 has the
following builtins defined for popcount

  vector signed char vec_vpopcnt (vector signed char);
  vector unsigned char vec_vpopcnt (vector unsigned char);
  vector unsigned int vec_vpopcnt (vector int);
  vector signed long long vec_vpopcnt (vector signed long long);
  vector unsigned long long vec_vpopcnt (vector unsigned long long);
  vector unsigned short vec_vpopcnt (vector unsigned short);
  vector int vec_vpopcnt (vector int);
  vector short vec_vpopcnt (vector short);
  vector signed char vec_vpopcntb (vector signed char);
  vector unsigned char vec_vpopcntb (vector unsigned char);
  vector signed long long vec_vpopcntd (vector signed long long);
  vector unsigned long long vec_vpopcntd (vector unsigned long long)
  vector unsigned short vec_vpopcnth (vector unsigned short);
  vector short vec_vpopcnth (vector short);
  vector unsigned int vec_vpopcntw (vector unsigned int);
  vector int vec_vpopcntw (vector int);

The functions vec_popcntb,  vec_popcnth,  vec_popcntw, vec_popcntd do not
appear in the ABI as supported or depricated functions.

In altivec.h they are defined as:

  #define vec_popcnt __builtin_vec_vpopcntu
  #define vec_popcntb __builtin_vec_vpopcntub
  #define vec_popcnth __builtin_vec_vpopcntuh
  #define vec_popcntw __builtin_vec_vpopcntuw
  #define vec_popcntd __builtin_vec_vpopcntud

It does appear they should be removed from altivec.h.   

The user should use the builtin vec_popcnt(a) where a is the unsigned long long
or unsigned int as desired.  These builtins are support on at least
gcc version 8.3.1 and later.

Reply via email to