2011-04-28 5 views
3

Я хочу получить доступ к значению флага состояния сопроцессора MIPS 1.Прямой флаг состояния M-сопроцессора MIPS

Например

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

Вы можете избежать ветвления с помощью условной инструкции перемещения (доступной с 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 

FCCR недоступны до MIPS32, так что вы, возможно, придется вместо этого используйте FCSR (31 доллар США).

+0

Удивительный, спасибо - вариант № 2 работал красиво. – Jason