You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CFI指令中正确配置MIPS浮点寄存器的调用帧信息?

MIPS浮点寄存器CFI信息编写错误修正

问题场景

尝试编写MIPS架构下保存浮点寄存器的调用帧信息(CFI),汇编代码如下:

.text

  .cfi_startproc

  addiu $sp, $sp, -4
  .cfi_adjust_cfa_offset 4
  swc1 $f24, 4($sp)
  .cfi_rel_offset $f24, 0

  .cfi_endproc

执行编译命令:

mipsel-linux-gnu-gcc ~/test.S -c

出现错误:

/home/yugr/test.S: Assembler messages:
/home/yugr/test.S:8: Error: bad register expression

解决方案

错误原因是MIPS的.cfi_rel_offset指令不支持带$f前缀的浮点寄存器名,必须使用浮点寄存器的数字编号。

修正后的代码:

.text

  .cfi_startproc

  addiu $sp, $sp, -4
  .cfi_adjust_cfa_offset 4
  swc1 $f24, 4($sp)
  .cfi_rel_offset 24, 0  # 用寄存器编号24替代$f24

  .cfi_endproc

说明

MIPS浮点寄存器的编号规则为:$f0对应编号0,$f1对应1,……,$f31对应31。直接使用数字编号即可让汇编器正确解析CFI指令。

内容的提问来源于stack exchange,提问作者yugr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:25:26