#c #inline-assembly #sse #intrinsics
#c #встроенная сборка #sse #встроенные
Вопрос:
я хочу извлечь значение (первое слово 16 бит) из 128-битного регистра, я получил эту команду, но это не работает. после установки значения a будет произведена некоторая арифметическая операция, затем будет произведена некоторая арифметическая операция, поскольку результат внутри переменной изменится, наконец, я хочу извлечь первое слово … как я могу это сделать…
int r;
int inm=0;
__m128i a=_mm_setr_epi16(8,9,3,2,4,5,6,11);
_asm{
r = _mm_extract_epi16(a,inm);
}
Комментарии:
1. Как это работает в JavaScript? Ваш код выглядит как C. Кроме того, вам не следует помечать вопросы здесь как срочные.
Ответ №1:
Вы не помещаете встроенные функции внутри блока _asm. Они ведут себя точно так же, как любая другая функция. Это будет работать нормально:
#include <emmintrin.h>
__m128i a = _mm_setr_epi16(8,9,3,2,4,5,6,11);
int r = _mm_extract_epi16(a, 0);
Ответ №2:
pextrw
Инструкция работает только с непосредственным значением. В C это означает, что значение должно быть константой времени компиляции.
int r;
static const int inm=0;
__m128i a=_mm_setr_epi16(8,9,3,2,4,5,6,11);
r = _mm_extract_epi16(a,inm);