MIPS mtc1 & mthc1 组合使用问题

在 Port SpiderMonkey MIPS N32 时,有个测试始终跑不过,调试定位到一个 double 类型的立即数装载到 FPR 时用了大概这样的一个指令序列:

li t0, 0x41dfffff
mthc1 t0, $f21
li t0, 0xf2400000
mtc1 t0, $f21

结果 $f21 就杯具的等于了 0x00000000f2400000

查找手册后发现 mtc1 指令将 GPR 的低32位移动到 FPR 的低32位后,FPR 的高32位的值是未定义的,龙芯3上实测值是 0,解决方法是先做 mtc1,再做 mthc1。

Over!

Leave a Reply

Your email address will not be published. Required fields are marked *