Я нашел что-то неожиданное (для меня) с помощью анализатора кода архитектуры Intel® (IACA).
Следующая инструкция, использующая [base+index]
адресация
addps xmm1, xmmword ptr [rsi+rax*1]
не микро-предохранитель в соответствии с IACA. Однако, если я использую [base+offset]
, как этот
addps xmm1, xmmword ptr [rsi]
IACA сообщает, что он плавкий предохранитель.
В Разделе 2-11 справочного руководства по оптимизации Intel приводятся следующие примеры: "Микропроцессорные микрооперации, которые можно обрабатывать всеми декодерами"
FADD DOUBLE PTR [RDI + RSI*8]
и Руководство по сборке оптимизации Agner Fog также приводят примеры слияния микроопераций с использованием адресации [base+index]
. См., Например, раздел 12.2 "Тот же пример для Core2". Итак, какой правильный ответ?