Ещё возможен такой вариант:
Код
uint8_t bitrev(uint8_t byte)
{
asm("RLC A"); asm("RRCW X");
asm("RLC A"); asm("RRCW X");
asm("RLC A"); asm("RRCW X");
asm("RLC A"); asm("RRCW X");
asm("RLC A"); asm("RRCW X");
asm("RLC A"); asm("RRCW X");
asm("RLC A"); asm("RRCW X");
asm("RLC A"); asm("RRCW X");
asm("RLWA X, A");
return byte;
}
33 такта вместе с вызовом функции и возвратом.
Update
А вот такой код на 6 тактов быстрее:
Код
uint8_t bitrev(uint8_t byte)
{
asm("LD 0, A");
asm("SRL A");
asm("AND A, #0x55");
asm("LD 1, A");
asm("LD A, 0");
asm("AND A, #0x55");
asm("SLA A");
asm("OR A, 1");
asm("LD 0, A");
asm("SRL A");
asm("SRL A");
asm("AND A, #0x33");
asm("LD 1, A");
asm("LD A, 0");
asm("AND A, #0x33");
asm("SLA A");
asm("SLA A");
asm("OR A, 1");
asm("SWAP A");
return byte;
}