jielie

q32s

Seems to be a (over)simplified variant of pi32v2, which even lacks some features of pi32..

Details

Notable differences

Between q32s and pi32/pi32v2, the differences are:

General purpose registers (GPRs)

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.

Special function registers (SFRs)

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

Opcodes

16-bit

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>

32-bit


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)

48-bit


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`

Definitions

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`