SHUFPS, UNPCKLPS, UNPCKHPS и MOVQD

Тема в разделе "WASM.ASSEMBLER", создана пользователем Black_mirror, 21 сен 2005.

  1. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Можно ли для данных загруженных при помощи MOVDQA(MOVDQU, или для данных, которые были полученны в результате целочисленных операций SSE2) использовать SHUFPS, UNPCKLPS и тому подобные команды, которые только переставляют данные, но не делают никаких вычислений? В мануалах написано что может возникать #XM, If an unmasked SIMD floating-point exception and OSXMMEXCPT in CR4 is 1. Это исключение относится к предыдущим командам или от перестановки данных оно тоже может возникнуть? Если исключения замаскированны могут данные быть искажены? (нету у меня SSE2, было бы - сам проверил)

    Если эти три команды использовать нельзя, то какими командами их можно заменить, чтобы получить те же перестановки?
     
  2. SDragon

    SDragon New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2005
    Сообщения:
    133
    Адрес:
    Siberia
    Посмотри инструкции PSHUFD, PSHUFHW, PSHUFLD.



    В Optimization Reference Manual от Intel'а показано, как с помощью 2-3 таких инструкций получать любые перестановки целочисленных операндов. Например, записать задом наперед все слова (16-битовые):
    Код (Text):
    1.                         ; 1 2 3 4 5 6 7 8
    2. pshufd xmm0, xmm0, 4Eh  ; 5 6 7 8 1 2 3 4
    3. pshufhw xmm0, xmm0, 1Bh ; 8 7 6 5 1 2 3 4
    4. pshuflw xmm0, xmm0, 1Bh ; 8 7 6 5 4 3 2 1
    [​IMG] _140006242__SSE2shufle.rar
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Black_mirror

    Использовать конечно можно. Сами перестановки никаких исключений не вызывают (SIMD Floating-Point Exceptions - None). А то, что могут возникать #XM от предыдущих операций - дык это общее правило для всех FP инструкций - эксепшены выскакивают не на самой инструкции, а на следующей FP (в результате операции лишь выставляется флаг ошибки, а проверка флага и выдача эксепшена делаются перед выполнением следующей операции).