Проверка работоспособности инструкции SSE

#c #sse

#c #sse

Вопрос:

Приведенный ниже код меня слегка озадачил:

 
function(__m128 foo)
{
  __m128 bar = _mm_shuffle_ps(foo, foo, _MM_SHUFFLE(2,2,2,2))
}
  

Это просто берет 2-е слово foo и вставляет его 4 раза в bar или оно делает что-то еще?

Ответ №1:

Я не знаю, существует ли _mm_shuffle . Скорее так и должно быть _mm_shuffle_ps , учитывая __m128 аргументы.

В этом случае он делает именно то, что вы думаете. Он копирует 3-е (не 2-е, отсчет начинается с 0 справа, так что это действительно 2-е слева) 32-разрядное слово foo во все 4 32-разрядных слова bar . Что еще он должен делать?

Комментарии:

1. Да, я пропустил ps — моя ошибка. Функция, в которую я это встроил, выполняет всевозможные избыточные битовые манипуляции с помощью инструкций _mm_and_ps после swizzle / shuffle, и я подумал, что, возможно, произошла подкачка в конце строки или что-то, о чем я не знал. Спасибо за проверку работоспособности и быстрый ответ