intrinsics- все статьи тега


Перевод SSE в Neon: как упаковать и затем извлечь 32-битный результат

Я должен перевести следующие инструкции из SSE в Neon uint32_t a = _mm_cvtsi128_si32(_mm_shuffle_epi8(a,SHUFFLE_MASK) ); Где: static const __m128i SHUFFLE_MASK = _mm_setr_epi8(3, 7, 11, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1); Поэтому в основном я должен взять 4,8, 12 и 16 байт из регистра и поместить его в uint32_t. Похоже на инструкцию по упаковке (в SSE я, кажется, помню, что использовал shuffle, потому что он сохраняет ...

Visual Studio 2017: mm load ps часто компилируется в movups

Я смотрю на сгенерированную сборку для моего кода (используя Visual Studio 2017) и заметил, что _mm_load_ps часто (всегда?) компилируется в movups. Данные, которые я использую _mm_load_ps, определяются следующим образом: struct alignas(16) Vector { float v[4]; } // often embedded in other structs like this struct AABB { Vector min; Vector max; bool intersection(/* parameters */) const; } Теперь, когда я использую эту конструкцию, произойдет следующее: // this code __mm12 ...

mm extract epi8 (...) intrinsic, который принимает в качестве аргумента не-литеральное целое число

В последнее время я использую SSE intrinsic int _mm_extract_epi8 (__m128i src, const int ndx), который, согласно ссылке "извлекает целочисленный байт из упакованного целочисленного элемента массива, выбранного индексом". Это именно то, чего я хочу. Однако я определяю индекс через _mm_cmpestri на _m128i, который выполняет упакованное сравнение строковых данных с явными длинами и генерирует индекс. Диапазон данного показателя составляет 0..16 где 0..15 представляет допустимый индекс, а 16 означае ...

Заголовочные файлы для встроенных SIMD x86

какие заголовочные файлы обеспечивают встроенные функции для различных расширений набора инструкций x86 SIMD (MMX, SSE, AVX,...)? Кажется, невозможно найти такой список в интернете. Поправьте меня, если я ошибаюсь. ...