Cortex-M4是否支持LDRD/STRD指令?GCC 13.2编译生成该指令存疑
关于Cortex-M4下GCC生成LDRD/STRD指令的解答
首先纠正一个认知偏差:Cortex-M4内核(基于ARMv7E-M架构)的Thumb-2指令集完全支持LDRD/STRD指令,你之前查阅的资料大概率混淆了不支持该指令的Cortex-M0/M0+系列内核。
具体解释:
- LDRD/STRD是Thumb-2扩展中的64位加载/存储指令,可一次性操作两个32位寄存器对,完成64位数据的内存读写。对于
uint64_t这类64位类型的赋值操作,相比两条独立的32位LDR/STR指令,它能减少指令数量、提升执行效率。 - 你的编译选项明确指定了目标内核为Cortex-M4(
-mcpu=cortex-m4)、架构为ARMv7E-M(-march=armv7e-m+fp),GCC会精准匹配目标硬件的指令集支持;再加上-O3的高优化级别,编译器会自动选择最高效的指令实现64位数据传输,因此生成了LDRD/STRD汇编代码。 - 额外注意:LDRD/STRD要求访问的内存地址必须是8字节对齐的,但GCC在编译
uint64_t类型变量时,会自动保证其满足对齐要求,无需手动处理。
内容的提问来源于stack exchange,提问作者wimalopaan
相关产品推荐
相关产品推荐

