Документы, в которых упоминается GCC / Clang SIMD Vector Extensions, приведены здесь: https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html. Эти документы объясняют, как использовать __attribute__((vector_size(16)))
для именования векторных типов и объясняют операции, которые вы можете использовать для работы с этими типами. Эти операции, как правило, аналогичны операциям, которые вы можете использовать в обычных скалярных типах, таких как +
, -
, *
, а также в логических операциях и подписке ([]
). В частности, использование этих расширений не требует включения каких-либо заголовков или вызова каких-либо специальных функций, таких как _mm_set1_epi32
.
Ваш код пытается использовать emmintrin.h
, который является специфичным для платформы встроенным заголовком SIMD для x86. Если вы загляните внутрь emmintrin.h, то увидите, что он реализует типы, подобные __m128i
, и функции, подобные _mm_set1_epi32
, в терминах векторных расширений GCC / Clang SIMD, но сам заголовок не является частью векторных расширений. Единственный встроенный заголовок SIMD, доступный в настоящее время при использовании Emscripten, это wasm_simd128.h
.