Оптимизация для процессоров семейства Pentium: 11. Разбивка сложных инструкций на более простые (PPlain и PMMX) — Архив WASM.RU
Вы можете разбить инструкции чтения/модифицирования и инструкции чтения/модифицирования/записи, чтобы улучшить спаривание.
Пример:
Код (Text):
ADD [mem1],EAX / ADD [mem2],EBX ; 5 тактовЭтот код можно разбить на следующую последовательность, которая будет занимать только 3 такта:
Код (Text):
MOV ECX,[mem1] / MOV EDX,[mem2] / ADD ECX,EAX / ADD EDX,EBX MOV [mem1],ECX / MOV [mem2],EDXТаким же образом вы можете разбивать не спариваемые инструкции на спариваемые:
Код (Text):
PUSH [mem1] PUSH [mem2] ; не спариваетсяРазбивается на:
Код (Text):
MOV EAX,[mem1] MOV EBX,[mem2] PUSH EAX PUSH EBX ; все спариваетсяДругие примеры неспариваемых инструкций, которые можно разбить на простые спариваемые:
Код (Text):
CDQ разбивается на MOV EDX,EAX / SAR EDX,31 NOT EAX меняется на XOR EAX,-1 NEG EAX разбивается на XOR EAX,-1 / INC EAX MOVZX EAX,BYTE PTR [mem] разбивается на XOR EAX,EAX / MOV AL,BYTE PTR [mem] JECXZ разбивается на TEST ECX,ECX / JZ LOOP разбивается на DEC ECX / JNZ XLAT меняется на MOV AL,[EBX+EAX]Если разбиваение иснтрукций не повышает скорось, вы можете оставить сложные или неспариваемые конструкции, чтобы уменьшить размер кода.
Разбивание инструкций не требуется, кроме тех случаев, когда это будет генерировать меньше уопов (uops). © Агнер Фог, пер. Aquila
Оптимизация для процессоров семейства Pentium: 11. Разбивка сложных инструкций на более простые (PPlain и PMMX)
Дата публикации 22 авг 2002