<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    Skoro jsem si myslel, že už jsem to stihl zapomenout, ale podíval
    jsem se na Z80, který jsem hojně programoval v Basicu a Assembleru a
    je to tam:<br>
    RLC, RLCA, RRC, RRCA<br>
    Přímá rotace. Ten rotující bit se navíc kopíruje do CY, ale to
    nevadí.<br>
    <br>
    Ale zas posouvá jen o 1 bit, takže jednoinstrukční náhrada za
    čarování s >> a <<  to není. Ale ono se to vlastně hodí
    hlavně v situacích typu běhací světýlko, kde se stejně použije právě
    rotace o 1, tak je to jedno:-)<br>
    <br>
    A pak x86 (nevím jak 086, od Z80 jsem přeskočil na 486) má:<br>
    ROL a ROR, kde je i druhý operand na počet bitů<br>
    a umí to pro první operand velký 8, 16 a 32 bitů, registr i paměť.<br>
    <br>
    ChatGPT mi tvrdí, že dnes to jde i s 64b, ale neověřoval jsem to.<br>
    <br>
    PH<br>
    <br>
    <div class="moz-cite-prefix">Dne 11.04.2024 v 15:03 Jan Waclawek
      napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:PC1952024041115031007959bd2dd25@wekPC">
      <pre class="moz-quote-pre" wrap="">A aj pre ARM:

<a class="moz-txt-link-freetext" href="https://godbolt.org/z/ePzPqcYjo">https://godbolt.org/z/ePzPqcYjo</a>

Je tam hrozne vela prologu a epilogu, ale skutocne je to skompilovane len
do jedinej instrukcie.

Ale nie pre 8-bit. Asi ziadny 16- ci 32-bitovy procesor nema nativnu
8-bitovu rotaciu.

Mimochodom, ani AVR nema nativnu 8-bitovu rotaciu (instrukcie co sa volaju
ROR a ROL robia defacto 9-bitovu rotaciu so zahrnutim C). U PIC nahodny
pohlad do nahodnych 3 DS hovori, ze len u PIC18. STM8 ma tych shiftov asi
pol tucta, vratane 16-bitovych, ale ani jedna z nich nie je rotacia.
Skusat to s '51 na SDCC nemam chut.

wek


----- Original Message ---------------

</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap=""><a class="moz-txt-link-freetext" href="http://ahcox.com/cpp/c-compilers-generating-rotate-instructions/">http://ahcox.com/cpp/c-compilers-generating-rotate-instructions/</a>

---------- Původní e-mail ----------
Od: Pavel Hudeček <a class="moz-txt-link-rfc2396E" href="mailto:edizon@seznam.cz"><edizon@seznam.cz></a>
Komu: HW-list <a class="moz-txt-link-rfc2396E" href="mailto:hw-list@list.hw.cz"><hw-list@list.hw.cz></a>
Datum: 11.04.2024 14:09:22
Předmět: C a rotace dokola

"Při sousedním tématu jsem si vzpomněl, že mi v C někdy dost chybí rotace 
dokola. Tzn. velká část assemblerů obsahuje posuny, které dělají totéž 
co << nebo >> v C a pak ještě rotace, kde bity na konci nemizí, ale 
přelezou na začátek.

Když udělám kus kódu, který s pomocí << a nějakých obezliček realizuje 
rotaci 8bit proměnné a nezkomplikuju to, vzejde z optimalizace ta 
skutečná rotace jednou instrukcí bez pomocných věcí okolo?
</pre>
      </blockquote>
    </blockquote>
  </body>
</html>