C a rotace dokola

Jan Waclawek konfera na efton.sk
Čtvrtek Duben 11 16:07:28 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í.

Hej, je to tusim priamo z 8080. Mozno by sme sa mohli pozriet aj naspat na
vsetko od 4004... ;-)


>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ěť.

OK, to som nevedel, dakujem.

ARM ako spravny RISC v podstate nevie, co je to 8 a 16 bit; takze nieco co
je 8 a 16 bit sa u neho vyskytuje len pri load/save.

wek


>
>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ší informace o konferenci Hw-list