Код
float *val = &AverageAngles[j][i];
if ((*(long *)val & 0x7f800000) != 0x7f800000)
sum += *val;
Пытаюсь обезопаситься от Nan и бесконечности. Гляжу на систему команд ARM и вижу, что можно одной командой загрузить в регистр число до 8-ми рядом стоящих еденичных бит, сдвинутых на любой сдвиг. Вроде бы число 0x7f800000 как раз подходит под это правило, но компилятор EWARM 4.20 не хочет так делать. Он почему-то только 7 бит может в одной команде загрузить. Вот:if ((*(long *)val & 0x7f800000) != 0x7f800000)
sum += *val;
Код
0x00003E78 E3A0B440 MOV R11, #0x40000000
0x00003E7C E38BB5FE ORR R11, R11, #0x3F800000
Кто знает, почему?
0x00003E7C E38BB5FE ORR R11, R11, #0x3F800000