Git Product home page Git Product logo

google / highway Goto Github PK

View Code? Open in Web Editor NEW
3.6K 45.0 292.0 23.91 MB

Performance-portable, length-agnostic SIMD with runtime dispatch

License: Apache License 2.0

C 1.12% C++ 97.74% CMake 0.54% Batchfile 0.01% Shell 0.12% Starlark 0.48%
simd simd-instructions simd-programming intrinsics avx2 avx512 neon wasm avx avx-512 avx-instructions sse42 simd-library simd-parallelism simd-intrinsics

highway's Introduction

Efficient and performance-portable vector software

Highway is a C++ library that provides portable SIMD/vector intrinsics.

Documentation

Previously licensed under Apache 2, now dual-licensed as Apache 2 / BSD-3.

Why

We are passionate about high-performance software. We see major untapped potential in CPUs (servers, mobile, desktops). Highway is for engineers who want to reliably and economically push the boundaries of what is possible in software.

How

CPUs provide SIMD/vector instructions that apply the same operation to multiple data items. This can reduce energy usage e.g. fivefold because fewer instructions are executed. We also often see 5-10x speedups.

Highway makes SIMD/vector programming practical and workable according to these guiding principles:

Does what you expect: Highway is a C++ library with carefully-chosen functions that map well to CPU instructions without extensive compiler transformations. The resulting code is more predictable and robust to code changes/compiler updates than autovectorization.

Works on widely-used platforms: Highway supports five architectures; the same application code can target various instruction sets, including those with 'scalable' vectors (size unknown at compile time). Highway only requires C++11 and supports four families of compilers. If you would like to use Highway on other platforms, please raise an issue.

Flexible to deploy: Applications using Highway can run on heterogeneous clouds or client devices, choosing the best available instruction set at runtime. Alternatively, developers may choose to target a single instruction set without any runtime overhead. In both cases, the application code is the same except for swapping HWY_STATIC_DISPATCH with HWY_DYNAMIC_DISPATCH plus one line of code.

Suitable for a variety of domains: Highway provides an extensive set of operations, used for image processing (floating-point), compression, video analysis, linear algebra, cryptography, sorting and random generation. We recognise that new use-cases may require additional ops and are happy to add them where it makes sense (e.g. no performance cliffs on some architectures). If you would like to discuss, please file an issue.

Rewards data-parallel design: Highway provides tools such as Gather, MaskedLoad, and FixedTag to enable speedups for legacy data structures. However, the biggest gains are unlocked by designing algorithms and data structures for scalable vectors. Helpful techniques include batching, structure-of-array layouts, and aligned/padded allocations.

We recommend these resources for getting started:

Examples

Online demos using Compiler Explorer:

We observe that Highway is referenced in the following open source projects, found via sourcegraph.com. Most are GitHub repositories. If you would like to add your project or link to it directly, feel free to raise an issue or contact us via the below email.

  • Browsers: Chromium (+Vivaldi), Firefox (+floorp / foxhound / librewolf / Waterfox)
  • Cryptography: google/distributed_point_functions
  • Data structures: bkille/BitLib
  • Image codecs: eustas/2im, Grok JPEG 2000, JPEG XL, OpenHTJ2K, JPEGenc
  • Image processing: cloudinary/ssimulacra2, m-ab-s/media-autobuild_suite, libvips
  • Image viewers: AlienCowEatCake/ImageViewer, mirillis/jpegxl-wic, Lux panorama/image viewer
  • Information retrieval: iresearch database index, michaeljclark/zvec
  • Machine learning: Tensorflow, Numpy, zpye/SimpleInfer
  • Voxels: rools/voxl

Other

  • Evaluation of C++ SIMD Libraries: "Highway excelled with a strong performance across multiple SIMD extensions [..]. Thus, Highway may currently be the most suitable SIMD library for many software projects."
  • zimt: C++11 template library to process n-dimensional arrays with multi-threaded SIMD code
  • vectorized Quicksort (paper)

If you'd like to get Highway, in addition to cloning from this GitHub repository or using it as a Git submodule, you can also find it in the following package managers or repositories: alpinelinux, conan-io, conda-forge, DragonFlyBSD, freebsd, ghostbsd, microsoft/vcpkg, MidnightBSD, MSYS2, NetBSD, openSUSE, opnsense, Xilinx/Vitis_Libraries. See also the list at https://repology.org/project/highway-simd-library/versions .

Current status

Targets

Highway supports 22 targets, listed in alphabetical order of platform:

  • Any: EMU128, SCALAR;
  • Arm: NEON (Armv7+), SVE, SVE2, SVE_256, SVE2_128;
  • IBM Z: Z14, Z15;
  • POWER: PPC8 (v2.07), PPC9 (v3.0), PPC10 (v3.1B, not yet supported due to compiler bugs, see #1207; also requires QEMU 7.2);
  • RISC-V: RVV (1.0);
  • WebAssembly: WASM, WASM_EMU256 (a 2x unrolled version of wasm128, enabled if HWY_WANT_WASM2 is defined. This will remain supported until it is potentially superseded by a future version of WASM.);
  • x86:
    • SSE2
    • SSSE3 (~Intel Core)
    • SSE4 (~Nehalem, also includes AES + CLMUL).
    • AVX2 (~Haswell, also includes BMI2 + F16 + FMA)
    • AVX3 (~Skylake, AVX-512F/BW/CD/DQ/VL)
    • AVX3_DL (~Icelake, includes BitAlg + CLMUL + GFNI + VAES + VBMI + VBMI2 + VNNI + VPOPCNT; requires opt-in by defining HWY_WANT_AVX3_DL unless compiling for static dispatch),
    • AVX3_ZEN4 (like AVX3_DL but optimized for AMD Zen4; requires opt-in by defining HWY_WANT_AVX3_ZEN4 if compiling for static dispatch)
    • AVX3_SPR (~Sapphire Rapids, includes AVX-512FP16)

Our policy is that unless otherwise specified, targets will remain supported as long as they can be (cross-)compiled with currently supported Clang or GCC, and tested using QEMU. If the target can be compiled with LLVM trunk and tested using our version of QEMU without extra flags, then it is eligible for inclusion in our continuous testing infrastructure. Otherwise, the target will be manually tested before releases with selected versions/configurations of Clang and GCC.

SVE was initially tested using farm_sve (see acknowledgments).

Versioning

Highway releases aim to follow the semver.org system (MAJOR.MINOR.PATCH), incrementing MINOR after backward-compatible additions and PATCH after backward-compatible fixes. We recommend using releases (rather than the Git tip) because they are tested more extensively, see below.

The current version 1.0 signals an increased focus on backwards compatibility. Applications using documented functionality will remain compatible with future updates that have the same major version number.

Testing

Continuous integration tests build with a recent version of Clang (running on native x86, or QEMU for RISC-V and Arm) and MSVC 2019 (v19.28, running on native x86).

Before releases, we also test on x86 with Clang and GCC, and Armv7/8 via GCC cross-compile. See the testing process for details.

Related modules

The contrib directory contains SIMD-related utilities: an image class with aligned rows, a math library (16 functions already implemented, mostly trigonometry), and functions for computing dot products and sorting.

Other libraries

If you only require x86 support, you may also use Agner Fog's VCL vector class library. It includes many functions including a complete math library.

If you have existing code using x86/NEON intrinsics, you may be interested in SIMDe, which emulates those intrinsics using other platforms' intrinsics or autovectorization.

Installation

This project uses CMake to generate and build. In a Debian-based system you can install it via:

sudo apt install cmake

Highway's unit tests use googletest. By default, Highway's CMake downloads this dependency at configuration time. You can avoid this by setting the HWY_SYSTEM_GTEST CMake variable to ON and installing gtest separately:

sudo apt install libgtest-dev

Alternatively, you can define HWY_TEST_STANDALONE=1 and remove all occurrences of gtest_main in each BUILD file, then tests avoid the dependency on GUnit.

Running cross-compiled tests requires support from the OS, which on Debian is provided by the qemu-user-binfmt package.

To build Highway as a shared or static library (depending on BUILD_SHARED_LIBS), the standard CMake workflow can be used:

mkdir -p build && cd build
cmake ..
make -j && make test

Or you can run run_tests.sh (run_tests.bat on Windows).

Bazel is also supported for building, but it is not as widely used/tested.

When building for Armv7, a limitation of current compilers requires you to add -DHWY_CMAKE_ARM7:BOOL=ON to the CMake command line; see #834 and #1032. We understand that work is underway to remove this limitation.

Building on 32-bit x86 is not officially supported, and AVX2/3 are disabled by default there. Note that johnplatts has successfully built and run the Highway tests on 32-bit x86, including AVX2/3, on GCC 7/8 and Clang 8/11/12. On Ubuntu 22.04, Clang 11 and 12, but not later versions, require extra compiler flags -m32 -isystem /usr/i686-linux-gnu/include. Clang 10 and earlier require the above plus -isystem /usr/i686-linux-gnu/include/c++/12/i686-linux-gnu. See #1279.

Building highway - Using vcpkg

highway is now available in vcpkg

vcpkg install highway

The highway port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please create an issue or pull request on the vcpkg repository.

Quick start

You can use the benchmark inside examples/ as a starting point.

A quick-reference page briefly lists all operations and their parameters, and the instruction_matrix indicates the number of instructions per operation.

The FAQ answers questions about portability, API design and where to find more information.

We recommend using full SIMD vectors whenever possible for maximum performance portability. To obtain them, pass a ScalableTag<float> (or equivalently HWY_FULL(float)) tag to functions such as Zero/Set/Load. There are two alternatives for use-cases requiring an upper bound on the lanes:

  • For up to N lanes, specify CappedTag<T, N> or the equivalent HWY_CAPPED(T, N). The actual number of lanes will be N rounded down to the nearest power of two, such as 4 if N is 5, or 8 if N is 8. This is useful for data structures such as a narrow matrix. A loop is still required because vectors may actually have fewer than N lanes.

  • For exactly a power of two N lanes, specify FixedTag<T, N>. The largest supported N depends on the target, but is guaranteed to be at least 16/sizeof(T).

Due to ADL restrictions, user code calling Highway ops must either:

  • Reside inside namespace hwy { namespace HWY_NAMESPACE {; or
  • prefix each op with an alias such as namespace hn = hwy::HWY_NAMESPACE; hn::Add(); or
  • add using-declarations for each op used: using hwy::HWY_NAMESPACE::Add;.

Additionally, each function that calls Highway ops (such as Load) must either be prefixed with HWY_ATTR, OR reside between HWY_BEFORE_NAMESPACE() and HWY_AFTER_NAMESPACE(). Lambda functions currently require HWY_ATTR before their opening brace.

Do not use namespace-scope nor static initializers for SIMD vectors because this can cause SIGILL when using runtime dispatch and the compiler chooses an initializer compiled for a target not supported by the current CPU. Instead, constants initialized via Set should generally be local (const) variables.

The entry points into code using Highway differ slightly depending on whether they use static or dynamic dispatch. In both cases, we recommend that the top-level function receives one or more pointers to arrays, rather than target-specific vector types.

  • For static dispatch, HWY_TARGET will be the best available target among HWY_BASELINE_TARGETS, i.e. those allowed for use by the compiler (see quick-reference). Functions inside HWY_NAMESPACE can be called using HWY_STATIC_DISPATCH(func)(args) within the same module they are defined in. You can call the function from other modules by wrapping it in a regular function and declaring the regular function in a header.

  • For dynamic dispatch, a table of function pointers is generated via the HWY_EXPORT macro that is used by HWY_DYNAMIC_DISPATCH(func)(args) to call the best function pointer for the current CPU's supported targets. A module is automatically compiled for each target in HWY_TARGETS (see quick-reference) if HWY_TARGET_INCLUDE is defined and foreach_target.h is included. Note that the first invocation of HWY_DYNAMIC_DISPATCH, or each call to the pointer returned by the first invocation of HWY_DYNAMIC_POINTER, involves some CPU detection overhead. You can prevent this by calling the following before any invocation of HWY_DYNAMIC_*: hwy::GetChosenTarget().Update(hwy::SupportedTargets());.

When using dynamic dispatch, foreach_target.h is included from translation units (.cc files), not headers. Headers containing vector code shared between several translation units require a special include guard, for example the following taken from examples/skeleton-inl.h:

#if defined(HIGHWAY_HWY_EXAMPLES_SKELETON_INL_H_) == defined(HWY_TARGET_TOGGLE)
#ifdef HIGHWAY_HWY_EXAMPLES_SKELETON_INL_H_
#undef HIGHWAY_HWY_EXAMPLES_SKELETON_INL_H_
#else
#define HIGHWAY_HWY_EXAMPLES_SKELETON_INL_H_
#endif

#include "hwy/highway.h"
// Your vector code
#endif

By convention, we name such headers -inl.h because their contents (often function templates) are usually inlined.

Compiler flags

Applications should be compiled with optimizations enabled. Without inlining SIMD code may slow down by factors of 10 to 100. For clang and GCC, -O2 is generally sufficient.

For MSVC, we recommend compiling with /Gv to allow non-inlined functions to pass vector arguments in registers. If intending to use the AVX2 target together with half-width vectors (e.g. for PromoteTo), it is also important to compile with /arch:AVX2. This seems to be the only way to reliably generate VEX-encoded SSE instructions on MSVC. Sometimes MSVC generates VEX-encoded SSE instructions, if they are mixed with AVX, but not always, see DevCom-10618264. Otherwise, mixing VEX-encoded AVX2 instructions and non-VEX SSE may cause severe performance degradation. Unfortunately, with /arch:AVX2 option, the resulting binary will then require AVX2. Note that no such flag is needed for clang and GCC because they support target-specific attributes, which we use to ensure proper VEX code generation for AVX2 targets.

Strip-mining loops

When vectorizing a loop, an important question is whether and how to deal with a number of iterations ('trip count', denoted count) that does not evenly divide the vector size N = Lanes(d). For example, it may be necessary to avoid writing past the end of an array.

In this section, let T denote the element type and d = ScalableTag<T>. Assume the loop body is given as a function template<bool partial, class D> void LoopBody(D d, size_t index, size_t max_n).

"Strip-mining" is a technique for vectorizing a loop by transforming it into an outer loop and inner loop, such that the number of iterations in the inner loop matches the vector width. Then, the inner loop is replaced with vector operations.

Highway offers several strategies for loop vectorization:

  • Ensure all inputs/outputs are padded. Then the (outer) loop is simply

    for (size_t i = 0; i < count; i += N) LoopBody<false>(d, i, 0);
    

    Here, the template parameter and second function argument are not needed.

    This is the preferred option, unless N is in the thousands and vector operations are pipelined with long latencies. This was the case for supercomputers in the 90s, but nowadays ALUs are cheap and we see most implementations split vectors into 1, 2 or 4 parts, so there is little cost to processing entire vectors even if we do not need all their lanes. Indeed this avoids the (potentially large) cost of predication or partial loads/stores on older targets, and does not duplicate code.

  • Process whole vectors and include previously processed elements in the last vector:

    for (size_t i = 0; i < count; i += N) LoopBody<false>(d, HWY_MIN(i, count - N), 0);
    

    This is the second preferred option provided that count >= N and LoopBody is idempotent. Some elements might be processed twice, but a single code path and full vectorization is usually worth it. Even if count < N, it usually makes sense to pad inputs/outputs up to N.

  • Use the Transform* functions in hwy/contrib/algo/transform-inl.h. This takes care of the loop and remainder handling and you simply define a generic lambda function (C++14) or functor which receives the current vector from the input/output array, plus optionally vectors from up to two extra input arrays, and returns the value to write to the input/output array.

    Here is an example implementing the BLAS function SAXPY (alpha * x + y):

    Transform1(d, x, n, y, [](auto d, const auto v, const auto v1) HWY_ATTR {
      return MulAdd(Set(d, alpha), v, v1);
    });
    
  • Process whole vectors as above, followed by a scalar loop:

    size_t i = 0;
    for (; i + N <= count; i += N) LoopBody<false>(d, i, 0);
    for (; i < count; ++i) LoopBody<false>(CappedTag<T, 1>(), i, 0);
    

    The template parameter and second function arguments are again not needed.

    This avoids duplicating code, and is reasonable if count is large. If count is small, the second loop may be slower than the next option.

  • Process whole vectors as above, followed by a single call to a modified LoopBody with masking:

    size_t i = 0;
    for (; i + N <= count; i += N) {
      LoopBody<false>(d, i, 0);
    }
    if (i < count) {
      LoopBody<true>(d, i, count - i);
    }
    

    Now the template parameter and third function argument can be used inside LoopBody to non-atomically 'blend' the first num_remaining lanes of v with the previous contents of memory at subsequent locations: BlendedStore(v, FirstN(d, num_remaining), d, pointer);. Similarly, MaskedLoad(FirstN(d, num_remaining), d, pointer) loads the first num_remaining elements and returns zero in other lanes.

    This is a good default when it is infeasible to ensure vectors are padded, but is only safe #if !HWY_MEM_OPS_MIGHT_FAULT! In contrast to the scalar loop, only a single final iteration is needed. The increased code size from two loop bodies is expected to be worthwhile because it avoids the cost of masking in all but the final iteration.

Additional resources

Acknowledgments

We have used farm-sve by Berenger Bramas; it has proved useful for checking the SVE port on an x86 development machine.

This is not an officially supported Google product. Contact: [email protected]

highway's People

Contributors

ag01 avatar alexguteniev avatar awxkee avatar ax7e avatar capcah avatar chriselrod avatar clin99 avatar compnerd avatar dependabot[bot] avatar deymo avatar diamondinoia avatar donny-dont avatar enum-class avatar eustas avatar jan-wassenberg avatar johnplatts avatar jolivain avatar joycebrum avatar kleisauke avatar malaterre avatar mo271 avatar mousius avatar nicolacandussi avatar nielskm avatar niranjan-nilakantan avatar pchx avatar quarticcat avatar rhettstucki avatar schoppmp avatar xiaozhuai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

highway's Issues

module location

It seems that the project depends on the fact, that it is located at "third_party/highway"

awslinux compile errors

Compile errors with make on awslinux2 for b97d18f .

hwy/tests/arithmetic_test.cc:1055:1: error: macro "INSTANTIATE_TEST_CASE_P" passed 4 arguments, but takes just 3
HWY_TARGET_INSTANTIATE_TEST_SUITE_P(HwyArithmeticTest);
^~~~~~~~~~~~~~~~~~~~~~
In file included from ./hwy/tests/arithmetic_test.cc:23:0,
from ./hwy/foreach_target.h:80,
from hwy/tests/arithmetic_test.cc:19:
./hwy/tests/test_util-inl.h:75:48: error: โ€˜TestParamInfoโ€™ in namespace โ€˜testingโ€™ does not name a template type
std::string TestParamTargetName(const testing::TestParamInfo<uint32_t>& info) {
^~~~~~~~~~~~~
./hwy/tests/test_util-inl.h:75:61: error: expected โ€˜,โ€™ or โ€˜...โ€™ before โ€˜<โ€™ token
std::string TestParamTargetName(const testing::TestParamInfo<uint32_t>& info) {
^
./hwy/tests/test_util-inl.h: In function โ€˜std::__cxx11::string hwy::TestParamTargetName(int)โ€™:
./hwy/tests/test_util-inl.h:76:21: error: โ€˜infoโ€™ was not declared in this scope
return TargetName(info.param);
^~~~
./hwy/tests/test_util-inl.h:76:21: note: suggested alternative: โ€˜ynfโ€™
return TargetName(info.param);
^~~~
ynf
./hwy/tests/test_util-inl.h: At global scope:
./hwy/tests/test_util-inl.h:128:20: error: โ€˜TestParamInfoโ€™ in namespace โ€˜testingโ€™ does not name a template type
const testing::TestParamInfo<std::tuple<uint32_t, T>>& info) {
^~~~~~~~~~~~~
./hwy/tests/test_util-inl.h:128:33: error: expected โ€˜,โ€™ or โ€˜...โ€™ before โ€˜<โ€™ token
const testing::TestParamInfo<std::tuple<uint32_t, T>>& info) {
^
./hwy/tests/test_util-inl.h: In function โ€˜std::__cxx11::string hwy::TestParamTargetNameAndT(int)โ€™:
./hwy/tests/test_util-inl.h:129:45: error: โ€˜infoโ€™ was not declared in this scope
return std::string(TargetName(std::get<0>(info.param))) + "" +
^~~~
./hwy/tests/test_util-inl.h:129:45: note: suggested alternative: โ€˜ynfโ€™
return std::string(TargetName(std::get<0>(info.param))) + "
" +
^~~~
ynf
In file included from ./hwy/highway.h:233:0,
from ./hwy/tests/arithmetic_test.cc:22,
from ./hwy/foreach_target.h:102,
from hwy/tests/arithmetic_test.cc:19:
./hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512 hwy::N_AVX3::Abs(hwy::N_AVX3::Vec512)โ€™:
./hwy/ops/x86_512-inl.h:611:44: error: cannot convert โ€˜const Raw {aka const __vector(8) double}โ€™ to โ€˜__m512 {aka __vector(16) float}โ€™ for argument โ€˜1โ€™ to โ€˜__m512d _mm512_abs_pd(__m512)โ€™
return Vec512{_mm512_abs_pd(v.raw)};
^
In file included from ./hwy/tests/arithmetic_test.cc:23:0,
from ./hwy/foreach_target.h:80,
from hwy/tests/arithmetic_test.cc:19:
hwy/tests/arithmetic_test.cc: At global scope:
./hwy/tests/test_util-inl.h:46:44: error: โ€˜INSTANTIATE_TEST_CASE_Pโ€™ does not name a type
#define HWY_GTEST_INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
^
./hwy/tests/test_util-inl.h:80:3: note: in expansion of macro โ€˜HWY_GTEST_INSTANTIATE_TEST_SUITE_Pโ€™
HWY_GTEST_INSTANTIATE_TEST_SUITE_P(
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hwy/tests/arithmetic_test.cc:1055:1: note: in expansion of macro โ€˜HWY_TARGET_INSTANTIATE_TEST_SUITE_Pโ€™
HWY_TARGET_INSTANTIATE_TEST_SUITE_P(HwyArithmeticTest);
^
make: *** [bin/arithmetic_test] Error 1

New compilation warnings

With ToT version there is a bunch of warnings during compilation:

/.../_deps/highway-src/hwy/targets.h:213:21: warning: macro expansion producing 'defined' has undefined behavior [-Wexpansion-to-defined]
#if HWY_ARCH_X86 && HWY_CHECK_SSE4 && HWY_CHECK_PCLMUL_AES
                    ^
/.../_deps/highway-src/hwy/targets.h:204:24: note: expanded from macro 'HWY_CHECK_SSE4'
#define HWY_CHECK_SSE4 defined(__SSE4_1__)
                       ^

Fails test on amd64 (ivy bridge): `SSE4#GetParam()=64 (ILLEGAL)` - SSE4, u32 lane 0 mismatch

I encountered a failed test while trying to make a Debian package with dpkg-buildpackage -uc -us -b (building the master branch; last release works fine.). I've tried it on a Nehalem and an Ivy Bridge machine. I apologize in advance since am not very familiar with SIMD stuff; I am trying to build it so I can build some JPEG-XL code that depends on this library.

My distro is Debian Sid on both machines, and my kernel is 5.10.0.

 10/190 Test  #10: HwyArithmeticTestGroup/HwyArithmeticTest.TestAllShifts/SSE4#GetParam()=64 ...........................***Exception: Illegal  0.00 sec
Running main() from /build/googletest-YnT0O3/googletest-1.10.0.20201025/googletest/src/gtest_main.cc
Note: Google Test filter = HwyArithmeticTestGroup/HwyArithmeticTest.TestAllShifts/SSE4
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from HwyArithmeticTestGroup/HwyArithmeticTest
[ RUN      ] HwyArithmeticTestGroup/HwyArithmeticTest.TestAllShifts/SSE4


u32 expect [0+ ->]:
  2147483648,
u32 actual [0+ ->]:
  2147483647,
Abort at /home/wyatt/development/jpeg-xl/highway/hwy/tests/arithmetic_test.cc:244: SSE4, u32 lane 0 mismatch: expected '2147483648', got '2147483647'.

-- SNIP --

99% tests passed, 1 tests failed out of 190

Total Test time (real) =   0.22 sec

The following tests FAILED:
	 10 - HwyArithmeticTestGroup/HwyArithmeticTest.TestAllShifts/SSE4#GetParam()=64 (ILLEGAL)
Errors while running CTest

Occasional difference between Highway output and non-SIMD C++ output

I have converted a routine of mine from c++ to Highway. For some reason Highway is using scalar operations rather than vector operations. Even so, I see an occasional difference in output between regular C++ and the Highway version:

C++

float f;
int32_t shift,_min,_max;
std::clamp<int32_t>((int32_t)lrintf(f) + shift, _min, _max);

Highway

float* vf;
const HWY_FULL(float) df;
auto vshift ...
auto vmin ...
auto vmax ...
Clamp(NearestInt(Load(df,vf)) + vshift, vmin, vmax);
``

Perhaps the rounding method of `NearestInt` is dfferent from default `lrintf` rounding method ?

'goading' - platform-agnostic SIMD relying on autovectorization of small loops

As a follow-up to personal communication with @jan-wassenberg, I'd like to propose a technique here which I implemented as an intermediate layer between code intending to 'behave' in a SIMD fashion and the layer which implements the actual SIMD code. The reasoning goes like this:

  • to implement a SIMD algorithm efficiently, the program has to provide a SIMD-friendly structure
  • this structure is best expressed by using appropriate data types
  • generation of the actual SIMD code should remain an implementation detail, and allow for varying 'engines'
  • a system of generic types can be used to express the first point in a platform-agnostic way
  • and to speed things up, it can be specialized to use a more efficient engine where possible or necessary

In my b-spline library I use this approach to good effect: I define a type vspline::simd_type which acts as a catch-all implementation of a class template structuring intended SIMD programming. This template 'behaves' like a 'proper' SIMD type, but internally, it simply has small fixed-size std::array-like containers and the 'SIMD' operations are implemented as small loops. The template mimicks Vc's SimdArray, and one layer 'above' the 'simdized' type used by vspline for a given elementary type is inherited from Vc::SimdArray if possible, and from vspline::simd_type otherwise. The resulting type is meant to behave in the same way, no matter what it's 'progeny' is. This construction has several nice effects:

  • the code can be run without a SIMD library by relying entirely on vspline::simd_type
  • when using a SIMD library, one can fine-tune the specialization
  • scalar code can be enforced at the intermediate layer by specifying a vector size of one
  • platforms not covered by a given SIMD library can still be addressed

The first point is especially important. It allows to run the SIMD-structured code on any machine. At first sight this looks like a good option for testing, but deeper inspection reveals that by communicating the SIMD intent clearly through the code's structure, it can also be 'picked up' by the compiler's optimizer, and, if 'goading' the compiler works as intended, the resulting code may perform a bona fide SIMD operation without the need to actually tell the compiler how to arrive at this solution (like, with intrinsics). It turns out that for a fair amount of code the compiler can provide near-optimal solutions, which it might not have found had the code merely stated it's intent in a scalar form. There is even a chance to get better machine code: If a SIMD library is used to explicitly code SIMD instructions, this process may be opaque to the optimizer. The 'goading' approach is entirely transparent, there are no hard-to-penetrate intrinsics, and optimization can possibly restructure the machine code in a way a human programmer might find hard to fathom and write explicitly.

In my experience, clang++ is especially good at 'picking up' the SIMD intent in goading code, but this is a moving target, compilers evolve quickly, and my experience is limited.

SIMD libraries tend to offer a fallback to scalar code where 'hardware' SIMD can't be had, but this still requires the entire library to be present. Using a small header like vspline::simd_type.h, which has no dependencies, removes the dependency from a given library and makes SIMD usable even on exotic platforms. On the compiler side, it's helpful if the compiler writers specify which small-loop constructs they will likely vectorize, and clang++ offers such documentation.

There is yet another aspect here: 'goading' expresses a SIMD intent, but the compiler, seeing the 'big picture', may decide that SIMD is inappropriate for a given construct, due to a cost model which may turn out that the code is better run without using SIMD instructions. This option may be blocked by explicit SIMD instruction use - a case of overly zealous early specialization.

I hope that this little write-up can add to the effort to make use of SIMD programming more widespread, which I think is critical, especially for number-crunching applications. vspline::simd_type is FOSS, licensed under the expat library. I'd like to see an echo to this post; @jan-wassenberg proposed to start discussing SIMD-related topics on highway's issue tracker, so here we go.

Test 222 "HwyCryptoTestGroup/HwyCryptoTest.TestAllAES/SSE4#GetParam()=64" fails on SandyBridge

I tried to compile highway on an Intel i3-2330M (Sandy Bridge architecture) and ran into the following error while running the tests:

99% tests passed, 1 tests failed out of 317

Total Test time (real) =   1.80 sec

The following tests FAILED:
        222 - HwyCryptoTestGroup/HwyCryptoTest.TestAllAES/SSE4#GetParam()=64 (ILLEGAL)
Errors while running CTest

The Sandy Bridge architecture should support SSE4.1/SSE4.2 according to the linux kernel:

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 42
model name      : Intel(R) Core(TM) i3-2330M CPU @ 2.20GHz
stepping        : 7
microcode       : 0x25
cpu MHz         : 2200.000
cache size      : 3072 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx lahf_lm epb tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm arat pln pts
vmx flags       : vnmi preemption_timer invvpid ept_x_only flexpriority tsc_offset vtpr mtf vapic ept vpid unrestricted_guest
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
bogomips        : 4392.33
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

LastTest.log

I wonder how highway can unifiy VLA and non-VLA implementations

Hello, very interesting project!

I am particularly interested in the support for future Vector Length Agnostic SIMD implementations (I have looked a bit into Arm SVE, for instance). I saw you started some work with RVV.

Usually for fixed vector length (an assuming suitably aligned data), you break a kernel loop in 2 chunks, main(/simd) and spillover(/drain) loops.
I was wondering if you could comment on how does this map to a VLA implementation with predicates like SVE.
Do you expect to have to write 2 different implementation? or you expect, for instance to have a "empty" spillover loop?

Hopefully my question was clear enough and thank you in advance for your time!

build fails on armv7 with neon enabled in: hwy/ops/arm_neon-inl.h:876:326: error: no matching function for call to 'hwy::N_NEON::Mask128<float

hey, I decided to open a seperate issue for this.

I ran into this when compiling latest firefox nightly on armv7, with neon enabled. I'm unaware of which highway version firefox devs do pull into their source tree, but here are the results:

19:53.10 /usr/armv7a-unknown-linux-gnueabihf/tmp/portage/www-client/firefox-90.0/work/firefox-90.0/third_party/highway/hwy/ops/arm_neon-inl.h:876:326: error: no matching function for call to 'hwy::N_NEON::Mask128<float, 4>::Mask128(uint32x4_t)'

here is the full build log, in case you're interested: firefox-90-nightly-broken-arm.patch.zip , grep for error:` to find them all

@jan-wassenberg you can delete the two unrelated postings from #188 I believe, I will relink this issue to the firefox upstream bug for reference. Thanks for your hard work :)

failure when linking tests/image_test on ppc64/s390x

I have tested the recent multi-arch fixes and it looks almost perfect :-) But there is a failure when linking tests/image_test when I try building from commit d81d8bc on Fedora on a ppc64le or a s390x system.

[ 70%] Linking CXX executable tests/image_test
/usr/bin/cmake -E cmake_link_script CMakeFiles/image_test.dir/link.txt --verbose=1
/usr/bin/c++ -O2 -g -DNDEBUG -fPIE -pie CMakeFiles/image_test.dir/hwy/contrib/image/image_test.cc.o -o tests/image_test  libhwy.a lib/libgtest.a lib/libgtest_main.a lib/libgtest.a -lpthread 
/usr/bin/ld: CMakeFiles/image_test.dir/hwy/contrib/image/image_test.cc.o: in function `hwy::Image<unsigned char>::Image(unsigned long, unsigned long)':
/home/sharkcz/projects/highway/hwy/contrib/image/image.h:163: undefined reference to `hwy::ImageBase::ImageBase(unsigned long, unsigned long, unsigned long)'
/usr/bin/ld: CMakeFiles/image_test.dir/hwy/contrib/image/image_test.cc.o: in function `hwy::Image<unsigned char>::InitializePaddingForUnalignedAccesses()':
/home/sharkcz/projects/highway/hwy/contrib/image/image.h:169: undefined reference to `hwy::ImageBase::InitializePadding(unsigned long, hwy::ImageBase::Padding)'
/usr/bin/ld: CMakeFiles/image_test.dir/hwy/contrib/image/image_test.cc.o: in function `hwy::Image<unsigned short>::Image(unsigned long, unsigned long)':
/home/sharkcz/projects/highway/hwy/contrib/image/image.h:163: undefined reference to `hwy::ImageBase::ImageBase(unsigned long, unsigned long, unsigned long)'
/usr/bin/ld: CMakeFiles/image_test.dir/hwy/contrib/image/image_test.cc.o: in function `hwy::Image<unsigned short>::InitializePaddingForUnalignedAccesses()':
/home/sharkcz/projects/highway/hwy/contrib/image/image.h:169: undefined reference to `hwy::ImageBase::InitializePadding(unsigned long, hwy::ImageBase::Padding)'
/usr/bin/ld: CMakeFiles/image_test.dir/hwy/contrib/image/image_test.cc.o: in function `hwy::Image<unsigned int>::Image(unsigned long, unsigned long)':
/home/sharkcz/projects/highway/hwy/contrib/image/image.h:163: undefined reference to `hwy::ImageBase::ImageBase(unsigned long, unsigned long, unsigned long)'
/usr/bin/ld: CMakeFiles/image_test.dir/hwy/contrib/image/image_test.cc.o: in function `hwy::Image<unsigned int>::InitializePaddingForUnalignedAccesses()':
/home/sharkcz/projects/highway/hwy/contrib/image/image.h:169: undefined reference to `hwy::ImageBase::InitializePadding(unsigned long, hwy::ImageBase::Padding)'
/usr/bin/ld: CMakeFiles/image_test.dir/hwy/contrib/image/image_test.cc.o: in function `hwy::Image<unsigned long>::Image(unsigned long, unsigned long)':
/home/sharkcz/projects/highway/hwy/contrib/image/image.h:163: undefined reference to `hwy::ImageBase::ImageBase(unsigned long, unsigned long, unsigned long)'
/usr/bin/ld: CMakeFiles/image_test.dir/hwy/contrib/image/image_test.cc.o: in function `hwy::Image<unsigned long>::InitializePaddingForUnalignedAccesses()':
/home/sharkcz/projects/highway/hwy/contrib/image/image.h:169: undefined reference to `hwy::ImageBase::InitializePadding(unsigned long, hwy::ImageBase::Padding)'
/usr/bin/ld: CMakeFiles/image_test.dir/hwy/contrib/image/image_test.cc.o: in function `hwy::Image<unsigned long>::Image(unsigned long, unsigned long)':
/home/sharkcz/projects/highway/hwy/contrib/image/image.h:163: undefined reference to `hwy::ImageBase::ImageBase(unsigned long, unsigned long, unsigned long)'
/usr/bin/ld: CMakeFiles/image_test.dir/hwy/contrib/image/image_test.cc.o: in function `hwy::Image<unsigned int>::Image(unsigned long, unsigned long)':
/home/sharkcz/projects/highway/hwy/contrib/image/image.h:163: undefined reference to `hwy::ImageBase::ImageBase(unsigned long, unsigned long, unsigned long)'
/usr/bin/ld: CMakeFiles/image_test.dir/hwy/contrib/image/image_test.cc.o: in function `hwy::Image<unsigned short>::Image(unsigned long, unsigned long)':
/home/sharkcz/projects/highway/hwy/contrib/image/image.h:163: undefined reference to `hwy::ImageBase::ImageBase(unsigned long, unsigned long, unsigned long)'
/usr/bin/ld: CMakeFiles/image_test.dir/hwy/contrib/image/image_test.cc.o: in function `hwy::Image<unsigned char>::Image(unsigned long, unsigned long)':
/home/sharkcz/projects/highway/hwy/contrib/image/image.h:163: undefined reference to `hwy::ImageBase::ImageBase(unsigned long, unsigned long, unsigned long)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/image_test.dir/build.make:107: tests/image_test] Error 1

Feature: add option to disable testing

Currently testing controlled by "BUILD_TESTING" option. The problem is that it is all-or-nothing solution.
It might be useful to disable testing of library but still have testing enabled in root project.

Mention fast math library in documentaion

Hi @jan-wassenberg, perhaps it would be worth mentioning the fast math library that is in the contribute/math folder either in the README.md or in the quick_reference.md. If I am not mistaken it is not mentioned in either docs and being outside the hwy folder it is easy to miss!

Some compiler warnings

Here are a few more compiler conversion warnings. About half of them are related to
#define HWY_MIN(a, b) ((a) < (b) ? (a) : (b))

In file included from /home/aaron/src/grok/src/lib/jp2/highway/hwy/highway.h:23,
                 from /home/aaron/src/grok/src/lib/jp2/point_transform/mct.cpp:22:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In function โ€˜hwy::N_SCALAR::Vec1<unsigned char> hwy::N_SCALAR::SaturatedAdd(hwy::N_SCALAR::Vec1<unsigned char>, hwy::N_SCALAR::Vec1<unsigned char>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/base.h:265:34: warning: conversion from โ€˜intโ€™ to โ€˜unsigned charโ€™ may change value [-Wconversion]
  265 | #define HWY_MIN(a, b) ((a) < (b) ? (a) : (b))
      |                       ~~~~~~~~~~~^~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:391:24: note: in expansion of macro โ€˜HWY_MINโ€™
  391 |   return Vec1<uint8_t>(HWY_MIN(HWY_MAX(0, a.raw + b.raw), 255));
      |                        ^~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In function โ€˜hwy::N_SCALAR::Vec1<short unsigned int> hwy::N_SCALAR::SaturatedAdd(hwy::N_SCALAR::Vec1<short unsigned int>, hwy::N_SCALAR::Vec1<short unsigned int>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/base.h:265:34: warning: conversion from โ€˜intโ€™ to โ€˜short unsigned intโ€™ may change value [-Wconversion]
  265 | #define HWY_MIN(a, b) ((a) < (b) ? (a) : (b))
      |                       ~~~~~~~~~~~^~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:395:25: note: in expansion of macro โ€˜HWY_MINโ€™
  395 |   return Vec1<uint16_t>(HWY_MIN(HWY_MAX(0, a.raw + b.raw), 65535));
      |                         ^~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In function โ€˜hwy::N_SCALAR::Vec1<signed char> hwy::N_SCALAR::SaturatedAdd(hwy::N_SCALAR::Vec1<signed char>, hwy::N_SCALAR::Vec1<signed char>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/base.h:265:34: warning: conversion from โ€˜intโ€™ to โ€˜signed charโ€™ may change value [-Wconversion]
  265 | #define HWY_MIN(a, b) ((a) < (b) ? (a) : (b))
      |                       ~~~~~~~~~~~^~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:401:23: note: in expansion of macro โ€˜HWY_MINโ€™
  401 |   return Vec1<int8_t>(HWY_MIN(HWY_MAX(-128, a.raw + b.raw), 127));
      |                       ^~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In function โ€˜hwy::N_SCALAR::Vec1<short int> hwy::N_SCALAR::SaturatedAdd(hwy::N_SCALAR::Vec1<short int>, hwy::N_SCALAR::Vec1<short int>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/base.h:265:34: warning: conversion from โ€˜intโ€™ to โ€˜short intโ€™ may change value [-Wconversion]
  265 | #define HWY_MIN(a, b) ((a) < (b) ? (a) : (b))
      |                       ~~~~~~~~~~~^~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:405:24: note: in expansion of macro โ€˜HWY_MINโ€™
  405 |   return Vec1<int16_t>(HWY_MIN(HWY_MAX(-32768, a.raw + b.raw), 32767));
      |                        ^~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In function โ€˜hwy::N_SCALAR::Vec1<unsigned char> hwy::N_SCALAR::SaturatedSub(hwy::N_SCALAR::Vec1<unsigned char>, hwy::N_SCALAR::Vec1<unsigned char>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/base.h:265:34: warning: conversion from โ€˜intโ€™ to โ€˜unsigned charโ€™ may change value [-Wconversion]
  265 | #define HWY_MIN(a, b) ((a) < (b) ? (a) : (b))
      |                       ~~~~~~~~~~~^~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:415:24: note: in expansion of macro โ€˜HWY_MINโ€™
  415 |   return Vec1<uint8_t>(HWY_MIN(HWY_MAX(0, a.raw - b.raw), 255));
      |                        ^~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In function โ€˜hwy::N_SCALAR::Vec1<short unsigned int> hwy::N_SCALAR::SaturatedSub(hwy::N_SCALAR::Vec1<short unsigned int>, hwy::N_SCALAR::Vec1<short unsigned int>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/base.h:265:34: warning: conversion from โ€˜intโ€™ to โ€˜short unsigned intโ€™ may change value [-Wconversion]
  265 | #define HWY_MIN(a, b) ((a) < (b) ? (a) : (b))
      |                       ~~~~~~~~~~~^~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:419:25: note: in expansion of macro โ€˜HWY_MINโ€™
  419 |   return Vec1<uint16_t>(HWY_MIN(HWY_MAX(0, a.raw - b.raw), 65535));
      |                         ^~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In function โ€˜hwy::N_SCALAR::Vec1<signed char> hwy::N_SCALAR::SaturatedSub(hwy::N_SCALAR::Vec1<signed char>, hwy::N_SCALAR::Vec1<signed char>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/base.h:265:34: warning: conversion from โ€˜intโ€™ to โ€˜signed charโ€™ may change value [-Wconversion]
  265 | #define HWY_MIN(a, b) ((a) < (b) ? (a) : (b))
      |                       ~~~~~~~~~~~^~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:425:23: note: in expansion of macro โ€˜HWY_MINโ€™
  425 |   return Vec1<int8_t>(HWY_MIN(HWY_MAX(-128, a.raw - b.raw), 127));
      |                       ^~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In function โ€˜hwy::N_SCALAR::Vec1<short int> hwy::N_SCALAR::SaturatedSub(hwy::N_SCALAR::Vec1<short int>, hwy::N_SCALAR::Vec1<short int>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/base.h:265:34: warning: conversion from โ€˜intโ€™ to โ€˜short intโ€™ may change value [-Wconversion]
  265 | #define HWY_MIN(a, b) ((a) < (b) ? (a) : (b))
      |                       ~~~~~~~~~~~^~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:429:24: note: in expansion of macro โ€˜HWY_MINโ€™
  429 |   return Vec1<int16_t>(HWY_MIN(HWY_MAX(-32768, a.raw - b.raw), 32767));
      |                        ^~~~~~~
In file included from /home/aaron/src/grok/src/lib/jp2/highway/hwy/highway.h:271,
                 from /home/aaron/src/grok/src/lib/jp2/point_transform/mct.cpp:22:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In function โ€˜hwy::N_SCALAR::Vec1<unsigned char> hwy::N_SCALAR::AverageRound(hwy::N_SCALAR::Vec1<unsigned char>, hwy::N_SCALAR::Vec1<unsigned char>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:438:44: warning: conversion from โ€˜intโ€™ to โ€˜unsigned charโ€™ may change value [-Wconversion]
  438 |   return Vec1<uint8_t>((a.raw + b.raw + 1) / 2);
      |                        ~~~~~~~~~~~~~~~~~~~~^~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In function โ€˜hwy::N_SCALAR::Vec1<short unsigned int> hwy::N_SCALAR::AverageRound(hwy::N_SCALAR::Vec1<short unsigned int>, hwy::N_SCALAR::Vec1<short unsigned int>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:442:45: warning: conversion from โ€˜intโ€™ to โ€˜short unsigned intโ€™ may change value [-Wconversion]
  442 |   return Vec1<uint16_t>((a.raw + b.raw + 1) / 2);
      |                         ~~~~~~~~~~~~~~~~~~~~^~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In function โ€˜hwy::N_SCALAR::Vec1<short int> hwy::N_SCALAR::MulHigh(hwy::N_SCALAR::Vec1<short int>, hwy::N_SCALAR::Vec1<short int>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:517:40: warning: conversion from โ€˜intโ€™ to โ€˜short intโ€™ may change value [-Wconversion]
  517 |   return Vec1<int16_t>((a.raw * b.raw) >> 16);
      |                        ~~~~~~~~~~~~~~~~^~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In function โ€˜hwy::N_SCALAR::Vec1<short unsigned int> hwy::N_SCALAR::MulHigh(hwy::N_SCALAR::Vec1<short unsigned int>, hwy::N_SCALAR::Vec1<short unsigned int>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:525:69: warning: conversion from โ€˜uint32_tโ€™ {aka โ€˜unsigned intโ€™} to โ€˜short unsigned intโ€™ may change value [-Wconversion]
  525 |       (static_cast<uint32_t>(a.raw) * static_cast<uint32_t>(b.raw)) >> 16);
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In function โ€˜hwy::N_SCALAR::Vec1<float> hwy::N_SCALAR::PromoteTo(hwy::N_SCALAR::Sisd<float>, hwy::N_SCALAR::Vec1<hwy::float16_t>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:881:47: warning: conversion from โ€˜unsigned intโ€™ to โ€˜floatโ€™ may change value [-Wconversion]
  881 |     const float subnormal = (1.0f / 16384) * (mantissa * (1.0f / 1024));
      |                                               ^~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In instantiation of โ€˜V hwy::N_SCALAR::Ceiling(V) [with Float = float; Bits = unsigned int; int kMantissaBits = 23; int kExponentBits = 8; V = hwy::N_SCALAR::Vec1<float>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:695:43:   required from here
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:644:66: warning: conversion to โ€˜intโ€™ from โ€˜unsigned intโ€™ may change the sign of the result [-Wsign-conversion]
  644 |   const int exponent = ((bits >> kMantissaBits) & kExponentMask) - kBias;
      |                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In instantiation of โ€˜V hwy::N_SCALAR::Ceiling(V) [with Float = double; Bits = long unsigned int; int kMantissaBits = 52; int kExponentBits = 11; V = hwy::N_SCALAR::Vec1<double>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:698:45:   required from here
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:644:66: warning: conversion from โ€˜long unsigned intโ€™ to โ€˜intโ€™ may change value [-Wconversion]
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In instantiation of โ€˜V hwy::N_SCALAR::Floor(V) [with Float = float; Bits = unsigned int; int kMantissaBits = 23; int kExponentBits = 8; V = hwy::N_SCALAR::Vec1<float>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:703:41:   required from here
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:675:66: warning: conversion to โ€˜intโ€™ from โ€˜unsigned intโ€™ may change the sign of the result [-Wsign-conversion]
  675 |   const int exponent = ((bits >> kMantissaBits) & kExponentMask) - kBias;
      |                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In instantiation of โ€˜V hwy::N_SCALAR::Floor(V) [with Float = double; Bits = long unsigned int; int kMantissaBits = 52; int kExponentBits = 11; V = hwy::N_SCALAR::Vec1<double>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:706:43:   required from here
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:675:66: warning: conversion from โ€˜long unsigned intโ€™ to โ€˜intโ€™ may change value [-Wconversion]
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In instantiation of โ€˜hwy::N_SCALAR::Vec1<T> hwy::N_SCALAR::operator+(hwy::N_SCALAR::Vec1<T>, hwy::N_SCALAR::Vec1<T>) [with T = int]โ€™:
/home/aaron/src/grok/src/lib/jp2/point_transform/mct.cpp:73:32:   required from here
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:360:24: warning: conversion to โ€˜uint64_tโ€™ {aka โ€˜long unsigned intโ€™} from โ€˜int64_tโ€™ {aka โ€˜long intโ€™} may change the sign of the result [-Wsign-conversion]
  360 |   const uint64_t a64 = static_cast<int64_t>(a.raw);
      |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:361:24: warning: conversion to โ€˜uint64_tโ€™ {aka โ€˜long unsigned intโ€™} from โ€˜int64_tโ€™ {aka โ€˜long intโ€™} may change the sign of the result [-Wsign-conversion]
  361 |   const uint64_t b64 = static_cast<int64_t>(b.raw);
      |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:362:30: warning: unsigned conversion from โ€˜intโ€™ to โ€˜long unsigned intโ€™ changes value from โ€˜-1โ€™ to โ€˜18446744073709551615โ€™ [-Wsign-conversion]
  362 |   return Vec1<T>((a64 + b64) & ~T(0));
      |                  ~~~~~~~~~~~~^~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:362:30: warning: conversion from โ€˜long unsigned intโ€™ to โ€˜intโ€™ may change value [-Wconversion]
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h: In instantiation of โ€˜hwy::N_SCALAR::Vec1<T> hwy::N_SCALAR::operator-(hwy::N_SCALAR::Vec1<T>, hwy::N_SCALAR::Vec1<T>) [with T = int]โ€™:
/home/aaron/src/grok/src/lib/jp2/point_transform/mct.cpp:74:17:   required from here
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:373:24: warning: conversion to โ€˜uint64_tโ€™ {aka โ€˜long unsigned intโ€™} from โ€˜int64_tโ€™ {aka โ€˜long intโ€™} may change the sign of the result [-Wsign-conversion]
  373 |   const uint64_t a64 = static_cast<int64_t>(a.raw);
      |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:374:24: warning: conversion to โ€˜uint64_tโ€™ {aka โ€˜long unsigned intโ€™} from โ€˜int64_tโ€™ {aka โ€˜long intโ€™} may change the sign of the result [-Wsign-conversion]
  374 |   const uint64_t b64 = static_cast<int64_t>(b.raw);
      |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:375:30: warning: unsigned conversion from โ€˜intโ€™ to โ€˜long unsigned intโ€™ changes value from โ€˜-1โ€™ to โ€˜18446744073709551615โ€™ [-Wsign-conversion]
  375 |   return Vec1<T>((a64 - b64) & ~T(0));
      |                  ~~~~~~~~~~~~^~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/scalar-inl.h:375:30: warning: conversion from โ€˜long unsigned intโ€™ to โ€˜intโ€™ may change value [-Wconversion]

Problem with SIMD SSE41

In file included from c:\msys1100\x86_64-w64-mingw32\include\hwy\highway.h:257,
                 from c:\msys1100\x86_64-w64-mingw32\include\lib\jxl\extras\codec_png.h:24,
                 from codec_png.cc:15:
c:\msys1100\x86_64-w64-mingw32\include\hwy\ops\x86_128-inl.h: In function 'size_t hwy::N_SSE4::StoreMaskBits(hwy::N_SSE4::Mask128<T, N>, uint8_t*)':
c:\msys1100\x86_64-w64-mingw32\include\hwy\ops\x86_128-inl.h:2583:3: error: there are no arguments to 'memcpy' that depend on a template parameter, so a declaration of 'memcpy' must be available [-fpermissive]
 2583 |   memcpy(p, &bits, kNumBytes);
      |   ^~~~~~
c:\msys1100\x86_64-w64-mingw32\include\hwy\ops\x86_128-inl.h:2583:3: note: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
In file included from c:\msys1100\x86_64-w64-mingw32\include\hwy\highway.h:257,
                 from c:\msys1100\x86_64-w64-mingw32\include\lib\jxl\extras\codec_pnm.h:24,
                 from codec_pnm.cc:15:
c:\msys1100\x86_64-w64-mingw32\include\hwy\ops\x86_128-inl.h: In function 'size_t hwy::N_SSE4::StoreMaskBits(hwy::N_SSE4::Mask128<T, N>, uint8_t*)':
c:\msys1100\x86_64-w64-mingw32\include\hwy\ops\x86_128-inl.h:2583:3: error: there are no arguments to 'memcpy' that depend on a template parameter, so a declaration of 'memcpy' must be available [-fpermissive]
 2583 |   memcpy(p, &bits, kNumBytes);
      |   ^~~~~~
c:\msys1100\x86_64-w64-mingw32\include\hwy\ops\x86_128-inl.h:2583:3: note: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)

API changes required for SVE

The SVE port is almost ready to compile and uncovered a few required API updates.

Because the same svbool_t is used for all lane types, some predicate ops require either:

  • the lane width to be encoded in the instruction (b## suffix in the intrinsic, e.g. svptrue_b8), or
  • having an existing predicate in canonical form (only the bit corresponding to the lowest byte in a lane may be set), e.g. svnot_b_z.

Because predicates are also sizeless and cannot be wrapped in a struct, we need an extra Simd<> tag argument for Not(mask), CountTrue, and AllTrue.

The plan is to add an overload with the new argument, and deprecate the prior overload. Please let us know if you have any concerns or ideas how better to go about this.

API changes for variable vectors

Highway was designed with an eye towards variable vectors, and porting to RVV is going fairly smoothly, but a few changes are required:

  • V VecFromMask(M) does not have enough information to identify V from M, which is a built-in type shared between several V (for example, both V=vuint32m1_t and vfloat32m1_t use M=vbool32_t). We can add VecFromDMask(D, M) to resolve this, and deprecate VecFromMask.
  • uint64_t BitsFromMask(M) no longer works because large vectors can have more than 64 lanes. This will be deprecated (use CountTrue instead).
  • SumsOfU8x8 is rather niche, and hard to emulate. Also proposed for deprecation.

Please let us know if you have any concerns about these proposals, or other suggestions.

A few questions about the library

Hi,
I am investigating how to integrate Highway into my image codec

I have a few questions:

  1. I have SIMD code (for x86 using intrinsics) sprinkled throughout my code base. Can I take just one simple SIMD routine and convert it to hwy leaving the rest as is?
  2. I set the -mavx2 GCC/clang compiler flag to enable AVX2, but for my Debian package, I had to disable this flag as it doesn't follow Debian convention for supporting non-avx2 enabled systems. How would this dual mode work with hwy ?
  3. I went through the docs, but I couldn't find a simple enough example. Suppose I had the following intrinsics code. How would I convert this to using HIGHWAY ?
#include <x86intrin.h>
#include "grk_includes"

namespace grk {

//
// some non-vectorized code
//


void mul4_vectorized( float* ptr )
{
__m128 f = _mm_loadu_ps( ptr );
f = _mm_mul_ps( f, f );
_mm_storeu_ps( ptr, f );
}

}

Thanks!
Aaron

Ramp up minimum CMake version to 2.8.12

In CMakeLists.txt.in minimal CMake version is set to 2.8.2.
Currently CMake gives a deprecation note:

CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 2.8.12 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.

Most popular distros have version >2.8.12 (CentOS seems to be the slowpoke, but even it has 2.8.12.2).

SIMD_ATTR transitivity

Quick reference should also say, that SIMD_ATTR should be transitively added to functions that call "inlined" functions with SIMD_ATTR, where "inlined" refer to any situation that leads embedding the function code into another function.

error : '__builtin_ia32_palignr128' needs target feature ssse3

Same clang+VS2019 as #13 but with 91e054a:

>------ Build started: Project: CMakeLists, Configuration: MinSizeRel ------
  [1/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\highway -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\highway\CMakeFiles\hwy_list_targets.dir\hwy\tests\list_targets.cc.obj /Fdthird_party\highway\CMakeFiles\hwy_list_targets.dir\ -c ..\..\..\third_party\highway\hwy\tests\list_targets.cc
  In file included from ..\..\..\third_party\highway\hwy\tests\list_targets.cc:20:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\targets.h(122,9): warning : Disabling AVX2/3 due to known issues with MSVC/32-bit builds [-W#pragma-messages]
  #pragma message("Disabling AVX2/3 due to known issues with MSVC/32-bit builds")
          ^
  1 warning generated.
  [2/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\cluster.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\cluster.c
  [3/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\googletest\googletest\include -I..\..\..\third_party\googletest\googletest -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W4 /GR  /MD /O1 /Ob1 /DNDEBUG -Wno-error /showIncludes /Fothird_party\googletest\googlemock\gtest\CMakeFiles\gtest_main.dir\src\gtest_main.cc.obj /Fdbin\gtest_main.pdb -c ..\..\..\third_party\googletest\googletest\src\gtest_main.cc
  [4/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\brotli_bit_stream.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\brotli_bit_stream.c
  [5/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\backward_references_hq.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\backward_references_hq.c
  [6/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlicommon-static.dir\c\common\transform.c.obj /Fdthird_party\brotli\CMakeFiles\brotlicommon-static.dir\brotlicommon-static.pdb -c ..\..\..\third_party\brotli\c\common\transform.c
  [7/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\compress_fragment.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\compress_fragment.c
  [8/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\compress_fragment_two_pass.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\compress_fragment_two_pass.c
  [9/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlicommon-static.dir\c\common\dictionary.c.obj /Fdthird_party\brotli\CMakeFiles\brotlicommon-static.dir\brotlicommon-static.pdb -c ..\..\..\third_party\brotli\c\common\dictionary.c
  [10/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\literal_cost.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\literal_cost.c
  [11/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\bit_cost.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\bit_cost.c
  [12/343] cmd.exe /C "cd . && C:\PROGRA~2\MICROS~2\2019\COMMUN~1\VC\Tools\MSVC\1428~1.293\bin\Hostx86\x64\lib.exe /nologo /machine:x64 /out:third_party\brotli\brotlicommon-static.lib third_party\brotli\CMakeFiles\brotlicommon-static.dir\c\common\dictionary.c.obj third_party\brotli\CMakeFiles\brotlicommon-static.dir\c\common\transform.c.obj  && cd ."
  [13/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\block_splitter.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\block_splitter.c
  [14/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\memory.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\memory.c
  [15/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\encoder_dict.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\encoder_dict.c
  [16/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\entropy_encode.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\entropy_encode.c
  [17/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\dictionary_hash.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\dictionary_hash.c
  [18/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\metablock.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\metablock.c
  [19/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlidec-static.dir\c\dec\huffman.c.obj /Fdthird_party\brotli\CMakeFiles\brotlidec-static.dir\brotlidec-static.pdb -c ..\..\..\third_party\brotli\c\dec\huffman.c
  [20/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlidec-static.dir\c\dec\bit_reader.c.obj /Fdthird_party\brotli\CMakeFiles\brotlidec-static.dir\brotlidec-static.pdb -c ..\..\..\third_party\brotli\c\dec\bit_reader.c
  [21/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlidec-static.dir\c\dec\state.c.obj /Fdthird_party\brotli\CMakeFiles\brotlidec-static.dir\brotlidec-static.pdb -c ..\..\..\third_party\brotli\c\dec\state.c
  [22/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\utf8_util.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\utf8_util.c
  [23/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\googletest\googlemock\include -I..\..\..\third_party\googletest\googlemock -I..\..\..\third_party\googletest\googletest\include -I..\..\..\third_party\googletest\googletest -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W4 /GR  /MD /O1 /Ob1 /DNDEBUG -Wno-error /showIncludes /Fothird_party\googletest\googlemock\CMakeFiles\gmock.dir\src\gmock-all.cc.obj /Fdbin\gmock.pdb -c ..\..\..\third_party\googletest\googlemock\src\gmock-all.cc
  [24/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\histogram.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\histogram.c
  [25/343] cmd.exe /C "cd . && "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E vs_link_exe --intdir=third_party\highway\CMakeFiles\hwy_list_targets.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100190~1.0\x86\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100190~1.0\x86\mt.exe --manifests  -- C:\PROGRA~1\LLVM\bin\lld-link.exe /nologo third_party\highway\CMakeFiles\hwy_list_targets.dir\hwy\tests\list_targets.cc.obj  /out:third_party\highway\hwy_list_targets.exe /implib:third_party\highway\hwy_list_targets.lib /pdb:third_party\highway\hwy_list_targets.pdb /version:0.0 /machine:x64 /INCREMENTAL:NO /subsystem:console  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cmd.exe /C "cd /D C:\Users\Kagami\Documents\GitHub\jpeg-xl\out\build\x64-Clang-Release\third_party\highway && C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -executionpolicy Bypass -file C:/Users/Kagami/Downloads/vcpkg-2020.11-1/scripts/buildsystems/msbuild/applocal.ps1 -targetBinary C:/Users/Kagami/Documents/GitHub/jpeg-xl/out/build/x64-Clang-Release/third_party/highway/hwy_list_targets.exe -installedDir C:/Users/Kagami/Downloads/vcpkg-2020.11-1/installed/x64-windows/bin -OutVariable out""
  [26/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\encode.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\encode.c
  [27/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\sjpeg\src -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc   /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\sjpeg\CMakeFiles\sjpeg.dir\src\fdct.cc.obj /Fdthird_party\sjpeg\CMakeFiles\sjpeg.dir\sjpeg.pdb -c ..\..\..\third_party\sjpeg\src\fdct.cc
  [28/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\static_dict.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\static_dict.c
  [29/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\sjpeg\src -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc   /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\sjpeg\CMakeFiles\sjpeg.dir\src\bit_writer.cc.obj /Fdthird_party\sjpeg\CMakeFiles\sjpeg.dir\sjpeg.pdb -c ..\..\..\third_party\sjpeg\src\bit_writer.cc
  [30/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlidec-static.dir\c\dec\decode.c.obj /Fdthird_party\brotli\CMakeFiles\brotlidec-static.dir\brotlidec-static.pdb -c ..\..\..\third_party\brotli\c\dec\decode.c
  [31/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\highway -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\highway\CMakeFiles\hwy_benchmark.dir\hwy\examples\benchmark.cc.obj /Fdthird_party\highway\CMakeFiles\hwy_benchmark.dir\ -c ..\..\..\third_party\highway\hwy\examples\benchmark.cc
  FAILED: third_party/highway/CMakeFiles/hwy_benchmark.dir/hwy/examples/benchmark.cc.obj 
  C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\highway -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\highway\CMakeFiles\hwy_benchmark.dir\hwy\examples\benchmark.cc.obj /Fdthird_party\highway\CMakeFiles\hwy_benchmark.dir\ -c ..\..\..\third_party\highway\hwy\examples\benchmark.cc
  In file included from ..\..\..\third_party\highway\hwy\examples\benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:22:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\targets.h(122,9): warning : Disabling AVX2/3 due to known issues with MSVC/32-bit builds [-W#pragma-messages]
  #pragma message("Disabling AVX2/3 due to known issues with MSVC/32-bit builds")
          ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(112,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(153,3): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(326,1): note: expanded from here
  "clang attribute push(__attribute__((target(\"sse2,ssse3,sse4.1\"))), apply_to = function)"
  ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(225,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(155,28): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                             ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(327,1): note: expanded from here
  "clang attribute pop"
  ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(25,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(153,3): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(328,1): note: expanded from here
  "clang attribute push(__attribute__((target(\"sse2,ssse3,sse4.1\"))), apply_to = function)"
  ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(185,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_DIAGNOSTICS(push)
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(85,33): note: expanded from macro 'HWY_DIAGNOSTICS'
  #define HWY_DIAGNOSTICS(tokens) HWY_PRAGMA(warning(tokens))
                                  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(329,1): note: expanded from here
  "warning(push)"
  ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(186,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_DIAGNOSTICS_OFF(disable : 4700, ignored "-Wuninitialized")
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(86,39): note: expanded from macro 'HWY_DIAGNOSTICS_OFF'
  #define HWY_DIAGNOSTICS_OFF(msc, gcc) HWY_DIAGNOSTICS(msc)
                                        ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(85,33): note: expanded from macro 'HWY_DIAGNOSTICS'
  #define HWY_DIAGNOSTICS(tokens) HWY_PRAGMA(warning(tokens))
                                  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(330,1): note: expanded from here
  "warning(disable : 4700)"
  ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(204,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_DIAGNOSTICS(pop)
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(85,33): note: expanded from macro 'HWY_DIAGNOSTICS'
  #define HWY_DIAGNOSTICS(tokens) HWY_PRAGMA(warning(tokens))
                                  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(331,1): note: expanded from here
  "warning(pop)"
  ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(2566,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(155,28): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                             ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(332,1): note: expanded from here
  "clang attribute pop"
  ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(246,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(153,3): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(333,1): note: expanded from here
  "clang attribute push(__attribute__((target(\"sse2,ssse3,sse4.1\"))), apply_to = function)"
  ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(300,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(155,28): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                             ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(334,1): note: expanded from here
  "clang attribute pop"
  ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\examples\benchmark.cc(29,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(153,3): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(335,1): note: expanded from here
  "clang attribute push(__attribute__((target(\"sse2,ssse3,sse4.1\"))), apply_to = function)"
  ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\examples\benchmark.cc(225,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(155,28): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                             ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(336,1): note: expanded from here
  "clang attribute pop"
  ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(1777,7): error : '__builtin_ia32_palignr128' needs target feature ssse3
        _mm_alignr_epi8(BitCast(d8, hi).raw, BitCast(d8, lo).raw, kBytes)};
        ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\tmmintrin.h(148,12): note: expanded from macro '_mm_alignr_epi8'
    (__m128i)__builtin_ia32_palignr128((__v16qi)(__m128i)(a), \
             ^
  12 warnings and 1 error generated.
  [32/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\highway -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\highway\CMakeFiles\hwy.dir\hwy\aligned_allocator.cc.obj /Fdthird_party\highway\CMakeFiles\hwy.dir\hwy.pdb -c ..\..\..\third_party\highway\hwy\aligned_allocator.cc
  [33/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\sjpeg\src -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc   /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\sjpeg\CMakeFiles\sjpeg.dir\src\enc.cc.obj /Fdthird_party\sjpeg\CMakeFiles\sjpeg.dir\sjpeg.pdb -c ..\..\..\third_party\sjpeg\src\enc.cc
  [34/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\highway -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\highway\CMakeFiles\hwy.dir\contrib\image\image.cc.obj /Fdthird_party\highway\CMakeFiles\hwy.dir\hwy.pdb -c ..\..\..\third_party\highway\contrib\image\image.cc
  In file included from ..\..\..\third_party\highway\contrib\image\image.cc:24:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:22:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\targets.h(122,9): warning : Disabling AVX2/3 due to known issues with MSVC/32-bit builds [-W#pragma-messages]
  #pragma message("Disabling AVX2/3 due to known issues with MSVC/32-bit builds")
          ^
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:24:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:25:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(112,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(153,3): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(17,1): note: expanded from here
  "clang attribute push(__attribute__((target(\"sse2,ssse3,sse4.1\"))), apply_to = function)"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:24:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:25:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(225,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(155,28): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                             ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(18,1): note: expanded from here
  "clang attribute pop"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:24:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:25:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(25,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(153,3): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(19,1): note: expanded from here
  "clang attribute push(__attribute__((target(\"sse2,ssse3,sse4.1\"))), apply_to = function)"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:24:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:25:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(185,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_DIAGNOSTICS(push)
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(85,33): note: expanded from macro 'HWY_DIAGNOSTICS'
  #define HWY_DIAGNOSTICS(tokens) HWY_PRAGMA(warning(tokens))
                                  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(20,1): note: expanded from here
  "warning(push)"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:24:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:25:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(186,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_DIAGNOSTICS_OFF(disable : 4700, ignored "-Wuninitialized")
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(86,39): note: expanded from macro 'HWY_DIAGNOSTICS_OFF'
  #define HWY_DIAGNOSTICS_OFF(msc, gcc) HWY_DIAGNOSTICS(msc)
                                        ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(85,33): note: expanded from macro 'HWY_DIAGNOSTICS'
  #define HWY_DIAGNOSTICS(tokens) HWY_PRAGMA(warning(tokens))
                                  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(21,1): note: expanded from here
  "warning(disable : 4700)"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:24:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:25:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(204,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_DIAGNOSTICS(pop)
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(85,33): note: expanded from macro 'HWY_DIAGNOSTICS'
  #define HWY_DIAGNOSTICS(tokens) HWY_PRAGMA(warning(tokens))
                                  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(22,1): note: expanded from here
  "warning(pop)"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:24:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:25:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(2566,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(155,28): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                             ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(23,1): note: expanded from here
  "clang attribute pop"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:24:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:25:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(246,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(153,3): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(24,1): note: expanded from here
  "clang attribute push(__attribute__((target(\"sse2,ssse3,sse4.1\"))), apply_to = function)"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:24:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:25:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(300,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(155,28): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                             ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(25,1): note: expanded from here
  "clang attribute pop"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:24:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\contrib\image\image.cc(26,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(153,3): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(26,1): note: expanded from here
  "clang attribute push(__attribute__((target(\"sse2,ssse3,sse4.1\"))), apply_to = function)"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image.cc:24:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\contrib\image\image.cc(34,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(155,28): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                             ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(27,1): note: expanded from here
  "clang attribute pop"
  ^
  12 warnings generated.
  [35/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\highway -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\highway\CMakeFiles\hwy.dir\hwy\targets.cc.obj /Fdthird_party\highway\CMakeFiles\hwy.dir\hwy.pdb -c ..\..\..\third_party\highway\hwy\targets.cc
  In file included from ..\..\..\third_party\highway\hwy\targets.cc:15:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\targets.h(122,9): warning : Disabling AVX2/3 due to known issues with MSVC/32-bit builds [-W#pragma-messages]
  #pragma message("Disabling AVX2/3 due to known issues with MSVC/32-bit builds")
          ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\targets.cc(156,1): warning : function declared 'noreturn' should not return [-Winvalid-noreturn]
  }
  ^
  2 warnings generated.
  [36/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\backward_references.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\backward_references.c
  [37/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\highway -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\highway\CMakeFiles\hwy_benchmark.dir\hwy\nanobenchmark.cc.obj /Fdthird_party\highway\CMakeFiles\hwy_benchmark.dir\ -c ..\..\..\third_party\highway\hwy\nanobenchmark.cc
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(210,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(212,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(214,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(216,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(243,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(246,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(248,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(273,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(275,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(277,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(279,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(298,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(301,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(303,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
  14 warnings generated.
  [38/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\highway -I..\..\..\third_party\googletest\googletest\include -I..\..\..\third_party\googletest\googletest -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\highway\CMakeFiles\image_test.dir\contrib\image\image_test.cc.obj /Fdthird_party\highway\CMakeFiles\image_test.dir\ -c ..\..\..\third_party\highway\contrib\image\image_test.cc
  In file included from ..\..\..\third_party\highway\contrib\image\image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:22:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\targets.h(122,9): warning : Disabling AVX2/3 due to known issues with MSVC/32-bit builds [-W#pragma-messages]
  #pragma message("Disabling AVX2/3 due to known issues with MSVC/32-bit builds")
          ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(112,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(153,3): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(69,1): note: expanded from here
  "clang attribute push(__attribute__((target(\"sse2,ssse3,sse4.1\"))), apply_to = function)"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(225,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(155,28): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                             ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(70,1): note: expanded from here
  "clang attribute pop"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(25,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(153,3): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(71,1): note: expanded from here
  "clang attribute push(__attribute__((target(\"sse2,ssse3,sse4.1\"))), apply_to = function)"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(185,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_DIAGNOSTICS(push)
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(85,33): note: expanded from macro 'HWY_DIAGNOSTICS'
  #define HWY_DIAGNOSTICS(tokens) HWY_PRAGMA(warning(tokens))
                                  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(72,1): note: expanded from here
  "warning(push)"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(186,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_DIAGNOSTICS_OFF(disable : 4700, ignored "-Wuninitialized")
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(86,39): note: expanded from macro 'HWY_DIAGNOSTICS_OFF'
  #define HWY_DIAGNOSTICS_OFF(msc, gcc) HWY_DIAGNOSTICS(msc)
                                        ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(85,33): note: expanded from macro 'HWY_DIAGNOSTICS'
  #define HWY_DIAGNOSTICS(tokens) HWY_PRAGMA(warning(tokens))
                                  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(73,1): note: expanded from here
  "warning(disable : 4700)"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(204,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_DIAGNOSTICS(pop)
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(85,33): note: expanded from macro 'HWY_DIAGNOSTICS'
  #define HWY_DIAGNOSTICS(tokens) HWY_PRAGMA(warning(tokens))
                                  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(74,1): note: expanded from here
  "warning(pop)"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(2566,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(155,28): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                             ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(75,1): note: expanded from here
  "clang attribute pop"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(246,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(153,3): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(76,1): note: expanded from here
  "clang attribute push(__attribute__((target(\"sse2,ssse3,sse4.1\"))), apply_to = function)"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(300,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(155,28): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                             ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(77,1): note: expanded from here
  "clang attribute pop"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:33:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\tests\test_util-inl.h(274,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(153,3): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(77,1): note: expanded from here
  "clang attribute push(__attribute__((target(\"sse2,ssse3,sse4.1\"))), apply_to = function)"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:33:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\tests\test_util-inl.h(452,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(155,28): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                             ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(78,1): note: expanded from here
  "clang attribute pop"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\contrib\image\image_test.cc(35,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(153,3): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(79,1): note: expanded from here
  "clang attribute push(__attribute__((target(\"sse2,ssse3,sse4.1\"))), apply_to = function)"
  ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\contrib\image\image_test.cc(144,1): warning : unknown pragma ignored [-Wunknown-pragmas]
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(155,28): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                             ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(84,37): note: expanded from macro 'HWY_PRAGMA'
  #define HWY_PRAGMA(tokens) __pragma(#tokens)
                                      ^
  <scratch space>(88,1): note: expanded from here
  "clang attribute pop"
  ^
  14 warnings generated.
  [39/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\googletest\googlemock\include -I..\..\..\third_party\googletest\googlemock -I..\..\..\third_party\googletest\googletest\include -I..\..\..\third_party\googletest\googletest -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W4 /GR  /MD /O1 /Ob1 /DNDEBUG -Wno-error /showIncludes /Fothird_party\googletest\googlemock\CMakeFiles\gmock.dir\__\googletest\src\gtest-all.cc.obj /Fdbin\gmock.pdb -c ..\..\..\third_party\googletest\googletest\src\gtest-all.cc
  [40/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\googletest\googletest\include -I..\..\..\third_party\googletest\googletest -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W4 /GR  /MD /O1 /Ob1 /DNDEBUG -Wno-error /showIncludes /Fothird_party\googletest\googlemock\gtest\CMakeFiles\gtest.dir\src\gtest-all.cc.obj /Fdbin\gtest.pdb -c ..\..\..\third_party\googletest\googletest\src\gtest-all.cc
  ninja: build stopped: subcommand failed.

Build failed.

error: unknown type name 'clang'

I'm building highway as a part of JPEG XL library with clang on VS2019 (per the guide) and I'm getting this error:

>------ Build started: Project: CMakeLists, Configuration: MinSizeRel ------
  [1/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\highway -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\highway\CMakeFiles\hwy_list_targets.dir\hwy\tests\list_targets.cc.obj /Fdthird_party\highway\CMakeFiles\hwy_list_targets.dir\ -c ..\..\..\third_party\highway\hwy\tests\list_targets.cc
  In file included from ..\..\..\third_party\highway\hwy\tests\list_targets.cc:20:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\targets.h(122,9): warning : Disabling AVX2/3 due to known issues with MSVC/32-bit builds [-W#pragma-messages]
  #pragma message("Disabling AVX2/3 due to known issues with MSVC/32-bit builds")
          ^
  1 warning generated.
  [2/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\cluster.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\cluster.c
  [3/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\block_splitter.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\block_splitter.c
  [4/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\googletest\googletest\include -I..\..\..\third_party\googletest\googletest -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W4 /GR  /MD /O1 /Ob1 /DNDEBUG -Wno-error /showIncludes /Fothird_party\googletest\googlemock\gtest\CMakeFiles\gtest_main.dir\src\gtest_main.cc.obj /Fdbin\gtest_main.pdb -c ..\..\..\third_party\googletest\googletest\src\gtest_main.cc
  [5/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlicommon-static.dir\c\common\transform.c.obj /Fdthird_party\brotli\CMakeFiles\brotlicommon-static.dir\brotlicommon-static.pdb -c ..\..\..\third_party\brotli\c\common\transform.c
  [6/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\backward_references_hq.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\backward_references_hq.c
  [7/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\compress_fragment_two_pass.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\compress_fragment_two_pass.c
  [8/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\compress_fragment.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\compress_fragment.c
  [9/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\literal_cost.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\literal_cost.c
  [10/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlicommon-static.dir\c\common\dictionary.c.obj /Fdthird_party\brotli\CMakeFiles\brotlicommon-static.dir\brotlicommon-static.pdb -c ..\..\..\third_party\brotli\c\common\dictionary.c
  [11/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\entropy_encode.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\entropy_encode.c
  [12/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\bit_cost.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\bit_cost.c
  [13/343] cmd.exe /C "cd . && C:\PROGRA~2\MICROS~2\2019\COMMUN~1\VC\Tools\MSVC\1428~1.293\bin\Hostx86\x64\lib.exe /nologo /machine:x64 /out:third_party\brotli\brotlicommon-static.lib third_party\brotli\CMakeFiles\brotlicommon-static.dir\c\common\dictionary.c.obj third_party\brotli\CMakeFiles\brotlicommon-static.dir\c\common\transform.c.obj  && cd ."
  [14/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\brotli_bit_stream.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\brotli_bit_stream.c
  [15/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\memory.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\memory.c
  [16/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\dictionary_hash.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\dictionary_hash.c
  [17/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\histogram.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\histogram.c
  [18/343] cmd.exe /C "cd . && "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E vs_link_exe --intdir=third_party\highway\CMakeFiles\hwy_list_targets.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100190~1.0\x86\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100190~1.0\x86\mt.exe --manifests  -- C:\PROGRA~1\LLVM\bin\lld-link.exe /nologo third_party\highway\CMakeFiles\hwy_list_targets.dir\hwy\tests\list_targets.cc.obj  /out:third_party\highway\hwy_list_targets.exe /implib:third_party\highway\hwy_list_targets.lib /pdb:third_party\highway\hwy_list_targets.pdb /version:0.0 /machine:x64 /INCREMENTAL:NO /subsystem:console  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cmd.exe /C "cd /D C:\Users\Kagami\Documents\GitHub\jpeg-xl\out\build\x64-Clang-Release\third_party\highway && C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -executionpolicy Bypass -file C:/Users/Kagami/Downloads/vcpkg-2020.11-1/scripts/buildsystems/msbuild/applocal.ps1 -targetBinary C:/Users/Kagami/Documents/GitHub/jpeg-xl/out/build/x64-Clang-Release/third_party/highway/hwy_list_targets.exe -installedDir C:/Users/Kagami/Downloads/vcpkg-2020.11-1/installed/x64-windows/bin -OutVariable out""
  [19/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\utf8_util.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\utf8_util.c
  [20/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlidec-static.dir\c\dec\state.c.obj /Fdthird_party\brotli\CMakeFiles\brotlidec-static.dir\brotlidec-static.pdb -c ..\..\..\third_party\brotli\c\dec\state.c
  [21/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\encoder_dict.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\encoder_dict.c
  [22/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\highway -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\highway\CMakeFiles\hwy_benchmark.dir\hwy\examples\benchmark.cc.obj /Fdthird_party\highway\CMakeFiles\hwy_benchmark.dir\ -c ..\..\..\third_party\highway\hwy\examples\benchmark.cc
  FAILED: third_party/highway/CMakeFiles/hwy_benchmark.dir/hwy/examples/benchmark.cc.obj 
  C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\highway -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\highway\CMakeFiles\hwy_benchmark.dir\hwy\examples\benchmark.cc.obj /Fdthird_party\highway\CMakeFiles\hwy_benchmark.dir\ -c ..\..\..\third_party\highway\hwy\examples\benchmark.cc
  In file included from ..\..\..\third_party\highway\hwy\examples\benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:22:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\targets.h(122,9): warning : Disabling AVX2/3 due to known issues with MSVC/32-bit builds [-W#pragma-messages]
  #pragma message("Disabling AVX2/3 due to known issues with MSVC/32-bit builds")
          ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(112,1): error : unknown type name 'clang'
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,14): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
               ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(112,1): error : expected ')'
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,30): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
                               ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(112,1): note: to match this '('
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,13): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
              ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(112,1): error : expected function body after function declarator
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(216,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    static_assert(true, "For requiring trailing semicolon")
    ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(225,1): error : unknown type name 'clang'
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,39): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                        ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(225,1): error : expected ')'
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,55): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                                        ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(225,1): note: to match this '('
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,38): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                       ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(225,1): error : expected function body after function declarator
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(228,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    static_assert(true, "For requiring trailing semicolon")
    ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(25,1): error : unknown type name 'clang'
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,14): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
               ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(25,1): error : expected ')'
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,30): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
                               ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(25,1): note: to match this '('
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,13): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
              ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(25,1): error : expected function body after function declarator
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(216,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    static_assert(true, "For requiring trailing semicolon")
    ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(2566,1): error : unknown type name 'clang'
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,39): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                        ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(2566,1): error : expected ')'
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,55): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                                        ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(2566,1): note: to match this '('
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,38): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                       ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(2566,1): error : expected function body after function declarator
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(228,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    static_assert(true, "For requiring trailing semicolon")
    ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(246,1): error : unknown type name 'clang'
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,14): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
               ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(246,1): error : expected ')'
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,30): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
                               ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(246,1): note: to match this '('
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,13): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
              ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(246,1): error : expected function body after function declarator
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(216,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    static_assert(true, "For requiring trailing semicolon")
    ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(300,1): error : unknown type name 'clang'
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,39): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                        ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(300,1): error : expected ')'
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,55): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                                        ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(300,1): note: to match this '('
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,38): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                       ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:27:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(300,1): error : expected function body after function declarator
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(228,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    static_assert(true, "For requiring trailing semicolon")
    ^
  In file included from ..\..\..\third_party\highway\hwy/examples/benchmark.cc:17:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\examples\benchmark.cc(29,1): error : unknown type name 'clang'
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,14): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
               ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\out\build\x64-Clang-Release\EXEC : fatal error : too many errors emitted, stopping now [-ferror-limit=]
  1 warning and 20 errors generated.
  [23/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\encode.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\encode.c
  [24/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\highway -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\highway\CMakeFiles\hwy.dir\hwy\targets.cc.obj /Fdthird_party\highway\CMakeFiles\hwy.dir\hwy.pdb -c ..\..\..\third_party\highway\hwy\targets.cc
  In file included from ..\..\..\third_party\highway\hwy\targets.cc:15:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\targets.h(122,9): warning : Disabling AVX2/3 due to known issues with MSVC/32-bit builds [-W#pragma-messages]
  #pragma message("Disabling AVX2/3 due to known issues with MSVC/32-bit builds")
          ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\targets.cc(156,1): warning : function declared 'noreturn' should not return [-Winvalid-noreturn]
  }
  ^
  2 warnings generated.
  [25/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\metablock.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\metablock.c
  [26/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\googletest\googlemock\include -I..\..\..\third_party\googletest\googlemock -I..\..\..\third_party\googletest\googletest\include -I..\..\..\third_party\googletest\googletest -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W4 /GR  /MD /O1 /Ob1 /DNDEBUG -Wno-error /showIncludes /Fothird_party\googletest\googlemock\CMakeFiles\gmock.dir\src\gmock-all.cc.obj /Fdbin\gmock.pdb -c ..\..\..\third_party\googletest\googlemock\src\gmock-all.cc
  [27/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\highway -I..\..\..\third_party\googletest\googletest\include -I..\..\..\third_party\googletest\googletest -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\highway\CMakeFiles\image_test.dir\contrib\image\image_test.cc.obj /Fdthird_party\highway\CMakeFiles\image_test.dir\ -c ..\..\..\third_party\highway\contrib\image\image_test.cc
  FAILED: third_party/highway/CMakeFiles/image_test.dir/contrib/image/image_test.cc.obj 
  C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\highway -I..\..\..\third_party\googletest\googletest\include -I..\..\..\third_party\googletest\googletest -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\highway\CMakeFiles\image_test.dir\contrib\image\image_test.cc.obj /Fdthird_party\highway\CMakeFiles\image_test.dir\ -c ..\..\..\third_party\highway\contrib\image\image_test.cc
  In file included from ..\..\..\third_party\highway\contrib\image\image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:22:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\targets.h(122,9): warning : Disabling AVX2/3 due to known issues with MSVC/32-bit builds [-W#pragma-messages]
  #pragma message("Disabling AVX2/3 due to known issues with MSVC/32-bit builds")
          ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(112,1): error : unknown type name 'clang'
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,14): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
               ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(112,1): error : expected ')'
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,30): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
                               ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(112,1): note: to match this '('
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,13): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
              ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(112,1): error : expected function body after function declarator
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(216,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    static_assert(true, "For requiring trailing semicolon")
    ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(225,1): error : unknown type name 'clang'
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,39): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                        ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(225,1): error : expected ')'
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,55): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                                        ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(225,1): note: to match this '('
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,38): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                       ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
  In file included from ..\..\..\third_party\highway\hwy/ops/x86_128-inl.h:23:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\shared-inl.h(225,1): error : expected function body after function declarator
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(228,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    static_assert(true, "For requiring trailing semicolon")
    ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(25,1): error : unknown type name 'clang'
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,14): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
               ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(25,1): error : expected ')'
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,30): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
                               ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(25,1): note: to match this '('
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,13): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
              ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(25,1): error : expected function body after function declarator
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(216,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    static_assert(true, "For requiring trailing semicolon")
    ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(2566,1): error : unknown type name 'clang'
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,39): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                        ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(2566,1): error : expected ')'
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,55): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                                        ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(2566,1): note: to match this '('
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,38): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                       ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
  In file included from ..\..\..\third_party\highway\hwy/highway.h:229:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\x86_128-inl.h(2566,1): error : expected function body after function declarator
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(228,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    static_assert(true, "For requiring trailing semicolon")
    ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(246,1): error : unknown type name 'clang'
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,14): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
               ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(246,1): error : expected ')'
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,30): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
                               ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(246,1): note: to match this '('
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,13): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
              ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(246,1): error : expected function body after function declarator
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(216,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    static_assert(true, "For requiring trailing semicolon")
    ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(300,1): error : unknown type name 'clang'
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,39): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                        ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(300,1): error : expected ')'
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,55): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                                        ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(300,1): note: to match this '('
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(227,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    HWY_POP_ATTRIBUTES          \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(154,38): note: expanded from macro 'HWY_POP_ATTRIBUTES'
  #define HWY_POP_ATTRIBUTES HWY_PRAGMA(clang attribute pop)
                                       ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:32:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\highway.h(300,1): error : expected function body after function declarator
  HWY_AFTER_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(228,3): note: expanded from macro 'HWY_AFTER_NAMESPACE'
    static_assert(true, "For requiring trailing semicolon")
    ^
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:23:
  In file included from ..\..\..\third_party\highway\hwy/foreach_target.h:80:
  In file included from ..\..\..\third_party\highway\contrib/image/image_test.cc:33:
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\tests\test_util-inl.h(274,1): error : unknown type name 'clang'
  HWY_BEFORE_NAMESPACE();
  ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\ops\set_macros-inl.h(215,3): note: expanded from macro 'HWY_BEFORE_NAMESPACE'
    HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
    ^
  C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\base.h(152,14): note: expanded from macro 'HWY_PUSH_ATTRIBUTES'
    HWY_PRAGMA(clang attribute push(__attribute__((target(targets_str))), \
               ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\out\build\x64-Clang-Release\EXEC : fatal error : too many errors emitted, stopping now [-ferror-limit=]
  1 warning and 20 errors generated.
  [28/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\highway -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\highway\CMakeFiles\hwy.dir\hwy\nanobenchmark.cc.obj /Fdthird_party\highway\CMakeFiles\hwy.dir\hwy.pdb -c ..\..\..\third_party\highway\hwy\nanobenchmark.cc
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(210,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(212,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(214,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(216,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(243,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(246,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(248,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(273,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(275,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(277,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(279,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(298,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(301,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
C:\Users\Kagami\Documents\GitHub\jpeg-xl\third_party\highway\hwy\nanobenchmark.cc(303,3): warning : '_ReadWriteBarrier' is deprecated: use other intrinsics or C++11 atomics instead [-Wdeprecated-declarations]
    _ReadWriteBarrier();
    ^
  C:\PROGRA~1\LLVM\lib\clang\11.0.0\include\intrin.h(176,16): note: '_ReadWriteBarrier' has been explicitly marked deprecated here
  __attribute__((__deprecated__("use other intrinsics or C++11 atomics instead")))
                 ^
  14 warnings generated.
  [29/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo  -I..\..\..\third_party\brotli\c\include -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W3 /MD /O1 /Ob1 /DNDEBUG /showIncludes /Fothird_party\brotli\CMakeFiles\brotlienc-static.dir\c\enc\backward_references.c.obj /Fdthird_party\brotli\CMakeFiles\brotlienc-static.dir\brotlienc-static.pdb -c ..\..\..\third_party\brotli\c\enc\backward_references.c
  [30/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\googletest\googlemock\include -I..\..\..\third_party\googletest\googlemock -I..\..\..\third_party\googletest\googletest\include -I..\..\..\third_party\googletest\googletest -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W4 /GR  /MD /O1 /Ob1 /DNDEBUG -Wno-error /showIncludes /Fothird_party\googletest\googlemock\CMakeFiles\gmock.dir\__\googletest\src\gtest-all.cc.obj /Fdbin\gmock.pdb -c ..\..\..\third_party\googletest\googletest\src\gtest-all.cc
  [31/343] C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP  -I..\..\..\third_party\googletest\googletest\include -I..\..\..\third_party\googletest\googletest -m64 -fdiagnostics-absolute-paths  /DWIN32 /D_WINDOWS /W4 /GR  /MD /O1 /Ob1 /DNDEBUG -Wno-error /showIncludes /Fothird_party\googletest\googlemock\gtest\CMakeFiles\gtest.dir\src\gtest-all.cc.obj /Fdbin\gtest.pdb -c ..\..\..\third_party\googletest\googletest\src\gtest-all.cc
  ninja: build stopped: subcommand failed.

Build failed.

I'm using clang 11, VS2019 16.8.3, and the latest commit 07b3dc1 to fix the signbit() failure. Could you help? Thanks!

v0.12.2 doesn't build with gcc-8 on Debian buster (stable)

Debian buster is the current stable debian version and ships with gcc-8. The latest version of highway doesn't compile there. There's a similar error on Ubuntu 18.04.

Steps to reproduce:

docker run -it --rm -v `pwd`:/hwy -w /hwy debian:buster /bin/bash

apt update && apt install build-essential git cmake
mkdir build-buster
cd build-buster
cmake ..
make -j

(note "git" is needed to download googltest during the build step).

Result:

during RTL pass: expand
In file included from /hwy/hwy/foreach_target.h:80,
                 from /hwy/hwy/tests/logical_test.cc:23:
/hwy/hwy/tests/logical_test.cc: In member function 'void hwy::N_SSE4::TestFirstN::operator()(T, D) [with T = long unsigned int; D = hwy::N_SSE4::Simd<long unsigned int, 1>]':
/hwy/hwy/tests/logical_test.cc:177:27: internal compiler error: Segmentation fault
       const auto mask = Eq(Load(d, mask_lanes.get()), Zero(d));
                         ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-8/README.Bugs> for instructions.
make[2]: *** [CMakeFiles/logical_test.dir/build.make:63: CMakeFiles/logical_test.dir/hwy/tests/logical_test.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:156: CMakeFiles/logical_test.dir/all] Error 2

another batch of sign conversion warnings

In file included from /home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:43,
                 from /home/aaron/src/grok/src/lib/jp2/highway/hwy/highway.h:262,
                 from /home/aaron/src/grok/src/lib/jp2/transform/WaveletReverse.cpp:30,
                 from /home/aaron/src/grok/src/lib/jp2/highway/hwy/foreach_target.h:102,
                 from /home/aaron/src/grok/src/lib/jp2/transform/WaveletReverse.cpp:29:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h: In function โ€˜void hwy::N_AVX3::ScatterOffset(hwy::N_AVX3::Vec256<T>, hwy::N_AVX3::Full256<T>, T*, hwy::N_AVX3::Vec256<FromT>) [with T = float; Offset = int; hwy::N_AVX3::Full256<T> = hwy::N_AVX3::Simd<float, 8>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h:1450:3: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1450 |   _mm256_i32scatter_ps(base, offset.raw, v.raw, 1);
      |   ^~~~~~~~~~~~~~~~~~~~
In file included from /home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:43,
                 from /home/aaron/src/grok/src/lib/jp2/highway/hwy/highway.h:262,
                 from /home/aaron/src/grok/src/lib/jp2/transform/WaveletReverse.cpp:30,
                 from /home/aaron/src/grok/src/lib/jp2/highway/hwy/foreach_target.h:102,
                 from /home/aaron/src/grok/src/lib/jp2/transform/WaveletReverse.cpp:29:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h: In function โ€˜void hwy::N_AVX3::ScatterIndex(hwy::N_AVX3::Vec256<T>, hwy::N_AVX3::Full256<T>, T*, hwy::N_AVX3::Vec256<FromT>) [with T = float; Index = int; hwy::N_AVX3::Full256<T> = hwy::N_AVX3::Simd<float, 8>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h:1456:3: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1456 |   _mm256_i32scatter_ps(base, index.raw, v.raw, 4);
      |   ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h: In function โ€˜void hwy::N_AVX3::ScatterOffset(hwy::N_AVX3::Vec256<T>, hwy::N_AVX3::Full256<T>, T*, hwy::N_AVX3::Vec256<FromT>) [with T = double; Offset = long int; hwy::N_AVX3::Full256<T> = hwy::N_AVX3::Simd<double, 4>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h:1464:3: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1464 |   _mm256_i64scatter_pd(base, offset.raw, v.raw, 1);
      |   ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h: In function โ€˜void hwy::N_AVX3::ScatterIndex(hwy::N_AVX3::Vec256<T>, hwy::N_AVX3::Full256<T>, T*, hwy::N_AVX3::Vec256<FromT>) [with T = double; Index = long int; hwy::N_AVX3::Full256<T> = hwy::N_AVX3::Simd<double, 4>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h:1471:3: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1471 |   _mm256_i64scatter_pd(base, index.raw, v.raw, 8);
      |   ^~~~~~~~~~~~~~~~~~~~
In file included from /home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:43,
                 from /home/aaron/src/grok/src/lib/jp2/highway/hwy/highway.h:262,
                 from /home/aaron/src/grok/src/lib/jp2/point_transform/mct.cpp:27,
                 from /home/aaron/src/grok/src/lib/jp2/highway/hwy/foreach_target.h:102,
                 from /home/aaron/src/grok/src/lib/jp2/point_transform/mct.cpp:26:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h: In function โ€˜void hwy::N_AVX3::ScatterOffset(hwy::N_AVX3::Vec256<T>, hwy::N_AVX3::Full256<T>, T*, hwy::N_AVX3::Vec256<FromT>) [with T = float; Offset = int; hwy::N_AVX3::Full256<T> = hwy::N_AVX3::Simd<float, 8>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h:1450:3: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1450 |   _mm256_i32scatter_ps(base, offset.raw, v.raw, 1);
      |   ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h: In function โ€˜void hwy::N_AVX3::ScatterIndex(hwy::N_AVX3::Vec256<T>, hwy::N_AVX3::Full256<T>, T*, hwy::N_AVX3::Vec256<FromT>) [with T = float; Index = int; hwy::N_AVX3::Full256<T> = hwy::N_AVX3::Simd<float, 8>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h:1456:3: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1456 |   _mm256_i32scatter_ps(base, index.raw, v.raw, 4);
      |   ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h: In function โ€˜void hwy::N_AVX3::ScatterOffset(hwy::N_AVX3::Vec256<T>, hwy::N_AVX3::Full256<T>, T*, hwy::N_AVX3::Vec256<FromT>) [with T = double; Offset = long int; hwy::N_AVX3::Full256<T> = hwy::N_AVX3::Simd<double, 4>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h:1464:3: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1464 |   _mm256_i64scatter_pd(base, offset.raw, v.raw, 1);
      |   ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h: In function โ€˜void hwy::N_AVX3::ScatterIndex(hwy::N_AVX3::Vec256<T>, hwy::N_AVX3::Full256<T>, T*, hwy::N_AVX3::Vec256<FromT>) [with T = double; Index = long int; hwy::N_AVX3::Full256<T> = hwy::N_AVX3::Simd<double, 4>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_256-inl.h:1471:3: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1471 |   _mm256_i64scatter_pd(base, index.raw, v.raw, 8);
      |   ^~~~~~~~~~~~~~~~~~~~
In file included from /home/aaron/src/grok/src/lib/jp2/highway/hwy/highway.h:262,
                 from /home/aaron/src/grok/src/lib/jp2/transform/WaveletReverse.cpp:30,
                 from /home/aaron/src/grok/src/lib/jp2/highway/hwy/foreach_target.h:102,
                 from /home/aaron/src/grok/src/lib/jp2/transform/WaveletReverse.cpp:29:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<float> hwy::N_AVX3::Round(hwy::N_AVX3::Vec512<float>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1119:24: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1119 |   return Vec512<float>{_mm512_roundscale_ps(
      |                        ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<double> hwy::N_AVX3::Round(hwy::N_AVX3::Vec512<double>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1123:25: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1123 |   return Vec512<double>{_mm512_roundscale_pd(
      |                         ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<float> hwy::N_AVX3::Trunc(hwy::N_AVX3::Vec512<float>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1130:7: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1130 |       _mm512_roundscale_ps(v.raw, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC)};
      |       ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<double> hwy::N_AVX3::Trunc(hwy::N_AVX3::Vec512<double>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1134:7: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1134 |       _mm512_roundscale_pd(v.raw, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC)};
      |       ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<float> hwy::N_AVX3::Ceil(hwy::N_AVX3::Vec512<float>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1140:7: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1140 |       _mm512_roundscale_ps(v.raw, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC)};
      |       ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<double> hwy::N_AVX3::Ceil(hwy::N_AVX3::Vec512<double>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1144:7: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1144 |       _mm512_roundscale_pd(v.raw, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC)};
      |       ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<float> hwy::N_AVX3::Floor(hwy::N_AVX3::Vec512<float>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1150:7: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1150 |       _mm512_roundscale_ps(v.raw, _MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC)};
      |       ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<double> hwy::N_AVX3::Floor(hwy::N_AVX3::Vec512<double>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1154:7: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1154 |       _mm512_roundscale_pd(v.raw, _MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC)};
      |       ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜void hwy::N_AVX3::ScatterOffset(hwy::N_AVX3::Vec512<T>, hwy::N_AVX3::Full512<T>, T*, hwy::N_AVX3::Vec512<FromT>) [with T = float; Offset = int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<float, 16>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1798:3: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1798 |   _mm512_i32scatter_ps(base, offset.raw, v.raw, 1);
      |   ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜void hwy::N_AVX3::ScatterIndex(hwy::N_AVX3::Vec512<T>, hwy::N_AVX3::Full512<T>, T*, hwy::N_AVX3::Vec512<FromT>) [with T = float; Index = int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<float, 16>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1804:3: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1804 |   _mm512_i32scatter_ps(base, index.raw, v.raw, 4);
      |   ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜void hwy::N_AVX3::ScatterOffset(hwy::N_AVX3::Vec512<T>, hwy::N_AVX3::Full512<T>, T*, hwy::N_AVX3::Vec512<FromT>) [with T = double; Offset = long int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<double, 8>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1812:3: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1812 |   _mm512_i64scatter_pd(base, offset.raw, v.raw, 1);
      |   ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜void hwy::N_AVX3::ScatterIndex(hwy::N_AVX3::Vec512<T>, hwy::N_AVX3::Full512<T>, T*, hwy::N_AVX3::Vec512<FromT>) [with T = double; Index = long int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<double, 8>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1819:3: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1819 |   _mm512_i64scatter_pd(base, index.raw, v.raw, 8);
      |   ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<T> hwy::N_AVX3::GatherOffset(hwy::N_AVX3::Full512<T>, const T*, hwy::N_AVX3::Vec512<FromT>) [with T = float; Offset = int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<float, 16>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1871:24: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1871 |   return Vec512<float>{_mm512_i32gather_ps(offset.raw, base, 1)};
      |                        ^~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<T> hwy::N_AVX3::GatherIndex(hwy::N_AVX3::Full512<T>, const T*, hwy::N_AVX3::Vec512<FromT>) [with T = float; Index = int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<float, 16>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1877:24: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1877 |   return Vec512<float>{_mm512_i32gather_ps(index.raw, base, 4)};
      |                        ^~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<T> hwy::N_AVX3::GatherOffset(hwy::N_AVX3::Full512<T>, const T*, hwy::N_AVX3::Vec512<FromT>) [with T = double; Offset = long int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<double, 8>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1884:25: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1884 |   return Vec512<double>{_mm512_i64gather_pd(offset.raw, base, 1)};
      |                         ^~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<T> hwy::N_AVX3::GatherIndex(hwy::N_AVX3::Full512<T>, const T*, hwy::N_AVX3::Vec512<FromT>) [with T = double; Index = long int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<double, 8>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1890:25: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1890 |   return Vec512<double>{_mm512_i64gather_pd(index.raw, base, 8)};
      |                         ^~~~~~~~~~~~~~~~~~~
In file included from /home/aaron/src/grok/src/lib/jp2/highway/hwy/highway.h:262,
                 from /home/aaron/src/grok/src/lib/jp2/point_transform/mct.cpp:27,
                 from /home/aaron/src/grok/src/lib/jp2/highway/hwy/foreach_target.h:102,
                 from /home/aaron/src/grok/src/lib/jp2/point_transform/mct.cpp:26:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<float> hwy::N_AVX3::Round(hwy::N_AVX3::Vec512<float>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1119:24: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1119 |   return Vec512<float>{_mm512_roundscale_ps(
      |                        ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<double> hwy::N_AVX3::Round(hwy::N_AVX3::Vec512<double>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1123:25: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1123 |   return Vec512<double>{_mm512_roundscale_pd(
      |                         ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<float> hwy::N_AVX3::Trunc(hwy::N_AVX3::Vec512<float>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1130:7: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1130 |       _mm512_roundscale_ps(v.raw, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC)};
      |       ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<double> hwy::N_AVX3::Trunc(hwy::N_AVX3::Vec512<double>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1134:7: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1134 |       _mm512_roundscale_pd(v.raw, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC)};
      |       ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<float> hwy::N_AVX3::Ceil(hwy::N_AVX3::Vec512<float>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1140:7: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1140 |       _mm512_roundscale_ps(v.raw, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC)};
      |       ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<double> hwy::N_AVX3::Ceil(hwy::N_AVX3::Vec512<double>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1144:7: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1144 |       _mm512_roundscale_pd(v.raw, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC)};
      |       ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<float> hwy::N_AVX3::Floor(hwy::N_AVX3::Vec512<float>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1150:7: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1150 |       _mm512_roundscale_ps(v.raw, _MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC)};
      |       ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec256<hwy::float16_t> hwy::N_AVX3::DemoteTo(hwy::N_AVX3::Full256<hwy::float16_t>, hwy::N_AVX3::Vec512<float>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:2583:28: warning: unsigned conversion from โ€˜intโ€™ to โ€˜short unsigned intโ€™ changes value from โ€˜-1โ€™ to โ€˜65535โ€™ [-Wsign-conversion]
 2583 |   return Vec256<float16_t>{_mm512_cvtps_ph(v.raw, _MM_FROUND_NO_EXC)};
      |                            ^~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<double> hwy::N_AVX3::Floor(hwy::N_AVX3::Vec512<double>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1154:7: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1154 |       _mm512_roundscale_pd(v.raw, _MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC)};
      |       ^~~~~~~~~~~~~~~~~~~~
In file included from /home/aaron/src/grok/src/lib/jp2/highway/hwy/highway.h:262,
                 from /home/aaron/src/grok/src/lib/jp2/point_transform/mct.cpp:27,
                 from /home/aaron/src/grok/src/lib/jp2/highway/hwy/foreach_target.h:102,
                 from /home/aaron/src/grok/src/lib/jp2/point_transform/mct.cpp:26:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜void hwy::N_AVX3::ScatterOffset(hwy::N_AVX3::Vec512<T>, hwy::N_AVX3::Full512<T>, T*, hwy::N_AVX3::Vec512<FromT>) [with T = float; Offset = int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<float, 16>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1798:3: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1798 |   _mm512_i32scatter_ps(base, offset.raw, v.raw, 1);
      |   ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜void hwy::N_AVX3::ScatterIndex(hwy::N_AVX3::Vec512<T>, hwy::N_AVX3::Full512<T>, T*, hwy::N_AVX3::Vec512<FromT>) [with T = float; Index = int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<float, 16>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1804:3: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1804 |   _mm512_i32scatter_ps(base, index.raw, v.raw, 4);
      |   ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜void hwy::N_AVX3::ScatterOffset(hwy::N_AVX3::Vec512<T>, hwy::N_AVX3::Full512<T>, T*, hwy::N_AVX3::Vec512<FromT>) [with T = double; Offset = long int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<double, 8>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1812:3: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1812 |   _mm512_i64scatter_pd(base, offset.raw, v.raw, 1);
      |   ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜void hwy::N_AVX3::ScatterIndex(hwy::N_AVX3::Vec512<T>, hwy::N_AVX3::Full512<T>, T*, hwy::N_AVX3::Vec512<FromT>) [with T = double; Index = long int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<double, 8>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1819:3: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1819 |   _mm512_i64scatter_pd(base, index.raw, v.raw, 8);
      |   ^~~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<T> hwy::N_AVX3::GatherOffset(hwy::N_AVX3::Full512<T>, const T*, hwy::N_AVX3::Vec512<FromT>) [with T = float; Offset = int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<float, 16>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1871:24: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1871 |   return Vec512<float>{_mm512_i32gather_ps(offset.raw, base, 1)};
      |                        ^~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<T> hwy::N_AVX3::GatherIndex(hwy::N_AVX3::Full512<T>, const T*, hwy::N_AVX3::Vec512<FromT>) [with T = float; Index = int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<float, 16>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1877:24: warning: signed conversion from โ€˜__mmask16โ€™ {aka โ€˜short unsigned intโ€™} to โ€˜short intโ€™ changes value from โ€˜65535โ€™ to โ€˜-1โ€™ [-Wsign-conversion]
 1877 |   return Vec512<float>{_mm512_i32gather_ps(index.raw, base, 4)};
      |                        ^~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<T> hwy::N_AVX3::GatherOffset(hwy::N_AVX3::Full512<T>, const T*, hwy::N_AVX3::Vec512<FromT>) [with T = double; Offset = long int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<double, 8>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1884:25: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1884 |   return Vec512<double>{_mm512_i64gather_pd(offset.raw, base, 1)};
      |                         ^~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<T> hwy::N_AVX3::GatherIndex(hwy::N_AVX3::Full512<T>, const T*, hwy::N_AVX3::Vec512<FromT>) [with T = double; Index = long int; hwy::N_AVX3::Full512<T> = hwy::N_AVX3::Simd<double, 8>]โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:1890:25: warning: signed conversion from โ€˜__mmask8โ€™ {aka โ€˜unsigned charโ€™} to โ€˜charโ€™ changes value from โ€˜255โ€™ to โ€˜'\37777777777'โ€™ [-Wsign-conversion]
 1890 |   return Vec512<double>{_mm512_i64gather_pd(index.raw, base, 8)};
      |                         ^~~~~~~~~~~~~~~~~~~
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec256<hwy::float16_t> hwy::N_AVX3::DemoteTo(hwy::N_AVX3::Full256<hwy::float16_t>, hwy::N_AVX3::Vec512<float>)โ€™:
/home/aaron/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:2583:28: warning: unsigned conversion from โ€˜intโ€™ to โ€˜short unsigned intโ€™ changes value from โ€˜-1โ€™ to โ€˜65535โ€™ [-Wsign-conversion]
 2583 |   return Vec256<float16_t>{_mm512_cvtps_ph(v.raw, _MM_FROUND_NO_EXC)};

Problem with AVX2 4a47570

In file included from c:\msys1200\x86_64-w64-mingw32\include\lib\jxl\dec_xyb.h:25,
                 from dec_xyb.cc:15:
c:\msys1200\x86_64-w64-mingw32\include\lib\jxl\image.h: In function 'bool jxl::SameSize(const Image1&, const Image2&) [with Image1 = jxl::Rect; Image2 = jxl::Image3<float>]':
c:\msys1200\x86_64-w64-mingw32\include\lib\jxl\image.h:407:21: error: inlining failed in call to 'always_inline' 'size_t jxl::Image3<T>::xsize() const [with ComponentType = float]': target specific option mismatch
  407 |   JXL_INLINE size_t xsize() const { return planes_[0].xsize(); }
      |                     ^~~~~

Visual Studio Run-Time Check Failure

I am using this project together with the jpeg-xl library and this now fails at the following spot:

afbeelding

Using the same block as the clang compiler seems to resolve the issue. Maybe the check should be swapped and changed to this:

template <size_t N, HWY_IF_LE128(float, N)>
HWY_API Vec128<float, N> Undefined(Simd<float, N> /* tag */) {
#ifdef __GNUC__
  __m128 raw;
  return Vec128<float, N>{raw};
#else
  return Vec128<float, N>{_mm_undefined_ps()};
#endif
}

compiler warning

/home/src/grok/src/lib/jp2/highway/hwy/ops/x86_128-inl.h: In instantiation of โ€˜uint64_t hwy::N_SSSE3::GetLane(hwy::N_SSSE3::Vec128<long unsigned int, N>) [with long unsigned int N = 2; uint64_t = long unsigned int]โ€™:
/home/src/grok/src/lib/jp2/highway/hwy/ops/x86_128-inl.h:3131:28:   required from here
/home/src/grok/src/lib/jp2/highway/hwy/ops/x86_128-inl.h:299:27: warning: conversion to โ€˜uint64_tโ€™ {aka โ€˜long unsigned intโ€™} from โ€˜long long intโ€™ may change the sign of the result [-Wsign-conversion]
  299 |   return _mm_cvtsi128_si64(v.raw);

recent build is broken on aarch64 in hwy/tests/crypto_test.cc

I think this is a regression, that was introduced recently:

Scanning dependencies of target crypto_test
[ 81%] Building CXX object CMakeFiles/crypto_test.dir/hwy/tests/crypto_test.cc.o
In file included from /tmp/highway/hwy/ops/arm_neon-inl.h:18,
                 from /tmp/highway/hwy/highway.h:298,
                 from /tmp/highway/hwy/tests/crypto_test.cc:24:
/usr/lib/gcc/aarch64-unknown-linux-gnu/10.3.0/include/arm_neon.h: In function 'hwy::N_NEON::Vec128<long unsigned int, 2> hwy::N_NEON::CLMulLower(hwy::N_NEON::Vec128<long unsigned int, 2>, hwy::N_NEON::Vec128<long unsigned int, 2>)':
/usr/lib/gcc/aarch64-unknown-linux-gnu/10.3.0/include/arm_neon.h:26723:1: error: inlining failed in call to 'always_inline' 'poly128_t vmull_p64(poly64_t, poly64_t)': target specific option mismatch
26723 | vmull_p64 (poly64_t __a, poly64_t __b)
      | ^~~~~~~~~
In file included from /tmp/highway/hwy/highway.h:298,
                 from /tmp/highway/hwy/tests/crypto_test.cc:24:
/tmp/highway/hwy/ops/arm_neon-inl.h:3498:48: note: called from here
 3498 |   return Vec128<uint64_t>((uint64x2_t)vmull_p64(GetLane(a), GetLane(b)));
      |                                       ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
In file included from /tmp/highway/hwy/ops/arm_neon-inl.h:18,
                 from /tmp/highway/hwy/highway.h:298,
                 from /tmp/highway/hwy/tests/crypto_test.cc:24:
/usr/lib/gcc/aarch64-unknown-linux-gnu/10.3.0/include/arm_neon.h:26723:1: error: inlining failed in call to 'always_inline' 'poly128_t vmull_p64(poly64_t, poly64_t)': target specific option mismatch
26723 | vmull_p64 (poly64_t __a, poly64_t __b)
      | ^~~~~~~~~
In file included from /tmp/highway/hwy/highway.h:298,
                 from /tmp/highway/hwy/tests/crypto_test.cc:24:
/tmp/highway/hwy/ops/arm_neon-inl.h:3498:48: note: called from here
 3498 |   return Vec128<uint64_t>((uint64x2_t)vmull_p64(GetLane(a), GetLane(b)));
      |                                       ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
make[2]: *** [CMakeFiles/crypto_test.dir/build.make:82: CMakeFiles/crypto_test.dir/hwy/tests/crypto_test.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1041: CMakeFiles/crypto_test.dir/all] Error 2
make: *** [Makefile:160: all] Error 2

Any plan for ARM SVE and RiscV support ?

In the readme, you speak about the compatibility of those sets visions with yours, through the length agnostic approach, any plan to support those instruction sets (am more interested by SVE). Thanks !

clang compiler error on Travis OSX build

Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode-11.3.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

Here is the error:

 error: no template named 'ShiftRight'; did you mean 'hwy::N_SSE4::ShiftRight'?
                                        auto y = ShiftRight<2>((g+g) + b + r);
                                                 ^~~~~~~~~~
                                                 hwy::N_SSE4::ShiftRight

and here is the code:

const HWY_FULL(int32_t) d;
for(auto j = begin; j < begin + chunkSize; j += Lanes(d))
{
	auto r = Load(d,chan0+j);
	auto g = Load(d,chan1+j);
	auto b = Load(d,chan2+j);
	auto y = ShiftRight<2>((g+g) + b + r);
	auto u = b-g;
	auto v = r-g;
	Store(y,d,chan0+j);
	Store(u,d,chan1+j);
	Store(v,d,chan2+j);
}

NOTE: builds fine on Github Actions with latest Windows, Ubuntu and OSX VMs.

another compiler warning :)

In file included from /home/src/grok/src/lib/jp2/highway/hwy/highway.h:289,
                 from /home/src/grok/src/lib/jp2/point_transform/mct.cpp:27,
                 from /home/src/grok/src/lib/jp2/highway/hwy/foreach_target.h:113,
                 from /home/src/grok/src/lib/jp2/point_transform/mct.cpp:26:
/home/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h: In function โ€˜hwy::N_AVX3::Vec512<unsigned int> hwy::N_AVX3::SumOfLanes(hwy::N_AVX3::Full512<unsigned int>, hwy::N_AVX3::Vec512<unsigned int>)โ€™:
/home/src/grok/src/lib/jp2/highway/hwy/ops/x86_512-inl.h:3327:40: warning: conversion to โ€˜uint32_tโ€™ {aka โ€˜unsigned intโ€™} from โ€˜intโ€™ may change the sign of the result [-Wsign-conversion]
 3327 |   return Set(d, _mm512_reduce_add_epi32(v.raw));

ppc implementation ?

Hello, interesting project ! In the instruction matrix you speak about ppc instructions coverage, but I couldn't find relative header file, like for neon and x86. What about this ? Thanks !

oss-fuzz fuzzer link errors

I am getting link errors when building fuzzers for oss-fuzz project. In this case, my library is built as a static lib.

Building fuzzer grk_decompress_fuzzer
/src/grok/build/bin/libgrokj2k.a(mct.cpp.o): In function `__cxx_atomic_load<unsigned int>':
/usr/local/bin/../include/c++/v1/atomic:1006: undefined reference to `hwy::chosen_target'
/usr/local/bin/../include/c++/v1/atomic:1006: undefined reference to `hwy::chosen_target'
/usr/local/bin/../include/c++/v1/atomic:1006: undefined reference to `hwy::chosen_target'
/usr/local/bin/../include/c++/v1/atomic:1006: undefined reference to `hwy::chosen_target'
/usr/local/bin/../include/c++/v1/atomic:1006: undefined reference to `hwy::chosen_target'
/src/grok/build/bin/libgrokj2k.a(mct.cpp.o):/usr/local/bin/../include/c++/v1/atomic:1006: more undefined references to `hwy::chosen_target' follow
/src/grok/build/bin/libgrokj2k.a(mct.cpp.o): In function `_ZN3hwy13FunctionCacheIvJPiS1_S1_mEE13ChooseAndCallIXadsoKPFvS1_S1_S1_mEL_ZN3grkL36hwy_compress_revHighwayDispatchTableEEEEEEvS1_S1_S1_m':
/src/grok/src/lib/jp2/highway/hwy/highway.h:105: undefined reference to `hwy::ChosenTarget::Update()'
/src/grok/build/bin/libgrokj2k.a(mct.cpp.o): In function `__cxx_atomic_load<unsigned int>':
/usr/local/bin/../include/c++/v1/atomic:1006: undefined reference to `hwy::chosen_target'
/usr/local/bin/../include/c++/v1/atomic:1006: undefined reference to `hwy::chosen_target'
/usr/local/bin/../include/c++/v1/atomic:1006: undefined reference to `hwy::chosen_target'
/src/grok/build/bin/libgrokj2k.a(mct.cpp.o): In function `_ZN3hwy13FunctionCacheIvJPN3grk4TileEPNS1_8GrkImageEPNS1_25TileComponentCodingParamsEjEE13ChooseAndCallIXadsoKPFvS3_S5_S7_jEL_ZNS1_L49hwy_decompress_dc_shift_irrevHighwayDispatchTableEEEEEEvS3_S5_S7_j':
/src/grok/src/lib/jp2/highway/hwy/highway.h:105: undefined reference to `hwy::chosen_target'
/src/grok/src/lib/jp2/highway/hwy/highway.h:105: undefined reference to `hwy::chosen_target'
/src/grok/src/lib/jp2/highway/hwy/highway.h:105: undefined reference to `hwy::ChosenTarget::Update()'
/src/grok/build/bin/libgrokj2k.a(mct.cpp.o): In function `__cxx_atomic_load<unsigned int>':
/usr/local/bin/../include/c++/v1/atomic:1006: undefined reference to `hwy::chosen_target'
/usr/local/bin/../include/c++/v1/atomic:1006: undefined reference to `hwy::chosen_target'
/usr/local/bin/../include/c++/v1/atomic:1006: undefined reference to `hwy::chosen_target'
clang-12: error: linker command failed with exit code 1 (use -v to see invocation)

The full build can be found here:

https://github.com/GrokImageCompression/grok/runs/2344183149?check_suite_focus=true

Build fails on arm64 device

I tried building highway master on RockPi with Armbian and gcc 9 and 10.

Here are the errors:

home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<float, 4> hwy::N_NEON::PromoteTo(hwy::N_NEON::Full128<float>, hwy::N_NEON::Vec128<hwy::float16_t, 4>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:2173:39: error: cannot convert โ€˜const Rawโ€™ {aka โ€˜const __vector(4) short unsigned intโ€™} to โ€˜float16x4_tโ€™ {aka โ€˜__vector(4) __fp16โ€™}
 2173 |   return Vec128<float>(vcvt_f32_f16(v.raw));
      |                                     ~~^~~
      |                                       |
      |                                       const Raw {aka const __vector(4) short unsigned int}
In file included from /home/aaron/src/highway/hwy/ops/arm_neon-inl.h:18,
                 from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/usr/lib/gcc/aarch64-linux-gnu/9/include/arm_neon.h:14905:27: note:   initializing argument 1 of โ€˜float32x4_t vcvt_f32_f16(float16x4_t)โ€™
14905 | vcvt_f32_f16 (float16x4_t __a)
      |               ~~~~~~~~~~~~^~~
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<hwy::float16_t, 4> hwy::N_NEON::DemoteTo(hwy::N_NEON::Simd<hwy::float16_t, 4>, hwy::N_NEON::Vec128<float, 4>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:2301:50: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<hwy::float16_t, 4>::Vec128(<brace-enclosed initializer list>)โ€™
 2301 |   return Vec128<float16_t, 4>{vcvt_f16_f32(v.raw)};
      |                                                  ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = hwy::float16_t; long unsigned int N = 4; hwy::N_NEON::Vec128<T, N>::Raw = __vector(4) short unsigned int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜float16x4_tโ€™ {aka โ€˜__vector(4) __fp16โ€™} to โ€˜hwy::N_NEON::Vec128<hwy::float16_t, 4>::Rawโ€™ {aka โ€˜__vector(4) short unsigned intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = hwy::float16_t; long unsigned int N = 4]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜float16x4_tโ€™ {aka โ€˜__vector(4) __fp16โ€™} to โ€˜const hwy::N_NEON::Vec128<hwy::float16_t, 4>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = hwy::float16_t; long unsigned int N = 4]โ€™
  448 |   HWY_INLINE Vec128() {}
      |              ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<signed char, N> hwy::N_NEON::DemoteTo(hwy::N_NEON::Simd<signed char, N>, hwy::N_NEON::Vec128<int, 4>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:2401:39: error: cannot convert โ€˜uint16x8_tโ€™ {aka โ€˜__vector(8) short unsigned intโ€™} to โ€˜int16x8_tโ€™ {aka โ€˜__vector(8) short intโ€™}
 2401 |   return Vec128<int8_t, N>(vqmovn_s16(c));
      |                                       ^
      |                                       |
      |                                       uint16x8_t {aka __vector(8) short unsigned int}
In file included from /home/aaron/src/highway/hwy/ops/arm_neon-inl.h:18,
                 from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/usr/lib/gcc/aarch64-linux-gnu/9/include/arm_neon.h:24092:23: note:   initializing argument 1 of โ€˜int8x8_t vqmovn_s16(int16x8_t)โ€™
24092 | vqmovn_s16 (int16x8_t __a)
      |             ~~~~~~~~~~^~~
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<unsigned int, 4> hwy::N_NEON::TableLookupLanes(hwy::N_NEON::Vec128<unsigned int, 4>, hwy::N_NEON::Indices128<unsigned int>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3007:54: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<unsigned int, 4>::Vec128(const uint8x16_t&)โ€™
 3007 |   return TableLookupBytes(v, Vec128<uint32_t>(idx.raw));
      |                                                      ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = unsigned int; long unsigned int N = 4; hwy::N_NEON::Vec128<T, N>::Raw = __vector(4) unsigned int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜const uint8x16_tโ€™ {aka โ€˜const __vector(16) unsigned charโ€™} to โ€˜hwy::N_NEON::Vec128<unsigned int, 4>::Rawโ€™ {aka โ€˜__vector(4) unsigned intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = unsigned int; long unsigned int N = 4]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜const uint8x16_tโ€™ {aka โ€˜const __vector(16) unsigned charโ€™} to โ€˜const hwy::N_NEON::Vec128<unsigned int, 4>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = unsigned int; long unsigned int N = 4]โ€™
  448 |   HWY_INLINE Vec128() {}
      |              ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<int, 4> hwy::N_NEON::TableLookupLanes(hwy::N_NEON::Vec128<int, 4>, hwy::N_NEON::Indices128<int>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3011:53: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<int, 4>::Vec128(const uint8x16_t&)โ€™
 3011 |   return TableLookupBytes(v, Vec128<int32_t>(idx.raw));
      |                                                     ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = int; long unsigned int N = 4; hwy::N_NEON::Vec128<T, N>::Raw = __vector(4) int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜const uint8x16_tโ€™ {aka โ€˜const __vector(16) unsigned charโ€™} to โ€˜hwy::N_NEON::Vec128<int, 4>::Rawโ€™ {aka โ€˜__vector(4) intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = int; long unsigned int N = 4]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜const uint8x16_tโ€™ {aka โ€˜const __vector(16) unsigned charโ€™} to โ€˜const hwy::N_NEON::Vec128<int, 4>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = int; long unsigned int N = 4]โ€™
  448 |   HWY_INLINE Vec128() {}
      |              ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<float, 4> hwy::N_NEON::TableLookupLanes(hwy::N_NEON::Vec128<float, 4>, hwy::N_NEON::Indices128<float>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3018:74: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<int, 4>::Vec128(const uint8x16_t&)โ€™
 3018 |                  TableLookupBytes(BitCast(di, v), Vec128<int32_t>(idx.raw)));
      |                                                                          ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = int; long unsigned int N = 4; hwy::N_NEON::Vec128<T, N>::Raw = __vector(4) int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜const uint8x16_tโ€™ {aka โ€˜const __vector(16) unsigned charโ€™} to โ€˜hwy::N_NEON::Vec128<int, 4>::Rawโ€™ {aka โ€˜__vector(4) intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = int; long unsigned int N = 4]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜const uint8x16_tโ€™ {aka โ€˜const __vector(16) unsigned charโ€™} to โ€˜const hwy::N_NEON::Vec128<int, 4>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = int; long unsigned int N = 4]โ€™
  448 |   HWY_INLINE Vec128() {}
      |              ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<double, 2> hwy::N_NEON::InterleaveUpper(hwy::N_NEON::Vec128<double, 2>, hwy::N_NEON::Vec128<double, 2>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3096:38: error: cannot convert โ€˜const Rawโ€™ {aka โ€˜const __vector(2) doubleโ€™} to โ€˜int64x2_tโ€™ {aka โ€˜__vector(2) long intโ€™}
 3096 |   return Vec128<double>(vzip2q_s64(a.raw, b.raw));
      |                                    ~~^~~
      |                                      |
      |                                      const Raw {aka const __vector(2) double}
In file included from /home/aaron/src/highway/hwy/ops/arm_neon-inl.h:18,
                 from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/usr/lib/gcc/aarch64-linux-gnu/9/include/arm_neon.h:32411:23: note:   initializing argument 1 of โ€˜int64x2_t vzip2q_s64(int64x2_t, int64x2_t)โ€™
32411 | vzip2q_s64 (int64x2_t __a, int64x2_t __b)
      |             ~~~~~~~~~~^~~
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<short unsigned int, 8> hwy::N_NEON::ZipLower(hwy::N_NEON::Vec128<unsigned char, 16>, hwy::N_NEON::Vec128<unsigned char, 16>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3108:50: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<short unsigned int, 8>::Vec128(uint8x16_t)โ€™
 3108 |   return Vec128<uint16_t>(vzip1q_u8(a.raw, b.raw));
      |                                                  ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = short unsigned int; long unsigned int N = 8; hwy::N_NEON::Vec128<T, N>::Raw = __vector(8) short unsigned int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜uint8x16_tโ€™ {aka โ€˜__vector(16) unsigned charโ€™} to โ€˜hwy::N_NEON::Vec128<short unsigned int, 8>::Rawโ€™ {aka โ€˜__vector(8) short unsigned intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = short unsigned int; long unsigned int N = 8]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜uint8x16_tโ€™ {aka โ€˜__vector(16) unsigned charโ€™} to โ€˜const hwy::N_NEON::Vec128<short unsigned int, 8>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = short unsigned int; long unsigned int N = 8]โ€™
  448 |   HWY_INLINE Vec128() {}
      |              ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<unsigned int, 4> hwy::N_NEON::ZipLower(hwy::N_NEON::Vec128<short unsigned int, 8>, hwy::N_NEON::Vec128<short unsigned int, 8>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3112:51: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<unsigned int, 4>::Vec128(uint16x8_t)โ€™
 3112 |   return Vec128<uint32_t>(vzip1q_u16(a.raw, b.raw));
      |                                                   ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = unsigned int; long unsigned int N = 4; hwy::N_NEON::Vec128<T, N>::Raw = __vector(4) unsigned int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜uint16x8_tโ€™ {aka โ€˜__vector(8) short unsigned intโ€™} to โ€˜hwy::N_NEON::Vec128<unsigned int, 4>::Rawโ€™ {aka โ€˜__vector(4) unsigned intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = unsigned int; long unsigned int N = 4]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜uint16x8_tโ€™ {aka โ€˜__vector(8) short unsigned intโ€™} to โ€˜const hwy::N_NEON::Vec128<unsigned int, 4>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = unsigned int; long unsigned int N = 4]โ€™
  448 |   HWY_INLINE Vec128() {}
      |              ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<long unsigned int, 2> hwy::N_NEON::ZipLower(hwy::N_NEON::Vec128<unsigned int, 4>, hwy::N_NEON::Vec128<unsigned int, 4>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3116:51: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<long unsigned int, 2>::Vec128(uint32x4_t)โ€™
 3116 |   return Vec128<uint64_t>(vzip1q_u32(a.raw, b.raw));
      |                                                   ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = long unsigned int; long unsigned int N = 2; hwy::N_NEON::Vec128<T, N>::Raw = __vector(2) long unsigned int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜uint32x4_tโ€™ {aka โ€˜__vector(4) unsigned intโ€™} to โ€˜hwy::N_NEON::Vec128<long unsigned int, 2>::Rawโ€™ {aka โ€˜__vector(2) long unsigned intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = long unsigned int; long unsigned int N = 2]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜uint32x4_tโ€™ {aka โ€˜__vector(4) unsigned intโ€™} to โ€˜const hwy::N_NEON::Vec128<long unsigned int, 2>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = long unsigned int; long unsigned int N = 2]โ€™
  448 |   HWY_INLINE Vec128() {}
      |              ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<short int, 8> hwy::N_NEON::ZipLower(hwy::N_NEON::Vec128<signed char, 16>, hwy::N_NEON::Vec128<signed char, 16>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3121:49: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<short int, 8>::Vec128(int8x16_t)โ€™
 3121 |   return Vec128<int16_t>(vzip1q_s8(a.raw, b.raw));
      |                                                 ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = short int; long unsigned int N = 8; hwy::N_NEON::Vec128<T, N>::Raw = __vector(8) short int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜int8x16_tโ€™ {aka โ€˜__vector(16) signed charโ€™} to โ€˜hwy::N_NEON::Vec128<short int, 8>::Rawโ€™ {aka โ€˜__vector(8) short intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = short int; long unsigned int N = 8]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜int8x16_tโ€™ {aka โ€˜__vector(16) signed charโ€™} to โ€˜const hwy::N_NEON::Vec128<short int, 8>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = short int; long unsigned int N = 8]โ€™
  448 |   HWY_INLINE Vec128() {}
      |              ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<int, 4> hwy::N_NEON::ZipLower(hwy::N_NEON::Vec128<short int, 8>, hwy::N_NEON::Vec128<short int, 8>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3125:50: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<int, 4>::Vec128(int16x8_t)โ€™
 3125 |   return Vec128<int32_t>(vzip1q_s16(a.raw, b.raw));
      |                                                  ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = int; long unsigned int N = 4; hwy::N_NEON::Vec128<T, N>::Raw = __vector(4) int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜int16x8_tโ€™ {aka โ€˜__vector(8) short intโ€™} to โ€˜hwy::N_NEON::Vec128<int, 4>::Rawโ€™ {aka โ€˜__vector(4) intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = int; long unsigned int N = 4]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜int16x8_tโ€™ {aka โ€˜__vector(8) short intโ€™} to โ€˜const hwy::N_NEON::Vec128<int, 4>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = int; long unsigned int N = 4]โ€™
  448 |   HWY_INLINE Vec128() {}
      |              ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<long int, 2> hwy::N_NEON::ZipLower(hwy::N_NEON::Vec128<int, 4>, hwy::N_NEON::Vec128<int, 4>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3129:50: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<long int, 2>::Vec128(int32x4_t)โ€™
 3129 |   return Vec128<int64_t>(vzip1q_s32(a.raw, b.raw));
      |                                                  ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = long int; long unsigned int N = 2; hwy::N_NEON::Vec128<T, N>::Raw = __vector(2) long int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜int32x4_tโ€™ {aka โ€˜__vector(4) intโ€™} to โ€˜hwy::N_NEON::Vec128<long int, 2>::Rawโ€™ {aka โ€˜__vector(2) long intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = long int; long unsigned int N = 2]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜int32x4_tโ€™ {aka โ€˜__vector(4) intโ€™} to โ€˜const hwy::N_NEON::Vec128<long int, 2>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = long int; long unsigned int N = 2]โ€™
  448 |   HWY_INLINE Vec128() {}
      |              ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<short unsigned int, 8> hwy::N_NEON::ZipUpper(hwy::N_NEON::Vec128<unsigned char, 16>, hwy::N_NEON::Vec128<unsigned char, 16>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3134:50: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<short unsigned int, 8>::Vec128(uint8x16_t)โ€™
 3134 |   return Vec128<uint16_t>(vzip2q_u8(a.raw, b.raw));
      |                                                  ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = short unsigned int; long unsigned int N = 8; hwy::N_NEON::Vec128<T, N>::Raw = __vector(8) short unsigned int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜uint8x16_tโ€™ {aka โ€˜__vector(16) unsigned charโ€™} to โ€˜hwy::N_NEON::Vec128<short unsigned int, 8>::Rawโ€™ {aka โ€˜__vector(8) short unsigned intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = short unsigned int; long unsigned int N = 8]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜uint8x16_tโ€™ {aka โ€˜__vector(16) unsigned charโ€™} to โ€˜const hwy::N_NEON::Vec128<short unsigned int, 8>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = short unsigned int; long unsigned int N = 8]โ€™
  448 |   HWY_INLINE Vec128() {}
      |              ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<unsigned int, 4> hwy::N_NEON::ZipUpper(hwy::N_NEON::Vec128<short unsigned int, 8>, hwy::N_NEON::Vec128<short unsigned int, 8>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3138:51: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<unsigned int, 4>::Vec128(uint16x8_t)โ€™
 3138 |   return Vec128<uint32_t>(vzip2q_u16(a.raw, b.raw));
      |                                                   ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = unsigned int; long unsigned int N = 4; hwy::N_NEON::Vec128<T, N>::Raw = __vector(4) unsigned int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜uint16x8_tโ€™ {aka โ€˜__vector(8) short unsigned intโ€™} to โ€˜hwy::N_NEON::Vec128<unsigned int, 4>::Rawโ€™ {aka โ€˜__vector(4) unsigned intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = unsigned int; long unsigned int N = 4]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜uint16x8_tโ€™ {aka โ€˜__vector(8) short unsigned intโ€™} to โ€˜const hwy::N_NEON::Vec128<unsigned int, 4>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = unsigned int; long unsigned int N = 4]โ€™
  448 |   HWY_INLINE Vec128() {}
      |              ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<long unsigned int, 2> hwy::N_NEON::ZipUpper(hwy::N_NEON::Vec128<unsigned int, 4>, hwy::N_NEON::Vec128<unsigned int, 4>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3142:51: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<long unsigned int, 2>::Vec128(uint32x4_t)โ€™
 3142 |   return Vec128<uint64_t>(vzip2q_u32(a.raw, b.raw));
      |                                                   ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = long unsigned int; long unsigned int N = 2; hwy::N_NEON::Vec128<T, N>::Raw = __vector(2) long unsigned int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜uint32x4_tโ€™ {aka โ€˜__vector(4) unsigned intโ€™} to โ€˜hwy::N_NEON::Vec128<long unsigned int, 2>::Rawโ€™ {aka โ€˜__vector(2) long unsigned intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = long unsigned int; long unsigned int N = 2]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜uint32x4_tโ€™ {aka โ€˜__vector(4) unsigned intโ€™} to โ€˜const hwy::N_NEON::Vec128<long unsigned int, 2>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = long unsigned int; long unsigned int N = 2]โ€™
  448 |   HWY_INLINE Vec128() {}
      |              ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<short int, 8> hwy::N_NEON::ZipUpper(hwy::N_NEON::Vec128<signed char, 16>, hwy::N_NEON::Vec128<signed char, 16>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3147:49: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<short int, 8>::Vec128(int8x16_t)โ€™
 3147 |   return Vec128<int16_t>(vzip2q_s8(a.raw, b.raw));
      |                                                 ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = short int; long unsigned int N = 8; hwy::N_NEON::Vec128<T, N>::Raw = __vector(8) short int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜int8x16_tโ€™ {aka โ€˜__vector(16) signed charโ€™} to โ€˜hwy::N_NEON::Vec128<short int, 8>::Rawโ€™ {aka โ€˜__vector(8) short intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = short int; long unsigned int N = 8]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜int8x16_tโ€™ {aka โ€˜__vector(16) signed charโ€™} to โ€˜const hwy::N_NEON::Vec128<short int, 8>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = short int; long unsigned int N = 8]โ€™
  448 |   HWY_INLINE Vec128() {}
      |              ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<int, 4> hwy::N_NEON::ZipUpper(hwy::N_NEON::Vec128<short int, 8>, hwy::N_NEON::Vec128<short int, 8>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3151:50: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<int, 4>::Vec128(int16x8_t)โ€™
 3151 |   return Vec128<int32_t>(vzip2q_s16(a.raw, b.raw));
      |                                                  ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = int; long unsigned int N = 4; hwy::N_NEON::Vec128<T, N>::Raw = __vector(4) int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜int16x8_tโ€™ {aka โ€˜__vector(8) short intโ€™} to โ€˜hwy::N_NEON::Vec128<int, 4>::Rawโ€™ {aka โ€˜__vector(4) intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = int; long unsigned int N = 4]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜int16x8_tโ€™ {aka โ€˜__vector(8) short intโ€™} to โ€˜const hwy::N_NEON::Vec128<int, 4>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = int; long unsigned int N = 4]โ€™
  448 |   HWY_INLINE Vec128() {}
      |              ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note:   candidate expects 0 arguments, 1 provided
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h: In function โ€˜hwy::N_NEON::Vec128<long int, 2> hwy::N_NEON::ZipUpper(hwy::N_NEON::Vec128<int, 4>, hwy::N_NEON::Vec128<int, 4>)โ€™:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:3155:50: error: no matching function for call to โ€˜hwy::N_NEON::Vec128<long int, 2>::Vec128(int32x4_t)โ€™
 3155 |   return Vec128<int64_t>(vzip2q_s32(a.raw, b.raw));
      |                                                  ^
In file included from /home/aaron/src/highway/hwy/highway.h:265,
                 from /home/aaron/src/highway/hwy/tests/list_targets.cc:20:
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:23: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128(hwy::N_NEON::Vec128<T, N>::Raw) [with T = long int; long unsigned int N = 2; hwy::N_NEON::Vec128<T, N>::Raw = __vector(2) long int]โ€™
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                       ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:451:40: note:   no known conversion for argument 1 from โ€˜int32x4_tโ€™ {aka โ€˜__vector(4) intโ€™} to โ€˜hwy::N_NEON::Vec128<long int, 2>::Rawโ€™ {aka โ€˜__vector(2) long intโ€™}
  451 |   HWY_INLINE explicit Vec128(const Raw raw) : raw(raw) {}
      |                              ~~~~~~~~~~^~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:3: note: candidate: โ€˜constexpr hwy::N_NEON::Vec128<T, N>::Vec128(const hwy::N_NEON::Vec128<T, N>&) [with T = long int; long unsigned int N = 2]โ€™
  449 |   Vec128(const Vec128&) = default;
      |   ^~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:449:10: note:   no known conversion for argument 1 from โ€˜int32x4_tโ€™ {aka โ€˜__vector(4) intโ€™} to โ€˜const hwy::N_NEON::Vec128<long int, 2>&โ€™
  449 |   Vec128(const Vec128&) = default;
      |          ^~~~~~~~~~~~~
/home/aaron/src/highway/hwy/ops/arm_neon-inl.h:448:14: note: candidate: โ€˜hwy::N_NEON::Vec128<T, N>::Vec128() [with T = long int; long unsigned int N = 2]โ€™
  448 |   HWY_INLINE Vec128() {}

One test failure on s390x

Fedora Rawhide, w/ GCC 11.1.1, highway 4a47570

On s390x, the test 71 fails:

111/111 Test  #71: HwyConvertTestGroup/HwyConvertTest.TestAllF16/Scalar#GetParam()=536870912 ...........................***Exception: Illegal  0.22 sec
Running main() from /builddir/build/BUILD/googletest-release-1.10.0/googletest/src/gtest_main.cc
Note: Google Test filter = HwyConvertTestGroup/HwyConvertTest.TestAllF16/Scalar
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from HwyConvertTestGroup/HwyConvertTest
[ RUN      ] HwyConvertTestGroup/HwyConvertTest.TestAllF16/Scalar
f32 expect [0+ ->]:
  1,
f32 actual [0+ ->]:
  0,
Abort at /builddir/build/BUILD/highway-4a47570daf29bfff0577541f8a0c0c342bf363cd/hwy/tests/convert_test.cc:351: Scalar, f32 lane 0 mismatch: expected '1', got '0'.
99% tests passed, 1 tests failed out of 111

See log: https://kojipkgs.fedoraproject.org//work/tasks/7057/68147057/build.log

Test failure on ARMv7 with Clang

The following test fails on ARMv7hl with Clang 12 and version 0.11.1. It works fine with GCC 11.

        Start  76: HwyMemoryTestGroup/HwyMemoryTest.TestAllGather/Scalar#GetParam()=536870912
 76/104 Test  #76: HwyMemoryTestGroup/HwyMemoryTest.TestAllGather/Scalar#GetParam()=536870912 ..........................Bus error***Exception:   0.17 sec

The following tests FAILED:
	 76 - HwyMemoryTestGroup/HwyMemoryTest.TestAllGather/Scalar#GetParam()=536870912 (Bus error)
make: Leaving directory '/builddir/build/BUILD/highway-0.11.1/armv7hl-redhat-linux-gnueabi'

See log: https://kojipkgs.fedoraproject.org//work/tasks/2926/65532926/build.log

New functions to add

Looks like Abs for floating-point would be able to take advantage of AVX-512 instructions for that.

Other suggestions by @cwfitzgerald which we'd like to add:

  • ZeroExtendVector to go from 128bit to 256 etc.
  • Combine(hi, lo) to concatenate

Update to latest Wasm intrinsics

Upstream intrinsics for SIMD have changed, and building projects using highway with latest Clang/Emscripten now issues lots of deprecation warnings:

...
<scratch space>:2:6: note: expanded from here
 GCC warning( "'" "wasm_v8x16_shuffle" "' is deprecated: use '" "wasm_i8x16_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1689:24: warning: 'wasm_v8x16_shuffle' is deprecated: use 'wasm_i8x16_shuffle' instead [-W#pragma-messages]
      return Vec128<T>{wasm_v8x16_shuffle(lo.raw, hi.raw, 7, 8, 9, 10, 11, 12,
                       ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1478:3: note: expanded from macro 'wasm_v8x16_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v8x16_shuffle", "wasm_i8x16_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:5:6: note: expanded from here
 GCC warning( "'" "wasm_v8x16_shuffle" "' is deprecated: use '" "wasm_i8x16_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1694:24: warning: 'wasm_v8x16_shuffle' is deprecated: use 'wasm_i8x16_shuffle' instead [-W#pragma-messages]
      return Vec128<T>{wasm_v8x16_shuffle(lo.raw, hi.raw, 8, 9, 10, 11, 12, 13,
                       ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1478:3: note: expanded from macro 'wasm_v8x16_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v8x16_shuffle", "wasm_i8x16_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:8:6: note: expanded from here
 GCC warning( "'" "wasm_v8x16_shuffle" "' is deprecated: use '" "wasm_i8x16_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1699:24: warning: 'wasm_v8x16_shuffle' is deprecated: use 'wasm_i8x16_shuffle' instead [-W#pragma-messages]
      return Vec128<T>{wasm_v8x16_shuffle(lo.raw, hi.raw, 9, 10, 11, 12, 13, 14,
                       ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1478:3: note: expanded from macro 'wasm_v8x16_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v8x16_shuffle", "wasm_i8x16_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:11:6: note: expanded from here
 GCC warning( "'" "wasm_v8x16_shuffle" "' is deprecated: use '" "wasm_i8x16_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1704:24: warning: 'wasm_v8x16_shuffle' is deprecated: use 'wasm_i8x16_shuffle' instead [-W#pragma-messages]
      return Vec128<T>{wasm_v8x16_shuffle(lo.raw, hi.raw, 10, 11, 12, 13, 14,
                       ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1478:3: note: expanded from macro 'wasm_v8x16_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v8x16_shuffle", "wasm_i8x16_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:14:6: note: expanded from here
 GCC warning( "'" "wasm_v8x16_shuffle" "' is deprecated: use '" "wasm_i8x16_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1709:24: warning: 'wasm_v8x16_shuffle' is deprecated: use 'wasm_i8x16_shuffle' instead [-W#pragma-messages]
      return Vec128<T>{wasm_v8x16_shuffle(lo.raw, hi.raw, 11, 12, 13, 14, 15,
                       ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1478:3: note: expanded from macro 'wasm_v8x16_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v8x16_shuffle", "wasm_i8x16_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:17:6: note: expanded from here
 GCC warning( "'" "wasm_v8x16_shuffle" "' is deprecated: use '" "wasm_i8x16_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1714:24: warning: 'wasm_v8x16_shuffle' is deprecated: use 'wasm_i8x16_shuffle' instead [-W#pragma-messages]
      return Vec128<T>{wasm_v8x16_shuffle(lo.raw, hi.raw, 12, 13, 14, 15, 16,
                       ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1478:3: note: expanded from macro 'wasm_v8x16_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v8x16_shuffle", "wasm_i8x16_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:20:6: note: expanded from here
 GCC warning( "'" "wasm_v8x16_shuffle" "' is deprecated: use '" "wasm_i8x16_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1719:24: warning: 'wasm_v8x16_shuffle' is deprecated: use 'wasm_i8x16_shuffle' instead [-W#pragma-messages]
      return Vec128<T>{wasm_v8x16_shuffle(lo.raw, hi.raw, 13, 14, 15, 16, 17,
                       ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1478:3: note: expanded from macro 'wasm_v8x16_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v8x16_shuffle", "wasm_i8x16_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:23:6: note: expanded from here
 GCC warning( "'" "wasm_v8x16_shuffle" "' is deprecated: use '" "wasm_i8x16_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1724:24: warning: 'wasm_v8x16_shuffle' is deprecated: use 'wasm_i8x16_shuffle' instead [-W#pragma-messages]
      return Vec128<T>{wasm_v8x16_shuffle(lo.raw, hi.raw, 14, 15, 16, 17, 18,
                       ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1478:3: note: expanded from macro 'wasm_v8x16_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v8x16_shuffle", "wasm_i8x16_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:26:6: note: expanded from here
 GCC warning( "'" "wasm_v8x16_shuffle" "' is deprecated: use '" "wasm_i8x16_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1729:24: warning: 'wasm_v8x16_shuffle' is deprecated: use 'wasm_i8x16_shuffle' instead [-W#pragma-messages]
      return Vec128<T>{wasm_v8x16_shuffle(lo.raw, hi.raw, 15, 16, 17, 18, 19,
                       ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1478:3: note: expanded from macro 'wasm_v8x16_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v8x16_shuffle", "wasm_i8x16_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:29:6: note: expanded from here
 GCC warning( "'" "wasm_v8x16_shuffle" "' is deprecated: use '" "wasm_i8x16_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1742:30: warning: 'wasm_v16x8_shuffle' is deprecated: use 'wasm_i16x8_shuffle' instead [-W#pragma-messages]
  return Vec128<uint16_t, N>{wasm_v16x8_shuffle(
                             ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1484:3: note: expanded from macro 'wasm_v16x8_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v16x8_shuffle", "wasm_i16x8_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:32:6: note: expanded from here
 GCC warning( "'" "wasm_v16x8_shuffle" "' is deprecated: use '" "wasm_i16x8_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1749:7: warning: 'wasm_v32x4_shuffle' is deprecated: use 'wasm_i32x4_shuffle' instead [-W#pragma-messages]
      wasm_v32x4_shuffle(v.raw, v.raw, kLane, kLane, kLane, kLane)};
      ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1488:3: note: expanded from macro 'wasm_v32x4_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v32x4_shuffle", "wasm_i32x4_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:35:6: note: expanded from here
 GCC warning( "'" "wasm_v32x4_shuffle" "' is deprecated: use '" "wasm_i32x4_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1756:29: warning: 'wasm_v16x8_shuffle' is deprecated: use 'wasm_i16x8_shuffle' instead [-W#pragma-messages]
  return Vec128<int16_t, N>{wasm_v16x8_shuffle(
                            ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1484:3: note: expanded from macro 'wasm_v16x8_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v16x8_shuffle", "wasm_i16x8_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:38:6: note: expanded from here
 GCC warning( "'" "wasm_v16x8_shuffle" "' is deprecated: use '" "wasm_i16x8_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1763:7: warning: 'wasm_v32x4_shuffle' is deprecated: use 'wasm_i32x4_shuffle' instead [-W#pragma-messages]
      wasm_v32x4_shuffle(v.raw, v.raw, kLane, kLane, kLane, kLane)};
      ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1488:3: note: expanded from macro 'wasm_v32x4_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v32x4_shuffle", "wasm_i32x4_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:41:6: note: expanded from here
 GCC warning( "'" "wasm_v32x4_shuffle" "' is deprecated: use '" "wasm_i32x4_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1771:7: warning: 'wasm_v32x4_shuffle' is deprecated: use 'wasm_i32x4_shuffle' instead [-W#pragma-messages]
      wasm_v32x4_shuffle(v.raw, v.raw, kLane, kLane, kLane, kLane)};
      ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1488:3: note: expanded from macro 'wasm_v32x4_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v32x4_shuffle", "wasm_i32x4_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:44:6: note: expanded from here
 GCC warning( "'" "wasm_v32x4_shuffle" "' is deprecated: use '" "wasm_i32x4_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1809:27: warning: 'wasm_v32x4_shuffle' is deprecated: use 'wasm_i32x4_shuffle' instead [-W#pragma-messages]
  return Vec128<uint32_t>{wasm_v32x4_shuffle(v.raw, v.raw, 1, 0, 3, 2)};
                          ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1488:3: note: expanded from macro 'wasm_v32x4_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v32x4_shuffle", "wasm_i32x4_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:47:6: note: expanded from here
 GCC warning( "'" "wasm_v32x4_shuffle" "' is deprecated: use '" "wasm_i32x4_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1812:26: warning: 'wasm_v32x4_shuffle' is deprecated: use 'wasm_i32x4_shuffle' instead [-W#pragma-messages]
  return Vec128<int32_t>{wasm_v32x4_shuffle(v.raw, v.raw, 1, 0, 3, 2)};
                         ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1488:3: note: expanded from macro 'wasm_v32x4_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v32x4_shuffle", "wasm_i32x4_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:50:6: note: expanded from here
 GCC warning( "'" "wasm_v32x4_shuffle" "' is deprecated: use '" "wasm_i32x4_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1815:24: warning: 'wasm_v32x4_shuffle' is deprecated: use 'wasm_i32x4_shuffle' instead [-W#pragma-messages]
  return Vec128<float>{wasm_v32x4_shuffle(v.raw, v.raw, 1, 0, 3, 2)};
                       ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1488:3: note: expanded from macro 'wasm_v32x4_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v32x4_shuffle", "wasm_i32x4_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:53:6: note: expanded from here
 GCC warning( "'" "wasm_v32x4_shuffle" "' is deprecated: use '" "wasm_i32x4_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1820:27: warning: 'wasm_v64x2_shuffle' is deprecated: use 'wasm_i64x2_shuffle' instead [-W#pragma-messages]
  return Vec128<uint32_t>{wasm_v64x2_shuffle(v.raw, v.raw, 1, 0)};
                          ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1492:3: note: expanded from macro 'wasm_v64x2_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v64x2_shuffle", "wasm_i64x2_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:56:6: note: expanded from here
 GCC warning( "'" "wasm_v64x2_shuffle" "' is deprecated: use '" "wasm_i64x2_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1823:26: warning: 'wasm_v64x2_shuffle' is deprecated: use 'wasm_i64x2_shuffle' instead [-W#pragma-messages]
  return Vec128<int32_t>{wasm_v64x2_shuffle(v.raw, v.raw, 1, 0)};
                         ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1492:3: note: expanded from macro 'wasm_v64x2_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v64x2_shuffle", "wasm_i64x2_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:2:6: note: expanded from here
 GCC warning( "'" "wasm_v64x2_shuffle" "' is deprecated: use '" "wasm_i64x2_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1826:24: warning: 'wasm_v64x2_shuffle' is deprecated: use 'wasm_i64x2_shuffle' instead [-W#pragma-messages]
  return Vec128<float>{wasm_v64x2_shuffle(v.raw, v.raw, 1, 0)};
                       ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1492:3: note: expanded from macro 'wasm_v64x2_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v64x2_shuffle", "wasm_i64x2_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
<scratch space>:5:6: note: expanded from here
 GCC warning( "'" "wasm_v64x2_shuffle" "' is deprecated: use '" "wasm_i64x2_shuffle" "' instead")
     ^
In file included from /src/node_modules/jxl/lib/jxl/epf.cc:33:
In file included from /src/node_modules/jxl/third_party/highway/hwy/highway.h:267:
/src/node_modules/jxl/third_party/highway/hwy/ops/wasm_128-inl.h:1831:27: warning: 'wasm_v32x4_shuffle' is deprecated: use 'wasm_i32x4_shuffle' instead [-W#pragma-messages]
  return Vec128<uint32_t>{wasm_v32x4_shuffle(v.raw, v.raw, 1, 2, 3, 0)};
                          ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1488:3: note: expanded from macro 'wasm_v32x4_shuffle'
  __DEPRECATED_WASM_MACRO("wasm_v32x4_shuffle", "wasm_i32x4_shuffle")          \
  ^
/emsdk/upstream/lib/clang/13.0.0/include/wasm_simd128.h:1419:3: note: expanded from macro '__DEPRECATED_WASM_MACRO'
  _Pragma(__WASM_STR(GCC warning(                                              \
  ^
...

The corresponding code needs to be updated to use latest intrinsics instead as the deprecated ones will stop working in the future.

Compiler warning

In file included from /home/runner/work/2im/2im/build-default/_deps/highway-src/hwy/ops/shared-inl.h:20,
                 from /home/runner/work/2im/2im/build-default/_deps/highway-src/hwy/ops/scalar-inl.h:22,
                 from /home/runner/work/2im/2im/build-default/_deps/highway-src/hwy/highway.h:298,
                 from /home/runner/work/2im/2im/c/encoder_simd.cc:16:
/home/runner/work/2im/2im/build-default/_deps/highway-src/hwy/ops/set_macros-inl.h:241: warning: "HWY_CAP_AES" redefined
  241 | #define HWY_CAP_AES 0
      | 
In file included from /home/runner/work/2im/2im/build-default/_deps/highway-src/hwy/ops/shared-inl.h:20,
                 from /home/runner/work/2im/2im/build-default/_deps/highway-src/hwy/ops/x86_128-inl.h:26,
                 from /home/runner/work/2im/2im/build-default/_deps/highway-src/hwy/ops/x86_256-inl.h:41,
                 from /home/runner/work/2im/2im/build-default/_deps/highway-src/hwy/ops/x86_512-inl.h:43,
                 from /home/runner/work/2im/2im/build-default/_deps/highway-src/hwy/highway.h:286,
                 from /home/runner/work/2im/2im/c/encoder_simd.cc:16,
                 from /home/runner/work/2im/2im/build-default/_deps/highway-src/hwy/foreach_target.h:102,
                 from /home/runner/work/2im/2im/c/encoder_simd.cc:4:
/home/runner/work/2im/2im/build-default/_deps/highway-src/hwy/ops/set_macros-inl.h:109: note: this is the location of the previous definition
  109 | #define HWY_CAP_AES 1
      | 

Gracefully exit when the minimum instructions set is not found

I'm trying to package highway for Fedora Linux, and it has the following requirements:

Libraries packaged in Fedora may require ISA extensions, however
any packaged application must not crash on any officially supported
architecture, either by providing a generic fallback implementation OR
by cleanly exiting when the requisite hardware support is unavailable.

However when building the package on an old system, I get the following error:

/usr/bin/cmake -D TEST_TARGET=hwy_test -D TEST_EXECUTABLE=/builddir/build/BUILD/highway-0.11.1/x86_64-redhat-linux-gnu/tests/hwy_test -D TEST_EXECUTOR= -D TEST_WORKING_DIR=/builddir/build/BUILD/highway-0.11.1/x86_64-redhat-linux-gnu -D TEST_EXTRA_ARGS= -D TEST_PROPERTIES= -D TEST_PREFIX= -D TEST_SUFFIX= -D NO_PRETTY_TYPES=FALSE -D NO_PRETTY_VALUES=FALSE -D TEST_LIST=hwy_test_TESTS -D CTEST_FILE=/builddir/build/BUILD/highway-0.11.1/x86_64-redhat-linux-gnu/hwy_test[1]_tests.cmake -D TEST_DISCOVERY_TIMEOUT=60 -D TEST_XML_OUTPUT_DIR= -P /usr/share/cmake/Modules/GoogleTestAddTests.cmake
CMake Error at /usr/share/cmake/Modules/GoogleTestAddTests.cmake:77 (message):
Error running test executable.
Path: '/builddir/build/BUILD/highway-0.11.1/x86_64-redhat-linux-gnu/tests/hwy_test'
Result: Illegal instruction
Output:

Fedora officially support SSE2, not SSE4, as a minimum. Would it be possible to gracefully exit when the minimum instructions set is not found?

Thank you.

make install shouldn't install all headers only public ones

Currently make install install all headers from HWY_SOURCES:

set(HWY_SOURCES
    contrib/image/image.cc
    contrib/image/image.h
    contrib/math/math-inl.h
    hwy/aligned_allocator.cc
    hwy/aligned_allocator.h
    hwy/base.h
    hwy/cache_control.h
    hwy/foreach_target.h
    hwy/highway.h
    hwy/nanobenchmark.cc
    hwy/nanobenchmark.h
    hwy/ops/arm_neon-inl.h
    hwy/ops/scalar-inl.h
    hwy/ops/set_macros-inl.h
    hwy/ops/shared-inl.h
    hwy/ops/wasm_128-inl.h
    hwy/ops/x86_128-inl.h
    hwy/ops/x86_256-inl.h
    hwy/ops/x86_512-inl.h
    hwy/targets.cc
    hwy/targets.h
    hwy/tests/test_util-inl.h
)

However we only need the public ones and their deps as defined in quick_reference.md:

The public headers are:

  • hwy/highway.h: main header, included from source AND/OR header files that use vector types. Note that including in headers may increase compile time, but allows declaring functions implemented out of line.

  • hwy/base.h: included from headers that only need compiler/platform-dependent definitions (e.g. HWY_ALIGN_MAX or PopCount) without the full highway.h.

  • hwy/foreach_target.h: re-includes the translation unit (specified by HWY_TARGET_INCLUDE) once per enabled target to generate code from the same source code. highway.h must still be included, either before or after.

  • hwy/aligned_allocator.h: defines functions for allocating memory with alignment suitable for Load/Store.

  • hwy/cache_control.h: defines stand-alone functions to control caching (e.g. prefetching) and memory barriers, independent of actual SIMD.

i.e.

hwy/highway.h
hwy/base.h
hwy/foreach_target.h
hwy/aligned_allocator.h
hwy/cache_control.h
hwy/targets.h
hwy/ops/x86_128-inl.h
hwy/ops/x86_256-inl.h
hwy/ops/x86_512-inl.h
hwy/ops/arm_neon-inl.h
hwy/ops/wasm_128-inl.h
hwy/ops/scalar-inl.h
hwy/ops/shared-inl.h
hwy/set_macros-inl.h

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.