1.14. CONDITIONAL JUMPS
locret_28:
jr $ra
or $at, $zero ; branch delay slot, NOP
Do not forget about thebranch delay slots: the firstMOVEis executedbeforeBEQZ, the secondMOVEis
executed only if the branch hasn’t been taken.
1.14.5 Conclusion.
x86
Here’s the rough skeleton of a conditional jump:
Listing 1.139: x86
CMP register, register/value
Jcc true ; cc=condition code
false:
... some code to be executed if comparison result is false ...
JMP exit
true:
... some code to be executed if comparison result is true ...
exit:
ARM
Listing 1.140: ARM
CMP register, register/value
Bcc true ; cc=condition code
false:
... some code to be executed if comparison result is false ...
JMP exit
true:
... some code to be executed if comparison result is true ...
exit:
MIPS
Listing 1.141: Check for zero
BEQZ REG, label
...
Listing 1.142: Check for less than zero using pseudoinstruction
BLTZ REG, label
...
Listing 1.143: Check for equal values
BEQ REG1, REG2, label
...
Listing 1.144: Check for non-equal values
BNE REG1, REG2, label
...
Listing 1.145: Check for less than (signed)
SLT REG1, REG2, REG3
BEQ REG1, label
...