ассемблерный код, сгенерированный gcc, приводит к фатальной ошибке при сборке ARM-ассемблером - PullRequest
0 голосов
/ 01 ноября 2018

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

...