>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 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ň