Here is the how HWY_BROKEN_32BIT is currently defined in hwy/detect_targets.h:
|
#if HWY_ARCH_X86_32 |
|
#define HWY_BROKEN_32BIT (HWY_AVX2 | HWY_AVX3 | HWY_AVX3_DL | HWY_AVX3_ZEN4) |
|
#else |
|
#define HWY_BROKEN_32BIT 0 |
|
#endif |
I was able to get HWY_AVX2/HWY_AVX3/HWY_AVX3_DL compiled successfully for 32-bit x86 on GCC 9, GCC 12, Clang 13, and Clang 15 on Ubuntu 22.04, and all of the Highway unit tests pass for HWY_AVX2/HWY_AVX3/HWY_AVX3_DL on 32-bit x86 with GCC 9, GCC 12, Clang 13, and Clang 15.
I also was able to get HWY_AVX2 compiled successfully for 32-bit x86 with MSVC 2019 (19.29), and all of the Highway unit tests pass for the HWY_AVX2 target on 32-bit x86 when compiled with MSVC 19.29.
HWY_BROKEN_32BIT should be changed to 0 for 32-bit x86 when compiled with GCC 9 and later or Clang 13 and later, and HWY_BROKEN_32BIT should be changed to (HWY_AVX3 | HWY_AVX3_DL | HWY_AVX3_ZEN4) for MSVC 19.29 or later.
Here is an updated version of the HWY_BROKEN_32BIT macro that will mark AVX2 as non-broken on 32-bit x86 with MSVC 19.29 or later, GCC 9.0 or later, or Clang 13.0 or later and that will mark AVX3 as non-broken on 32-bit x86 with GCC 9.0 or later or Clang 13.0 or later:
#if HWY_ARCH_X86_32
#if ((HWY_COMPILER_GCC_ACTUAL && HWY_COMPILER_GCC_ACTUAL < 900) || \
(HWY_COMPILER_CLANG && HWY_COMPILER_CLANG < 1300))
#define HWY_BROKEN_32BIT 0
#elif HWY_COMPILER_MSVC && HWY_COMPILER_MSVC < 1929
#define HWY_BROKEN_32BIT (HWY_AVX3 | HWY_AVX3_DL | HWY_AVX3_ZEN4)
#else
#define HWY_BROKEN_32BIT (HWY_AVX2 | HWY_AVX3 | HWY_AVX3_DL | HWY_AVX3_ZEN4)
#endif
#else // x86_64 or non-x86
#define HWY_BROKEN_32BIT 0
#endif // HWY_ARCH_X86_32
Here is the how HWY_BROKEN_32BIT is currently defined in hwy/detect_targets.h:
highway/hwy/detect_targets.h
Lines 155 to 159 in ceb1f0f
I was able to get HWY_AVX2/HWY_AVX3/HWY_AVX3_DL compiled successfully for 32-bit x86 on GCC 9, GCC 12, Clang 13, and Clang 15 on Ubuntu 22.04, and all of the Highway unit tests pass for HWY_AVX2/HWY_AVX3/HWY_AVX3_DL on 32-bit x86 with GCC 9, GCC 12, Clang 13, and Clang 15.
I also was able to get HWY_AVX2 compiled successfully for 32-bit x86 with MSVC 2019 (19.29), and all of the Highway unit tests pass for the HWY_AVX2 target on 32-bit x86 when compiled with MSVC 19.29.
HWY_BROKEN_32BIT should be changed to 0 for 32-bit x86 when compiled with GCC 9 and later or Clang 13 and later, and HWY_BROKEN_32BIT should be changed to (HWY_AVX3 | HWY_AVX3_DL | HWY_AVX3_ZEN4) for MSVC 19.29 or later.
Here is an updated version of the HWY_BROKEN_32BIT macro that will mark AVX2 as non-broken on 32-bit x86 with MSVC 19.29 or later, GCC 9.0 or later, or Clang 13.0 or later and that will mark AVX3 as non-broken on 32-bit x86 with GCC 9.0 or later or Clang 13.0 or later: