Prefixy
                                   -=-=-=-=-

      "Today's robots are very primitive, capable of understanding only a
       few simple instructions such as 'go left', 'go right', and 'build
                                     car'."
                                 --John Sladek

          Intel pro přidání 32bitových  instrukcí použil takzvaný  prefix.
      To je věc, která se napíše před instrukci a ta se rázem změní z 16ti
      bitové na 32 bitovou.  Provedení tohoto  prefixu ale trvá celý takt.
      Tím pádem 32 bitové  sčítání je dvakrát  pomalejší. Na pentiu  navíc
      tyto instrukce  nemohou do druhé  pipeliny a proto je provádění kódu
      s prefixy  až  několikanásobně  pomalejší.  Situace  je ještě  horší
      u novějších procesorů.

          Aby  toho ale  nebylo  dost,  vyvojáři  Intelu se rozhodli  toto
      nějak  obejít.  Přidali ještě možnost  nastavit kusu kódu (segmentu)
      příznak,  který  určuje,  jestli  kód je 32 bitový.  Pokud je  tento
      příznak nastaven,  instrukce jsou automaticky 32 bitové (nepotřebují
      tedy  prefix).  Naopak 16ti bitové  instrukce ale prefix  potřebují.
      Tím pádem naopak  sčítání v 16 ti bitech je zcela nelogicky  dvakrát
      pomalejší, než 32 bitové.

          To  má  první  praktický  dopad  pro  programování.  Narozdíl od
      například Borland C, GCC generuje 32 bitový kód. Proto je i velikost
      intu  4  bajty. Provádění kódu obsahující inty by tedy být přibližně
      stejně  rychlé  v Borland C i GCC pouze s tím rozdílem, že v případě
      GCC budou všechny výpočty 32 bitové a budou brát tedy větší čísla.

          Není to úplně pravda. 32 bitové  programy  většinou  dneska běží
      o něco rychelji,  protože novější  procesory jsou výrazně  rychlejší
      v případě 32 bitového  kódu. GCC navíc lépe  optimalizuje. Na druhou
      stranu ale 386 (zejména SX) chroustá 32 bitů pomaleji.

          Shorty a longy ale  zůstávají na obou  překladačích  stejné  (16
      a 32 bitů)  proto kód používající  shorty je na BC ryhlejší a naopak
      kód  používající  longy je  rychlejší  na GCC. Z toho  lze  vyvodit,
      že by se člověk měl snažit  používat všude 32 bitové  hodnoty, pokud
      možno nepoužívat  shorty a nahradit je intama.  Přesto, že to vypadá
      neuvěřitelně, pomůže to.

          Dokonce i proměné  typu  char (8 mi  bitové)  potřebují  prefix.
      Proto  je  často  lepší  počítat v intech.  Není  to  ale  už  úplně
      pravidlem,  protože 8mi bitových  regitrů je více, než 16ti bitových
      a 32 bitových a proto se někdy  ušetří  práce ze zásobníkem.  Prefix
      pro  8mi  bitové  instrukce je také na Pentiu a PentiuPro rychlejší,
      než prefix pro 16ti bitové instrukce.

          V případě  použití polí to  také může být úplně  jinak. Někdy se
      pole shortů či charů ještě  vejde do cache  (která je na pentiu 4KB)
      zatímco  inty už ne.  Přístup do takové  paměti je potom  pomalejší.
      Tady nezbýva, než experimentovat.


            výheň