GCC hotpatching? - PullRequest
       5

GCC hotpatching?

5 голосов
/ 08 ноября 2010

Когда я компилирую этот фрагмент кода

unsigned char A[] = {1, 2, 3, 4};

unsigned int
f (unsigned int x)
{
  return A[x];
}

gcc выводит

mov edi, edi
movzx  eax, BYTE PTR A[rdi]
ret

на машине x86_64.

Вопрос: почему инструкция nop(mov edi, edi) там для?

Я использую gcc-4.4.4.

1 Ответ

3 голосов
/ 16 ноября 2010

В 64-битном режиме mov edi, edi не является запретом.Он устанавливает верхние 32 бита rdi в 0.

Это особый случай общего факта, что все 32-разрядные операции очищают верхние 32 бита регистра назначения в 64-разрядномРежим.(Это позволяет более эффективно использовать процессор, чем оставлять их без изменений, и, возможно, также более полезно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...