I've port C source from C51 to CARM but CARM compiler seem has bug in comparison.
#include <lpc210x.h> //DKARM 1.3h //---------- //AA MACRO ASSEMBLER V0.10a //CA ARM COMPILER V0.10a //LA ARM LINKER/LOCATER V0.10c unsigned char test(void) { return(0xEE); } void main(void) { unsigned char K; K=test(); if ((K&0x0F)!=0x0F) { //0xEE&0x0F=>0x0E //0x0E!=0x0F //but this block don't enter while (1); } else { while (1); } }
while (1) is just simple code to show where block are entered to executed. Ithe above case, if you see the disassembly windows while debugging. You will see comparison of R0 (0xEE) with R1 (0x0F), thats seem the CARM don't mask significant bits (3:0) before compare. Thanks.
This case don't related with optimization.
This looks like a compiler problem. I've already reported it to engineering. Jon