Clang无法识别MIPS双精度浮点寄存器$d0等命名的问题排查
解决MIPS汇编中$d寄存器命名识别问题
问题分析
你构建的LLVM 18.0.0 MIPS交叉编译器,在编译使用$d0-$d15双精度寄存器名的汇编代码时报错,核心原因是LLVM的MIPS汇编器默认未启用AFGR64(Alternate Floating-Point Register)寄存器命名模式,即便目标架构是支持该特性的MIPSII。
解决方案
编译时添加-mattr=+afgr64选项,完整命令如下:
<llvm-path>/llvm-project/build/bin/clang -c asm.S -march=mips2 -mfp32 -mattr=+afgr64
原理说明
$d0-$d15属于AFGR64寄存器集的别名,每个$d寄存器对应两个连续的$f寄存器(如$d0对应$f0+$f1)。- LLVM中MIPS目标的AFGR64特性默认未开启,必须通过
-mattr=+afgr64显式指定,汇编器才会识别这类寄存器命名。 - 你之前添加的
-march=mips2和-mfp32仅指定了架构和浮点寄存器宽度,但未开启AFGR64别名支持。
内容的提问来源于stack exchange,提问作者noji
相关产品推荐
相关产品推荐

