>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Optimalizace specielně pro 586
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Platí zde v podstatě stejná pravidla jako u 486, ale přibylo pár
dalších "features". Hlavně párování NĚKTERÝCH instrukcí. Obecně
panuje názor, že lze párovat stejné instrukce.
Nu - není tomu tak.
Ač nemám Pentium, zahrabal jsem se do literatury - protože pomocí
párování lze optimalizovat kód jak pro 486 tak pro Pentium -
čtyřiosmšestce to nic neudělá a na Pentáči to poběží turbo.
(Thanx to ID Hybrid)
A zde je stručný výtah ...
Pentium se tváří jako superskalární procesor (přiznejme si že
Pentium je pouze parodií na RISCové procesory ...), to jest že může
zpracovávat více instrukcí najednou.
Nedělejte si iluzi - maximálně dvě, protože má dvě fronty ve kterých
se zpracovávají instrukce - U a V.
Jenze věci nejsou tak jednoduché jak se zdají :
do fronty U si můžete strkat jakoukoliv instrukci - jenže do fronty
V pouze tzv. "Jednoduché" instrukce.
V praxi to znamená, že pokud jdou za sebou dvě jednoduché instrukce,
mají reálnou šanci (30%), že proběhnou naráz.
Totiž - abyste rozuměli - Intel se rozhodl, že nám, programátorům,
zavaří pěkně mozečky a tak ty dvě jednoduché instrukce musí splňovat
ještě další podmínky (áááárrrgggggghhh) ...
Jo - jednoduché instrukce jsou :
práce s pamětí/registry : mov, push, pop
blízké skoky a volání : jmp, call, jc, jnc, jbe a tak ...
jednoduchá aritmetika : inc, dec, add, adc, sub, sbb,
shl, shr, rol, ror ...
logické operace : or, xor, and, cmp, test
a jiné : nop, (je taky hlt pairable nebo ne ? ;-)))
A teď ty pravidla párování (nebo párkování ?) :
• Jak bylo řečeno - obě instrukce musí být jednoduché ...
• nelze v jedné instrukci zapsat do registru a v druhé ho číst
(např. kombinace MOV eax,ebx / MOV ecx,eax)
• veškeré instrukce s prefixy nemají šanci na párování
• NESMí být použit žádný komplikovaný přístup do paměti. Tzn.
párovatelná instrukce je např. MOV AX,[ESI] ale už ne třeba
MOV AX,GS:[ESI+EBX+54]
Příklad na párování instrukcí jsem spojil s článkem o fixed-point.
výheň