C a rotace dokola

Pavel Hudeček edizon na seznam.cz
Čtvrtek Duben 11 15:55:03 CEST 2024


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:
RLC, RLCA, RRC, RRCA
Přímá rotace. Ten rotující bit se navíc kopíruje do CY, ale to nevadí.

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:-)

A pak x86 (nevím jak 086, od Z80 jsem přeskočil na 486) má:
ROL a ROR, kde je i druhý operand na počet bitů
a umí to pro první operand velký 8, 16 a 32 bitů, registr i paměť.

ChatGPT mi tvrdí, že dnes to jde i s 64b, ale neověřoval jsem to.

PH

Dne 11.04.2024 v 15:03 Jan Waclawek napsal(a):
> A aj pre ARM:
>
> https://godbolt.org/z/ePzPqcYjo
>
> 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 ---------------
>
>> http://ahcox.com/cpp/c-compilers-generating-rotate-instructions/
>>
>> ---------- Původní e-mail ----------
>> Od: Pavel Hudeček<edizon na seznam.cz>
>> Komu: HW-list<hw-list na list.hw.cz>
>> 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?
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240411/47623965/attachment.htm>


Další informace o konferenci Hw-list