Была у меня коммандочка punpckldq mm0,mm1 Служила мне верой и правдой, кидала младший дабл из mm1 в старший дабл mm0. Так вот, решил я это дело углубить и ускорить и написал punpckldq xmm0,xmm1 и тут пошли косяки, пол дыня ловил пошагово, чуть не сдох... Логика пересылок совершенно меняется... Что же мне теперь делать?
Ну так что, как мне на SSe2 получить из abcd и efgh получить fbhd ? Пока делаю так pshufd xmm0, xmm0, 11011000 pshufd xmm1, xmm1, 11011000 punpckldq xmm0, xmm1
Мда, за несколько комманд можно и так =))) psllq xmm0,32 psrlq xmm0,32 psllq xmm1,32 por xmm0,xmm1 а одной какойнить командочкой по типу shufpd чтобы брала из двух регистров сразу по маске никак низя?
murder согласен, БЛЕНДы из sse4 прикольная штука, особенно с третьим регистром. Кста, помнишь я тебя спрашивал про бабочку плюс-минус в SIMD? Оказывается в SSE3 сделали paddsubd. Тока, это... Хороша ложка к обеду, этим парням из интель нужно было сразу продумать частые полезные команды, теперь их ценность минимальна оттого что они не входят в стандартный SSE2
murder в Вики еще не то можно прочитать, например 256-битные регистры будут называться YMM, а в SSE5 будет чтото вроде параллельного XLAT что сильно ускорит шифрование и кодирование.
Сделать быстрее, чем есть, не получится. Твой код и так имеет latency 2 такта на Nehalem. А параллельный XLAT уже есть. Он называется pshufb