直接访问MIPS协处理器条件标志

时间:2011-04-28 02:20:42

标签: assembly branch mips spim

我希望访问MIPS协处理器1条件标志的值。

例如

c.eq.s $f4 $f6
move $t0 condflag1 #clearly illegal

我知道以下是可能的:

c.eq.s $f4 $f6
bc1f L_CondFalse
li $t0 0
j L_CondEnd
L_CondFalse : li $t0 1
L_CondEnd :

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您可以通过使用条件移动指令(从MIPS32开始可用)来避免分支。

li     $t0, 1          # move 1 into t0
c.eq.s $f4, $f6        # compare f4 and f6; set FCC[0] to the result
movt   $t0, $0, $fcc0  # move 0 into t0 if comparison was true

(未经测试)

另一个选择是将FCCR移动到GPR并读取位0。

cfc1   $t0, $25  # load FCCR into t0
andi   $t0, 1    # mask the bit 0 only

FCIPS在MIPS32之前不可用,因此您可能不得不使用FCSR(31美元)。