Что вижу:
Передача double числа в качестве единственного параметра в функцию для IAR и для gcc приводит разному расположению частей double числа в регистрах R0:R1.
Тип - little-endian, процессор один и тот же.
Как воспроизвожу:
во время вызова
double function (double x);
a = function (2.0);
в IAR число 2.0 попадает как
R0 0x00000000
R1 0x40000000
в gcc число 2.0 попадает как
R0 0x40000000
R1 0x00000000
Теория:
Говорит о том, что long long, double и прочие больше 32-бит попадают в последовательные регистры R0:R1 или R2:R3.
Либо покажите где есть уточнения.
Как мне код-то писать на асме?
Стандартного разделения на big и little endian'а получается, что уже не хватает. Ещё привязываться и к компилятору? Или скажите какие вы видите результаты под разными компиляторами?
IAR 6.30.1
gcc 4.4.0
CPU - ARM Cortex.