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