Можно ли для данных загруженных при помощи MOVDQA(MOVDQU, или для данных, которые были полученны в результате целочисленных операций SSE2) использовать SHUFPS, UNPCKLPS и тому подобные команды, которые только переставляют данные, но не делают никаких вычислений? В мануалах написано что может возникать #XM, If an unmasked SIMD floating-point exception and OSXMMEXCPT in CR4 is 1. Это исключение относится к предыдущим командам или от перестановки данных оно тоже может возникнуть? Если исключения замаскированны могут данные быть искажены? (нету у меня SSE2, было бы - сам проверил) Если эти три команды использовать нельзя, то какими командами их можно заменить, чтобы получить те же перестановки?
Посмотри инструкции PSHUFD, PSHUFHW, PSHUFLD. В Optimization Reference Manual от Intel'а показано, как с помощью 2-3 таких инструкций получать любые перестановки целочисленных операндов. Например, записать задом наперед все слова (16-битовые): Код (Text): ; 1 2 3 4 5 6 7 8 pshufd xmm0, xmm0, 4Eh ; 5 6 7 8 1 2 3 4 pshufhw xmm0, xmm0, 1Bh ; 8 7 6 5 1 2 3 4 pshuflw xmm0, xmm0, 1Bh ; 8 7 6 5 4 3 2 1 _140006242__SSE2shufle.rar
Black_mirror Использовать конечно можно. Сами перестановки никаких исключений не вызывают (SIMD Floating-Point Exceptions - None). А то, что могут возникать #XM от предыдущих операций - дык это общее правило для всех FP инструкций - эксепшены выскакивают не на самой инструкции, а на следующей FP (в результате операции лишь выставляется флаг ошибки, а проверка флага и выдача эксепшена делаются перед выполнением следующей операции).