Проблема извлечения значения SSE2

#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);