Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: GCC-AVR Linux оптимизация
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
ZiB
Не могу добится нормальной оптимизации...
Код без оптимизации (для Atmega8)
Код
     282:    8d 85           ldd    r24, Y+13; 0x0d
     284:    99 27           eor    r25, r25
     286:    80 74           andi    r24, 0x40; 64
     288:    90 70           andi    r25, 0x00; 0
     28a:    00 97           sbiw    r24, 0x00; 0
     28c:    41 f0           breq    .+16     ; 0x29e
     28e:    a2 e3           ldi    r26, 0x32; 50
     290:    b0 e0           ldi    r27, 0x00; 0
     292:    e2 e3           ldi    r30, 0x32; 50
     294:    f0 e0           ldi    r31, 0x00; 0
     296:    80 81           ld    r24, Z
     298:    80 68           ori    r24, 0x80; 128
     29a:    8c 93           st    X, r24
     29c:    08 c0           rjmp    .+16     ; 0x2ae
     29e:    a2 e3           ldi    r26, 0x32; 50
     2a0:    b0 e0           ldi    r27, 0x00; 0
     2a2:    e2 e3           ldi    r30, 0x32; 50
     2a4:    f0 e0           ldi    r31, 0x00; 0
     2a6:    90 81           ld    r25, Z
     2a8:    8f e7           ldi    r24, 0x7F; 127
     2aa:    89 23           and    r24, r25
     2ac:    8c 93           st    X, r24

после оптимизации "висячая" команда (eor r25, r25) мне не нравится...
Код
  d0:    99 27           eor    r25, r25
  d2:    86 ff           sbrs    r24, 6
  d4:    02 c0           rjmp    .+4      ; 0xda
  d6:    5f 9a           sbi    0x0b, 7; 11
  d8:    01 c0           rjmp    .+2      ; 0xdc
  da:    5f 98           cbi    0x0b, 7; 11

Сишний код
Код
  if ((Data & 0x40) == 0x40) PORTD |= 0x80;
    else PORTD &= ~0x80;
Andy Great
А что смущает? В R25 загоняется "0", который потом используется в более быстрых (чем с константами) регистровых операциях. Может оказаться, что этот "0" не окажется нужным впоследствии, тогда эту команду можно "прооптимизировать". Не всегда оптимизатор срабатывает оптимальным образом...
ZiB
В коде размером 704 байта, таких команд на 74 байта, спрашивается за чем? И почему так ужасно оптимизирует? Как вы теперь думаете что меня смущает?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.