message: core:ppc64 fix detecting CPU features when optimization is off
diff: @@ -128,11 +128,14 @@ void* allocSingletonNewBuffer(size_t size) { return malloc(size); }
  #endif
  -#if CV_VSX && defined __linux__
  +#if (defined __ppc64__ || defined __PPC64__) && defined __linux__
  # include "sys/auxv.h"
  # ifndef AT_HWCAP2
  # define AT_HWCAP2 26
  # endif
  +# ifndef PPC_FEATURE2_ARCH_2_07
  +# define PPC_FEATURE2_ARCH_2_07 0x80000000
  +# endif
  # ifndef PPC_FEATURE2_ARCH_3_00
  # define PPC_FEATURE2_ARCH_3_00 0x00800000
  # endif
  @@ -587,14 +590,25 @@ struct HWFeatures
  #ifdef __mips_msa
  have[CV_CPU_MSA] = true;
  #endif
  - // there's no need to check VSX availability in runtime since it's always available on ppc64le CPUs
  - have[CV_CPU_VSX] = (CV_VSX);
  - // TODO: Check VSX3 availability in runtime for other platforms
  - #if CV_VSX && defined __linux__
  - uint64 hwcap2 = getauxval(AT_HWCAP2);
  - have[CV_CPU_VSX3] = (hwcap2 & PPC_FEATURE2_ARCH_3_00);
  +
  + #if (defined __ppc64__ || defined __PPC64__) && defined __linux__
  + unsigned int hwcap = getauxval(AT_HWCAP);
  + if (hwcap & PPC_FEATURE_HAS_VSX) {
  + hwcap = getauxval(AT_HWCAP2);
  + if (hwcap & PPC_FEATURE2_ARCH_3_00) {
  + have[CV_CPU_VSX] = have[CV_CPU_VSX3] = true;
  + } else {
  + have[CV_CPU_VSX] = (hwcap & PPC_FEATURE2_ARCH_2_07) != 0;
  + }
  + }
  #else
  - have[CV_CPU_VSX3] = (CV_VSX3);
  + // TODO: AIX, FreeBSD
  + #if CV_VSX || defined _ARCH_PWR8 || defined __POWER9_VECTOR__
  + have[CV_CPU_VSX] = true;
  + #endif
  + #if CV_VSX3 || defined __POWER9_VECTOR__
  + have[CV_CPU_VSX3] = true;
  + #endif
  #endif
  bool skip_baseline_check = false;
  