C a rotace dokola

Jan Waclawek konfera na efton.sk
Čtvrtek Duben 11 15:09:48 CEST 2024


Dokelu, neodolal som.

SDCC z roku 2013 to zvladol:

#include <stdint.h>

volatile uint8_t a;

int main(void) {
  uint8_t b;

  b = a;
  a = (b >> 7) | (b << 1);
  b = a;
  a = (b >> 1) | (b << 7);
  while(1);
}



  0062                     127 _main:
                     0007   128 	ar7 = 0x07
                     0006   129 	ar6 = 0x06
                     0005   130 	ar5 = 0x05
                     0004   131 	ar4 = 0x04
                     0003   132 	ar3 = 0x03
                     0002   133 	ar2 = 0x02
                     0001   134 	ar1 = 0x01
                     0000   135 	ar0 = 0x00
                            136 ;	dm.c:8: b = a;
                            137 ;	dm.c:9: a = (b >> 7) | (b << 1);
   0062 E5 08         [12]  138 	mov	a,_a
   0064 23            [12]  139 	rl	a
   0065 F5 08         [12]  140 	mov	_a,a
                            141 ;	dm.c:10: b = a;
                            142 ;	dm.c:11: a = (b >> 1) | (b << 7);
   0067 E5 08         [12]  143 	mov	a,_a
   0069 FF            [12]  144 	mov	r7,a
   006A 03            [12]  145 	rr	a
   006B F5 08         [12]  146 	mov	_a,a
                            147 ;	dm.c:12: while(1);
   006D                     148 00102$:
   006D 80 FE         [24]  149 	sjmp	00102$


wek



----- Original Message ---------------
>Na 8bitu netu±ím, ale na ARMU to určitě GCC i CLANG umí.
>
>Přesněji, na 8051 pouµívám prastarý kompilátor, který to neumí, ale dá
>se pouµít ebedded asm, tak to tolik nevadí.
>
>Tomá±
>
>
>> 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?
>
>> PH



Další informace o konferenci Hw-list