Прогнал этот код в IAR 6.30.4 для ARM:
Код
volatile unsigned char v1 = 1;
volatile unsigned char v2 = 255;
volatile unsigned char v3 = 2;
int result;
if (v1 == (v2+v3)) result = 0;
else result = 1;
результат - result = 1;
Сравнение производится в интах:
Код
\ 00000044 0xF89D 0x0002 LDRB R0,[SP, #+2]
\ 00000048 0xF89D 0x1001 LDRB R1,[SP, #+1]
\ 0000004C 0xF89D 0x2000 LDRB R2,[SP, #+0]
\ 00000050 0x1851 ADDS R1,R2,R1
\ 00000052 0x4288 CMP R0,R1
\ 00000054 0xBF0C ITE EQ
\ 00000056 0x2100 MOVEQ R1,#+0
\ 00000058 0x2101 MOVNE R1,#+1
Всё нормально у ИАРа со стандартами.
А вот оптимизатор слабенький и всё ещё не дотягивает до оного в Кейле