Und hier noch mal in C:
Mit Optimierung "-O1" sieht das so kurz aus:Code:uint8_t bitswp2_4_in_c(uint8_t byte) { uint8_t anded=byte&(uint8_t)0x14; if (anded==(uint8_t)0x14 || !anded) return byte; // bits identisch, nix ändern! return byte^0x14; // bits invertieren }
Eleganter kann ich's nicht.Code:47: uint8_t bitswp2_4_in_c(uint8_t byte) { +000000DD: 2F98 MOV R25,R24 Copy register 48: uint8_t anded=byte&0x14; +000000DE: 7184 ANDI R24,0x14 Logical AND with immediate 49: if (anded==(uint8_t)0x14 || !anded) return byte; +000000DF: 3184 CPI R24,0x14 Compare with immediate +000000E0: F021 BREQ PC+0x05 Branch if equal +000000E1: 2388 TST R24 Test for Zero or Minus +000000E2: F011 BREQ PC+0x03 Branch if equal 50: return byte^0x14; +000000E3: E184 LDI R24,0x14 Load immediate +000000E4: 2798 EOR R25,R24 Exclusive OR 51: } +000000E5: 2F89 MOV R24,R25 Copy register +000000E6: 9508 RET







Zitieren

Lesezeichen