nkeynes@359: ## nkeynes@359: ## Instruction file for the SH4 - from the SH4 manual. nkeynes@359: ## line ::= bitpattern WHITESPACE result NEWLINE nkeynes@359: ## bitpattern ::= { '0' | '1' | '(' operand ')' } nkeynes@359: ## operand ::= IDENTIFIER ':' NUMBER signspec nkeynes@359: ## signspec ::= 'u' | 's' | nkeynes@359: ## result ::= { IDENTIFIER | NON-IDENT-CHAR } nkeynes@359: nkeynes@359: registers { nkeynes@359: uint32 Rm, Rn = r0..r15 nkeynes@359: uint32 Rm_BANK, Rn_BANK = r8_bank..r15_bank nkeynes@359: float Frm, Frn = fr0..fr15 nkeynes@359: float XFm, XFn = xf0..xf15 nkeynes@359: double Drm, Drn = dr0..dr8 overlaps fr0..fr15 swapped nkeynes@359: double XDm, XDn = xd0..xd8 overlaps xf0..xf15 swapped nkeynes@359: float[4] FVm, FVn = fv0..fv3 overlaps fr0..fr15 nkeynes@359: float[16] XMTRX = xmtrx overlaps xf0..xf15 nkeynes@359: nkeynes@359: ## Special registers nkeynes@359: uint32 GBR, SR, VBR, SSR, SGR SPC, DBR nkeynes@359: uint32 FPSCR, FPUL, MACH, MACL, PR, PC nkeynes@359: nkeynes@359: } nkeynes@359: nkeynes@359: 0011(Rn:4)(Rm:4)1100 ADD Rm, Rn nkeynes@359: 0111(Rn:4)(imm:8s) ADD #imm, Rn nkeynes@359: 0011(Rn:4)(Rm:4)1110 ADDC Rm, Rn nkeynes@359: 0011(Rn:4)(Rm:4)1111 ADDV Rm, Rn nkeynes@359: 0010(Rn:4)(Rm:4)1001 AND Rm, Rn nkeynes@359: 11001001(imm:8u) AND #imm, R0 nkeynes@359: 11001101(imm:8u) AND.B #imm, @(R0, GBR) nkeynes@359: 10001011(disp:8s<<1) BF disp nkeynes@359: 10001111(disp:8s<<1) BF/S disp nkeynes@359: 1010(disp:12s<<1) BRA disp nkeynes@359: 0000(Rn:4)00100011 BRAF Rn nkeynes@359: 1011(disp:12s<<1) BSR disp nkeynes@359: 0000(Rn:4)00000011 BSRF Rn nkeynes@359: 10001001(disp:8s<<1) BT disp nkeynes@359: 10001101(disp:8s<<1) BT/S disp nkeynes@359: 0000000000101000 CLRMAC nkeynes@359: 0000000001001000 CLRS nkeynes@359: 0000000000001000 CLRT nkeynes@359: 0011(Rn:4)(Rm:4)0000 CMP/EQ Rm, Rn nkeynes@359: 10001000(imm:8s) CMP/EQ #imm, R0 nkeynes@359: 0011(Rn:4)(Rm:4)0011 CMP/GE Rm, Rn nkeynes@359: 0011(Rn:4)(Rm:4)0111 CMP/GT Rm, Rn nkeynes@359: 0011(Rn:4)(Rm:4)0110 CMP/HI Rm, Rn nkeynes@359: 0011(Rn:4)(Rm:4)0010 CMP/HS Rm, Rn nkeynes@359: 0100(Rn:4)00010101 CMP/PL Rn nkeynes@359: 0100(Rn:4)00010001 CMP/PZ Rn nkeynes@359: 0010(Rn:4)(Rm:4)1100 CMP/STR Rm, Rn nkeynes@359: 0010(Rn:4)(Rm:4)0111 DIV0S Rm, Rn nkeynes@359: 0000000000011001 DIV0U nkeynes@359: 0011(Rn:4)(Rm:4)0100 DIV1 Rm, Rn nkeynes@359: 0011(Rn:4)(Rm:4)1101 DMULS.L Rm, Rn nkeynes@359: 0011(Rn:4)(Rm:4)0101 DMULU.L Rm, Rn nkeynes@359: 0100(Rn:4)00010000 DT Rn nkeynes@359: 0110(Rn:4)(Rm:4)1110 EXTS.B Rm, Rn nkeynes@359: 0110(Rn:4)(Rm:4)1111 EXTS.W Rm, Rn nkeynes@359: 0110(Rn:4)(Rm:4)1100 EXTU.B Rm, Rn nkeynes@359: 0110(Rn:4)(Rm:4)1101 EXTU.W Rm, Rn nkeynes@359: 1111(FRn:4)01011101 FABS FRn nkeynes@359: 1111(FRn:4)(FRm:4)0000 FADD FRm, FRn nkeynes@359: 1111(FRn:4)(FRm:4)0100 FCMP/EQ FRm, FRn nkeynes@359: 1111(FRn:4)(FRm:4)0101 FCMP/GT FRm, FRn nkeynes@359: 1111(FRm:4)10111101 FCNVDS FRm, FPUL nkeynes@359: 1111(FRn:4)10101101 FCNVSD FPUL, FRn nkeynes@359: 1111(FRn:4)(FRm:4)0011 FDIV FRm, FRn nkeynes@359: 1111(FVn:2)(FVm:2)11101101 FIPR FVm, FVn nkeynes@359: 1111(FRm:4)00011101 FLDS FRm, FPUL nkeynes@359: 1111(FRn:4)10001101 FLDI0 FRn nkeynes@359: 1111(FRn:4)10011101 FLDI1 FRn nkeynes@359: 1111(FRn:4)00101101 FLOAT FPUL, FRn nkeynes@359: 1111(FRn:4)(FRm:4)1110 FMAC FR0, FRm, FRn nkeynes@359: 1111(FRn:4)(FRm:4)1100 FMOV FRm, FRn nkeynes@359: 1111(Rn:4)(FRm:4)1010 FMOV FRm, @Rn nkeynes@359: 1111(Rn:4)(FRm:4)1011 FMOV FRm, @-Rn nkeynes@359: 1111(Rn:4)(FRm:4)0111 FMOV FRm, @(R0, Rn) nkeynes@359: 1111(FRn:4)(Rm:4)1000 FMOV @Rm, FRn nkeynes@359: 1111(FRn:4)(Rm:4)1001 FMOV @Rm+, FRn nkeynes@359: 1111(FRn:4)(Rm:4)0110 FMOV @(R0, Rm), FRn nkeynes@359: 1111(FRn:4)(FRm:4)0010 FMUL FRm, FRn nkeynes@359: 1111(FRn:4)01001101 FNEG FRn nkeynes@359: 1111101111111101 FRCHG nkeynes@359: 1111(FRn:3<<1)011111101 FSCA FPUL, FRn nkeynes@359: 1111001111111101 FSCHG nkeynes@359: 1111(FRn:4)01101101 FSQRT FRn nkeynes@359: 1111(FRn:4)01111101 FSRRA FRn nkeynes@359: 1111(FRn:4)00001101 FSTS FPUL, FRn nkeynes@359: 1111(FRn:4)(FRm:4)0001 FSUB FRm, FRn nkeynes@359: 1111(FRm:4)00111101 FTRC FRm, FPUL nkeynes@359: 1111(FVn:2)0111111101 FTRV XMTRX, FVn nkeynes@359: 0100(Rn:4)00101011 JMP @Rn nkeynes@359: 0100(Rn:4)00001011 JSR @Rn nkeynes@359: 0100(Rm:4)00011110 LDC Rm, GBR nkeynes@359: 0100(Rm:4)00001110 LDC Rm, SR nkeynes@359: 0100(Rm:4)00101110 LDC Rm, VBR nkeynes@359: 0100(Rm:4)00111110 LDC Rm, SSR nkeynes@359: 0100(Rm:4)00111010 LDC Rm, SGR nkeynes@359: 0100(Rm:4)01001110 LDC Rm, SPC nkeynes@359: 0100(Rm:4)11111010 LDC Rm, DBR nkeynes@359: 0100(Rm:4)1(Rn_BANK:3)1110 LDC Rm, Rn_BANK nkeynes@359: 0100(Rm:4)00010111 LDC.L @Rm+, GBR nkeynes@359: 0100(Rm:4)00000111 LDC.L @Rm+, SR nkeynes@359: 0100(Rm:4)00100111 LDC.L @Rm+, VBR nkeynes@359: 0100(Rm:4)00110111 LDC.L @Rm+, SSR nkeynes@359: 0100(Rm:4)00110110 LDC.L @Rm+, SGR nkeynes@359: 0100(Rm:4)01000111 LDC.L @Rm+, SPC nkeynes@359: 0100(Rm:4)11110110 LDC.L @Rm+, DBR nkeynes@359: 0100(Rm:4)1(Rn_BANK:3)0111 LDC.L @Rm+, Rn_BANK nkeynes@359: 0100(Rm:4)01101010 LDS Rm, FPSCR nkeynes@359: 0100(Rm:4)01100110 LDS.L @Rm+, FPSCR nkeynes@359: 0100(Rm:4)01011010 LDS Rm, FPUL nkeynes@359: 0100(Rm:4)01010110 LDS.L @Rm+, FPUL nkeynes@359: 0100(Rm:4)00001010 LDS Rm, MACH nkeynes@359: 0100(Rm:4)00000110 LDS.L @Rm+, MACH nkeynes@359: 0100(Rm:4)00011010 LDS Rm, MACL nkeynes@359: 0100(Rm:4)00010110 LDS.L @Rm+, MACL nkeynes@359: 0100(Rm:4)00101010 LDS Rm, PR nkeynes@359: 0100(Rm:4)00100110 LDS.L @Rm+, PR nkeynes@359: 0000000000111000 LDTLB nkeynes@359: 0000(Rn:4)(Rm:4)1111 MAC.L @Rm+, @Rn+ nkeynes@359: 0100(Rn:4)(Rm:4)1111 MAC.W @Rm+, @Rn+ nkeynes@359: 0110(Rn:4)(Rm:4)0011 MOV Rm, Rn nkeynes@359: 1110(Rn:4)(imm:8s) MOV #imm, Rn nkeynes@359: 0010(Rn:4)(Rm:4)0000 MOV.B Rm, @Rn nkeynes@359: 0010(Rn:4)(Rm:4)0100 MOV.B Rm, @-Rn nkeynes@359: 0000(Rn:4)(Rm:4)0100 MOV.B Rm, @(R0, Rn) nkeynes@359: 11000000(disp:8) MOV.B R0, @(disp, GBR) nkeynes@359: 10000000(Rn:4)(disp:4) MOV.B R0, @(disp, Rn) nkeynes@359: 0110(Rn:4)(Rm:4)0000 MOV.B @Rm, Rn nkeynes@359: 0110(Rn:4)(Rm:4)0100 MOV.B @Rm+, Rn nkeynes@359: 0000(Rn:4)(Rm:4)1100 MOV.B @(R0, Rm), Rn nkeynes@359: 11000100(disp:8) MOV.B @(disp, GBR), R0 nkeynes@359: 10000100(Rm:4)(disp:4) MOV.B @(disp, Rm), R0 nkeynes@359: 0010(Rn:4)(Rm:4)0010 MOV.L Rm, @Rn nkeynes@359: 0010(Rn:4)(Rm:4)0110 MOV.L Rm, @-Rn nkeynes@359: 0000(Rn:4)(Rm:4)0110 MOV.L Rm, @(R0, Rn) nkeynes@359: 11000010(disp:8<<2) MOV.L R0, @(disp, GBR) nkeynes@359: 0001(Rn:4)(Rm:4)(disp:4<<2) MOV.L Rm, @(disp, Rn) nkeynes@359: 0110(Rn:4)(Rm:4)0010 MOV.L @Rm, Rn nkeynes@359: 0110(Rn:4)(Rm:4)0110 MOV.L @Rm+, Rn nkeynes@359: 0000(Rn:4)(Rm:4)1110 MOV.L @(R0, Rm), Rn nkeynes@359: 11000110(disp:8<<2) MOV.L @(disp, GBR), R0 nkeynes@359: 1101(Rn:4)(disp:8<<2) MOV.L @(disp, PC), Rn nkeynes@359: 0101(Rn:4)(Rm:4)(disp:4<<2) MOV.L @(disp, Rm), Rn nkeynes@359: 0010(Rn:4)(Rm:4)0001 MOV.W Rm, @Rn nkeynes@359: 0010(Rn:4)(Rm:4)0101 MOV.W Rm, @-Rn nkeynes@359: 0000(Rn:4)(Rm:4)0101 MOV.W Rm, @(R0, Rn) nkeynes@359: 11000001(disp:8<<1) MOV.W R0, @(disp, GBR) nkeynes@359: 10000001(Rn:4)(disp:4<<1) MOV.W R0, @(disp, Rn) nkeynes@359: 0110(Rn:4)(Rm:4)0001 MOV.W @Rm, Rn nkeynes@359: 0110(Rn:4)(Rm:4)0101 MOV.W @Rm+, Rn nkeynes@359: 0000(Rn:4)(Rm:4)1101 MOV.W @(R0, Rm), Rn nkeynes@359: 11000101(disp:8<<1) MOV.W @(disp, GBR), R0 nkeynes@359: 1001(Rn:4)(disp:8<<1) MOV.W @(disp, PC), Rn nkeynes@359: 10000101(Rm:4)(disp:4<<1) MOV.W @(disp, Rm), R0 nkeynes@359: 11000111(disp:8<<2) MOVA @(disp, PC), R0 nkeynes@359: 0000(Rn:4)11000011 MOVCA.L R0, @Rn nkeynes@359: 0000(Rn:4)00101001 MOVT Rn nkeynes@359: 0000(Rn:4)(Rm:4)0111 MUL.L Rm, Rn nkeynes@359: 0010(Rn:4)(Rm:4)1111 MULS.W Rm, Rn nkeynes@359: 0010(Rn:4)(Rm:4)1110 MULU.W Rm, Rn nkeynes@359: 0110(Rn:4)(Rm:4)1011 NEG Rm, Rn nkeynes@359: 0110(Rn:4)(Rm:4)1010 NEGC Rm, Rn nkeynes@359: 0000000000001001 NOP nkeynes@359: 0110(Rn:4)(Rm:4)0111 NOT Rm, Rn nkeynes@359: 0000(Rn:4)10010011 OCBI @Rn nkeynes@359: 0000(Rn:4)10100011 OCBP @Rn nkeynes@359: 0000(Rn:4)10110011 OCBWB @Rn nkeynes@359: 0010(Rn:4)(Rm:4)1011 OR Rm, Rn nkeynes@359: 11001011(imm:8) OR #imm, R0 nkeynes@359: 11001111(imm:8) OR.B #imm, @(R0, GBR) nkeynes@359: 0000(Rn:4)10000011 PREF @Rn nkeynes@359: 0100(Rn:4)00100100 ROTCL Rn nkeynes@359: 0100(Rn:4)00100101 ROTCR Rn nkeynes@359: 0100(Rn:4)00000100 ROTL Rn nkeynes@359: 0100(Rn:4)00000101 ROTR Rn nkeynes@359: 0000000000101011 RTE nkeynes@359: 0000000000001011 RTS nkeynes@359: 0000000001011000 SETS nkeynes@359: 0000000000011000 SETT nkeynes@359: 0100(Rn:4)(Rm:4)1100 SHAD Rm, Rn nkeynes@359: 0100(Rn:4)00100000 SHAL Rn nkeynes@359: 0100(Rn:4)00100001 SHAR Rn nkeynes@359: 0100(Rn:4)(Rm:4)1101 SHLD Rm, Rn nkeynes@359: 0100(Rn:4)00000000 SHLL Rn nkeynes@359: 0100(Rn:4)00001000 SHLL2 Rn nkeynes@359: 0100(Rn:4)00011000 SHLL8 Rn nkeynes@359: 0100(Rn:4)00101000 SHLL16 Rn nkeynes@359: 0100(Rn:4)00000001 SHLR Rn nkeynes@359: 0100(Rn:4)00001001 SHLR2 Rn nkeynes@359: 0100(Rn:4)00011001 SHLR8 Rn nkeynes@359: 0100(Rn:4)00101001 SHLR16 Rn nkeynes@359: 0000000000011011 SLEEP nkeynes@359: 0000(Rn:4)00000010 STC SR, Rn nkeynes@359: 0000(Rn:4)00010010 STC GBR, Rn nkeynes@359: 0000(Rn:4)00100010 STC VBR, Rn nkeynes@359: 0000(Rn:4)00110010 STC SSR, Rn nkeynes@359: 0000(Rn:4)01000010 STC SPC, Rn nkeynes@359: 0000(Rn:4)00111010 STC SGR, Rn nkeynes@359: 0000(Rn:4)11111010 STC DBR, Rn nkeynes@359: 0000(Rn:4)1(Rm_BANK:3)0010 STC Rm_BANK, Rn nkeynes@359: 0100(Rn:4)00000011 STC.L SR, @-Rn nkeynes@359: 0100(Rn:4)00100011 STC.L VBR, @-Rn nkeynes@359: 0100(Rn:4)00110011 STC.L SSR, @-Rn nkeynes@359: 0100(Rn:4)01000011 STC.L SPC, @-Rn nkeynes@359: 0100(Rn:4)00110010 STC.L SGR, @-Rn nkeynes@359: 0100(Rn:4)11110010 STC.L DBR, @-Rn nkeynes@359: 0100(Rn:4)1(Rm_BANK:3)0011 STC.L Rm_BANK, @-Rn nkeynes@359: 0100(Rn:4)00010011 STC.L GBR, @-Rn nkeynes@359: 0000(Rn:4)01101010 STS FPSCR, Rn nkeynes@359: 0100(Rn:4)01100010 STS.L FPSCR, @-Rn nkeynes@359: 0000(Rn:4)01011010 STS FPUL, Rn nkeynes@359: 0100(Rn:4)01010010 STS.L FPUL, @-Rn nkeynes@359: 0000(Rn:4)00001010 STS MACH, Rn nkeynes@359: 0100(Rn:4)00000010 STS.L MACH, @-Rn nkeynes@359: 0000(Rn:4)00011010 STS MACL, Rn nkeynes@359: 0100(Rn:4)00010010 STS.L MACL, @-Rn nkeynes@359: 0000(Rn:4)00101010 STS PR, Rn nkeynes@359: 0100(Rn:4)00100010 STS.L PR, @-Rn nkeynes@359: 0011(Rn:4)(Rm:4)1000 SUB Rm, Rn nkeynes@359: 0011(Rn:4)(Rm:4)1010 SUBC Rm, Rn nkeynes@359: 0011(Rn:4)(Rm:4)1011 SUBV Rm, Rn nkeynes@359: 0110(Rn:4)(Rm:4)1000 SWAP.B Rm, Rn nkeynes@359: 0110(Rn:4)(Rm:4)1001 SWAP.W Rm, Rn nkeynes@359: 0100(Rn:4)00011011 TAS.B @Rn nkeynes@359: 11000011(imm:8) TRAPA #imm nkeynes@359: 0010(Rn:4)(Rm:4)1000 TST Rm, Rn nkeynes@359: 11001000(imm:8) TST #imm, R0 nkeynes@359: 11001100(imm:8) TST.B #imm, @(R0, GBR) nkeynes@359: 0010(Rn:4)(Rm:4)1010 XOR Rm, Rn nkeynes@359: 11001010(imm:8) XOR #imm, R0 nkeynes@359: 11001110(imm:8) XOR.B #imm, @(R0, GBR) nkeynes@359: 0010(Rn:4)(Rm:4)1101 XTRCT Rm, Rn nkeynes@359: 1111111111111101 UNDEF