Что плохого в pmaddwd ?

Тема в разделе "WASM.BEGINNERS", создана пользователем alex_maslakov, 2 дек 2009.

  1. alex_maslakov

    alex_maslakov New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2009
    Сообщения:
    16
    Как мне сказали, его нужно заменить эквивалетным MMX оператором, а он, pmaddwd, дает увеличение кол-ва ненужных инструкций связанных с распаковкой данных? Или может все это зависит от контекта применения?

    Каким MMX оператором его можно заменить?
    Почему он не рекомендуется к использованию?
     
  2. airyashov

    airyashov New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2008
    Сообщения:
    12
    а почему бы не спросить того, кто посоветовал заменить
    pmaddwd - помоему это MMX инструкция и интересно что за эквивалентный ему есть оператор
     
  3. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    очевидно все кроется в названии
    PMADDWD mm, mm/m64
    The PMADDWD (Packed Multiply and Add) instruction multiplies the four signed words of the destination operand by the four signed words of the source operand. The two high-order words are summed and stored in the upper doubleword of the destination operand, and the two low-order words are summed and stored in the lower doubleword of the destination operand.
     
  4. alex_maslakov

    alex_maslakov New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2009
    Сообщения:
    16
    Задание в том, чтобы найти эквивалентную PMADDWD инструкцию на MMX. Поэтому спросить у того, кто посоветовал заменить, не могу.
     
  5. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    PMADDWD - это и есть инструкция MMX.
    Эквивалентной (читай дублирующей) команды MMX нету.
    С трудом себе представляю проц, в системе команд которого была бы куча команд делающих одно и то же.
     
  6. alex_maslakov

    alex_maslakov New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2009
    Сообщения:
    16
    cppasm зачем ты говоришь очевидные вещи? Ведь итак понятно, о чем идет речь.

    Нужно найти инструкции, которые в конечном итоге приводили бы к тому же результату, что и PMADDWD.
    Если таковых инструкций в MMX нет, то можно обойтись без него.

    И объяснить, в чем же неудобство использования PMADDWD.
     
  7. alex_maslakov

    alex_maslakov New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2009
    Сообщения:
    16
    Заменить на те, что не используют MMX.
     
  8. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    alex_maslakov
    в мануале intel картинку посмотри к инструкции PMADDWD.
     
  9. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    А зачем в каждом посте менять задание?
    Что такое оператор MMX науке вообще не известно.
    Заменить можно умножением и сложением.
    Неудобство может быть в следующем:
    src [<x3> <x2> <x1> <x0>]
    dst [<y3> <y2> <y1> <y0>]
    pmaddwd dst,src
    dst [<x3*y3+x2*y2> <x1*y1+x0*y0>]

    На входе у нас x0, x1, x2, x3, y0, y1, y2, y3 - 16 бит
    x0*y0 -> 16bit*16bit -> 32bit результат
    x1*y1 -> 16bit*16bit -> 32bit результат
    x0*y0+x1*y1 -> 32bit+32bit -> 33bit
    И того результат 33 бита, а пишется в 32битную часть MMX регистра, при этом может произойти переполнение.
    Правда насколько это проблема - я не знаю.
    Никогда не напрягало, если об этом знать :)
     
  10. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    cppasm
    Проблема с переполнением там только в случае, если все 4 операнда, которые перемножаются и складываются, равны -8000h.
     
  11. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Да, но она есть.
    Я просто других тонкостей связанных с pmaddwd вообще не вижу.