3

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 :

何か案は?

4

1 に答える 1

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

(未検証)

もう 1 つのオプションは、FCCR を GPR に移動し、ビット 0 を読み取ることです。

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

FCCR は MIPS32 より前では使用できないため、代わりに FCSR ($31) を使用する必要がある場合があります。

于 2011-04-28T09:34:24.120 に答える