Каков порядок исходных операндов в синтаксисе AT & T по сравнению с синтаксисом Intel? - PullRequest
4 голосов
/ 26 сентября 2011

Справочная документация Intel ISA для этой инструкции ясна:

VPBLENDVB xmm1, xmm2, xmm3/m128, xmm4

Выберите значения байтов из xmm2 и xmm3/m128, используя биты маски в указанном регистре маски xmm4, и сохраните значения в xmm1.

xmm1 - пункт назначения, xmm2/3/4 - исходные операнды

Так что же станет с использованием синтаксиса AT & T? Мы знаем, что регистр назначения должен быть последним, но каков порядок исходных операндов?

vpblendvb $xmm2, $xmm3, $xmm4, $xmm1

или

vpblendvb $xmm4, $xmm3, $xmm2, $xmm1

или что-то еще?

1 Ответ

5 голосов
/ 26 сентября 2011

Сборка (обратите внимание, что GAS использует % вместо $ для обозначения регистров) следующее:

vpblendvb %xmm4, %xmm3, %xmm2, %xmm1

с ассемблером GNU (версия 2.21.0.20110327 на x86_64 2.6.38 linux) и последующей разборкой приводит к:

$ objdump -d a.out
    0:    c4 e3 69 4c cb 40     vpblendvb %xmm4,%xmm3,%xmm2,%xmm1

в синтаксисе intel (как показано в руководстве):

$ objdump -d -M intel a.out
    0:    c4 e3 69 4c cb 40     vpblendvb xmm1,xmm2,xmm3,xmm4

Похоже, порядок всех аргументов перевернут.

...