| Pseudoinstructions: Set | |||||||||||||
| Instruction | Real instructions | Semantics | |||||||||||
| Set if equal: | |||||||||||||
| seq $rd, $rs, $rt | andi $rd, $rd, 0 | # | R[d] = (R[s] == R[t]) ? 1 : 0 | ||||||||||
| bne $rs, $rt, next | |||||||||||||
| ori $rd, $zero, 1 | |||||||||||||
| next: | |||||||||||||
| What's wrong with this? | |||||||||||||
| Better way: | |||||||||||||
| xor $rd, $rs, $rt | # | R[d] = ~(R[s] == R[t]) | |||||||||||
| sltiu $rd, $rd, 1 | # | R[d] = (R[d] < 1) | |||||||||||
| Set if not equal: | |||||||||||||
| sne $rd, $rs, $rt | # | R[d] = (R[s] != R[t]) ? 1 : 0 | |||||||||||
| xor $rd, $rs, $rt | # | R[d] = ~(R[s] == R[t]) | |||||||||||
| sltu $rd, $0, $rd | # | R[d] = (R[d] > 0) | |||||||||||
| Set if greater than or equal: | |||||||||||||
| sge $rd, $rs, $rt | # | R[d] = (R[s] >= R[t]) ? 1 : 0 | |||||||||||
| slt $rd, $rs, $rt | # | R[d] = (R[s] < R[t]) ? 1 : 0 | |||||||||||
| xori $rd, $rd, 1 | # | R[d] = ~R[d] | |||||||||||
| Other combinations, including unsigned: | |||||||||||||
| sgeu, sgt, sgtu, sle, sleu | |||||||||||||