Итак, свершилось чудо!
Было:
Код
switch_even_in_range(TBIV, &&def, &&l2, &&l4, &&l6, &&l8, &&l10, &&l12 )
{
l2:
pxTimerB1ccr1expired();
break;
l4:
pxTimerB1ccr2expired();
break;
l6:
(void)pxMBPortCBTimerExpired();
//break;
l8:
//pxTimerB1ccr4expired();
l10:
//pxTimerB1ccr5expired();
l12:
//pxTimerB1ccr6expired();
def:
}
Стало:
Код
00002b36 <Timerb_ccr1>:
2b36: 0f 12 push r15;
2b38: 0e 12 push r14;
2b3a: 0d 12 push r13;
2b3c: 0c 12 push r12;
2b3e: 1f 42 1e 01 mov &0x011e,r15;0x011e
2b42: 3f 50 04 02 add #516, r15;#0x0204
2b46: 20 4f br @r15;
2b48: 92 12 42 04 call &0x0442;
2b4c: 06 3c jmp $+14 ;abs 0x2b5a
2b4e: 05 3c jmp $+12 ;abs 0x2b5a
2b50: 92 12 20 04 call &0x0420;
2b54: 02 3c jmp $+6 ;abs 0x2b5a
2b56: 92 12 22 04 call &0x0422;
2b5a: 3c 41 pop r12;
2b5c: 3d 41 pop r13;
2b5e: 3e 41 pop r14;
2b60: 3f 41 pop r15;
2b62: 00 13 reti
свитч выродился в 2 команды (а нельзя ли в одну?)
Непонятно, почему в середине 2 джампа подряд
Цитата(Сергей Борщ @ Apr 20 2009, 11:29)

Подозреваю, что надо включить с99 с гнутыми расширениями: -std=gnu99
Спасибо, так прокатило.
Счас ещё попробую вариант klen'а с таблицей указателей на функции.
Код
00002b44 <Timerb_ccr1>:
2b44: 0f 12 push r15 ;
2b46: 0e 12 push r14 ;
2b48: 0d 12 push r13 ;
2b4a: 0c 12 push r12 ;
2b4c: 1f 42 1e 01 mov &0x011e,r15;0x011e
2b50: 0f 5f rla r15 ;
2b52: 0f 5f rla r15 ;
2b54: 9f 12 04 02 call 516(r15) ;
2b58: 3c 41 pop r12 ;
2b5a: 3d 41 pop r13 ;
2b5c: 3e 41 pop r14 ;
2b5e: 3f 41 pop r15 ;
2b60: 00 13 reti
Вот это я понимаю, оптимизация!
Спасибо всем за участие, почерпнул для себя много нового
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)