Использование смещений указателя быстрее, чем уменьшение в ассемблере? - PullRequest
2 голосов
/ 13 февраля 2012

Смещение указателя занимает какое-то дополнительное время?Что предпочтительнее?

mov rcx, length
dec rcx
mov rax, qword ptr [rsi+rcx*8]

или

mov rcx, length
mov rax, qword ptr [rsi+rcx*8-8]

1 Ответ

4 голосов
/ 13 февраля 2012

Использование offest должно быть предпочтительным, в современной архитектуре это может быть быстрее, но никогда не медленнее.

  • Это на одну инструкцию меньше.Декодирование команд является ограниченным ресурсом.
  • Длина кодовой последовательности на один байт короче, поскольку смещение находится в диапазоне символов.Для этого требуется меньше кэш-памяти.
  • Цепочка зависимостей на одну инструкцию короче.В вашей первой последовательности вычисление адреса должно ждать результата уменьшения.
  • Расчет адреса выполняется в отдельных единицах.При использовании сложных режимов адресации штраф не снижается.

С другой стороны, существует вероятность того, что уменьшение будет переупорядочено для более раннего выполнения, так что это не повлияет на скорость,Дополнительную информацию смотрите на http://www.agner.org/optimize/#manuals.

...