Возникла задача расположить биты в байте в обратном порядке с максимальным быстродействием.
Ранее на асме сделал бы используя сдвиг через флаг переноса и это бы заняло 16 команд (не считая сохранения регистров и загрузки данных в них).
На C сделал следующее:
Код: Выделить всё
uint8_t inverse(uint8_t c){
return
((c&0x01)<<7)|
((c&0x02)<<5)|
((c&0x04)<<3)|
((c&0x08)<<1)|
((c&0x10)>>1)|
((c&0x20)>>3)|
((c&0x40)>>5)|
((c&0x80)>>7);
}Откомпилированный код выполняется более чем за 90 команд.
Вопрос к знатокам C, можно ли как то по другому это реализовать чтобы быстрее работало,
а то почти шестикратный проигрыш в скорости выполнения вызывает проблемы.
Среда AVR Studio 5.1, целевой процессор XMega128A1.