Инструкция PMULHRSW из SSSE3

Тема в разделе "WASM.ASSEMBLER", создана пользователем Hunter, 11 окт 2006.

  1. Hunter

    Hunter New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    47
    Наверное это одна из самых "экзотических" инструкций в архитектуре x86 . Кто-нибудь знает, где ее можно применить на практике (какая-нибудь формула или алгоритм)?

    Алгоритм работы этой инструкции можно описать как:
    1) Умножить соответсвующее signed word (16 бит) из операнда1 на signed word из операнда2.
    2) Результат умножения (32-х битное число) сдвинуть вправо на 14 разрядов.
    3) К каждому полученному 18-ти битному числу прибавить 1.
    4) Взять из полученного результата 16 бит (начиная с бита 1 по бит 16 - если считать от 0), и поместить это значение на место соответсвующего signed word операнда1.
    Данный алгоритм применяется ко всем signed words.

    На C это можно представить как:
    Op1 = (short int) ( ( ((int)Op1 * Op2) >> 14 ) + 1 ) >> 1 )