Как использовать _emit в clang? - PullRequest
0 голосов
/ 10 апреля 2019

Как использовать _emit для генерации байтов в компиляторе clang?

например (в MSVC):

#define emit_nop() _asm _emit 0x90

1 Ответ

1 голос
/ 10 апреля 2019

В компиляторах, которые поддерживают расширения GNU, нет необходимости в отдельном ключевом слове emit, просто используйте встроенную сборку GNU C:

asm(".byte 0x90");   // implicitly   asm volatile

или .long для создания 32-битной константы.

Встроенный ассемблер GNU C не проанализирован для обнаружения клобберов или чего-либо еще, поэтому вы можете просто asm("nop");

Если вы хотите использовать инструкции, которые изменяют регистры, вам обычно нужно сообщить об этом компилятору с помощью встроенной сборки GNU C Extended (output / input / clobbers). См https://stackoverflow.com/tags/inline-assembly/info.

...