"Оптимизация для PENTIUM процессора" - читать интересную книгу автораинструкции такой же, как у некоторых других неспариваемых инструкция, а
Pentium не может(не хочет) проверить второй байт, для определения возможности спаривания.) 17.3 XCHG --------- Сочетание XCHG регистр,память - опасно, т.к. по умолчанию эта инструкция имеет префикс LOCK, для предотвращения использования кеша. Следовательно эта инструкция поглощает много времени и от нее надо избавляться. 17.4 сдвиги через перенос ------------------------- RCL и RCR, с количеством сдвигаемых байт больше чем один очень медленные и от них надо избавляться. 17.5 строковые инструкции ------------------------- Строковые инструкции без префикса повторения тоже медленные и должны заменяться более простыми инструкциями. То же относиться к LOOP и JECXZ. Строковые инструкции с префиксами повторения могут быть оптимальны. Всегда, когда можете используйте версию этих инструкция с двойным словом, а так же будьте уверены, что и источник и приемник выравнены на 4. REP MOVSD - является самым быстрым способом перемещать блоки данных, когда REP STOSD - оптимален, когда приемник в кеше. REP LOADS, REP SCAS и REP CMPS - не оптимальны и могут быть замещены циклами. См. раздел 16, пример 10 как альтернативу REP SCASB. 17.6 битовое сканирование ------------------------- BSF и BSR - самые плохо оптимизированные инструкции на Pentium, беря на исполнение 11 + 2*n тактов, где n - число пропущенных нулей. (на поздних процессорах берут только 1 или 2) Следующий код эмулирует BSR ECX,EAX: TEST EAX,EAX JZ SHORT BS1 MOV DWORD PTR [TEMP],EAX MOV DWORD PTR [TEMP+4],0 FILD QWORD PTR [TEMP] FSTP QWORD PTR [TEMP] WAIT ; для совместимости с ранними процессорами MOV ECX, DWORD PTR [TEMP+4] SHR ECX,20 SUB ECX,3FFH TEST EAX,EAX ; сбрасываем флаг нуля |
|
|