#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, и я подумал, что, возможно, произошла подкачка в конце строки или что-то, о чем я не знал. Спасибо за проверку работоспособности и быстрый ответ