Witam
Ostatnio mam taki problem: potrzebuję zamienić starszą część z młodszą w zmiennej jedno-bajtowej. Możemy nawet założyć, że znajduje się ona już w jednym z rejestrów mikrokontrolera. AVRy mają instrukcję swap - to jest dokładnie to, czego potrzebuję. Ale co napisać w C/C++, aby kompilator skompilował to do jednej instrukcji w kodzie maszynowym (właśnie swap)?
Próbowałem np.
t1=(t1*16)+(t1/16);
albo
t1=(t1*16)||(t1/16);
ale kompilator sobie nie radzi i tworzy z tego ciąg co najmniej kilku instrukcji (mam włączoną opcję optymalizacji wielkości kodu).
Chwilowo problem rozwiązałem wstawką asemblera: asm("swap r26\n"); ale jest to rozwiązanie mało eleganckie, bo jak kompilator ulokuje mi moją zmienną t1 w innym rejestrze, to będę musiał ręcznie zmienić r26 na coś innego.
Macie jakiś pomysł?