Ассемблерный код, сгенерированный gcc, приводит к фатальной ошибке при сборке ARM-ассемблером
Я узнал, что ARM-компилятор armcc V5.05
не компилируется uint64_t
правильно в ассемблерный код. Он использует только один регистр вместо двух, поэтому результат усекается до 32 бит (хотя компилятор не жалуется). В качестве обходного пути я использовал компилятор gcc, поместил сгенерированный ассемблерный код в отдельный файл asm и запустил ассемблер ARM. Не удалось создать цель из-за ошибки:
Эта комбинация регистров приводит к непредсказуемому поведению
что действительно смертельно, я полагаю. После оператора C- "return" в конце функции gcc вставляет нарушающее SUB SP,R11,#0
или же ADD SP,R11,#0
команда перед командой ASM-return BX LR
, Это правда с или без uint64_t
, Могу ли я положиться на gcc или это ошибка в armcc/armasm?