Прямой доступ к флагу состояния MIPS-сопроцессора - PullRequest
3 голосов
/ 28 апреля 2011

Я хочу получить доступ к значению флага состояния сопроцессора 1 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 :

Есть идеи?

1 Ответ

4 голосов
/ 28 апреля 2011

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

...