在 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!