Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Написанная на С "классика" со сдвигами/маскированиями/сложениями компилируется в те же 17 слов/17 тактов

Отправлено ReAl 18 июня 2007 г. 15:46
В ответ на: то же на asm AVR (+): отправлено argus98 18 июня 2007 г. 14:38

Это к вопросу о "сладком грехе преждевременной оптимизации" :-)


static inline uint8_t
get_byte_bits(uint8_t b)
{
b = (b & 0x55) + ((b > > 1) & 0x55); // 0, 1 or 2 in each bit pair
b = (b & 0x33) + ((b > > 2) & 0x33); // 0..4 in each 4 bits
b = (b + (b > > 4)) & 0x0F;
return b;
}

Перед этим в R19 загружался из ОЗУ нужный байт.


558 027e 932F mov r25,r19
560 0280 9575 andi r25,lo8(85)
561 0282 832F mov r24,r19
563 0284 8695 lsr r24
564 0286 8575 andi r24,lo8(85)
565 0288 980F add r25,r24
567 028a 892F mov r24,r25
568 028c 8695 lsr r24
569 028e 8695 lsr r24
570 0290 8373 andi r24,lo8(51)
571 0292 9373 andi r25,lo8(51)
573 0294 980F add r25,r24
577 0296 892F mov r24,r25
578 0298 8295 swap r24
579 029a 8F70 andi r24,0x0f ; -- единственная "лишняя" команда
580 029c 980F add r25,r24
581 029e 9F70 andi r25,lo8(15)

Даже меньше было бы - С компилятор на сдвиг b на 4 вправо "по привычке" поставил маскирование, хотя в данном конкретном случае это не нужно.

Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 90:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru