inst | opcode | control | muxi
|
---|
br0x06 | 0x08 | 00
| cmpgei0x08 | 0x0b | 01
| bge0x0E | 0x0b | 00
| cmplti0x10 | 0x0a | 01
| blt0x16 | 0x0a | 00
| cmpnei0x18 | 0x09 | 01
| bne0x1E | 0x09 | 00
| cmpeqi0x20 | 0x08 | 01
| beq0x26 | 0x08 | 00
| cmpgeui0x28 | 0x0f | 01
| bgeu0x2E | 0x0f | 00
| cmpltui0x30 | 0x0e | 01
| bltu0x36 | 0x0e | 00
| | | | | | | | | | | | | |
| |
control | inst
| control | inst | code | description
|
---|
0x08 | 01000 | cmpeq
|
|
| == | a equals b
| 0x09 | 01001 | cmpne
|
|
| != | a not equal to b
| 0x0a | 01010 | cmplt
0x0e | 01110 | cmpltu
< | a less than b
| 0x0b | 01011 | cmpge
0x0f | 01111 | cmpgeu
>= | a not less than b
| | | | | | |
examine flags for a − b (either signed or
unsigned)
mode = control[2]? unsigned: signed
test = control[1]? neg: zero
cmp = control[0]? test: !test
muxi = 01 | compare | rA compared
to se(IMM16)
| muxi = 00 | branch | rA compared
to rB
|
do_compare = control[5:3] == 3'b001
ibranch = do_compare && !muxc[0]
|