vpcmpeqb во встроенной сборке - PullRequest
1 голос
/ 07 апреля 2020

В настоящее время я пытаюсь перейти от использования NASM к использованию встроенной сборки в c, поскольку в будущем это значительно упростит связывание (особенно с встраиванием). Однако я не могу заставить мои векторные инструкции играть красиво. В сборке Intel я смог сделать следующее:

vpcmpeqb    ymm0, [rdi]

Это будет считывать 32 байта из rdi, сравнивать с ymm0 и отмечать равные байты. С AT & T я попытался сделать следующее в c встроенном ассемблере, но он просто не работает, он продолжает жаловаться на несоответствующие размеры операндов (где% 1 является входным значением "r"(s)):

vpcmpeqb    %%ymm0, %%ymm0, (%1)

Я собираю на g cc версия 9.2.1.

1 Ответ

1 голос
/ 07 апреля 2020

AT & T использует другой порядок для операндов. Чтобы исправить вашу проблему, вы должны использовать

vpcmpeqb    (%1), %%ymm0, %%ymm0

Также, прочитайте ветку под беседой для получения дополнительной информации об этой топи c.

...