йцукен (03.08.2018 16:57, просмотров: 172) ответил SciFi на Смотря что значит "смысл". Точно известно, что яр делает гораздо более оптимальный код, чем gcc, который сидит внутри атоллика. Удобство отладчиков приблизительно одинаковое, КМК. Если интересует IDE, эклипс (атоллик) гораздо приятнее, чем яр.
Про оптимизацию в ИАРе (новые приключения неуловимого Джо).
constexpr int num_bits = 24;
constexpr int num_bits_max = (1<<(num_bits-1)) - 1;
constexpr int num_bits_min = -(1<<(num_bits-1));
int ssat( int x )
{
if ( x > num_bits_max )
return num_bits_max;
else if ( x < num_bits_min )
return num_bits_min;
else
return x;
}
int foo( int x )
{
return ssat( x );
}
14 int ssat( int x )
15 {
\ _Z4ssati: (+1)
\ 00000000 0x4601 MOV R1,R0
16 if ( x > num_bits_max )
\ 00000002 0x.... LDR.N R0,??DataTable3_1 ;; 0x7fffff
\ 00000004 0x4281 CMP R1,R0
\ 00000006 0xDC03 BGT.N ??ssat_0
17 return num_bits_max;
18 else if ( x < num_bits_min )
\ 00000008 0x.... LDR.N R0,??DataTable3_2 ;; 0xff800000
\ 0000000A 0x4288 CMP R0,R1
\ 0000000C 0xBFB8 IT LT
\ 0000000E 0x4608 MOVLT R0,R1
19 return num_bits_min;
\ ??ssat_0: (+1)
\ 00000010 0x4770 BX LR ;; return
20 else
21 return x;
22 }
23
\ In section .text, align 2, keep-with-next
24 int foo( int x )
25 {
26 return ssat( x );
\ _Z3fooi: (+1)
\ 00000000 0xF300 0x0017 SSAT R0,#+24,R0
\ 00000004 0x4770 BX LR ;; return
27 }
Оптимизатор не считает нужным (возможным?) заменить тело функции ssat на инструкцию SSAT, но заменяет на неё вызов ssat. WTF? Чувствую, письмо в Спортлото будет длинным.