jielie

pi32

JieLi’s own custom architecture that is heavily based off the Analog Devices’ Blackfin core.

Details

General purpose registers

There are 16 general purpose registers (GPRs), r0 through r15.

The r15 register is reserved as a stack pointer, thus it’s called as sp instead.

Special function registers

Number Name Description
sfr0 reti Interrupt return address
sfr1 rete Exception (or Emulation?) return address
sfr2    
sfr3    
sfr4 maccl Multiply accumulator (low)
sfr5 macch Multiply accumulator (high)
sfr6 rets Subroutine return address
sfr7 psr Processor status register
sfr8    
sfr9    
sfr10 ie1 Interrupt enable 1
sfr11 ssp Supervisor mode stack pointer
sfr12 ie0 Interrupt enable 0
sfr13 icfg Interrupt config
sfr14 pc Program counter
sfr15 usp User mode stack pointer

Opcodes

Instruction encoding

The instructions are composed of the 16-bit instruction words (the “iwords”), each being little-endian.

Longer instructions are encoded by placing more iwords after each other, so to encode a 32-bit instruction two iwords are used, where the first one encodes high-most bits and the second one the lower-most bits.

The listing below lists the bits MSB-first, and the first iword being the leftmost bits.

16-bit

0000000000000000		nop
0000000000000010		bkpt
0000000000000011		hbkpt
0000000000000100		macc = 0					clrmacc
0000000000001000		csync
0000000000001001		ssync
0000000000001010		illeg
0000000000001100		lockset
0000000000001110		lockclr
0000000000010000		idle
0000000000100000		rts
0000000000110000		rti
0000000000111000		rte
0000000001000000		cli
000000000101Xxxx		cli r`Xxxx`
0000000001100000		sti
000000000111Xxxx		sti r`Xxxx`
0000000010Xxxxxx		swi `Xxxxxx`
0000000011Xxxxxx		excpt `Xxxxxx`

000000010ABbbXxx		rep `Bbb`<+1>, r`AXxx` { <`Bbb`+1> }

000000011A000Xxx		flush [r`AXxx`]
000000011A001Xxx		flushinv [r`AXxx`]
000000011A010Xxx		iflush [r`AXxx`]
000000011A011Xxx		pfetch [r`AXxx`]
000000011A100Xxx		goto r`AXxx`
000000011A101Xxx		call r`AXxx`
000000011A110Xxx		tbb [r`AXxx`]
000000011A111Xxx		tbh [r`AXxx`]

00000010AaaBbbbb		rep `Aaa`<+1>, `Bbbbb`

000000110000AaBb		ifs (nzcv == 0) { <`Aa`+1> } else { <`Bb`> }		ifeq `Aa`<+1>, `Bb`
000000110001AaBb		ifs (nzcv != 0) { <`Aa`+1> } else { <`Bb`> }		ifne `Aa`<+1>, `Bb`
000000110010AaBb		if (nzcv >= 0) { <`Aa`+1> } else { <`Bb`> }		ifcs `Aa`<+1>, `Bb`
000000110011AaBb		if (nzcv < 0) { <`Aa`+1> } else { <`Bb`> }		ifcc `Aa`<+1>, `Bb`
000000110100AaBb		ifs (nzcv ?? 0) { <`Aa`+1> } else { <`Bb`> }		ifmi `Aa`<+1>, `Bb`
000000110101AaBb		ifs (nzcv ?? 0) { <`Aa`+1> } else { <`Bb`> }		ifpl `Aa`<+1>, `Bb`
000000110110AaBb		ifs (nzcv ?? 0) { <`Aa`+1> } else { <`Bb`> }		ifvs `Aa`<+1>, `Bb`
000000110111AaBb		ifs (nzcv ?? 0) { <`Aa`+1> } else { <`Bb`> }		ifvc `Aa`<+1>, `Bb`
000000111000AaBb		if (nzcv > 0) { <`Aa`+1> } else { <`Bb`> }		ifhi `Aa`<+1>, `Bb`
000000111001AaBb		if (nzcv <= 0) { <`Aa`+1> } else { <`Bb`> }		ifls `Aa`<+1>, `Bb`
000000111010AaBb		ifs (nzcv >= 0) { <`Aa`+1> } else { <`Bb`> }		ifge `Aa`<+1>, `Bb`
000000111011AaBb		ifs (nzcv < 0) { <`Aa`+1> } else { <`Bb`> }		iflt `Aa`<+1>, `Bb`
000000111100AaBb		ifs (nzcv > 0) { <`Aa`+1> } else { <`Bb`> }		ifgt `Aa`<+1>, `Bb`
000000111101AaBb		ifs (nzcv <= 0) { <`Aa`+1> } else { <`Bb`> }		ifle `Aa`<+1>, `Bb`
000000111110AaBb		ifs (nzcv ?? 0) { <`Aa`+1> } else { <`Bb`> }		if `Aa`<+1>, `Bb`

00000100Aaaaaaaa		call s`Aaaaaaaa0`

000001010000Xxxx		macc /= r`Xxxx`
000001011000Xxxx		macc /= r`Xxxx` (s)

0000011000YyyXxx		r`Xxx` *= r`Yyy`

0000011001YyyXxx		macc = r`Yyy` * r`Xxx`
0000011011YyyXxx		macc = r`Yyy` * r`Xxx` (s)
0000011100YyyXxx		macc += r`Yyy` * r`Xxx`
0000011101YyyXxx		macc -= r`Yyy` * r`Xxx`
0000011110YyyXxx		macc += r`Yyy` * r`Xxx` (s)
0000011111YyyXxx		macc -= r`Yyy` * r`Xxx` (s)

00001Aaaaaaaaaaa		goto s`Aaaaaaaaaaa0`

00010000Aaaaaaaa		ifs (nzcv == 0) goto s`Aaaaaaaa0`		jeq s`Aaaaaaaa0`
00010001Aaaaaaaa		ifs (nzcv != 0) goto s`Aaaaaaaa0`		jne s`Aaaaaaaa0`
00010010Aaaaaaaa		if (nzcv >= 0) goto s`Aaaaaaaa0`		jcs s`Aaaaaaaa0`
00010011Aaaaaaaa		if (nzcv < 0) goto s`Aaaaaaaa0`			jcc s`Aaaaaaaa0`
00010100Aaaaaaaa		ifs (nzcv ?? 0) goto s`Aaaaaaaa0`		jmi s`Aaaaaaaa0`
00010101Aaaaaaaa		ifs (nzcv ?? 0) goto s`Aaaaaaaa0`		jpl s`Aaaaaaaa0`
00010110Aaaaaaaa		ifs (nzcv ?? 0) goto s`Aaaaaaaa0`		jvs s`Aaaaaaaa0`
00010111Aaaaaaaa		ifs (nzcv ?? 0) goto s`Aaaaaaaa0`		jvc s`Aaaaaaaa0`
00011000Aaaaaaaa		if (nzcv > 0) goto s`Aaaaaaaa0`			jhi s`Aaaaaaaa0`
00011001Aaaaaaaa		if (nzcv <= 0) goto s`Aaaaaaaa0`		jls s`Aaaaaaaa0`
00011010Aaaaaaaa		ifs (nzcv >= 0) goto s`Aaaaaaaa0`		jge s`Aaaaaaaa0`
00011011Aaaaaaaa		ifs (nzcv < 0) goto s`Aaaaaaaa0`		jlt s`Aaaaaaaa0`
00011100Aaaaaaaa		ifs (nzcv > 0) goto s`Aaaaaaaa0`		jgt s`Aaaaaaaa0`
00011101Aaaaaaaa		ifs (nzcv <= 0) goto s`Aaaaaaaa0`		jle s`Aaaaaaaa0`
00011110Aaaaaaaa		ifs (nzcv ?? 0) goto s`Aaaaaaaa0`		j s`Aaaaaaaa0`

========-------========--------========--------========

00100Aaaaaaa0Xxx		if (r`Xxx` == 0) goto s`Aaaaaaa0`		jz r`Xxx`, s`Aaaaaaa0`
00100Aaaaaaa1Xxx		if (r`Xxx` != 0) goto s`Aaaaaaa0`		jnz r`Xxx`, s`Aaaaaaa0`
00101AaaaaBbbXxx		r`Xxx` = [addr(s`BbbAaaaa00`)]			lw r`Xxx`, s`BbbAaaaa00`
00110XxxHGFEDCBA		{r`ABCDEFGH`<r0-r7>} = [r`Xxx`++]		lm {r`ABCDEFGH`<r0-r7>}, r`Xxx`
00111XxxHGFEDCBA		[r`Xxx`++] = {r`ABCDEFGH`<r0-r7>}		sm {r`ABCDEFGH`<r0-r7>}, r`Xxx`

========-------========--------========--------========

01000AaaaaBbbXxx		r`Xxx` = [sp + s`BbbAaaaa00`]			lw r`Xxx`, sp, s`BbbAaaaa00`
01001AaaaaYyyXxx		r`Xxx` = [r`Yyy` + s`Aaaaa00`]			lw r`Xxx`, r`Yyy`, s`Aaaaa00`
01010BAaaaYyyXxx		r`Xxx` = h[r`Yyy` + s`AaaaB0`]			lhz r`Xxx`, r`Yyy`, s`AaaaB0`
01011BbAaaYyyXxx		r`Xxx` = b[r`Yyy` + s`AaaBb`]			lbz r`Xxx`, r`Yyy`, s`AaaBb`

========-------========--------========--------========

01100AaaaaBbbXxx		[sp + s`BbbAaaaa00`] = r`Xxx`			sw r`Xxx`, sp, s`BbbAaaaa00`
01101AaaaaYyyXxx		[r`Yyy` + s`Aaaaa00`] = r`Xxx`			sw r`Xxx`, r`Yyy`, s`Aaaaa00`
01110BAaaaYyyXxx		h[r`Yyy` + s`AaaaB0`] = r`Xxx`			sh r`Xxx`, r`Yyy`, s`AaaaB0`
01111BbAaaYyyXxx		b[r`Yyy` + s`AaaBb`] = r`Xxx`			sb r`Xxx`, r`Yyy`, s`AaaBb`

========-------========--------========--------========

10000AaaaaaaaXxx		r`Xxx` = s`Aaaaaaaa`				movs r`Xxx`, s`Aaaaaaaa`
10001AaaaaaaaXxx		r`Xxx` += s`Aaaaaaaa`				add r`Xxx`, s`Aaaaaaaa`
10010AaaaaaaaXxx		r`Xxx` = sp + s`Aaaaaaaa`			add r`Xxx`, sp, s`Aaaaaaaa`
10011AaaaaaaaXxx		cmp r`Xxx`, s`Aaaaaaaa`

========-------========--------========--------========

101Aaaaa00YyyXxx		r`Xxx` = r`Yyy` << `Aaaaa`<0=32>		lsl r`Xxx`, r`Yyy`, `Aaaaa`<0=32>
101Aaaaa01YyyXxx		r`Xxx` = r`Yyy` >> `Aaaaa`<0=32>		lsr r`Xxx`, r`Yyy`, `Aaaaa`<0=32>
101Aaaaa10YyyXxx		r`Xxx` = r`Yyy` <<< `Aaaaa`<0=32>		qasl r`Xxx`, r`Yyy`, `Aaaaa`<0=32>
101Aaaaa11YyyXxx		r`Xxx` = r`Yyy` >>> `Aaaaa`<0=32>		qasr r`Xxx`, r`Yyy`, `Aaaaa`<0=32>

========-------========--------========--------========

1100000000000000		{r3-r0} = [sp++]				pop {r3-r0}
1100000000000001		{r3-r1} = [sp++]				pop {r3-r1}
1100000000000010		{r3, r2} = [sp++]				pop {r3, r2}
1100000000000011		{r3} = [sp++]					pop {r3}
1100000000000100		{r4} = [sp++]					pop {r4}
1100000000000101		{r5, r4} = [sp++]				pop {r5, r4}
1100000000000110		{r6-r4} = [sp++]				pop {r6-r4}
1100000000000111		{r7-r4} = [sp++]				pop {r7-r4}
1100000000001000		{r8-r4} = [sp++]				pop {r8-r4}
1100000000001001		{r9-r4} = [sp++]				pop {r9-r4}
1100000000001010		{r10-r4} = [sp++]				pop {r10-r4}
1100000000001011		{r11-r4} = [sp++]				pop {r11-r4}
1100000000001100		{r12-r4} = [sp++]				pop {r12-r4}
1100000000001101		{r13-r4} = [sp++]				pop {r13-r4}
1100000000001110		{r14-r4} = [sp++]				pop {r14-r4}
1100000000001111		{} = [sp++]					pop {}

1100000000010000		{pc, r3-r0} = [sp++]				pop {pc, r3-r0}
1100000000010001		{pc, r3-r1} = [sp++]				pop {pc, r3-r1}
1100000000010010		{pc, r3, r2} = [sp++]				pop {pc, r3, r2}
1100000000010011		{pc, r3} = [sp++]				pop {pc, r3}
1100000000010100		{pc, r4} = [sp++]				pop {pc, r4}
1100000000010101		{pc, r5, r4} = [sp++]				pop {pc, r5, r4}
1100000000010110		{pc, r6-r4} = [sp++]				pop {pc, r6-r4}
1100000000010111		{pc, r7-r4} = [sp++]				pop {pc, r7-r4}
1100000000011000		{pc, r8-r4} = [sp++]				pop {pc, r8-r4}
1100000000011001		{pc, r9-r4} = [sp++]				pop {pc, r9-r4}
1100000000011010		{pc, r10-r4} = [sp++]				pop {pc, r10-r4}
1100000000011011		{pc, r11-r4} = [sp++]				pop {pc, r11-r4}
1100000000011100		{pc, r12-r4} = [sp++]				pop {pc, r12-r4}
1100000000011101		{pc, r13-r4} = [sp++]				pop {pc, r13-r4}
1100000000011110		{pc, r14-r4} = [sp++]				pop {pc, r14-r4}
1100000000011111		{pc} = [sp++]					pop {pc}

1100001000000000		[--sp] = {r3-r0}				push {r3-r0}
1100001000000001		[--sp] = {r3-r1}				push {r3-r1}
1100001000000010		[--sp] = {r3, r2}				push {r3, r2}
1100001000000011		[--sp] = {r3}					push {r3}
1100001000000100		[--sp] = {r4}					push {r4}
1100001000000101		[--sp] = {r5, r4}				push {r5, r4}
1100001000000110		[--sp] = {r6-r4}				push {r6-r4}
1100001000000111		[--sp] = {r7-r4}				push {r7-r4}
1100001000001000		[--sp] = {r8-r4}				push {r8-r4}
1100001000001001		[--sp] = {r9-r4}				push {r9-r4}
1100001000001010		[--sp] = {r10-r4}				push {r10-r4}
1100001000001011		[--sp] = {r11-r4}				push {r11-r4}
1100001000001100		[--sp] = {r12-r4}				push {r12-r4}
1100001000001101		[--sp] = {r13-r4}				push {r13-r4}
1100001000001110		[--sp] = {r14-r4}				push {r14-r4}
1100001000001111		[--sp] = {}					push {}

1100001000010000		[--sp] = {rets, r3-r0}				push {rets, r3-r0}
1100001000010001		[--sp] = {rets, r3-r1}				push {rets, r3-r1}
1100001000010010		[--sp] = {rets, r3, r2}				push {rets, r3, r2}
1100001000010011		[--sp] = {rets, r3}				push {rets, r3}
1100001000010100		[--sp] = {rets, r4}				push {rets, r4}
1100001000010101		[--sp] = {rets, r5, r4}				push {rets, r5, r4}
1100001000010110		[--sp] = {rets, r6-r4}				push {rets, r6-r4}
1100001000010111		[--sp] = {rets, r7-r4}				push {rets, r7-r4}
1100001000011000		[--sp] = {rets, r8-r4}				push {rets, r8-r4}
1100001000011001		[--sp] = {rets, r9-r4}				push {rets, r9-r4}
1100001000011010		[--sp] = {rets, r10-r4}				push {rets, r10-r4}
1100001000011011		[--sp] = {rets, r11-r4}				push {rets, r11-r4}
1100001000011100		[--sp] = {rets, r12-r4}				push {rets, r12-r4}
1100001000011101		[--sp] = {rets, r13-r4}				push {rets, r13-r4}
1100001000011110		[--sp] = {rets, r14-r4}				push {rets, r14-r4}
1100001000011111		[--sp] = {rets}					push {rets}

11000011----Xxxx		testset b[r`Xxxx`]

11000100HGFEDCBA		{sr`ABCDEFGH`<sfr0-7>} = [sp++]			pops {sr`ABCDEFGH`<sfr0-7>}
11000101HGFEDCBA		[--sp] = {sr`ABCDEFGH`<sfr0-7>}			pushs {sr`ABCDEFGH`<sfr0-7>}

11000110BAYyyXxx		r`AXxx` = r`BYyy`				mov r`AXxx`, r`BYyy`
11000111BAYyyXxx		sr`AXxx` = r`BYyy`				mov sr`AXxx`, r`BYyy`
11001000BAYyyXxx		r`AXxx` = sr`BYyy`				mov r`AXxx`, sr`BYyy`

1100100100YyyXxx		r`Xxx` = r`Yyy`.b				uxtb r`Xxx`, r`Yyy`
1100100101YyyXxx		r`Xxx` = r`Yyy`.l				uxth r`Xxx`, r`Yyy`
1100100110YyyXxx		r`Xxx` = r`Yyy`.b (s)				sxtb r`Xxx`, r`Yyy`
1100100111YyyXxx		r`Xxx` = r`Yyy`.l (s)				sxth r`Xxx`, r`Yyy`

11001010BAYyyXxx		r`AXxx` += r`BYyy` (brev)			addrev r`AXxx`, r`BYyy`
11001011BAYyyXxx		r`AXxx` += r`BYyy`				add r`AXxx`, r`BYyy`
11001100BAYyyXxx		cmn r`BYyy`, r`AXxx`
11001101Aaaaaaaa		sp += s`Aaaaaaaa`				add sp, s`Aaaaaaaa`
11001110BAYyyXxx		cmp r`BYyy`, r`AXxx`
1100111100YyyXxx		r`Xxx` <<= r`Yyy`				lsl r`Xxx`, r`Yyy`
1100111101YyyXxx		r`Xxx` >>= r`Yyy`				lsr r`Xxx`, r`Yyy`
1100111110YyyXxx		r`Xxx` <<<= r`Yyy`				qasl r`Xxx`, r`Yyy`
1100111111YyyXxx		r`Xxx` >>>= r`Yyy`				qasr r`Xxx`, r`Yyy`
110100AaaaYyyXxx		r`Xxx` = r`Yyy` + s`Aaaa`			add r`Xxx`, r`Yyy`, s`Aaaa`
1101010ZzzYyyXxx		r`Xxx` = r`Yyy` + r`Zzz`			add r`Xxx`, r`Yyy`, r`Zzz`
1101011ZzzYyyXxx		r`Xxx` = r`Yyy` - r`Zzz`			sub r`Xxx`, r`Yyy`, r`Zzz`
11011000AaaaaXxx		r`Xxx` |= s`(1<<'Aaaaa')`			bitset r`Xxx`, `Aaaaa`
11011001AaaaaXxx		r`Xxx` ^= s`(1<<'Aaaaa')`			bittgl r`Xxx`, `Aaaaa`
1101101000YyyXxx		r`Xxx` |= r`Yyy`				or r`Xxx`, r`Yyy`
1101101001YyyXxx		r`Xxx` ^= r`Yyy`				xor r`Xxx`, r`Yyy`
1101101010YyyXxx		r`Xxx` &= r`Yyy`				and r`Xxx`, r`Yyy`
1101101011YyyXxx		r`Xxx` = ~r`Yyy`				not r`Xxx`, r`Yyy`
11011011AaaaaXxx		r`Xxx` &= (~s`(1<<'Aaaaa')`)			bitclr r`Xxx`, `Aaaaa`
1101110000YyyXxx		r`Xxx` += r`Yyy` + c				addc r`Xxx`, r`Yyy`
1101110001YyyXxx		r`Xxx` -= r`Yyy` + !c				subc r`Xxx`, r`Yyy`
1101110010YyyXxx		r`Xxx` = -r`Yyy`				neg r`Xxx`, r`Yyy`
1101110011Aaaaaa		macc <<= `Aaaaaa`<0==64>			lslmacc `Aaaaaa`<0==64>
1101110100YyyXxx		r`Xxx` <>= r`Yyy`				rotr r`Xxx`, r`Yyy`
1101110101YyyXxx		r`Xxx` <c>= r`Yyy`				rotrc r`Xxx`, r`Yyy`
110111011A000Xxx		macc <<= r`AXxx`				lslmacc r`AXxx`
110111100A000Xxx		macc >>= r`AXxx`				lsrmacc r`AXxx`
110111101A000Xxx		macc >>>= r`AXxx`				asrmacc r`AXxx`
1101111100Aaaaaa		macc >>= `Aaaaaa`<0==64>			lsrmacc `Aaaaaa`<0==64>
1101111110Aaaaaa		macc >>>= `Aaaaaa`<0==64>			asrmacc `Aaaaaa`<0==64>

32-bit

111000000000000000000000Xxxx0000		ifs (nzcv == 0) goto r`Xxxx`		jeq r`Xxxx`
111000000000000000000000Xxxx0001		ifs (nzcv != 0) goto r`Xxxx`		jne r`Xxxx`
111000000000000000000000Xxxx0010		if (nzcv >= 0) goto r`Xxxx`		jcs r`Xxxx`
111000000000000000000000Xxxx0011		if (nzcv < 0) goto r`Xxxx`		jcc r`Xxxx`
111000000000000000000000Xxxx0100		ifs (nzcv ?? 0) goto r`Xxxx`		jmi r`Xxxx`
111000000000000000000000Xxxx0101		ifs (nzcv ?? 0) goto r`Xxxx`		jpl r`Xxxx`
111000000000000000000000Xxxx0110		ifs (nzcv ?? 0) goto r`Xxxx`		jvs r`Xxxx`
111000000000000000000000Xxxx0111		ifs (nzcv ?? 0) goto r`Xxxx`		jvc r`Xxxx`
111000000000000000000000Xxxx1000		if (nzcv > 0) goto r`Xxxx`		jhi r`Xxxx`
111000000000000000000000Xxxx1001		if (nzcv <= 0) goto r`Xxxx`		jls r`Xxxx`
111000000000000000000000Xxxx1010		ifs (nzcv >= 0) goto r`Xxxx`		jge r`Xxxx`
111000000000000000000000Xxxx1011		ifs (nzcv < 0) goto r`Xxxx`		jlt r`Xxxx`
111000000000000000000000Xxxx1100		ifs (nzcv > 0) goto r`Xxxx`		jgt r`Xxxx`
111000000000000000000000Xxxx1101		ifs (nzcv <= 0) goto r`Xxxx`		jle r`Xxxx`
111000000000000000000000Xxxx1110		ifs (nzcv ?? 0) goto r`Xxxx`		j r`Xxxx`

========-------========--------========--------========

11100000100000000000000000000000		trigger

========-------========--------========--------========

11100001AaaaaaaaaaaaaaaaaaaaBbbb		call s`BbbbAaaaaaaaaaaaaaaaaaaa0`

========-------========--------========--------========

11100010Aaaa%%%%%%%%%%%%XxxxBbbb		[r`Xxxx` + s`AaaaBbbb00`] |= `%%WeirdIMM%%`	memor r`Xxxx`, s`AaaaBbbb00`, `%%WeirdIMM%%`
11100011Aaaa%%%%%%%%%%%%XxxxBbbb		[r`Xxxx` + s`AaaaBbbb00`] &= (~`%%WeirdIMM%%`)	memandnot r`Xxxx`, s`AaaaBbbb00`, `%%WeirdIMM%%`

========-------========--------========--------========

1110010000000000AaaaaaaaaaBbXxxx		r`Xxxx` = b[addr(s`BbAaaaaaaaaa`)]		lbz r`Xxxx`, s`BbAaaaaaaaaa`
1110010000010000AaaaaaaaaBbbXxxx		r`Xxxx` = h[addr(s`BbbAaaaaaaaa0`)]		lhz r`Xxxx`, s`BbbAaaaaaaaa0`
1110010000100000AaaaaaaaBbbbXxxx		r`Xxxx` = [addr(s`BbbbAaaaaaaa00`)]		lw r`Xxxx`, s`BbbbAaaaaaaa00`
1110010010000000AaaaaaaaaaBbXxxx		r`Xxxx` = b[addr(s`BbAaaaaaaaaa`)] (s)		lbs r`Xxxx`, s`BbAaaaaaaaaa`
1110010010010000AaaaaaaaaBbbXxxx		r`Xxxx` = h[addr(s`BbbAaaaaaaaa0`)] (s)		lhs r`Xxxx`, s`BbbAaaaaaaaa0`

========-------========--------========--------========

111001010000ZzzzAaaaaaaaYyyyXxxx		r`Xxxx`, r`Zzzz` = d[r`Yyyy` + `Aaaaaaaa00`]
111001010001Iiii0000ZzzzYyyyXxxx		r`Xxxx`, r`Iiii` = d[++ r`Yyyy` = r`Zzzz`]
111001010010Iiii0000ZzzzYyyyXxxx		r`Xxxx`, r`Iiii` = d[r`Yyyy` ++= r`Zzzz`]
111001010011YyyyAaaaaaaaBbbbXxxx		r`Xxxx`, r`Yyyy` = d[addr(`BbbbAaaaaaaa00`)]
111001010100ZzzzAaaaaaaaYyyyXxxx		d[r`Yyyy` + `Aaaaaaaa00`] = r`Xxxx`, r`Zzzz`
111001010101Iiii0000ZzzzYyyyXxxx		d[++r`Yyyy` = r`Zzzz`] = r`Iiii`, r`Xxxx`
111001010110Iiii0000ZzzzYyyyXxxx		d[r`Yyyy` ++= r`Zzzz`] = r`Xxxx`, r`Iiii`

========-------========--------========--------========

111001100000Xxxx0ONMLKJIHGFEDCBA		{r`ONMLKJIHGFEDCBA`<r14-0>} = [r`Xxxx`+]
111001100000Xxxx1ONMLKJIHGFEDCBA		{pc, r`ONMLKJIHGFEDCBA`<r14-0>} = [r`Xxxx`+]
111001100001XxxxPONMLKJIHGFEDCBA		{sfr`PONMLKJIHGFEDCBA`<sfr15-0>} = [r`Xxxx`+]
111001100010XxxxPONMLKJIHGFEDCBA		{r`PONMLKJIHGFEDCBA`<r15(sp)-0>} = [-r`Xxxx`]

111001100100XxxxPONMLKJIHGFEDCBA		[r`Xxxx`+] = {r`PONMLKJIHGFEDCBA`<r15(sp)-0>}
111001100110XxxxPONMLKJIHGFEDCBA		[-r`Xxxx`] = {sfr`PONMLKJIHGFEDCBA`<sfr15-0>}
111001100111Xxxx0ONMLKJIHGFEDCBA		[-r`Xxxx`] = {r`ONMLKJIHGFEDCBA`<r14-0>}
111001100111Xxxx1ONMLKJIHGFEDCBA		[-r`Xxxx`] = {rets, r`ONMLKJIHGFEDCBA`<r14-0>}

111001101000Xxxx0ONMLKJIHGFEDCBA		{r`ONMLKJIHGFEDCBA`<r14-0>} = [r`Xxxx`++]
111001101000Xxxx1ONMLKJIHGFEDCBA		{pc, r`ONMLKJIHGFEDCBA`<r14-0>} = [r`Xxxx`++]
111001101001XxxxPONMLKJIHGFEDCBA		{sfr`PONMLKJIHGFEDCBA`<sfr15-0>} = [r`Xxxx`++]
111001101010XxxxPONMLKJIHGFEDCBA		{r`PONMLKJIHGFEDCBA`<r15(sp)-0>} = [--r`Xxxx`]

111001101100XxxxPONMLKJIHGFEDCBA		[r`Xxxx`++] = {r`PONMLKJIHGFEDCBA`<r15(sp)-0>}
111001101110XxxxPONMLKJIHGFEDCBA		[--r`Xxxx`] = {sfr`PONMLKJIHGFEDCBA`<sfr15-0>}
111001101111Xxxx0ONMLKJIHGFEDCBA		[--r`Xxxx`] = {r`ONMLKJIHGFEDCBA`<r14-0>}
111001101111Xxxx1ONMLKJIHGFEDCBA		[--r`Xxxx`] = {rets, r`ONMLKJIHGFEDCBA`<r14-0>}

========-------========--------========--------========

11100111000000000000ZzzzYyyyXxxx		r`Xxxx` = b[r`Yyyy` + r`Zzzz`]			lbz r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111000001000000ZzzzYyyyXxxx		r`Xxxx` = b[++r`Yyyy` = r`Zzzz`]		addlbz r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111000010000000ZzzzYyyyXxxx		r`Xxxx` = b[r`Yyyy` ++= r`Zzzz`]		lbzadd r`Xxxx`, r`Yyyy`, r`Zzzz`

11100111000100000000ZzzzYyyyXxxx		r`Xxxx` = h[r`Yyyy` + r`Zzzz`]			lhz r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111000101000000ZzzzYyyyXxxx		r`Xxxx` = h[++r`Yyyy` = r`Zzzz`]		addlhz r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111000110000000ZzzzYyyyXxxx		r`Xxxx` = h[r`Yyyy` ++= r`Zzzz`]		lhzadd r`Xxxx`, r`Yyyy`, r`Zzzz`

11100111001000000000ZzzzYyyyXxxx		r`Xxxx` = [r`Yyyy` + r`Zzzz`]			lw r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111001001000000ZzzzYyyyXxxx		r`Xxxx` = [++r`Yyyy` = r`Zzzz`]			addlw r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111001010000000ZzzzYyyyXxxx		r`Xxxx` = [r`Yyyy` ++= r`Zzzz`]			lwadd r`Xxxx`, r`Yyyy`, r`Zzzz`

11100111010000000000ZzzzYyyyXxxx		b[r`Yyyy` + r`Zzzz`] = r`Xxxx`			sb r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111010001000000ZzzzYyyyXxxx		b[++r`Yyyy` = r`Zzzz`] = r`Xxxx`		addsb r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111010010000000ZzzzYyyyXxxx		b[r`Yyyy` ++= r`Zzzz`] = r`Xxxx`		sbadd r`Xxxx`, r`Yyyy`, r`Zzzz`

11100111010100000000ZzzzYyyyXxxx		h[r`Yyyy` + r`Zzzz`] = r`Xxxx`			sh r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111010101000000ZzzzYyyyXxxx		h[++r`Yyyy` = r`Zzzz`] = r`Xxxx`		addsh r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111010110000000ZzzzYyyyXxxx		h[r`Yyyy` ++= r`Zzzz`] = r`Xxxx`		shadd r`Xxxx`, r`Yyyy`, r`Zzzz`

11100111011000000000ZzzzYyyyXxxx		[r`Yyyy` + r`Zzzz`] = r`Xxxx`			sw r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111011001000000ZzzzYyyyXxxx		[++r`Yyyy` = r`Zzzz`] = r`Xxxx`			addsw r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111011010000000ZzzzYyyyXxxx		[r`Yyyy` ++= r`Zzzz`] = r`Xxxx`			swadd r`Xxxx`, r`Yyyy`, r`Zzzz`

11100111100000000000ZzzzYyyyXxxx		r`Xxxx` = b[r`Yyyy` + r`Zzzz`] (s)		lbs r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111100001000000ZzzzYyyyXxxx		r`Xxxx` = b[++r`Yyyy` = r`Zzzz`] (s)		addlbs r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111100010000000ZzzzYyyyXxxx		r`Xxxx` = b[r`Yyyy` ++= r`Zzzz`] (s)		lbsadd r`Xxxx`, r`Yyyy`, r`Zzzz`

11100111100100000000ZzzzYyyyXxxx		r`Xxxx` = h[r`Yyyy` + r`Zzzz`] (s)		lhs r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111100101000000ZzzzYyyyXxxx		r`Xxxx` = h[++r`Yyyy` = r`Zzzz`] (s)		addlhs r`Xxxx`, r`Yyyy`, r`Zzzz`
11100111100110000000ZzzzYyyyXxxx		r`Xxxx` = h[r`Yyyy` ++= r`Zzzz`] (s)		lhsadd r`Xxxx`, r`Yyyy`, r`Zzzz`

========-------========--------========--------========

1110100000000000BbAaaaaaYyyyXxxx		r`Xxxx` = b[r`Yyyy` + s`AaaaaaBb`]		lbz r`Xxxx`, r`Yyyy`, s`AaaaaaaBb`
1110100000000100BbAaaaaaYyyyXxxx		r`Xxxx` = b[++r`Yyyy` = s`AaaaaaBb`]		addlbz r`Xxxx`, r`Yyyy`, s`AaaaaaBb`
1110100000001000BbAaaaaaYyyyXxxx		r`Xxxx` = b[r`Yyyy` ++= s`AaaaaaBb`]		lbzadd r`Xxxx`, r`Yyyy`, s`AaaaaaBb`

1110100000010000BAaaaaaaYyyyXxxx		r`Xxxx` = h[r`Yyyy` + s`AaaaaaaB0`]		lhz r`Xxxx`, r`Yyyy`, s`AaaaaaaB0`
1110100000010100BAaaaaaaYyyyXxxx		r`Xxxx` = h[++r`Yyyy` = s`AaaaaaaB0`]		addlhz r`Xxxx`, r`Yyyy`, s`AaaaaaaB0`
1110100000011000BAaaaaaaYyyyXxxx		r`Xxxx` = h[r`Yyyy` ++= s`AaaaaaaB0`]		lhzadd r`Xxxx`, r`Yyyy`, s`AaaaaaaB0`

1110100000100000AaaaaaaaYyyyXxxx		r`Xxxx` = [r`Yyyy` + s`Aaaaaaaa00`]		lw r`Xxxx`, r`Yyyy`, s`Aaaaaaaa00`
1110100000100100AaaaaaaaYyyyXxxx		r`Xxxx` = [++r`Yyyy` = s`Aaaaaaaa00`]		addlw r`Xxxx`, r`Yyyy`, s`Aaaaaaaa00`
1110100000101000AaaaaaaaYyyyXxxx		r`Xxxx` = [r`Yyyy` ++= s`Aaaaaaaa00`]		lwadd r`Xxxx`, r`Yyyy`, s`Aaaaaaaa00`

1110100001000000BbAaaaaaYyyyXxxx		b[r`Yyyy` + s`AaaaaaBb`] = r`Xxxx`		sb r`Xxxx`, r`Yyyy`, s`AaaaaaBb`
1110100001000100BbAaaaaaYyyyXxxx		b[++r`Yyyy` = s`AaaaaaBb`] = r`Xxxx`		addsb r`Xxxx`, r`Yyyy`, s`AaaaaaBb`
1110100001001000BbAaaaaaYyyyXxxx		b[r`Yyyy` ++= s`AaaaaaBb`] = r`Xxxx`		sbadd r`Xxxx`, r`Yyyy`, s`AaaaaaBb`

1110100001010000BAaaaaaaYyyyXxxx		h[r`Yyyy` + s`AaaaaaaB0`] = r`Xxxx`		sh r`Xxxx`, r`Yyyy`, s`AaaaaaBb`
1110100001010100BAaaaaaaYyyyXxxx		h[++r`Yyyy` = s`AaaaaaaB0`] = r`Xxxx`		addsh r`Xxxx`, r`Yyyy`, s`AaaaaaBb`
1110100001011000BAaaaaaaYyyyXxxx		h[r`Yyyy` ++= s`AaaaaaaB0`] = r`Xxxx`		shadd r`Xxxx`, r`Yyyy`, s`AaaaaaBb`

1110100001100000AaaaaaaaYyyyXxxx		[r`Yyyy` + s`Aaaaaaaa00`] = r`Xxxx`		sw r`Xxxx`, r`Yyyy`, s`Aaaaaaaa00`
1110100001100100AaaaaaaaYyyyXxxx		[++r`Yyyy` = s`Aaaaaaaa00`] = r`Xxxx`		addsw r`Xxxx`, r`Yyyy`, s`Aaaaaaaa00`
1110100001101000AaaaaaaaYyyyXxxx		[r`Yyyy` ++= s`Aaaaaaaa00`] = r`Xxxx`		swadd r`Xxxx`, r`Yyyy`, s`Aaaaaaaa00`

1110100010000000BbAaaaaaYyyyXxxx		r`Xxxx` = b[r`Yyyy` + s`AaaaaaBb`] (s)		lbs r`Xxxx`, r`Yyyy`, s`AaaaaaBb`
1110100010000100BbAaaaaaYyyyXxxx		r`Xxxx` = b[++r`Yyyy` = s`AaaaaaBb`] (s)	addlbs r`Xxxx`, r`Yyyy`, s`AaaaaaBb`
1110100010001000BbAaaaaaYyyyXxxx		r`Xxxx` = b[r`Yyyy` ++= s`AaaaaaBb`] (s)	lbsadd r`Xxxx`, r`Yyyy`, s`AaaaaaBb`

1110100010010000BAaaaaaaYyyyXxxx		r`Xxxx` = h[r`Yyyy` + s`AaaaaaaB0`] (s)		lhs r`Xxxx`, r`Yyyy`, s`AaaaaaaB0`
1110100010010100BAaaaaaaYyyyXxxx		r`Xxxx` = h[++r`Yyyy` = s`AaaaaaaB0`] (s)	addlhs r`Xxxx`, r`Yyyy`, s`AaaaaaaB0`
1110100010011000BAaaaaaaYyyyXxxx		r`Xxxx` = h[r`Yyyy` ++= s`AaaaaaaB0`] (s)	lhsadd r`Xxxx`, r`Yyyy`, s`AaaaaaaB0`

========-------========--------========--------========

1110100100000000AaaaaaaaaaBbXxxx		r`Xxxx` = b[sp + s`BbAaaaaaaaaa`]		lbz r`Xxxx`, sp, s`BbAaaaaaaaaa`
1110100100010000AaaaaaaaaBbbXxxx		r`Xxxx` = h[sp + s`BbbAaaaaaaaa0`]		lhz r`Xxxx`, sp, s`BbbAaaaaaaaa0`
1110100100100000AaaaaaaaBbbbXxxx		r`Xxxx` = [sp + s`BbbbAaaaaaaa00`]		lw r`Xxxx`, sp, s`BbbbAaaaaaaa00`

1110100101000000AaaaaaaaaaBbXxxx		b[sp + s`BbAaaaaaaaaa`] = r`Xxxx`		sb r`Xxxx`, sp, s`BbAaaaaaaaaa`
1110100101010000AaaaaaaaaBbbXxxx		h[sp + s`BbbAaaaaaaaa0`] = r`Xxxx`		sh r`Xxxx`, sp, s`BbbAaaaaaaaa0`
1110100101100000AaaaaaaaBbbbXxxx		[sp + s`BbbbAaaaaaaa00`] = r`Xxxx`		sw r`Xxxx`, sp, s`BbbbAaaaaaaa00`

1110100110000000AaaaaaaaaaBbXxxx		r`Xxxx` = b[sp + s`BbAaaaaaaaaa`] (s)		lbs r`Xxxx`, sp, s`BbAaaaaaaaaa`
1110100110010000AaaaaaaaaBbbXxxx		r`Xxxx` = h[sp + s`BbbAaaaaaaaa0`] (s)		lhs r`Xxxx`, sp, s`BbbAaaaaaaaa0`

========-------========--------========--------========

111010100B000XxxAaaaaaaaaaaaaaaa		r`BXxx`.l = `Aaaaaaaaaaaaaaaa`			movl r`BXxx`, `Aaaaaaaaaaaaaaaa`
111010100B001XxxAaaaaaaaaaaaaaaa		sfr`BXxx`.l = `Aaaaaaaaaaaaaaaa`		movl sfr`BXxx`, `Aaaaaaaaaaaaaaaa`

111010100B010XxxAaaaaaaaaaaaaaaa		r`BXxx` = `Aaaaaaaaaaaaaaaa`			movz r`BXxx`, `Aaaaaaaaaaaaaaaa`
111010100B011XxxAaaaaaaaaaaaaaaa		sfr`BXxx` = `Aaaaaaaaaaaaaaaa`			movz sfr`BXxx`, `Aaaaaaaaaaaaaaaa`

111010100010%%%%%%%%%%%%0000Xxxx		r`Xxxx` = `%%WeirdIMM%%`

111010101B000XxxAaaaaaaaaaaaaaaa		r`BXxx`.h = `Aaaaaaaaaaaaaaaa`			movh r`BXxx`, `Aaaaaaaaaaaaaaaa`
111010101B001XxxAaaaaaaaaaaaaaaa		sfr`BXxx`.h = `Aaaaaaaaaaaaaaaa`		movh sfr`BXxx`, `Aaaaaaaaaaaaaaaa`

111010101B010XxxAaaaaaaaaaaaaaaa		r`BXxx` = s`Aaaaaaaaaaaaaaaa`			movs r`BXxx`, s`Aaaaaaaaaaaaaaaa`
111010101B011XxxAaaaaaaaaaaaaaaa		sfr`BXxx` = s`Aaaaaaaaaaaaaaaa`			movs sfr`BXxx`, s`Aaaaaaaaaaaaaaaa`

========-------========--------========--------========

111010110000000000000000YyyyXxxx		r`Xxxx` = rev8(r`Yyyy`)				rev8 r`Xxxx`, r`Yyyy`

========-------========--------========--------========

111011000000000000000000YyyyXxxx		r`Xxxx` = r`Yyyy`.b				uxtb r`Xxxx`, r`Yyyy`
111011000100000000000000YyyyXxxx		r`Xxxx` = r`Yyyy`.l				uxth r`Xxxx`, r`Yyyy`
111011001000000000000000YyyyXxxx		r`Xxxx` = r`Yyyy`.b (s)				sxtb r`Xxxx`, r`Yyyy`
111011001100000000000000YyyyXxxx		r`Xxxx` = r`Yyyy`.l (s)				sxth r`Xxxx`, r`Yyyy`

========-------========--------========--------========

11101101000BbbbbAaaaaaaaYyyyXxxx		r`Xxxx` = r`Yyyy` + s`BbbbbAaaaaaaa`		add r`Xxxx`, r`Yyyy`, s`BbbbbAaaaaaaa`

========-------========--------========--------========

11101110000000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` + r`Zzzz`			add r`Xxxx`, r`Yyyy`, r`Zzzz`
111011100001%%%%%%%%%%%%YyyyXxxx		r`Xxxx` = r`Yyyy` + `%%WeirdIMM%%`
111011100010%%%%%%%%%%%%YyyyXxxx		r`Xxxx` = `%%WeirdIMM%%` - r`Yyyy`


11101110010000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` - r`Zzzz`			sub r`Xxxx`, r`Yyyy`, r`Zzzz`
11101110100000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` + r`Zzzz` + c			addc r`Xxxx`, r`Yyyy`, r`Zzzz`

111011101001%%%%%%%%%%%%YyyyXxxx		r`Xxxx` = r`Yyyy` - `%%WeirdIMM%%`

11101110110000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` - r`Zzzz` - !c		subc r`Xxxx`, r`Yyyy`, r`Zzzz`

========-------========--------========--------========

111011110000%%%%%%%%%%%%Xxxx0000		cmp r`Xxxx`, `%%WeirdIMM%%`

111011111000AaaaaaaaaaaaXxxx0000		cmp r`Xxxx`, s`Aaaaaaaaaaaa`

========-------========--------========--------========

11110000000000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` | r`Zzzz`			or r`Xxxx`, r`Yyyy`, r`Zzzz`
11110000010000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` ^ r`Zzzz`			xor r`Xxxx`, r`Yyyy`, r`Zzzz`
11110000100000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` & r`Zzzz`			and r`Xxxx`, r`Yyyy`, r`Zzzz`
11110000110000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` & ~r`Zzzz`			andnot r`Xxxx`, r`Yyyy`, r`Zzzz`

========-------========--------========--------========

11110001000000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` | setbit(r`Zzzz`)		bitset r`Xxxx`, r`Yyyy`, r`Zzzz`
11110001010000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` ^ setbit(r`Zzzz`)		bittgl r`Xxxx`, r`Yyyy`, r`Zzzz`
11110001100000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` & setbit(r`Zzzz`)		and1 r`Xxxx`, r`Yyyy`, r`Zzzz`
11110001110000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` & ~setbit(r`Zzzz`)		bitclr r`Xxxx`, r`Yyyy`, r`Zzzz`

========-------========--------========--------========

111100100000000000000000YyyyXxxx		tst r`Xxxx`, r`Yyyy`

111100100100000000000000YyyyXxxx		r`Xxxx` = ~r`Yyyy`				not r`Xxxx`, r`Yyyy`

========-------========--------========--------========

111100110000%%%%%%%%%%%%YyyyXxxx		r`Xxxx` = r`Yyyy` | `%%WeirdIMM%%`
111100110100%%%%%%%%%%%%YyyyXxxx		r`Xxxx` = r`Yyyy` ^ `%%WeirdIMM%%`
111100111000%%%%%%%%%%%%YyyyXxxx		r`Xxxx` = r`Yyyy` & `%%WeirdIMM%%`
111100111100%%%%%%%%%%%%YyyyXxxx		r`Xxxx` = r`Yyyy` & (~`%%WeirdIMM%%`)

========-------========--------========--------========

1111010000000000AaaaaaaaXxxx0000		tst r`Xxxx`, `%%WeirdIMM%%`

========-------========--------========--------========

111101010000000000000000YyyyXxxx		r`Xxxx` = clz(r`Yyyy`)				clz r`Xxxx`, r`Yyyy`
111101010100000000000000YyyyXxxx		r`Xxxx` = cls(r`Yyyy`)				cls r`Xxxx`, r`Yyyy`
111101011000000000000000YyyyXxxx		r`Xxxx` = zcmp(r`Yyyy`)				zcmp r`Xxxx`, r`Yyyy`

========-------========--------========--------========

11110110000000BbbbbAaaaaYyyyXxxx		r`Xxxx` = uextra(r`Yyyy`, p:`Bbbbb`, l:`Aaaaa`)			uextra r`Xxxx`, r`Yyyy`, `CcBbb`, `Aaaaa`
11110110001000000000ZzzzYyyyXxxx		r`Xxxx` = uextra(r`Yyyy`, p:r`Zzzz`[12:8], l:r`Zzzz`[4:0])	uextra r`Xxxx`, r`Yyyy`, r`Zzzz`

11110110010000BbbbbAaaaaYyyyXxxx		r`Xxxx` <= insert(r`Yyyy`, p:`Bbbbb`, l:`Aaaaa`)		insert r`Xxxx`, r`Yyyy`, `CcBbb`, `Aaaaa`
11110110011000000000ZzzzYyyyXxxx		r`Xxxx` <= insert(r`Yyyy`, p:r`Zzzz`[12:8], l:r`Zzzz`[4:0])	insert r`Xxxx`, r`Yyyy`, r`Zzzz`

11110110100000BbbbbAaaaaYyyyXxxx		r`Xxxx` = sextra(r`Yyyy`, p:`Bbbbb`, l:`Aaaaa`)			sextra r`Xxxx`, r`Yyyy`, `CcBbb`, `Aaaaa`
11110110101000000000ZzzzYyyyXxxx		r`Xxxx` = sextra(r`Yyyy`, p:r`Zzzz`[12:8], l:r`Zzzz`[4:0])	sextra r`Xxxx`, r`Yyyy`, r`Zzzz`

========-------========--------========--------========

11110111000000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` << r`Zzzz`			lsl r`Xxxx`, r`Yyyy`, r`Zzzz`
1111011100100000000AaaaaYyyyXxxx		r`Xxxx` = r`Yyyy` << `Aaaaa`<0==32>		lsl r`Xxxx`, r`Yyyy`, `Aaaaa`<0==32>

11110111010000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` >> r`Zzzz`			lsr r`Xxxx`, r`Yyyy`, r`Zzzz`
1111011101100000000AaaaaYyyyXxxx		r`Xxxx` = r`Yyyy` >> `Aaaaa`<0==32>		lsr r`Xxxx`, r`Yyyy`, `Aaaaa`<0==32>

11110111100000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` <<< r`Zzzz`			qasl r`Xxxx`, r`Yyyy`, r`Zzzz`
1111011110100000000AaaaaYyyyXxxx		r`Xxxx` = r`Yyyy` <<< `Aaaaa`<0==32>		qasl r`Xxxx`, r`Yyyy`, `Aaaaa`<0==32>

11110111110000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` >>> r`Zzzz`			qasr r`Xxxx`, r`Yyyy`, r`Zzzz`
1111011111100000000AaaaaYyyyXxxx		r`Xxxx` = r`Yyyy` >>> `Aaaaa`<0==32>		qasr r`Xxxx`, r`Yyyy`, `Aaaaa`<0==32>

========-------========--------========--------========

11111000000000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` <> r`Zzzz`			rotr r`Xxxx`, r`Yyyy`, r`Zzzz`
1111100001000000000AaaaaYyyyXxxx		r`Xxxx` = r`Yyyy` <> `Aaaaa`<0==32>		rotr r`Xxxx`, r`Yyyy`, `Aaaaa`<0==32>

11111000100000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` <c> r`Zzzz`			rotrc r`Xxxx`, r`Yyyy`, r`Zzzz`
1111100011000000000AaaaaYyyyXxxx		r`Xxxx` = r`Yyyy` <c> `Aaaaa`<0==32>		rotrc r`Xxxx`, r`Yyyy`, `Aaaaa`<0==32>

========-------========--------========--------========

11111001000000000000Yyyy0000Xxxx		r`Xxxx` = macc >> r`Yyyy`			movz64 r`Xxxx`, r`Yyyy`
111110010100000000Aaaaaa0000Xxxx		r`Xxxx` = macc >> `Aaaaaa`			movz64 r`Xxxx`, `Aaaaaa`

11111001100000000000Yyyy0000Xxxx		r`Xxxx` = macc >>> r`Yyyy`			movs64 r`Xxxx`, r`Yyyy`
111110011100000000Aaaaaa0000Xxxx		r`Xxxx` = macc >>> `Aaaaaa`			movs64 r`Xxxx`, `Aaaaaa`

========-------========--------========--------========

11111010AaaaaaaaaaaaaaaaaaaaBbbb		goto s`BbbbAaaaaaaaaaaaaaaaaaaa0`		j s`BbbbAaaaaaaaaaaaaaaaaaaa0`

========-------========--------========--------========

11111011Aaaaaaaaaaaaaaaaaaaa0000		ifs (nzcv == 0) goto s`Aaaaaaaaaaaaaaaaaaaa0`		jeq s`Aaaaaaaaaaaaaaaaaaaa0`
11111011Aaaaaaaaaaaaaaaaaaaa0001		ifs (nzcv != 0) goto s`Aaaaaaaaaaaaaaaaaaaa0`		jne s`Aaaaaaaaaaaaaaaaaaaa0`
11111011Aaaaaaaaaaaaaaaaaaaa0010		if (nzcv >= 0) goto s`Aaaaaaaaaaaaaaaaaaaa0`		jcs s`Aaaaaaaaaaaaaaaaaaaa0`
11111011Aaaaaaaaaaaaaaaaaaaa0011		if (nzcv < 0) goto s`Aaaaaaaaaaaaaaaaaaaa0`		jcc s`Aaaaaaaaaaaaaaaaaaaa0`
11111011Aaaaaaaaaaaaaaaaaaaa0100		ifs (nzcv ?? 0) goto s`Aaaaaaaaaaaaaaaaaaaa0`		jmi s`Aaaaaaaaaaaaaaaaaaaa0`
11111011Aaaaaaaaaaaaaaaaaaaa0101		ifs (nzcv ?? 0) goto s`Aaaaaaaaaaaaaaaaaaaa0`		jpl s`Aaaaaaaaaaaaaaaaaaaa0`
11111011Aaaaaaaaaaaaaaaaaaaa0110		ifs (nzcv ?? 0) goto s`Aaaaaaaaaaaaaaaaaaaa0`		jvs s`Aaaaaaaaaaaaaaaaaaaa0`
11111011Aaaaaaaaaaaaaaaaaaaa0111		ifs (nzcv ?? 0) goto s`Aaaaaaaaaaaaaaaaaaaa0`		jvc s`Aaaaaaaaaaaaaaaaaaaa0`
11111011Aaaaaaaaaaaaaaaaaaaa1000		if (nzcv > 0) goto s`Aaaaaaaaaaaaaaaaaaaa0`		jhi s`Aaaaaaaaaaaaaaaaaaaa0`
11111011Aaaaaaaaaaaaaaaaaaaa1001		if (nzcv <= 0) goto s`Aaaaaaaaaaaaaaaaaaaa0`		jls s`Aaaaaaaaaaaaaaaaaaaa0`
11111011Aaaaaaaaaaaaaaaaaaaa1010		ifs (nzcv >= 0) goto s`Aaaaaaaaaaaaaaaaaaaa0`		jge s`Aaaaaaaaaaaaaaaaaaaa0`
11111011Aaaaaaaaaaaaaaaaaaaa1011		ifs (nzcv < 0) goto s`Aaaaaaaaaaaaaaaaaaaa0`		jlt s`Aaaaaaaaaaaaaaaaaaaa0`
11111011Aaaaaaaaaaaaaaaaaaaa1100		ifs (nzcv > 0) goto s`Aaaaaaaaaaaaaaaaaaaa0`		jgt s`Aaaaaaaaaaaaaaaaaaaa0`
11111011Aaaaaaaaaaaaaaaaaaaa1101		ifs (nzcv <= 0) goto s`Aaaaaaaaaaaaaaaaaaaa0`		jle s`Aaaaaaaaaaaaaaaaaaaa0`
11111011Aaaaaaaaaaaaaaaaaaaa1110		ifs (nzcv ?? 0) goto s`Aaaaaaaaaaaaaaaaaaaa0`		j s`Aaaaaaaaaaaaaaaaaaaa0`

========-------========--------========--------========

111111000000%%%%%%%%%%%%YyyyXxxx		r`Xxxx` = r`Yyyy` * `%%WeirdIMM%%`

11111100010000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` / r`Zzzz`		udiv r'Xxxx`, r`Yyyy`, r`Zzzz`
11111100100000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` * r`Zzzz`		mul r`Xxxx`, r`Yyyy`, r`Zzzz`
11111100110000000000ZzzzYyyyXxxx		r`Xxxx` = r`Yyyy` / r`Zzzz` (s)		sdiv r`Xxxx`, r`Yyyy`, r`Zzzz`

========-------========--------========--------========

111111010-00000000000000YyyyXxxx		macc = r`Xxxx` * r`Yyyy`
111111010-10000000000000YyyyXxxx		macc += r`Xxxx` * r`Yyyy`
111111010-11000000000000YyyyXxxx		macc -= r`Xxxx` * r`Yyyy`

111111011-00000000000000YyyyXxxx		macc = r`Xxxx` * r`Yyyy` (s)
111111011-10000000000000YyyyXxxx		macc += r`Xxxx` * r`Yyyy` (s)
111111011-11000000000000YyyyXxxx		macc -= r`Xxxx` * r`Yyyy` (s)

========-------========--------========--------========

1111111000000000IiiiZzzzYyyyXxxx		macc = [r`Yyyy` ++= r`Iiii`] * [r`Xxxx` ++= r`Zzzz`]
1111111000100000IiiiZzzzYyyyXxxx		macc += [r`Yyyy` ++= r`Iiii`] * [r`Xxxx` ++= r`Zzzz`] (u)
1111111000110000IiiiZzzzYyyyXxxx		macc -= [r`Yyyy` ++= r`Iiii`] * [r`Xxxx` ++= r`Zzzz`]
1111111001000000IiiiZzzzYyyyXxxx		macc = h[r`Yyyy` ++= r`Iiii`] * [r`Xxxx` ++= r`Zzzz`]
1111111001100000IiiiZzzzYyyyXxxx		macc += h[r`Yyyy` ++= r`Iiii`] * [r`Xxxx` ++= r`Zzzz`]
1111111001110000IiiiZzzzYyyyXxxx		macc -= h[r`Yyyy` ++= r`Iiii`] * [r`Xxxx` ++= r`Zzzz`]

1111111010000000IiiiZzzzYyyyXxxx		macc = [r`Yyyy` ++= r`Iiii`] * [r`Xxxx` ++= r`Zzzz`] (s)
1111111010100000IiiiZzzzYyyyXxxx		macc += [r`Yyyy` ++= r`Iiii`] * [r`Xxxx` ++= r`Zzzz`] (s)
1111111010110000IiiiZzzzYyyyXxxx		macc -= [r`Yyyy` ++= r`Iiii`] * [r`Xxxx` ++= r`Zzzz`] (s)
1111111011000000IiiiZzzzYyyyXxxx		macc = h[r`Yyyy` ++= r`Iiii`] * [r`Xxxx` ++= r`Zzzz`] (s)
1111111011100000IiiiZzzzYyyyXxxx		macc += h[r`Yyyy` ++= r`Iiii`] * [r`Xxxx` ++= r`Zzzz`] (s)
1111111011110000IiiiZzzzYyyyXxxx		macc -= h[r`Yyyy` ++= r`Iiii`] * [r`Xxxx` ++= r`Zzzz`] (s)

========-------========--------========--------========

111111110000BbbbbbAaaaaaYyyyXxxx		macc = [r`Yyyy` ++= s`Bbbbbb00`] * [r`Xxxx` ++= s`Aaaaaa00`]
111111110010BbbbbbAaaaaaYyyyXxxx		macc += [r`Yyyy` ++= s`Bbbbbb00`] * [r`Xxxx` ++= s`Aaaaaa00`]
111111110011BbbbbbAaaaaaYyyyXxxx		macc -= [r`Yyyy` ++= s`Bbbbbb00`] * [r`Xxxx` ++= s`Aaaaaa00`]
111111110100BbbbbbAaaaaaYyyyXxxx		macc = h[r`Yyyy` ++= s`Bbbbbb00`] * [r`Xxxx` ++= s`Aaaaaa00`]
111111110110BbbbbbAaaaaaYyyyXxxx		macc += h[r`Yyyy` ++= s`Bbbbbb00`] * [r`Xxxx` ++= s`Aaaaaa00`]
111111110111BbbbbbAaaaaaYyyyXxxx		macc -= h[r`Yyyy` ++= s`Bbbbbb00`] * [r`Xxxx` ++= s`Aaaaaa00`]

111111111000BbbbbbAaaaaaYyyyXxxx		macc = [r`Yyyy` ++= s`Bbbbbb00`] * [r`Xxxx` ++= s`Aaaaaa00`] (s)
111111111010BbbbbbAaaaaaYyyyXxxx		macc += [r`Yyyy` ++= s`Bbbbbb00`] * [r`Xxxx` ++= s`Aaaaaa00`] (s)
111111111011BbbbbbAaaaaaYyyyXxxx		macc -= [r`Yyyy` ++= s`Bbbbbb00`] * [r`Xxxx` ++= s`Aaaaaa00`] (s)
111111111100BbbbbbAaaaaaYyyyXxxx		macc = h[r`Yyyy` ++= s`Bbbbbb00`] * [r`Xxxx` ++= s`Aaaaaa00`] (s)
111111111110BbbbbbAaaaaaYyyyXxxx		macc += h[r`Yyyy` ++= s`Bbbbbb00`] * [r`Xxxx` ++= s`Aaaaaa00`] (s)
111111111111BbbbbbAaaaaaYyyyXxxx		macc -= h[r`Yyyy` ++= s`Bbbbbb00`] * [r`Xxxx` ++= s`Aaaaaa00`] (s)

Definitions

............0000Aaaaaaaa........		`Aaaaaaaa`
............0001Aaaaaaaa........		`Aaaaaaaa00000000Aaaaaaaa`
............0010Aaaaaaaa........		`Aaaaaaaa00000000Aaaaaaaa00000000`
............0011Aaaaaaaa........		`AaaaaaaaAaaaaaaaAaaaaaaaAaaaaaaa`

............01000Aaaaaaa........		`1Aaaaaaa000000000000000000000000`
............01001Aaaaaaa........		`1Aaaaaaa00000000000000000000000`
............01010Aaaaaaa........		`1Aaaaaaa0000000000000000000000`
............01011Aaaaaaa........		`1Aaaaaaa000000000000000000000`
............01100Aaaaaaa........		`1Aaaaaaa00000000000000000000`
............01101Aaaaaaa........		`1Aaaaaaa0000000000000000000`
............01110Aaaaaaa........		`1Aaaaaaa000000000000000000`
............01111Aaaaaaa........		`1Aaaaaaa00000000000000000`
............10000Aaaaaaa........		`1Aaaaaaa0000000000000000`
............10001Aaaaaaa........		`1Aaaaaaa000000000000000`
............10010Aaaaaaa........		`1Aaaaaaa00000000000000`
............10011Aaaaaaa........		`1Aaaaaaa0000000000000`
............10100Aaaaaaa........		`1Aaaaaaa000000000000`
............10101Aaaaaaa........		`1Aaaaaaa00000000000`
............10110Aaaaaaa........		`1Aaaaaaa0000000000`
............10111Aaaaaaa........		`1Aaaaaaa000000000`
............11000Aaaaaaa........		`1Aaaaaaa00000000`
............11001Aaaaaaa........		`1Aaaaaaa0000000`
............11010Aaaaaaa........		`1Aaaaaaa000000`
............11011Aaaaaaa........		`1Aaaaaaa00000`
............11100Aaaaaaa........		`1Aaaaaaa0000`
............11101Aaaaaaa........		`1Aaaaaaa000`
............11110Aaaaaaa........		`1Aaaaaaa00`
............11111Aaaaaaa........		`1Aaaaaaa0`

Mnemonic and Arithmetic notations

As the pi32 is based on Blackfin, it inherited its arithmetic syntax instead of the usual mnemonic syntax. However, older versions of the pi32 toolchain indeed used the mnemonic syntax (or at least the objdump outputted it), so the table below lists the current arithmetic syntax and the corresponding instruction in mnemocode.

Arithmetic Mnemonic (old pi32 toolchain)
nop nop
bkpt n/a
hbkpt n/a
macc = 0 clrmacc
csync ??
ssync ??
illeg ??
lockset ??
lockclr ??
idle idle
rts rts
rti rti
rte n/a
cli cli
cli rA cli rA
sti sti
sti rA sti rA
swi imm6 swi imm6
excpt imm6 n/a
rep size, rA { <size> iwords } rep size, rA
flush [rA] flush rA
flushinv [rA] flushinv rA
iflush [rA] iflush rA
pfetch [rA] pfetch rA
goto rA j rA
call rA call rA
tbb [rA] tbb rA
tbh [rA] tbh rA
rep size, count { <size> iwords } rep size, count
call label call label
macc /= rA ??
macc /= rA (s) ??
rA = rB mov rA, rB
macc = rA * rB ??
macc = rA * rB (s) ??
macc += rA * rB ??
macc -= rA * rB ??
macc += rA * rB (s) ??
macc -= rA * rB (s) ??
goto label j label
if (rA == 0) goto label jz rA, label
if (rA != 0) goto label jnz rA, label
rA = [addr(offset)] lw rA, offset
{r0-r7} = [rA++] lm {r0-r7}, rA
[rA++] = {r0-r7} sm {r0-r7}, rA
rA = [sp + offset] lw rA, sp, offset
rA = [rB + offset] lw rA, rB, offset
rA = h[rB + offset] lhz rA, rB, offset
rA = b[rB + offset] lbz rA, rB, offset
[sp + offset] = rA sw rA, sp, offset
[rB + offset] = rA sw rA, rB, offset
h[rB + offset] = rA sh rA, rB, offset
b[rB + offset] = rA sb rA, rB, offset
rA = signedimm movs rA, signedimm
rA += signedimm add rA, signedimm
rA = sp + signedimm add rA, sp, signedimm
cmp rA, signedimm cmp rA, signedimm
rA = rB << shamt lsl rA, rB, shamt
rA = rB >> shamt lsr rA, rB, shamt
rA = rB <<< shamt qasl rA, rB, shamt
rA = rB >>> shamt qasr rA, rB, shamt
{pc, r14-r4 / r3-r0} = [sp++] pop {pc, r14-r4 / r3-r0}
[--sp] = {rets, r14-r4 / r3-r0} push {rets, r14-r4 / r3-r0}
testset b[rA] n/a
{sfr7-0} = [sp++] pops {sfr7-0}
[--sp] = {sfr7-0} pushs {sfr7-0}
sfrA = rB mov sfrA, rB
rA = sfrB mov rA, sfrB
rA = rB.b uxtb rA, rB
rA = rB.l uxth rA, rB
rA = rB.b (s) sxtb rA, rB
rA = rB.l (s) sxth rA, rB
rA += rB (brev) addrev rA, rB
rA += rB add rA, rB
cmn rB, rA same?
sp += signedimm add sp, signedimm
cmp rB, rA same?
rA <<= rB lsl rA, rB
rA >>= rB lsr rA, rB
rA <<<= rB qasl rA, rB
rA >>>= rB qasr rA, rB
rA = rB + signedimm add rA, rB, signedimm
rA = rB + rC add rA, rB, rC
rA = rB - rC sub rA, rB, rC
rA \|= (1<<bit) bitset rA, bit
rA ^= (1<<bit) bittgl rA, bit
rA \|= rB or rA, rB
rA ^= rB xor rA, rB
rA &= rB and rA, rB
rA = ~rB not rA, rB
rA &= ~(1<<bit) bitclr rA, bit
rA += rB + c addc rA, rB
rA -= rB + !c subc rA, rB
rA = -rB neg rA, rB
macc <<= shamt lslmacc shamt
rA <>= rB rotr rA, rB
rA <c>= rB rotrc rA, rB
macc <<= rA lslmacc rA
macc >>= rA lsrmacc rA
macc >>>= rA asrmacc rA
macc >>= shamt lsrmacc shamt
macc >>>= shamt asrmacc shamt
TODO TODO