Я заметил, что генератор кода GHC в настоящее время не выводит сборку, которая использует любой из нижних машинных регистров, например al
. Даже операции по размеру байтов реализованы с использованием rax
на 64 бит и eax
на 32-разрядных машинах. Однако GCC часто использует эти меньшие регистры.Каковы преимущества использования меньших регистров, например. al vs eax/rax
Есть ли реальные преимущества при использовании небольших регистров как al
?
Одно предложение, которое я слышал до сих пор является то, что опкод для inc al
меньше inc rax
(но не меньше, чем inc eax
). Существуют ли другие соображения, связанные с отсутствием производительности, для использования небольших регистров?
Некоторые инструкции по сдвигу принимают только 'cl'. В этом случае вы * обязаны * использовать небольшой регистр. – Mysticial
В дополнение к меньшему кодированию некоторые инструкции просто быстрее с 8 бит, чем 32. –
Я думаю, что ответ, как и все, подразумевается в кодировке. Я бы не использовал вывод GCC как ссылку. Документация Intel может/будет отображать кодировку для различных инструкций, и вы можете увидеть, например, если вы хотите добавить два небольших номера, которые вам не обязательно нужны на 64 бита, если, возможно, будет 16. Аналогично, один байт кода операции может выполняться для каждой команды, а не двух или более. Помимо бинарной выборки пропускной способности недвижимости, количества инструкций и размера каждого, тогда это становится проблемой микрокода, которая скрыта для нас. –