Оптимизация размера для сборки - PullRequest
2 голосов
/ 09 января 2010

Какие еще оптимизации, например, представленные здесь `testl` eax против eax? можно применить для уменьшения размера кода?

Меня особенно интересуют однострочные оптимизации, такие как использование test eax, eax вместо cmp eax, 0 .

Спасибо.

Ответы [ 3 ]

2 голосов
/ 10 января 2010

Перемещение константных байтов со знаком (от -128 до 127) в регистры можно использовать с помощью push и pop для сохранения пары байтов.

6A09         push byte 9     ; Push byte 9 on stack
58           pop eax         ; Pop into 32-bit eax

Это три байта по сравнению с 5-байтовым эквивалентом mov

B809000000   mov eax, 9
0 голосов
/ 09 января 2010

Я нашел еще один:

add eax, 1

заменено на

inc eax
0 голосов
/ 09 января 2010

Перемещение некоторых констант в регистры может быть выполнено более эффективно без использования mov. Например, чтобы переместить ноль в rax:

xor eax, eax

Или установить rax на один:

xor eax, eax
inc eax

может использоваться eax (вместо rax), поскольку верхняя половина rax неявно очищена (спасибо за комментарий)

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