我发现 ARM 编译器armcc V5.05
没有uint64_t
正确编译成汇编代码。它只使用一个寄存器而不是两个,因此结果被截断为 32 位(尽管编译器没有抱怨)。作为一种解决方法,我使用了 gcc 编译器,将生成的汇编代码放入单独的 asm 文件并运行 ARM 汇编。由于以下错误,无法创建目标:
此寄存器组合导致不可预测的行为
我想这真的很致命。在函数末尾的 C-“return”语句之后,gcc 在 ASM-return 命令之前插入了一个违规SUB SP,R11,#0
或ADD SP,R11,#0
命令BX LR
。无论有没有uint64_t
. 我可以依赖 gcc 还是 armcc/armasm 中的错误?