Я обнаружил, что 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?