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