使用有什么区别:
c.eq.s $1, $2
bc1t L2
并使用:
beq $1, $2, L2
如果他们做同样的事情,为什么有两种分支方式?如果它们不同,那么它们各自的好处是什么?
谢谢
编辑:我不知道“c.eq.s”是协处理器特定的。为了与第二组代码保持一致,我只写了 $1, $2 而不是 $f1, $f2。
使用有什么区别:
c.eq.s $1, $2
bc1t L2
并使用:
beq $1, $2, L2
如果他们做同样的事情,为什么有两种分支方式?如果它们不同,那么它们各自的好处是什么?
谢谢
编辑:我不知道“c.eq.s”是协处理器特定的。为了与第二组代码保持一致,我只写了 $1, $2 而不是 $f1, $f2。
bc1t
如果数学协处理器条件位 1 为真,则指令简单地分支。如果两个寄存器相等,就是这种情况。如果值相等,则它相当于简单地分支beq
,但前提是寄存器在两种情况下实际上都是相同的寄存器。
使用 MIPS 浮点协处理器,寄存器应该$f1/$f2
在c.eq.s
指令中,这样两条指令就不会等价。除了在常规寄存器和协处理器之间移动数据的指令外,我从未见过$1/$2
浮点指令中的使用。
我认为以两步方式进行浮点条件分支的唯一方法。国家IDT MIPS Microprocessor Family Software Reference Manual
:
FP 测试和分支指令是分开的。一条测试指令比较两个 FP 值并相应地设置 FPA 条件位(FP 状态寄存器中的 C);分支指令根据该位是否设置进行分支。