Seems to be a (over)simplified variant of pi32v2, which even lacks some features of pi32..
Between q32s and pi32/pi32v2, the differences are:
16 general purpose registers, r0
through r15
.
Unlike pi32v2, there isn’t any “doubled” registers (r0_r1
- r14_r15
),
as well as any associated operations like multiply-accumulate operations and alike.
Number | Name | Description |
---|---|---|
sr0 | reti | Interrupt return address |
sr1 | rete | Emulation return address |
sr2 | retx | eXception return address |
sr3 | rets | Subroutine return address |
sr4 | ||
sr5 | psr | Processor status register |
sr6 | cnum | |
sr7 | ||
sr8 | ||
sr9 | ||
sr10 | ||
sr11 | icfg | Interrupt config |
sr12 | usp | User mode stack pointer |
sr13 | ssp | Supervisor mode stack pointer |
sr14 | sp | Stack pointer |
sr15 | pc | Program counter |
000000000000000- nop
000000000000001- idle
000000000000010- bkpt
000000000000011- hbkpt
000000000000100- csync
000000000000101- ssync
000000000000110- syscall
00000000000100-- lockclr
00000000000101-- lockset
00000000000110-- cli
00000000000111-- sti
000000000010000- rts
000000000010001- rti
000000000010010- rtx
000000000010011- rte
0000000000101Xxx swi `Xxx`
00000000001100-- pc = [sp++]
00000000001101-- [--sp] = rets
000000000011100- cc = 0
000000000011101- cc = 1
0000000000111100 sp = usp
0000000000111101 sp = ssp
0000000000111110 usp = sp
0000000000111111 ssp = sp
00000000010-Xxxx testset b[r`Xxxx`]
000000000110Xxxx cli r`Xxxx`
000000000111Xxxx sti r`Xxxx`
000000001000Xxxx call r`Xxxx`
000000001001Xxxx goto r`Xxxx`
000000001010Xxxx tbb [r`Xxxx`]
000000001011Xxxx tbh [r`Xxxx`]
000000001100Xxxx pfetch [r`Xxxx`]
000000001101Xxxx iflush [r`Xxxx`]
000000001110Xxxx flush [r`Xxxx`]
000000001111Xxxx flushinv [r`Xxxx`]
0000000100-00000 {r3-r0} = [sp++]
0000000100-00001 {r3-r1} = [sp++]
0000000100-00010 {r3, r2} = [sp++]
0000000100-00011 {r3} = [sp++]
0000000100-00100 {r4} = [sp++]
0000000100-00101 {r5, r4} = [sp++]
0000000100-00110 {r6-r4} = [sp++]
0000000100-00111 {r7-r4} = [sp++]
0000000100-01000 {r8-r4} = [sp++]
0000000100-01001 {r9-r4} = [sp++]
0000000100-01010 {r10-r4} = [sp++]
0000000100-01011 {r11-r4} = [sp++]
0000000100-01100 {r12-r4} = [sp++]
0000000100-01101 {r13-r4} = [sp++]
0000000100-01110 {r14-r4} = [sp++]
0000000100-01111 {r15-r4} = [sp++]
0000000100-10000 {rets, r3-r0} = [sp++]
0000000100-10001 {rets, r3-r1} = [sp++]
0000000100-10010 {rets, r3, r2} = [sp++]
0000000100-10011 {rets, r3} = [sp++]
0000000100-10100 {rets, r4} = [sp++]
0000000100-10101 {rets, r5, r4} = [sp++]
0000000100-10110 {rets, r6-r4} = [sp++]
0000000100-10111 {rets, r7-r4} = [sp++]
0000000100-11000 {rets, r8-r4} = [sp++]
0000000100-11001 {rets, r9-r4} = [sp++]
0000000100-11010 {rets, r10-r4} = [sp++]
0000000100-11011 {rets, r11-r4} = [sp++]
0000000100-11100 {rets, r12-r4} = [sp++]
0000000100-11101 {rets, r13-r4} = [sp++]
0000000100-11110 {rets, r14-r4} = [sp++]
0000000100-11111 {rets, r15-r4} = [sp++]
0000000101010000 {pc, r3-r0} = [sp++]
0000000101010001 {pc, r3-r1} = [sp++]
0000000101010010 {pc, r3, r2} = [sp++]
0000000101010011 {pc, r3} = [sp++]
0000000101010100 {pc, r4} = [sp++]
0000000101010101 {pc, r5, r4} = [sp++]
0000000101010110 {pc, r6-r4} = [sp++]
0000000101010111 {pc, r7-r4} = [sp++]
0000000101011000 {pc, r8-r4} = [sp++]
0000000101011001 {pc, r9-r4} = [sp++]
0000000101011010 {pc, r10-r4} = [sp++]
0000000101011011 {pc, r11-r4} = [sp++]
0000000101011100 {pc, r12-r4} = [sp++]
0000000101011101 {pc, r13-r4} = [sp++]
0000000101011110 {pc, r14-r4} = [sp++]
0000000101011111 {pc, r15-r4} = [sp++]
0000000101100000 [--sp] = {r3-r0}
0000000101100001 [--sp] = {r3-r1}
0000000101100010 [--sp] = {r3, r2}
0000000101100011 [--sp] = {r3}
0000000101100100 [--sp] = {r4}
0000000101100101 [--sp] = {r5, r4}
0000000101100110 [--sp] = {r6-r4}
0000000101100111 [--sp] = {r7-r4}
0000000101101000 [--sp] = {r8-r4}
0000000101101001 [--sp] = {r9-r4}
0000000101101010 [--sp] = {r10-r4}
0000000101101011 [--sp] = {r11-r4}
0000000101101100 [--sp] = {r12-r4}
0000000101101101 [--sp] = {r13-r4}
0000000101101110 [--sp] = {r14-r4}
0000000101101111 [--sp] = {r15-r4}
0000000101110000 [--sp] = {rets, r3-r0}
0000000101110001 [--sp] = {rets, r3-r1}
0000000101110010 [--sp] = {rets, r3, r2}
0000000101110011 [--sp] = {rets, r3}
0000000101110100 [--sp] = {rets, r4}
0000000101110101 [--sp] = {rets, r5, r4}
0000000101110110 [--sp] = {rets, r6-r4}
0000000101110111 [--sp] = {rets, r7-r4}
0000000101111000 [--sp] = {rets, r8-r4}
0000000101111001 [--sp] = {rets, r9-r4}
0000000101111010 [--sp] = {rets, r10-r4}
0000000101111011 [--sp] = {rets, r11-r4}
0000000101111100 [--sp] = {rets, r12-r4}
0000000101111101 [--sp] = {rets, r13-r4}
0000000101111110 [--sp] = {rets, r14-r4}
0000000101111111 [--sp] = {rets, r15-r4}
0000000110FEDCBA {sr`ABCDEF` <sr0-sr5>} = [sp++]
0000000111FEDCBA [--sp] = {sr`ABCDEF` <sr0-sr5>}
0000001Aaaaa0Xxx r`Xxx` = [sp + `Aaaaa00`]
0000001Aaaaa1Xxx [sp + `Aaaaa00`] = r`Xxx`
0000010Yyy00Xxxx r`Xxxx` = r`Yyy`.b0 (u)
0000010Yyy01Xxxx r`Xxxx` = r`Yyy`.b0 (s)
0000010Yyy10Xxxx r`Xxxx` = r`Yyy`.l (u)
0000010Yyy11Xxxx r`Xxxx` = r`Yyy`.l (s)
0000011AaaaaXxxx r`Xxxx` = s`1Aaaaa`
00001000YyyyXxxx r`Xxxx` = r`Yyyy`
00001001YyyyXxxx r`Xxxx` += r`Yyyy`
0000101Aaaaaaaa- sp += s`Aaaaaaaa00`
0000110Yyy00Xxxx r`Xxxx` <<= r`Yyy`
0000110Yyy01Xxxx r`Xxxx` <<<= r`Yyy`
0000110Yyy10Xxxx r`Xxxx` >>= r`Yyy`
0000110Yyy11Xxxx r`Xxxx` >>>= r`Yyy`
0000111ZzzYyyXxx r`Xxx` = r`Yyy` * r`Zzz`
00010Aaaaaaaaaaa call s`Aaaaaaaaaaa0`
00011Aaaaaaaaaaa goto s`Aaaaaaaaaaa0`
0010XxxAaaaaaaaa if (r`Xxx` == 0) goto s`Aaaaaaaaa0`
0011XxxAaaaaaaaa if (r`Xxx` != 0) goto s`Aaaaaaaaa0`
0100YyyAaaaa0Xxx r`Xxx` = [r`Yyy` + `Aaaaa00`]
0100YyyAaaaa1Xxx [r`Yyy` + `Aaaaa00`] = r`Xxx`
0101YyyAaaaa0Xxx r`Xxx` = h[r`Yyy` + `Aaaaa0`] (u)
0101YyyAaaaa1Xxx h[r`Yyy` + `Aaaaa0`] = r`Xxx`
0110YyyAaaaa0Xxx r`Xxx` = b[r`Yyy` + `Aaaaa`] (u)
0110YyyAaaaa1Xxx b[r`Yyy` + `Aaaaa`] = r`Xxx`
0111AaaaaaaaXxxx r`Xxxx` = s`Aaaaaaaa`
1000AaaaaaaaXxxx r`Xxxx` += s`Aaaaaaaa`
1001YyyAaaaaXxxx r`Xxxx` = r`Yyy` + `Aaaaa`
1010AaaaaaaaXxxx r`Xxxx` = sp + `Aaaaaaaa`
1011ZzzYyy00Xxxx r`Xxxx` = r`Zzz` + r`Yyy`
1011Sssss001Xxxx r`Xxxx` |= `(1<<'Sssss')`
1011Yyy00101Xxxx r`Xxxx` |= r`Yyy`
1011Yyy01101Xxxx r`Xxxx` ^= r`Yyy`
1011Yyy10101Xxxx r`Xxxx` &= r`Yyy`
1011Yyy11101Xxxx r`Xxxx` = ~r`Yyy`
1011ZzzYyy10Xxxx r`Xxxx` = r`Zzz` - r`Yyy`
1011Sssss011Xxxx r`Xxxx` ^= `(1<<'Sssss')`
1011Sssss111Xxxx r`Xxxx` &= `~(1<<'Sssss')`
11000SssssYyyXxx r`Xxx` = r`Yyy` << `Sssss`<0==32>
11001SssssYyyXxx r`Xxx` = r`Yyy` <<< `Sssss`<0==32>
11010SssssYyyXxx r`Xxx` = r`Yyy` >> `Sssss`<0==32>
11011SssssYyyXxx r`Xxx` = r`Yyy` >>> `Sssss`<0==32>
1110AaaaaaaaXxxx|0000Bbbbbbbbbbbb eq> if (r`Xxxx` == s`Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
1110AaaaaaaaXxxx|0001Bbbbbbbbbbbb ne> if (r`Xxxx` != s`Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
1110AaaaaaaaXxxx|0010Bbbbbbbbbbbb cs> if (r`Xxxx` >= `Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
1110AaaaaaaaXxxx|0011Bbbbbbbbbbbb cc> if (r`Xxxx` < `Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
1110AaaaaaaaXxxx|0100Bbbbbbbbbbbb mi> if (r`Xxxx` ?? s`Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
1110AaaaaaaaXxxx|0101Bbbbbbbbbbbb pl> if (r`Xxxx` ?? s`Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
1110AaaaaaaaXxxx|0110Bbbbbbbbbbbb vs> if (r`Xxxx` ?? s`Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
1110AaaaaaaaXxxx|0111Bbbbbbbbbbbb vc> if (r`Xxxx` ?? s`Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
1110AaaaaaaaXxxx|1000Bbbbbbbbbbbb hi> if (r`Xxxx` > `Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
1110AaaaaaaaXxxx|1001Bbbbbbbbbbbb ls> if (r`Xxxx` <= `Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
1110AaaaaaaaXxxx|1010Bbbbbbbbbbbb ge> ifs (r`Xxxx` >= s`Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
1110AaaaaaaaXxxx|1011Bbbbbbbbbbbb lt> ifs (r`Xxxx` < s`Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
1110AaaaaaaaXxxx|1100Bbbbbbbbbbbb gt> ifs (r`Xxxx` > s`Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
1110AaaaaaaaXxxx|1101Bbbbbbbbbbbb le> ifs (r`Xxxx` <= s`Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
1110AaaaaaaaXxxx|1110Bbbbbbbbbbbb al> if (r`Xxxx` ?? s`Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
1110AaaaaaaaXxxx|1111Bbbbbbbbbbbb ... if (r`Xxxx` ?? s`Aaaaaaaa`) goto s`Bbbbbbbbbbbb0`
11110000YyyyXxxx|Aaaaaaaaaaaaaaaa if ((r`Xxxx` & r`Yyyy`) == 0) goto s`Aaaaaaaaaaaaaaaa0`
11110001YyyyXxxx|Aaaaaaaaaaaaaaaa if ((r`Xxxx` & r`Yyyy`) != 0) goto s`Aaaaaaaaaaaaaaaa0`
11110010YyyyXxxx|****Aaaaaaaaaaaa if (r`Xxxx` == r`Yyyy`) goto s`Aaaaaaaaaaaa0`
.....
11110011000Sssss|XxxxAaaaaaaaaaaa if ((r`Xxxx` & `(1<<'Sssss')`) == 0) goto s`Aaaaaaaaaaaa0`
11110011001Sssss|XxxxAaaaaaaaaaaa if ((r`Xxxx` & `(1<<'Sssss')`) != 0) goto s`Aaaaaaaaaaaa0`
1111001101000000|Aaaaaaaaaaaaaaaa ifeq goto s`Aaaaaaaaaaaaaaaa0`
1111001101000001|Aaaaaaaaaaaaaaaa ifne goto s`Aaaaaaaaaaaaaaaa0`
1111001101000010|Aaaaaaaaaaaaaaaa ifcs goto s`Aaaaaaaaaaaaaaaa0`
1111001101000011|Aaaaaaaaaaaaaaaa ifcc goto s`Aaaaaaaaaaaaaaaa0`
1111001101000100|Aaaaaaaaaaaaaaaa ifmi goto s`Aaaaaaaaaaaaaaaa0`
1111001101000101|Aaaaaaaaaaaaaaaa ifpl goto s`Aaaaaaaaaaaaaaaa0`
1111001101000110|Aaaaaaaaaaaaaaaa ifvs goto s`Aaaaaaaaaaaaaaaa0`
1111001101000111|Aaaaaaaaaaaaaaaa ifvc goto s`Aaaaaaaaaaaaaaaa0`
1111001101001000|Aaaaaaaaaaaaaaaa ifhi goto s`Aaaaaaaaaaaaaaaa0`
1111001101001001|Aaaaaaaaaaaaaaaa ifls goto s`Aaaaaaaaaaaaaaaa0`
1111001101001010|Aaaaaaaaaaaaaaaa ifge goto s`Aaaaaaaaaaaaaaaa0`
1111001101001011|Aaaaaaaaaaaaaaaa iflt goto s`Aaaaaaaaaaaaaaaa0`
1111001101001100|Aaaaaaaaaaaaaaaa ifgt goto s`Aaaaaaaaaaaaaaaa0`
1111001101001101|Aaaaaaaaaaaaaaaa ifle goto s`Aaaaaaaaaaaaaaaa0`
1111001101001110|Aaaaaaaaaaaaaaaa ifal goto s`Aaaaaaaaaaaaaaaa0`
1111001101001111|---------------- /// <crash!>
111100110101Xxxx|Aaaaaaaaaaaaaaaa if (--r`Xxxx` != 0) goto s`Aaaaaaaaaaaaaaaa0`
111100110110----|---------------- trigger
11110011011100-0|PONMLKJIHGFEDCBA {`PONMLKJIHGFEDCBA`<r15-r0>} = [sp++]
11110011011100-1|PONMLKJIHGFEDCBA {rets, `PONMLKJIHGFEDCBA`<r15-r0>} = [sp++]
11110011011101-1|PONMLKJIHGFEDCBA {pc, `PONMLKJIHGFEDCBA`<r15-r0>} = [sp++]
11110011011110-0|PONMLKJIHGFEDCBA [--sp] = {`PONMLKJIHGFEDCBA`<r15-r0>}
11110011011110-1|PONMLKJIHGFEDCBA [--sp] = {rets, `PONMLKJIHGFEDCBA`<r15-r0>}
111100110111110-|PONMLKJIHGFEDCBA {`PONMLKJIHGFEDCBA`<sr15-0>} = [sp++]
111100110111111-|PONMLKJIHGFEDCBA [--sp] = {`PONMLKJIHGFEDCBA`<sr15-0>} = [sp++]
1111001110Aaaaaaaaaaaaaaaaaaaaaa call s`Aaaaaaaaaaaaaaaaaaaaaa0`
1111001111Aaaaaaaaaaaaaaaaaaaaaa goto s`Aaaaaaaaaaaaaaaaaaaaaa0`
================================================================================
1111010000Aaaaaa|Xxxx%%%%%%%%%%%% [r`Xxxx` + s`Aaaaaa00`] |= `%%WeirdIMM%%`
1111010001Aaaaaa|Xxxx%%%%%%%%%%%% [r`Xxxx` + s`Aaaaaa00`] ^= `%%WeirdIMM%%`
1111010010Aaaaaa|Xxxx%%%%%%%%%%%% [r`Xxxx` + s`Aaaaaa00`] &= ~`%%WeirdIMM%%`
1111010011Aaaaaa|Xxxx%%%%%%%%%%%% [r`Xxxx` + s`Aaaaaa00`] = `%%WeirdIMM%%`
================================================================================
111101010--0Xxxx|Aaaaaaaaaaaaaaaa r`Xxxx` = [sp + `Aaaaaaaaaaaaaaaa`]
111101010--1Xxxx|Aaaaaaaaaaaaaaaa [sp + `Aaaaaaaaaaaaaaaa`] = r`Xxxx`
111101011000Xxxx|Aaaaaaaaaaaaaaaa r`Xxxx` = h[sp + `Aaaaaaaaaaaaaaaa`] (u)
111101011001Xxxx|Aaaaaaaaaaaaaaaa h[sp + `Aaaaaaaaaaaaaaaa`] = r`Xxxx`
111101011010Xxxx|Aaaaaaaaaaaaaaaa r`Xxxx` = h[sp + `Aaaaaaaaaaaaaaaa`] (s)
111101011100Xxxx|Aaaaaaaaaaaaaaaa r`Xxxx` = b[sp + `Aaaaaaaaaaaaaaaa`] (u)
111101011101Xxxx|Aaaaaaaaaaaaaaaa b[sp + `Aaaaaaaaaaaaaaaa`] = r`Xxxx`
111101011110Xxxx|Aaaaaaaaaaaaaaaa r`Xxxx` = b[sp + `Aaaaaaaaaaaaaaaa`] (s)
--------------------------------------------------------------------------------
1111011000-0Xxxx|YyyyAaaaaaaaaaaa r`Xxxx` = [r`Yyyy` + s`Aaaaaaaaaaaa`]
1111011000-1Xxxx|YyyyAaaaaaaaaaaa [r`Yyyy` + s`Aaaaaaaaaaaa`] = r`Xxxx`
1111011001-0Xxxx|YyyyAaaaaaaaaaaa r`Xxxx` = [r`Yyyy` ++= s`Aaaaaaaaaaaa`]
1111011001-1Xxxx|YyyyAaaaaaaaaaaa [r`Yyyy` ++= s`Aaaaaaaaaaaa`] = r`Xxxx`
111101101000Xxxx|YyyyZzzz00000000 r`Xxxx` = [r`Yyyy`+r`Zzzz`]
111101101001Xxxx|YyyyZzzz00000000 [r`Yyyy`+r`Zzzz`] = r`Xxxx`
111101101010Xxxx|YyyyZzzz00000000 r`Xxxx` = [r`Yyyy`+r`Zzzz`<<2]
111101101011Xxxx|YyyyZzzz00000000 [r`Yyyy`+r`Zzzz`<<2] = r`Xxxx`
1111011011-0Xxxx|YyyyZzzz00000000 r`Xxxx` = [r`Yyyy` ++= r`Zzzz`]
1111011011-1Xxxx|YyyyZzzz00000000 [r`Yyyy` ++= r`Zzzz`] = r`Xxxx`
--------------------------------------------------------------------------------
111101110-00Xxxx|YyyyAaaaaaaaaaaa r`Xxxx` = h[r`Yyyy` + s`Aaaaaaaaaaaa`] (u)
111101110-01Xxxx|YyyyAaaaaaaaaaaa h[r`Yyyy` + s`Aaaaaaaaaaaa`] = r`Xxxx`
111101110-10Xxxx|YyyyAaaaaaaaaaaa r`Xxxx` = h[r`Yyyy` + s`Aaaaaaaaaaaa`] (s)
111101111-00Xxxx|YyyyAaaaaaaaaaaa r`Xxxx` = h[r`Yyyy` ++= s`Aaaaaaaaaaaa`] (u)
111101111-01Xxxx|YyyyAaaaaaaaaaaa h[r`Yyyy` ++= s`Aaaaaaaaaaaa`] = r`Xxxx`
111101111-10Xxxx|YyyyAaaaaaaaaaaa r`Xxxx` = h[r`Yyyy` ++= s`Aaaaaaaaaaaa`] (s)
111110000000Xxxx|YyyyZzzz00000000 r`Xxxx` = h[r`Yyyy`+r`Zzzz`] (u)
111110000001Xxxx|YyyyZzzz00000000 h[r`Yyyy`+r`Zzzz`] = r`Xxxx`
111110000010Xxxx|YyyyZzzz00000000 r`Xxxx` = h[r`Yyyy`+r`Zzzz`] (s)
111110000100Xxxx|YyyyZzzz00000000 r`Xxxx` = h[r`Yyyy`+r`Zzzz`<<1] (u)
111110000101Xxxx|YyyyZzzz00000000 h[r`Yyyy`+r`Zzzz`<<1] = r`Xxxx`
111110000110Xxxx|YyyyZzzz00000000 r`Xxxx` = h[r`Yyyy`+r`Zzzz`<<1] (s)
111110001-00Xxxx|YyyyZzzz00000000 r`Xxxx` = h[r`Yyyy` ++= r`Zzzz`] (u)
111110001-01Xxxx|YyyyZzzz00000000 h[r`Yyyy` ++= r`Zzzz`] = r`Xxxx`
111110001-10Xxxx|YyyyZzzz00000000 r`Xxxx` = h[r`Yyyy` ++= r`Zzzz`] (s)
--------------------------------------------------------------------------------
111110010-00Xxxx|YyyyAaaaaaaaaaaa r`Xxxx` = b[r`Yyyy` + s`Aaaaaaaaaaaa`] (u)
111110010-01Xxxx|YyyyAaaaaaaaaaaa b[r`Yyyy` + s`Aaaaaaaaaaaa`] = r`Xxxx`
111110010-10Xxxx|YyyyAaaaaaaaaaaa r`Xxxx` = b[r`Yyyy` + s`Aaaaaaaaaaaa`] (s)
111110011-00Xxxx|YyyyAaaaaaaaaaaa r`Xxxx` = b[r`Yyyy` ++= s`Aaaaaaaaaaaa`] (u)
111110011-01Xxxx|YyyyAaaaaaaaaaaa b[r`Yyyy` ++= s`Aaaaaaaaaaaa`] = r`Xxxx`
111110011-10Xxxx|YyyyAaaaaaaaaaaa r`Xxxx` = b[r`Yyyy` ++= s`Aaaaaaaaaaaa`] (s)
111110100-00Xxxx|YyyyZzzz00000000 r`Xxxx` = b[r`Yyyy`+r`Zzzz`] (u)
111110100-01Xxxx|YyyyZzzz00000000 b[r`Yyyy`+r`Zzzz`] = r`Xxxx`
111110100-10Xxxx|YyyyZzzz00000000 r`Xxxx` = b[r`Yyyy`+r`Zzzz`] (s)
111110101-00Xxxx|YyyyZzzz00000000 r`Xxxx` = b[r`Yyyy` ++= r`Zzzz`] (u)
111110101-01Xxxx|YyyyZzzz00000000 b[r`Yyyy` ++= r`Zzzz`] = r`Xxxx`
111110101-10Xxxx|YyyyZzzz00000000 r`Xxxx` = b[r`Yyyy` ++= r`Zzzz`] (s)
================================================================================
11111011000-Xxxx|Aaaaaaaaaaaaaaaa r`Xxxx` = s`Aaaaaaaaaaaaaaaa`
1111101100100---|Xxxx%%%%%%%%%%%% r`Xxxx` = `%%WeirdIMM%%`
1111101100101--0|XxxxYyyy-------- r`Xxxx` = sr`Yyyy`
1111101100101--1|XxxxYyyy-------- sr`Yyyy` = r`Xxxx`
111110110011--00|XxxxYyyy-------- r`Xxxx` = rev8(r`Yyyy`)
111110110011--01|XxxxYyyy-------- r`Xxxx` = rev16(r`Yyyy`)
111110110011--10|XxxxYyyy-------- r`Xxxx` = revs(r`Yyyy`.l)
111110110100Xxxx|Yyyy%%%%%%%%%%%% r`Xxxx` = r`Yyyy` + `%%WeirdIMM%%`
111110110101Xxxx|Yyyy%%%%%%%%%%%% r`Xxxx` = r`Yyyy` - `%%WeirdIMM%%`
11111011011-Xxxx|Yyyy%%%%%%%%%%%% r`Xxxx` = `%%WeirdIMM%%` - r`Yyyy`
111110111000----|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` + r`Zzzz`
111110111001----|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` - r`Zzzz`
111110111010----|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` + r`Zzzz` + c
111110111011----|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` - r`Zzzz` - !c
11111011110-----|Aaaaaaaaaaaaaaaa sp += s`Aaaaaaaaaaaaaaaa`
11111011111-Xxxx|Aaaaaaaaaaaaaaaa r`Xxxx` = sp + `Aaaaaaaaaaaaaaaa`
11111100YyyyXxxx|Aaaaaaaaaaaaaaaa r`Xxxx` = r`Yyyy` + s`Aaaaaaaaaaaaaaaa`
111111010000Xxxx|Yyyy%%%%%%%%%%%% r`Xxxx` = r`Yyyy` | `%%WeirdIMM%%`
111111010001Xxxx|Yyyy%%%%%%%%%%%% r`Xxxx` = r`Yyyy` ^ `%%WeirdIMM%%`
111111010010Xxxx|Yyyy%%%%%%%%%%%% r`Xxxx` = r`Yyyy` & `%%WeirdIMM%%`
111111010011Xxxx|Yyyy%%%%%%%%%%%% r`Xxxx` = r`Yyyy` & `~'%%WeirdIMM%%'`
11111101010-----|XxxxYyyyZzzz---- r`Xxxx` = uextra(r`Yyyy`, p:r`Zzzz`[12:8], l:r`Zzzz`[4:0])
11111101011-----|XxxxYyyyZzzz---- r`Xxxx` = sextra(r`Yyyy`, p:r`Zzzz`[12:8], l:r`Zzzz`[4:0])
11111101100Aaaaa|XxxxYyyyBbbbb--- r`Xxxx` = uextra(r`Yyyy`, p:`Bbbbb`, l:`Aaaaa`)
11111101101Aaaaa|XxxxYyyyBbbbb--- r`Xxxx` = sextra(r`Yyyy`, p:`Bbbbb`, l:`Aaaaa`)
11111101110Aaaaa|XxxxYyyyBbbbb--- r`Xxxx` <= insert(r`Yyyy`, p:`Bbbbb`, l:`Aaaaa`)
1111110111100000|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` | r`Zzzz`
1111110111100001|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` ^ r`Zzzz`
1111110111100010|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` & r`Zzzz`
1111110111100011|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` & ~r`Zzzz`
1111110111100100|XxxxYyyy-------- r`Xxxx` = r`Yyyy`.b0 (u)
1111110111100101|XxxxYyyy-------- r`Xxxx` = r`Yyyy`.b0 (s)
1111110111100110|XxxxYyyy-------- r`Xxxx` = r`Yyyy`.l (u)
1111110111100111|XxxxYyyy-------- r`Xxxx` = r`Yyyy`.l (s)
1111110111101000|XxxxYyyy-------- r`Xxxx` = clz(r`Yyyy`)
1111110111101001|XxxxYyyy-------- r`Xxxx` = cls(r`Yyyy`)
1111110111101010|XxxxYyyy-------- r`Xxxx` = zcmp(r`Yyyy`)
11111101111011--|XxxxYyyyZzzz---- r`Xxxx` <= insert(r`Yyyy`, p:r`Zzzz`[12:8], l:r`Zzzz`[4:0])
1111110111110000|XxxxYyyyAaaaa--- r`Xxxx` = r`Yyyy` << `Aaaaa`<0==32>
1111110111110001|XxxxYyyyAaaaa--- r`Xxxx` = r`Yyyy` <<< `Aaaaa`<0==32>
1111110111110010|XxxxYyyyAaaaa--- r`Xxxx` = r`Yyyy` >> `Aaaaa`<0==32>
1111110111110011|XxxxYyyyAaaaa--- r`Xxxx` = r`Yyyy` >>> `Aaaaa`<0==32>
111111011111010-|XxxxYyyyAaaaa--- r`Xxxx` = r`Yyyy` <> `Aaaaa`<0==32>
111111011111011-|XxxxYyyyAaaaa--- r`Xxxx` = r`Yyyy` <c> `Aaaaa`<0==32>
1111110111111000|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` << r`Zzzz`
1111110111111001|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` <<< r`Zzzz`
1111110111111010|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` >> r`Zzzz`
1111110111111011|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` >>> r`Zzzz`
111111011111110-|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` <> r`Zzzz`
111111011111111-|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` <c> r`Zzzz`
1111111000--Xxxx|Yyyy%%%%%%%%%%%% r`Xxxx` = r`Yyyy` * `%%WeirdIMM%%`
1111111001------|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` * r`Zzzz`
1111111010-0----|XxxxYyyyZzzz---- r`Xxxx` += r`Yyyy` * r`Zzzz`
1111111010-1----|XxxxYyyyZzzz---- r`Xxxx` -= r`Yyyy` * r`Zzzz`
111111101100----|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` / r`Zzzz` (u)
111111101101----|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` % r`Zzzz` (u)
111111101110----|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` / r`Zzzz` (s)
111111101111----|XxxxYyyyZzzz---- r`Xxxx` = r`Yyyy` % r`Zzzz` (s)
11111111000-****|XxxxAaaaaaaaaaaa|Bbbbbbbbbbbbbbbb if (r`Xxxx` == s`Aaaaaaaaaaaa`) goto s`Bbbbbbbbbbbbbbbb0`
..... The immediates can be unsigned as well!!
/\
00
01
10
11111111011----0|Xxxx%%%%%%%%%%%%|Aaaaaaaaaaaaaaaa if ((r`Xxxx` & `%%WeirdIMM%%`) == 0) goto s`Aaaaaaaaaaaaaaaa0`
11111111011----1|Xxxx%%%%%%%%%%%%|Aaaaaaaaaaaaaaaa if ((r`Xxxx` & `%%WeirdIMM%%`) != 0) goto s`Aaaaaaaaaaaaaaaa0`
1111111110------|Aaaaaaaaaaaaaaaa|aaaaaaaaaaaaaaaa call s`Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`
11111111110-Xxxx|Aaaaaaaaaaaaaaaa|aaaaaaaaaaaaaaaa r`Xxxx` = `Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`
11111111111-Xxxx|Aaaaaaaaaaaaaaaa|aaaaaaaaaaaaaaaa sr`Xxxx` = `Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`
Different from pi32/pi32v2!
................|....00000Xxxxxxx `1Xxxxxxx0000`
................|....00001Xxxxxxx `1Xxxxxxx00000`
................|....00010Xxxxxxx `1Xxxxxxx000000`
................|....00011Xxxxxxx `1Xxxxxxx0000000`
................|....00100Xxxxxxx `1Xxxxxxx000000000`
................|....00101Xxxxxxx `1Xxxxxxx0000000000`
................|....00110Xxxxxxx `1Xxxxxxx00000000000`
................|....00111Xxxxxxx `1Xxxxxxx000000000000`
................|....01000Xxxxxxx `1Xxxxxxx0000000000000`
................|....01001Xxxxxxx `1Xxxxxxx00000000000000`
................|....01010Xxxxxxx `1Xxxxxxx000000000000000`
................|....01011Xxxxxxx `1Xxxxxxx00000000000000000`
................|....01100Xxxxxxx `1Xxxxxxx000000000000000000`
................|....01101Xxxxxxx `1Xxxxxxx0000000000000000000`
................|....01110Xxxxxxx `1Xxxxxxx00000000000000000000`
................|....01111Xxxxxxx `1Xxxxxxx000000000000000000000`
................|....10000Xxxxxxx `1Xxxxxxx0000000000000000000000`
................|....10001Xxxxxxx `1Xxxxxxx00000000000000000000000`
................|....1001Xxxxxxxx `Xxxxxxxx`
................|....1010Xxxxxxxx `Xxxxxxxx00000000`
................|....1011Xxxxxxxx `Xxxxxxxx0000000000000000`
................|....1100Xxxxxxxx `Xxxxxxxx000000000000000000000000`
................|....1101Xxxxxxxx `Xxxxxxxx00000000Xxxxxxxx`
................|....1110Xxxxxxxx `Xxxxxxxx00000000Xxxxxxxx00000000`
................|....1111Xxxxxxxx `XxxxxxxxXxxxxxxxXxxxxxxxXxxxxxxx`