Умножение/деление на MMX

Тема в разделе "WASM.BEGINNERS", создана пользователем Relic, 1 апр 2008.

  1. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    В регистре в младших разрядах сидит значение:
    MOVD MM0,EAX // 00 00 00 00 B7 58 58 58
    в MM1 находится множитель (B7) // 00 B7 00 B7 00 B7 00 B7
    Как теперь умножить каждый из этих 4-х байт (B7 58 58 58) на B7, а результат (word) поделить соответственно на 256 (shr 8)? Подскажите, плиз?
     
  2. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Код (Text):
    1. pxor        mm3, mm3
    2. punpcklbw   mm0, mm3
    3. pmullw      mm0, mm1
    4. psrlw       mm0, 8
    Вроде так
    Последнюю команду может можно как заменить, хз
     
  3. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    KeSqueer
    Да, похоже так, спасибо.
    Только вот смущает, что не соблюдается paring в первых двух строчках: целевой регистр ММХ-инструкции, попавшей в u-конвейер, не должен совпадать с регистром-источником инструкции, попавшей на v-конвейер.
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Relic
    У тебя еще сохранился PMMX ?
    В P2 и выше никаких u\v конвееров нет, и за счет изменения порядка выполнения микроопераций независимый pxor может выполниться раньше movd mm0,eax