#include "types.h" #include "interpr/sh4_opcodes.h" #include "sh4_opcode_list.h" #include "dyna/decoder_opcodes.h" #include "types.h" #include "hw/sh4/dyna/shil.h" OpCallFP* OpPtr[0x10000]; sh4_opcodelistentry* OpDesc[0x10000]; //XR_N,XR_M,FR_M,FR_N,GPR_N,GPR_M,EREAD,EWRITE // //IMM8,IMM4,IMM12 #define Mask_n_m 0xF00F #define Mask_n_m_imm4 0xF000 #define Mask_n 0xF0FF #define Mask_none 0xFFFF #define Mask_imm8 0xFF00 #define Mask_imm12 0xF000 #define Mask_n_imm8 0xF000 #define Mask_n_ml3bit 0xF08F #define Mask_nh3bit 0xF1FF #define Mask_nh2bit 0xF3FF #define GetN(str) ((str>>8) & 0xf) #define GetM(str) ((str>>4) & 0xf) #define GetImm4(str) ((str>>0) & 0xf) #define GetImm8(str) ((str>>0) & 0xff) #define GetSImm8(str) ((s8)((str>>0) & 0xff)) #define GetImm12(str) ((str>>0) & 0xfff) #define GetSImm12(str) (((s16)((GetImm12(str))<<4))>>4) //,DEC_D_RN|DEC_S_RM|DEC_OP(shop_and) u64 dec_Fill(DecMode mode,DecParam d,DecParam s,shilop op,u32 extra=0) { return (((u64)extra)<<32)|(mode<<24)|(d<<16)|(s<<8)|op; } u64 dec_Un_rNrN(shilop op) { return dec_Fill(DM_UnaryOp,PRM_RN,PRM_RN,op); } u64 dec_Un_rNrM(shilop op) { return dec_Fill(DM_UnaryOp,PRM_RN,PRM_RM,op); } u64 dec_Un_frNfrN(shilop op) { return dec_Fill(DM_UnaryOp,PRM_FRN,PRM_FRN,op); } u64 dec_Un_frNfrM(shilop op) { return dec_Fill(DM_UnaryOp,PRM_FRN,PRM_FRM,op); } u64 dec_Bin_frNfrM(shilop op, u32 haswrite=1) { return dec_Fill(DM_BinaryOp,PRM_FRN,PRM_FRM,op,haswrite); } u64 dec_Bin_rNrM(shilop op, u32 haswrite=1) { return dec_Fill(DM_BinaryOp,PRM_RN,PRM_RM,op,haswrite); } u64 dec_mul(u32 type) { //return 0; return dec_Fill(DM_MUL,PRM_RN,PRM_RM,shop_mul_s16,type); } u64 dec_Bin_S8R(shilop op, u32 haswrite=1) { return dec_Fill(DM_BinaryOp,PRM_RN,PRM_SIMM8,op,haswrite); } u64 dec_Bin_r0u8(shilop op, u32 haswrite=1) { return dec_Fill(DM_BinaryOp,PRM_R0,PRM_UIMM8,op,haswrite); } u64 dec_shft(s32 offs,bool arithm) { if (offs>0) { //left shift return dec_Fill(DM_Shift,PRM_RN,PRM_RN,shop_shl,offs); } else { return dec_Fill(DM_Shift,PRM_RN,PRM_RN,arithm?shop_sar:shop_shr,-offs); } } u64 dec_cmp(shilop op, DecParam s1,DecParam s2) { return dec_Fill(DM_WriteTOp,s1,s2,op); } u64 dec_LD(DecParam d) { return dec_Fill(DM_UnaryOp,d,PRM_RN,shop_mov32); } u64 dec_LDM(DecParam d) { return dec_Fill(DM_ReadM,d,PRM_RN,shop_readm,-4); } u64 dec_ST(DecParam d) { return dec_Fill(DM_UnaryOp,PRM_RN,d,shop_mov32); } u64 dec_STSRF(DecParam d) { return dec_Fill(DM_ReadSRF,PRM_RN,d,shop_mov32); } u64 dec_STM(DecParam d) { return dec_Fill(DM_WriteM,PRM_RN,d,shop_writem,-4); } //d=reg to read into u64 dec_MRd(DecParam d,DecParam s,u32 sz) { return dec_Fill(DM_ReadM,d,s,shop_readm,sz); } //d= reg to read from u64 dec_MWt(DecParam d,DecParam s,u32 sz) { return dec_Fill(DM_WriteM,d,s,shop_writem,sz); } //use this to disable opcodes :p u64 dec_rz(...) { return 0; } //jump for now.. //how bout a decoded switch list ? could that _much_ faster ? sh4_opcodelistentry missing_opcode = {0,iNotImplemented,0,0,ReadWritePC,"missing",0,0,CO,fix_none }; #define R_GP (NO_SP|NO_FP) //only general #define R_FP (NO_SP|NO_FP) //only float #define R_SP (NO_GP|NO_FP) //only special #define R_GSP (NO_FP) //general + special #define R_GFP (NO_SP) //general + float #define R_NON (NO_SP|NO_GP|NO_FP) //no registers at all (...) #define R_MMR (R_NON) //Memory mapped registers #define R_ALL (0) sh4_opcodelistentry opcodes[]= { //CPU {dec_i0000_nnnn_0010_0011 ,i0000_nnnn_0010_0011 ,Mask_n ,0x0023 ,Branch_rel_d ,"braf " ,2,3,CO,fix_none}, //braf {dec_i0000_nnnn_0000_0011 ,i0000_nnnn_0000_0011 ,Mask_n ,0x0003 ,Branch_rel_d ,"bsrf " ,2,3,CO,fix_none}, //bsrf {0 ,i0000_nnnn_1100_0011 ,Mask_n ,0x00C3 ,Normal ,"movca.l R0, @" ,2,4,MA,fix_none ,dec_MWt(PRM_RN,PRM_R0,4)}, //movca.l R0, @ {dec_i0000_0000_0000_1001 ,i0000_nnnn_1001_0011 ,Mask_n ,0x0093 ,Normal ,"ocbi @" ,1,2,MA,fix_none}, //ocbi @ {dec_i0000_0000_0000_1001 ,i0000_nnnn_1010_0011 ,Mask_n ,0x00A3 ,Normal ,"ocbp @" ,1,2,MA,fix_none}, //ocbp @ {dec_i0000_0000_0000_1001 ,i0000_nnnn_1011_0011 ,Mask_n ,0x00B3 ,Normal ,"ocbwb @" ,1,2,MA,fix_none}, //ocbwb @ {0 ,i0000_nnnn_1000_0011 ,Mask_n ,0x0083 ,Normal ,"pref @" ,1,2,LS,fix_none ,dec_Fill(DM_UnaryOp,PRM_RN,PRM_ONE,shop_pref,1)}, //pref @ {0 ,i0000_nnnn_mmmm_0111 ,Mask_n_m ,0x0007 ,Normal ,"mul.l ," ,2,4,CO,fix_none ,dec_mul(-32)}, //mul.l , {0 ,i0000_0000_0010_1000 ,Mask_none ,0x0028 ,Normal | R_SP,"clrmac" ,1,3,LS,fix_none}, //clrmac {0 ,i0000_0000_0100_1000 ,Mask_none ,0x0048 ,Normal ,"clrs" ,1,1,CO,fix_none ,dec_Fill(DM_BinaryOp,PRM_SR_STATUS,PRM_TWO_INV,shop_and)}, //clrs {0 ,i0000_0000_0000_1000 ,Mask_none ,0x0008 ,Normal ,"clrt" ,1,1,MT,fix_none ,dec_Fill(DM_UnaryOp,PRM_SR_T,PRM_ZERO,shop_mov32)}, //clrt {0 ,i0000_0000_0011_1000 ,Mask_none ,0x0038 ,Normal ,"ldtlb" ,1,1,CO,fix_none} ,//ldtlb {0 ,i0000_0000_0101_1000 ,Mask_none ,0x0058 ,Normal ,"sets" ,1,1,CO,fix_none ,dec_Fill(DM_BinaryOp,PRM_SR_STATUS,PRM_TWO,shop_or)}, //sets {0 ,i0000_0000_0001_1000 ,Mask_none ,0x0018 ,Normal ,"sett" ,1,1,MT,fix_none ,dec_Fill(DM_UnaryOp,PRM_SR_T,PRM_ONE,shop_mov32)}, //sett {0 ,i0000_0000_0001_1001 ,Mask_none ,0x0019 ,Normal ,"div0u" ,1,1,EX,fix_none ,dec_Fill(DM_DIV0,PRM_RN,PRM_RM,shop_or,1)},//div0u {0 ,i0000_nnnn_0010_1001 ,Mask_n ,0x0029 ,Normal ,"movt " ,1,1,EX,fix_none ,dec_Fill(DM_UnaryOp,PRM_RN,PRM_SR_T,shop_mov32)}, //movt {dec_i0000_0000_0000_1001 ,i0000_0000_0000_1001 ,Mask_none ,0x0009 ,Normal ,"nop" ,1,0,MT,fix_none} ,//nop {dec_i0000_0000_0010_1011 ,i0000_0000_0010_1011 ,Mask_none ,0x002B ,Branch_dir_d ,"rte" ,5,5,CO,fix_none}, //rte {dec_i0000_0000_0000_1011 ,i0000_0000_0000_1011 ,Mask_none ,0x000B ,Branch_dir_d ,"rts" ,2,3,CO,fix_none}, //rts {dec_i0000_0000_0001_1011 ,i0000_0000_0001_1011 ,Mask_none ,0x001B ,ReadWritePC ,"sleep" ,4,4,CO,fix_none}, //sleep {0 ,i0000_nnnn_mmmm_1111 ,Mask_n_m ,0x000F ,Normal ,"mac.l @+,@+" ,2,3,CO,fix_none}, //mac.l @+,@+ {0 ,i0010_nnnn_mmmm_0111 ,Mask_n_m ,0x2007 ,Normal ,"div0s ," ,1,1,EX,fix_none ,dec_Fill(DM_DIV0,PRM_RN,PRM_RM,shop_or,-1)}, // div0s , {0 ,i0010_nnnn_mmmm_1000 ,Mask_n_m ,0x2008 ,Normal ,"tst ," ,1,1,MT,fix_none ,dec_cmp(shop_test,PRM_RN,PRM_RM)}, // tst , {0 ,i0010_nnnn_mmmm_1001 ,Mask_n_m ,0x2009 ,Normal ,"and ," ,1,1,EX,fix_none ,dec_Bin_rNrM(shop_and)}, //and , {0 ,i0010_nnnn_mmmm_1010 ,Mask_n_m ,0x200A ,Normal ,"xor ," ,1,1,EX,fix_none ,dec_Bin_rNrM(shop_xor)}, //xor , {0 ,i0010_nnnn_mmmm_1011 ,Mask_n_m ,0x200B ,Normal ,"or ," ,1,1,EX,fix_none ,dec_Bin_rNrM(shop_or)}, //or , {0 ,i0010_nnnn_mmmm_1100 ,Mask_n_m ,0x200C ,Normal |NO_FP,"cmp/str ," ,1,1,MT,fix_none ,dec_cmp(shop_setpeq,PRM_RN,PRM_RM)}, //cmp/str , {0 ,i0010_nnnn_mmmm_1101 ,Mask_n_m ,0x200D ,Normal |NO_FP,"xtrct ," ,1,1,EX,fix_none}, //xtrct , {0 ,i0010_nnnn_mmmm_1110 ,Mask_n_m ,0x200E ,Normal ,"mulu.w ," ,1,4,CO,fix_none ,dec_mul(16)}, //mulu.w , {0 ,i0010_nnnn_mmmm_1111 ,Mask_n_m ,0x200F ,Normal ,"muls.w ," ,1,4,CO,fix_none ,dec_mul(-16)}, //muls.w , {0 ,i0011_nnnn_mmmm_0000 ,Mask_n_m ,0x3000 ,Normal ,"cmp/eq ," ,1,1,MT,fix_none ,dec_cmp(shop_seteq,PRM_RN,PRM_RM)}, // cmp/eq , {0 ,i0011_nnnn_mmmm_0010 ,Mask_n_m ,0x3002 ,Normal ,"cmp/hs ," ,1,1,MT,fix_none ,dec_cmp(shop_setae,PRM_RN,PRM_RM)}, // cmp/hs , {0 ,i0011_nnnn_mmmm_0011 ,Mask_n_m ,0x3003 ,Normal ,"cmp/ge ," ,1,1,MT,fix_none ,dec_cmp(shop_setge,PRM_RN,PRM_RM)}, //cmp/ge , {0 ,i0011_nnnn_mmmm_0100 ,Mask_n_m ,0x3004 ,Normal ,"div1 ," ,1,1,EX,fix_none}, //div1 , {0 ,i0011_nnnn_mmmm_0101 ,Mask_n_m ,0x3005 ,Normal ,"dmulu.l ," ,2,4,CO,fix_none ,dec_mul(64)}, //dmulu.l , {0 ,i0011_nnnn_mmmm_0110 ,Mask_n_m ,0x3006 ,Normal ,"cmp/hi ," ,1,1,MT,fix_none ,dec_cmp(shop_setab,PRM_RN,PRM_RM)}, // cmp/hi , {0 ,i0011_nnnn_mmmm_0111 ,Mask_n_m ,0x3007 ,Normal ,"cmp/gt ," ,1,1,MT,fix_none ,dec_cmp(shop_setgt,PRM_RN,PRM_RM)}, //cmp/gt , {0 ,i0011_nnnn_mmmm_1000 ,Mask_n_m ,0x3008 ,Normal ,"sub ," ,1,1,EX,fix_none ,dec_Bin_rNrM(shop_sub)}, // sub , {0 ,i0011_nnnn_mmmm_1010 ,Mask_n_m ,0x300A ,Normal ,"subc ," ,1,1,EX,fix_none, dec_Fill(DM_ADC,PRM_RN,PRM_RM,shop_sbc,-1)}, //subc , {0 ,i0011_nnnn_mmmm_1011 ,Mask_n_m ,0x300B ,Normal ,"subv ," ,1,1,EX,fix_none}, //subv , {0 ,i0011_nnnn_mmmm_1100 ,Mask_n_m ,0x300C ,Normal ,"add ," ,1,1,EX,fix_none ,dec_Bin_rNrM(shop_add)}, //add , {0 ,i0011_nnnn_mmmm_1101 ,Mask_n_m ,0x300D ,Normal ,"dmuls.l ," ,1,4,CO,fix_none ,dec_mul(-64)}, //dmuls.l , {0 ,i0011_nnnn_mmmm_1110 ,Mask_n_m ,0x300E ,Normal ,"addc ," ,1,1,EX,fix_none, dec_Fill(DM_ADC,PRM_RN,PRM_RM,shop_adc,-1)}, //addc , {0 ,i0011_nnnn_mmmm_1111 ,Mask_n_m ,0x300F ,Normal ,"addv ," ,1,1,EX,fix_none}, // addv , //Normal readm/writem {0 ,i0000_nnnn_mmmm_0100 ,Mask_n_m ,0x0004 ,Normal ,"mov.b ,@(R0,)" ,1,1,LS,fix_none ,dec_MWt(PRM_RN_R0,PRM_RM,1)}, //mov.b ,@(R0,) {0 ,i0000_nnnn_mmmm_0101 ,Mask_n_m ,0x0005 ,Normal ,"mov.w ,@(R0,)" ,1,1,LS,fix_none ,dec_MWt(PRM_RN_R0,PRM_RM,2)}, //mov.w ,@(R0,) {0 ,i0000_nnnn_mmmm_0110 ,Mask_n_m ,0x0006 ,Normal ,"mov.l ,@(R0,)" ,1,1,LS,fix_none ,dec_MWt(PRM_RN_R0,PRM_RM,4)}, //mov.l ,@(R0,) {0 ,i0000_nnnn_mmmm_1100 ,Mask_n_m ,0x000C ,Normal ,"mov.b @(R0,)," ,1,2,LS,fix_none ,dec_MRd(PRM_RN,PRM_RM_R0,1)}, //mov.b @(R0,), {0 ,i0000_nnnn_mmmm_1101 ,Mask_n_m ,0x000D ,Normal ,"mov.w @(R0,)," ,1,2,LS,fix_none ,dec_MRd(PRM_RN,PRM_RM_R0,2)}, //mov.w @(R0,), {0 ,i0000_nnnn_mmmm_1110 ,Mask_n_m ,0x000E ,Normal ,"mov.l @(R0,)," ,1,2,LS,fix_none ,dec_MRd(PRM_RN,PRM_RM_R0,4)}, //mov.l @(R0,), {0 ,i0001_nnnn_mmmm_iiii ,Mask_n_imm8,0x1000 ,Normal ,"mov.l ,@(,)" ,1,1,LS,fix_none ,dec_MWt(PRM_RN_D4_x4,PRM_RM,4)}, //mov.l ,@(,) {0 ,i0101_nnnn_mmmm_iiii ,Mask_n_m_imm4,0x5000,Normal ,"mov.l @(,)," ,1,2,LS,fix_none ,dec_MRd(PRM_RN,PRM_RM_D4_x4,4)}, //mov.l @(,), {0 ,i0010_nnnn_mmmm_0000 ,Mask_n_m ,0x2000 ,Normal ,"mov.b ,@" ,1,1,LS,fix_none ,dec_MWt(PRM_RN,PRM_RM,1)}, //mov.b ,@ {0 ,i0010_nnnn_mmmm_0001 ,Mask_n_m ,0x2001 ,Normal ,"mov.w ,@" ,1,1,LS,fix_none ,dec_MWt(PRM_RN,PRM_RM,2)}, // mov.w ,@ {0 ,i0010_nnnn_mmmm_0010 ,Mask_n_m ,0x2002 ,Normal ,"mov.l ,@" ,1,1,LS,fix_none ,dec_MWt(PRM_RN,PRM_RM,4)}, // mov.l ,@ {0 ,i0110_nnnn_mmmm_0000 ,Mask_n_m ,0x6000 ,Normal ,"mov.b @," ,1,2,LS,fix_none ,dec_MRd(PRM_RN,PRM_RM,1)}, //mov.b @, {0 ,i0110_nnnn_mmmm_0001 ,Mask_n_m ,0x6001 ,Normal ,"mov.w @," ,1,2,LS,fix_none ,dec_MRd(PRM_RN,PRM_RM,2)}, //mov.w @, {0 ,i0110_nnnn_mmmm_0010 ,Mask_n_m ,0x6002 ,Normal ,"mov.l @," ,1,2,LS,fix_none ,dec_MRd(PRM_RN,PRM_RM,4)}, //mov.l @, {0 ,i0010_nnnn_mmmm_0100 ,Mask_n_m ,0x2004 ,Normal ,"mov.b ,@-" ,1,1,LS,rn_opt_1 ,dec_MWt(PRM_RN,PRM_RM,-1)}, // mov.b ,@- {0 ,i0010_nnnn_mmmm_0101 ,Mask_n_m ,0x2005 ,Normal ,"mov.w ,@-" ,1,1,LS,rn_opt_2 ,dec_MWt(PRM_RN,PRM_RM,-2)}, //mov.w ,@- {0 ,i0010_nnnn_mmmm_0110 ,Mask_n_m ,0x2006 ,Normal ,"mov.l ,@-" ,1,1,LS,rn_opt_4 ,dec_MWt(PRM_RN,PRM_RM,-4)}, //mov.l ,@- {0 ,i0110_nnnn_mmmm_0100 ,Mask_n_m ,0x6004 ,Normal ,"mov.b @+," ,1,1,LS,fix_none ,dec_MRd(PRM_RN,PRM_RM,-1)}, //mov.b @+, {0 ,i0110_nnnn_mmmm_0101 ,Mask_n_m ,0x6005 ,Normal ,"mov.w @+," ,1,1,LS,fix_none ,dec_MRd(PRM_RN,PRM_RM,-2)}, //mov.w @+, {0 ,i0110_nnnn_mmmm_0110 ,Mask_n_m ,0x6006 ,Normal ,"mov.l @+," ,1,1,LS,fix_none ,dec_MRd(PRM_RN,PRM_RM,-4)}, //mov.l @+, {0 ,i1000_0000_mmmm_iiii ,Mask_imm8 ,0x8000 ,Normal ,"mov.b R0,@(,)" ,1,1,LS,fix_none ,dec_MWt(PRM_RM_D4_x1,PRM_R0,1)}, // mov.b R0,@(,) {0 ,i1000_0001_mmmm_iiii ,Mask_imm8 ,0x8100 ,Normal ,"mov.w R0,@(,)" ,1,1,LS,fix_none ,dec_MWt(PRM_RM_D4_x2,PRM_R0,2)}, // mov.w R0,@(,) {0 ,i1000_0100_mmmm_iiii ,Mask_imm8 ,0x8400 ,Normal ,"mov.b @(,),R0" ,1,2,LS,fix_none ,dec_MRd(PRM_R0,PRM_RM_D4_x1,1)}, // mov.b @(,),R0 {0 ,i1000_0101_mmmm_iiii ,Mask_imm8 ,0x8500 ,Normal ,"mov.w @(,),R0" ,1,2,LS,fix_none ,dec_MRd(PRM_R0,PRM_RM_D4_x2,2)}, // mov.w @(,),R0 {0 ,i1001_nnnn_iiii_iiii ,Mask_n_imm8,0x9000 ,ReadsPC ,"mov.w @()," ,1,2,LS,fix_none ,dec_MRd(PRM_RN,PRM_PC_D8_x2,2)}, // mov.w @(,PC), {0 ,i1100_0000_iiii_iiii ,Mask_imm8 ,0xC000 ,Normal ,"mov.b R0,@(,GBR)" ,1,1,LS,fix_none ,dec_MWt(PRM_GBR_D8_x1,PRM_R0,1)}, // mov.b R0,@(,GBR) {0 ,i1100_0001_iiii_iiii ,Mask_imm8 ,0xC100 ,Normal ,"mov.w R0,@(,GBR)" ,1,1,LS,fix_none ,dec_MWt(PRM_GBR_D8_x2,PRM_R0,2)}, // mov.w R0,@(,GBR) {0 ,i1100_0010_iiii_iiii ,Mask_imm8 ,0xC200 ,Normal ,"mov.l R0,@(,GBR)" ,1,1,LS,fix_none ,dec_MWt(PRM_GBR_D8_x4,PRM_R0,4)}, // mov.l R0,@(,GBR) {0 ,i1100_0100_iiii_iiii ,Mask_imm8 ,0xC400 ,Normal ,"mov.b @(),R0" ,1,2,LS,fix_none ,dec_MRd(PRM_R0,PRM_GBR_D8_x1,1)}, // mov.b @(,GBR),R0 {0 ,i1100_0101_iiii_iiii ,Mask_imm8 ,0xC500 ,Normal ,"mov.w @(),R0" ,1,2,LS,fix_none ,dec_MRd(PRM_R0,PRM_GBR_D8_x2,2)}, // mov.w @(,GBR),R0 {0 ,i1100_0110_iiii_iiii ,Mask_imm8 ,0xC600 ,Normal ,"mov.l @(),R0" ,1,2,LS,fix_none ,dec_MRd(PRM_R0,PRM_GBR_D8_x4,4)}, // mov.l @(,GBR),R0 {0 ,i1101_nnnn_iiii_iiii ,Mask_n_imm8,0xD000 ,ReadsPC ,"mov.l @()," ,1,2,CO,fix_none ,dec_MRd(PRM_RN,PRM_PC_D8_x4,4)}, // mov.l @(,PC), //normal mov {0 ,i0110_nnnn_mmmm_0011 ,Mask_n_m ,0x6003 ,Normal ,"mov ," ,1,0,MT,fix_none ,dec_Un_rNrM(shop_mov32)}, //mov , {0 ,i1100_0111_iiii_iiii ,Mask_imm8 ,0xC700 ,ReadsPC ,"mova @(),R0" ,1,1,EX,fix_none ,dec_Fill(DM_UnaryOp,PRM_R0,PRM_PC_D8_x4,shop_mov32)}, // mova @(,PC),R0 {0 ,i1110_nnnn_iiii_iiii ,Mask_n_imm8,0xE000 ,Normal ,"mov #," ,1,1,EX,fix_none ,dec_Fill(DM_UnaryOp,PRM_RN,PRM_SIMM8,shop_mov32)}, // mov #, //Special register readm/writem/movs //sts : @-rn {0 ,i0100_nnnn_0101_0010 ,Mask_n ,0x4052 ,Normal ,"sts.l FPUL,@-" ,1,1,CO,rn_4 ,dec_STM(PRM_SREG)}, //sts.l FPUL,@- {0 ,i0100_nnnn_0110_0010 ,Mask_n ,0x4062 ,Normal ,"sts.l FPSCR,@-" ,1,2,CO,rn_4 ,dec_STM(PRM_SREG)}, //sts.l FPSCR,@- {0 ,i0100_nnnn_0000_0010 ,Mask_n ,0x4002 ,Normal ,"sts.l MACH,@-" ,1,3,CO,rn_4 ,dec_STM(PRM_SREG)}, //sts.l MACH,@- {0 ,i0100_nnnn_0001_0010 ,Mask_n ,0x4012 ,Normal ,"sts.l MACL,@-" ,1,3,CO,rn_4 ,dec_STM(PRM_SREG)}, //sts.l MACL,@- {0 ,i0100_nnnn_0010_0010 ,Mask_n ,0x4022 ,Normal ,"sts.l PR,@-" ,1,1,CO,rn_4 ,dec_STM(PRM_SREG)}, //sts.l PR,@- {0 ,i0100_nnnn_1111_0010 ,Mask_n ,0x40F2 ,Normal ,"stc.l DBR,@-" ,2,2,CO,rn_4 ,dec_STM(PRM_SREG)}, //sts.l DBR,@- {0 ,i0100_nnnn_0011_0010 ,Mask_n ,0x4032 ,Normal ,"stc.l SGR,@-" ,3,3,CO,rn_4 ,dec_STM(PRM_SREG)}, //sts.l SGR,@- //stc : @-rn {0 ,i0100_nnnn_0000_0011 ,Mask_n ,0x4003 ,Normal ,"stc.l SR,@-" ,1,1,CO,rn_4}, //stc.l SR,@- {0 ,i0100_nnnn_0001_0011 ,Mask_n ,0x4013 ,Normal ,"stc.l GBR,@-" ,1,1,CO,rn_4 ,dec_STM(PRM_CREG)}, //stc.l GBR,@- {0 ,i0100_nnnn_0010_0011 ,Mask_n ,0x4023 ,Normal ,"stc.l VBR,@-" ,1,1,CO,rn_4 ,dec_STM(PRM_CREG)}, //stc.l VBR,@- {0 ,i0100_nnnn_0011_0011 ,Mask_n ,0x4033 ,Normal ,"stc.l SSR,@-" ,1,1,CO,rn_4 ,dec_STM(PRM_CREG)}, //stc.l SSR,@- {0 ,i0100_nnnn_0100_0011 ,Mask_n ,0x4043 ,Normal ,"stc.l SPC,@-" ,1,1,CO,rn_4 ,dec_STM(PRM_CREG)}, //stc.l SPC,@- {0 ,i0100_nnnn_1mmm_0011 ,Mask_n_ml3bit,0x4083,Normal ,"stc ,@-" ,1,1,CO,rn_4 ,dec_STM(PRM_CREG)}, //stc RM_BANK,@- //lds : @rn+ {0 ,i0100_nnnn_0000_0110 ,Mask_n ,0x4006 ,Normal ,"lds.l @+,MACH" ,1,1,CO,fix_none ,dec_LDM(PRM_SREG)}, //lds.l @+,MACH {0 ,i0100_nnnn_0001_0110 ,Mask_n ,0x4016 ,Normal ,"lds.l @+,MAC" ,1,1,CO,fix_none ,dec_LDM(PRM_SREG)}, //lds.l @+,MACL {0 ,i0100_nnnn_0010_0110 ,Mask_n ,0x4026 ,Normal ,"lds.l @+,PR" ,1,2,CO,fix_none ,dec_LDM(PRM_SREG)}, //lds.l @+,PR {0 ,i0100_nnnn_0011_0110 ,Mask_n ,0x4036 ,Normal ,"ldc.l @+,SGR" ,3,3,CO,fix_none ,dec_LDM(PRM_SREG)}, //lds.l @+,SGR {0 ,i0100_nnnn_0101_0110 ,Mask_n ,0x4056 ,Normal ,"lds.l @+,FPUL" ,1,1,CO,fix_none ,dec_LDM(PRM_SREG)}, //lds.l @+,FPUL {0 ,i0100_nnnn_0110_0110 ,Mask_n ,0x4066 ,WritesFPSCR ,"lds.l @+,FPSCR" ,1,1,CO,fix_none}, //lds.l @+,FPSCR {0 ,i0100_nnnn_1111_0110 ,Mask_n ,0x40F6 ,Normal ,"ldc.l @+,DBR" ,1,3,CO,fix_none ,dec_LDM(PRM_SREG)}, //lds.l @+,DBR //ldc : @rn+ {0 ,i0100_nnnn_0000_0111 ,Mask_n ,0x4007 ,WritesSRRWPC ,"ldc.l @+,SR" ,1,1,CO,fix_none}, //ldc.l @+,SR {0 ,i0100_nnnn_0001_0111 ,Mask_n ,0x4017 ,Normal ,"ldc.l @+,GBR" ,1,1,CO,fix_none ,dec_LDM(PRM_CREG)}, //ldc.l @+,GBR {0 ,i0100_nnnn_0010_0111 ,Mask_n ,0x4027 ,Normal ,"ldc.l @+,VBR" ,1,1,CO,fix_none ,dec_LDM(PRM_CREG)}, //ldc.l @+,VBR {0 ,i0100_nnnn_0011_0111 ,Mask_n ,0x4037 ,Normal ,"ldc.l @+,SSR" ,1,1,CO,fix_none ,dec_LDM(PRM_CREG)}, //ldc.l @+,SSR {0 ,i0100_nnnn_0100_0111 ,Mask_n ,0x4047 ,Normal ,"ldc.l @+,SPC" ,1,1,CO,fix_none ,dec_LDM(PRM_CREG)}, //ldc.l @+,SPC {0 ,i0100_nnnn_1mmm_0111 ,Mask_n_ml3bit,0x4087,Normal ,"ldc.l @+,RM_BANK" ,1,1,CO,fix_none ,dec_LDM(PRM_CREG)}, //ldc.l @+,RM_BANK //sts : rn {0 ,i0000_nnnn_0000_0010 ,Mask_n ,0x0002 ,Normal ,"stc SR," ,2,2,CO,fix_none ,dec_STSRF(PRM_CREG)}, //stc SR, {0 ,i0000_nnnn_0001_0010 ,Mask_n ,0x0012 ,Normal ,"stc GBR," ,2,2,CO,fix_none ,dec_ST(PRM_CREG)}, //stc GBR, {0 ,i0000_nnnn_0010_0010 ,Mask_n ,0x0022 ,Normal ,"stc VBR," ,2,2,CO,fix_none ,dec_ST(PRM_CREG)}, //stc VBR, {0 ,i0000_nnnn_0011_0010 ,Mask_n ,0x0032 ,Normal ,"stc SSR," ,2,2,CO,fix_none ,dec_ST(PRM_CREG)}, //stc SSR, {0 ,i0000_nnnn_0100_0010 ,Mask_n ,0x0042 ,Normal ,"stc SPC," ,2,2,CO,fix_none ,dec_ST(PRM_CREG)}, //stc SPC, {0 ,i0000_nnnn_1mmm_0010 ,Mask_n_ml3bit,0x0082,Normal ,"stc RM_BANK," ,2,2,CO,fix_none ,dec_ST(PRM_CREG)}, //stc RM_BANK, //stc : rn {0 ,i0000_nnnn_0000_1010 ,Mask_n ,0x000A ,Normal ,"sts MACH," ,1,3,CO,fix_none ,dec_ST(PRM_SREG)}, //sts MACH, {0 ,i0000_nnnn_0001_1010 ,Mask_n ,0x001A ,Normal ,"sts MACL," ,1,3,CO,fix_none ,dec_ST(PRM_SREG)}, //sts MACL, {0 ,i0000_nnnn_0010_1010 ,Mask_n ,0x002A ,Normal ,"sts PR," ,2,2,CO,fix_none ,dec_ST(PRM_SREG)}, //sts PR, {0 ,i0000_nnnn_0011_1010 ,Mask_n ,0x003A ,Normal ,"sts SGR," ,3,3,CO,fix_none ,dec_ST(PRM_SREG)}, //sts SGR, {0 ,i0000_nnnn_0101_1010 ,Mask_n ,0x005A ,Normal ,"sts FPUL," ,1,3,LS,fix_none ,dec_ST(PRM_SREG)}, //sts FPUL, {0 ,i0000_nnnn_0110_1010 ,Mask_n ,0x006A ,Normal ,"sts FPSCR," ,1,3,CO,fix_none ,dec_ST(PRM_SREG)}, //sts FPSCR, {0 ,i0000_nnnn_1111_1010 ,Mask_n ,0x00FA ,Normal ,"sts DBR," ,1,2,CO,fix_none ,dec_ST(PRM_SREG)}, //sts DBR, //lds : rn {0 ,i0100_nnnn_0000_1010 ,Mask_n ,0x400A ,Normal ,"lds ,MACH" ,1,3,CO,fix_none ,dec_LD(PRM_SREG)}, //lds ,MACH {0 ,i0100_nnnn_0001_1010 ,Mask_n ,0x401A ,Normal ,"lds ,MAC" ,1,3,CO,fix_none ,dec_LD(PRM_SREG)}, //lds ,MACL {0 ,i0100_nnnn_0010_1010 ,Mask_n ,0x402A ,Normal ,"lds ,PR" ,1,2,CO,fix_none ,dec_LD(PRM_SREG)}, //lds ,PR {0 ,i0100_nnnn_0011_1010 ,Mask_n ,0x403A ,Normal ,"ldc ,SGR" ,3,3,CO,fix_none ,dec_LD(PRM_SREG)}, //lds ,SGR {0 ,i0100_nnnn_0101_1010 ,Mask_n ,0x405A ,Normal ,"lds ,FPUL" ,1,1,CO,fix_none ,dec_LD(PRM_SREG)}, //lds ,FPUL {0 ,i0100_nnnn_0110_1010 ,Mask_n ,0x406A ,WritesFPSCR ,"lds ,FPSCR" ,1,1,CO,fix_none}, //lds ,FPSCR {0 ,i0100_nnnn_1111_1010 ,Mask_n ,0x40FA ,Normal ,"ldc ,DBR" ,1,1,CO,fix_none ,dec_LD(PRM_SREG)}, //lds ,DBR //ldc : rn {dec_i0100_nnnn_0000_1110 ,i0100_nnnn_0000_1110 ,Mask_n ,0x400E ,WritesSRRWPC ,"ldc ,SR" ,1,1,CO,fix_none}, //ldc ,SR {0 ,i0100_nnnn_0001_1110 ,Mask_n ,0x401E ,Normal ,"ldc ,GBR" ,1,1,CO,fix_none ,dec_LD(PRM_CREG)}, //ldc ,GBR {0 ,i0100_nnnn_0010_1110 ,Mask_n ,0x402E ,Normal ,"ldc ,VBR" ,1,1,CO,fix_none ,dec_LD(PRM_CREG)}, //ldc ,VBR {0 ,i0100_nnnn_0011_1110 ,Mask_n ,0x403E ,Normal ,"ldc ,SSR" ,1,1,CO,fix_none ,dec_LD(PRM_CREG)}, //ldc ,SSR {0 ,i0100_nnnn_0100_1110 ,Mask_n ,0x404E ,Normal ,"ldc ,SPC" ,1,1,CO,fix_none ,dec_LD(PRM_CREG)}, //ldc ,SPC {0 ,i0100_nnnn_1mmm_1110 ,Mask_n_ml3bit,0x408E,Normal ,"ldc ," ,1,1,CO,fix_none ,dec_LD(PRM_CREG)}, //ldc , // {0 ,i0100_nnnn_0000_0000 ,Mask_n ,0x4000 ,Normal ,"shll " ,1,1,EX,fix_none ,dec_shft(1,false)}, //shll {0 ,i0100_nnnn_0001_0000 ,Mask_n ,0x4010 ,Normal ,"dt " ,1,1,EX,fix_none ,dec_Fill(DM_DT,PRM_RN,PRM_ONE,shop_sub)}, //dt {0 ,i0100_nnnn_0010_0000 ,Mask_n ,0x4020 ,Normal ,"shal " ,1,1,EX,fix_none ,dec_shft(1,true)}, //shal {0 ,i0100_nnnn_0000_0001 ,Mask_n ,0x4001 ,Normal ,"shlr " ,1,1,EX,fix_none ,dec_shft(-1,false)}, //shlr {0 ,i0100_nnnn_0001_0001 ,Mask_n ,0x4011 ,Normal ,"cmp/pz " ,1,1,MT,fix_none ,dec_cmp(shop_setge,PRM_RN,PRM_ZERO)}, //cmp/pz {0 ,i0100_nnnn_0010_0001 ,Mask_n ,0x4021 ,Normal ,"shar " ,1,1,EX,fix_none ,dec_shft(-1,true)}, //shar {dec_i0100_nnnn_0010_0100 ,i0100_nnnn_0010_0100 ,Mask_n ,0x4024 ,Normal ,"rotcl " ,1,1,EX,fix_none}, //rotcl {0 ,i0100_nnnn_0000_0100 ,Mask_n ,0x4004 ,Normal ,"rotl " ,1,1,EX,fix_none ,dec_Fill(DM_Rot,PRM_RN,PRM_RN,shop_ror,-31)}, //rotl {0 ,i0100_nnnn_0001_0101 ,Mask_n ,0x4015 ,Normal ,"cmp/pl " ,1,1,MT,fix_none ,dec_cmp(shop_setgt,PRM_RN,PRM_ZERO)}, //cmp/pl {dec_i0100_nnnn_0010_0101 ,i0100_nnnn_0010_0101 ,Mask_n ,0x4025 ,Normal ,"rotcr " ,1,1,EX,fix_none}, //rotcr {0 ,i0100_nnnn_0000_0101 ,Mask_n ,0x4005 ,Normal ,"rotr " ,1,1,EX,fix_none ,dec_Fill(DM_Rot,PRM_RN,PRM_RN,shop_ror,1)}, //rotr {0 ,i0100_nnnn_0000_1000 ,Mask_n ,0x4008 ,Normal ,"shll2 " ,1,1,EX,fix_none ,dec_shft(2,false)}, //shll2 {0 ,i0100_nnnn_0001_1000 ,Mask_n ,0x4018 ,Normal ,"shll8 " ,1,1,EX,fix_none ,dec_shft(8,false)}, //shll8 {0 ,i0100_nnnn_0010_1000 ,Mask_n ,0x4028 ,Normal ,"shll16 " ,1,1,EX,fix_none ,dec_shft(16,false)}, //shll16 {0 ,i0100_nnnn_0000_1001 ,Mask_n ,0x4009 ,Normal ,"shlr2 " ,1,1,EX,fix_none ,dec_shft(-2,false)}, //shlr2 {0 ,i0100_nnnn_0001_1001 ,Mask_n ,0x4019 ,Normal ,"shlr8 " ,1,1,EX,fix_none ,dec_shft(-8,false)}, //shlr8 {0 ,i0100_nnnn_0010_1001 ,Mask_n ,0x4029 ,Normal ,"shlr16 " ,1,1,EX,fix_none ,dec_shft(-16,false)}, //shlr16 {dec_i0100_nnnn_0010_1011 ,i0100_nnnn_0010_1011 ,Mask_n ,0x402B ,Branch_dir_d ,"jmp @" ,2,3,CO,fix_none}, //jmp @ {dec_i0100_nnnn_0000_1011 ,i0100_nnnn_0000_1011 ,Mask_n ,0x400B ,Branch_dir_d ,"jsr @" ,2,3,CO,fix_none}, //jsr @ {0 ,i0100_nnnn_0001_1011 ,Mask_n ,0x401B ,Normal ,"tas.b @" ,5,5,CO,fix_none}, //tas.b @ {0 ,i0100_nnnn_mmmm_1100 ,Mask_n_m ,0x400C ,Normal ,"shad ," ,1,1,EX,fix_none ,dec_Bin_rNrM(shop_shad)}, //shad , {0 ,i0100_nnnn_mmmm_1101 ,Mask_n_m ,0x400D ,Normal ,"shld ," ,1,1,EX,fix_none ,dec_Bin_rNrM(shop_shld)}, //shld , {0 ,i0100_nnnn_mmmm_1111 ,Mask_n_m ,0x400F ,Normal ,"mac.w @+,@+" ,2,3,CO,fix_none}, //mac.w @+,@+ {0 ,i0110_nnnn_mmmm_0111 ,Mask_n_m ,0x6007 ,Normal ,"not ," ,1,1,EX,fix_none ,dec_Un_rNrM(shop_not)}, //not , {0 ,i0110_nnnn_mmmm_1000 ,Mask_n_m ,0x6008 ,Normal ,"swap.b ," ,1,1,EX,fix_none ,dec_Un_rNrM(shop_swaplb)}, //swap.b , {0 ,i0110_nnnn_mmmm_1001 ,Mask_n_m ,0x6009 ,Normal ,"swap.w ," ,1,1,EX,fix_none ,dec_Fill(DM_Rot,PRM_RN,PRM_RM,shop_ror,16|0x1000)}, //swap.w , {0 ,i0110_nnnn_mmmm_1010 ,Mask_n_m ,0x600A ,Normal ,"negc ," ,1,1,EX,fix_none}, //negc , {0 ,i0110_nnnn_mmmm_1011 ,Mask_n_m ,0x600B ,Normal ,"neg ," ,1,1,EX,fix_none ,dec_Un_rNrM(shop_neg)}, //neg , {0 ,i0110_nnnn_mmmm_1100 ,Mask_n_m ,0x600C ,Normal ,"extu.b ," ,1,1,EX,fix_none ,dec_Fill(DM_EXTOP,PRM_RN,PRM_RM,shop_and,1)}, //extu.b , {0 ,i0110_nnnn_mmmm_1101 ,Mask_n_m ,0x600D ,Normal ,"extu.w ," ,1,1,EX,fix_none ,dec_Fill(DM_EXTOP,PRM_RN,PRM_RM,shop_and,2)}, //extu.w , {0 ,i0110_nnnn_mmmm_1110 ,Mask_n_m ,0x600E ,Normal ,"exts.b ," ,1,1,EX,fix_none ,dec_Un_rNrM(shop_ext_s8)}, //exts.b , {0 ,i0110_nnnn_mmmm_1111 ,Mask_n_m ,0x600F ,Normal ,"exts.w ," ,1,1,EX,fix_none ,dec_Un_rNrM(shop_ext_s16)},//exts.w , {0 ,i0111_nnnn_iiii_iiii ,Mask_n_imm8,0x7000 ,Normal ,"add #," ,1,1,EX,fix_none ,dec_Bin_S8R(shop_add)}, //add #, {dec_i1000_1011_iiii_iiii ,i1000_1011_iiii_iiii ,Mask_imm8 ,0x8B00 ,Branch_rel ,"bf " ,1,1,BR,fix_none}, // bf {dec_i1000_1111_iiii_iiii ,i1000_1111_iiii_iiii ,Mask_imm8 ,0x8F00 ,Branch_rel_d ,"bf.s " ,1,1,BR,fix_none}, // bf.s {dec_i1000_1001_iiii_iiii ,i1000_1001_iiii_iiii ,Mask_imm8 ,0x8900 ,Branch_rel ,"bt " ,1,1,BR,fix_none}, // bt {dec_i1000_1101_iiii_iiii ,i1000_1101_iiii_iiii ,Mask_imm8 ,0x8D00 ,Branch_rel_d ,"bt.s " ,1,1,BR,fix_none}, // bt.s {0 ,i1000_1000_iiii_iiii ,Mask_imm8 ,0x8800 ,Normal ,"cmp/eq #,R0" ,1,1,MT,fix_none ,dec_cmp(shop_seteq,PRM_R0,PRM_SIMM8)}, // cmp/eq #,R0 {dec_i1010_iiii_iiii_iiii ,i1010_iiii_iiii_iiii ,Mask_n_imm8,0xA000 ,Branch_rel_d ,"bra " ,1,2,BR,fix_none}, // bra {dec_i1011_iiii_iiii_iiii ,i1011_iiii_iiii_iiii ,Mask_n_imm8,0xB000 ,Branch_rel_d ,"bsr " ,1,2,BR,fix_none}, // bsr {dec_i1100_0011_iiii_iiii ,i1100_0011_iiii_iiii ,Mask_imm8 ,0xC300 ,ReadWritePC ,"trapa #" ,7,7,CO,fix_none}, // trapa # {0 ,i1100_1000_iiii_iiii ,Mask_imm8 ,0xC800 ,Normal ,"tst #,R0" ,1,1,MT,fix_none ,dec_cmp(shop_test,PRM_R0,PRM_UIMM8)}, // tst #,R0 {0 ,i1100_1001_iiii_iiii ,Mask_imm8 ,0xC900 ,Normal ,"and #,R0" ,1,1,EX,fix_none ,dec_Bin_r0u8(shop_and)}, // and #,R0 {0 ,i1100_1010_iiii_iiii ,Mask_imm8 ,0xCA00 ,Normal ,"xor #,R0" ,1,1,EX,fix_none ,dec_Bin_r0u8(shop_xor)}, // xor #,R0 {0 ,i1100_1011_iiii_iiii ,Mask_imm8 ,0xCB00 ,Normal ,"or #,R0" ,1,1,EX,fix_none ,dec_Bin_r0u8(shop_or)}, // or #,R0 {0 ,i1100_1100_iiii_iiii ,Mask_imm8 ,0xCC00 ,Normal ,"tst.b #,@(R0,GBR)" ,3,3,CO,fix_none}, // tst.b #,@(R0,GBR) {0 ,i1100_1101_iiii_iiii ,Mask_imm8 ,0xCD00 ,Normal ,"and.b #,@(R0,GBR)" ,4,4,CO,fix_none}, // and.b #,@(R0,GBR) {0 ,i1100_1110_iiii_iiii ,Mask_imm8 ,0xCE00 ,Normal ,"xor.b #,@(R0,GBR)" ,4,4,CO,fix_none}, // xor.b #,@(R0,GBR) {0 ,i1100_1111_iiii_iiii ,Mask_imm8 ,0xCF00 ,Normal ,"or.b #,@(R0,GBR)" ,4,4,CO,fix_none}, // or.b #,@(R0,GBR) //and here are the new ones :D {0 ,i1111_nnnn_mmmm_0000 ,Mask_n_m ,0xF000,Normal ,"fadd ," ,1,3,FE,fix_none ,dec_Bin_frNfrM(shop_fadd)}, //fadd , {0 ,i1111_nnnn_mmmm_0001 ,Mask_n_m ,0xF001,Normal ,"fsub ," ,1,3,FE,fix_none ,dec_Bin_frNfrM(shop_fsub)}, //fsub , {0 ,i1111_nnnn_mmmm_0010 ,Mask_n_m ,0xF002,Normal ,"fmul ," ,1,3,FE,fix_none ,dec_Bin_frNfrM(shop_fmul)}, //fmul , {0 ,i1111_nnnn_mmmm_0011 ,Mask_n_m ,0xF003,Normal ,"fdiv ," ,1,12,FE,fix_none ,dec_Bin_frNfrM(shop_fdiv)},//fdiv , {0 ,i1111_nnnn_mmmm_0100 ,Mask_n_m ,0xF004,Normal ,"fcmp/eq ,_SD_F" ,1,4,FE,fix_none ,dec_cmp(shop_fseteq,PRM_FRN,PRM_FRM)}, //fcmp/eq , {0 ,i1111_nnnn_mmmm_0101 ,Mask_n_m ,0xF005,Normal ,"fcmp/gt ," ,1,4,FE,fix_none ,dec_cmp(shop_fsetgt,PRM_FRN,PRM_FRM)}, //fcmp/gt , {0 ,i1111_nnnn_mmmm_0110 ,Mask_n_m ,0xF006,Normal ,"fmov.s @(R0,)," ,1,2,LS,fix_none ,dec_MRd(PRM_FRN_SZ,PRM_RM_R0,4)}, //fmov.s @(R0,), {0 ,i1111_nnnn_mmmm_0111 ,Mask_n_m ,0xF007,Normal ,"fmov.s ,@(R0,)" ,1,1,LS,fix_none ,dec_MWt(PRM_RN_R0,PRM_FRM_SZ,4)}, //fmov.s ,@(R0,) {0 ,i1111_nnnn_mmmm_1000 ,Mask_n_m ,0xF008,Normal ,"fmov.s @," ,1,2,LS,fix_none ,dec_MRd(PRM_FRN_SZ,PRM_RM,4)}, //fmov.s @, {0 ,i1111_nnnn_mmmm_1001 ,Mask_n_m ,0xF009,Normal ,"fmov.s @+," ,1,2,LS,fix_none ,dec_MRd(PRM_FRN_SZ,PRM_RM,-4)}, //fmov.s @+, {0 ,i1111_nnnn_mmmm_1010 ,Mask_n_m ,0xF00A,Normal ,"fmov.s ,@" ,1,1,LS,fix_none ,dec_MWt(PRM_RN,PRM_FRM_SZ,4)}, //fmov.s ,@ {0 ,i1111_nnnn_mmmm_1011 ,Mask_n_m ,0xF00B,Normal ,"fmov.s ,@-" ,1,1,LS,rn_fpu_4 ,dec_MWt(PRM_RN,PRM_FRM_SZ,-4)}, //fmov.s ,@- {0 ,i1111_nnnn_mmmm_1100 ,Mask_n_m ,0xF00C,Normal ,"fmov ," ,1,0,LS,fix_none ,dec_Fill(DM_UnaryOp,PRM_FRN_SZ,PRM_FRM_SZ,shop_mov32)}, //fmov , {0 ,i1111_nnnn_0101_1101 ,Mask_n ,0xF05D,Normal ,"fabs " ,1,0,LS,fix_none ,dec_Un_frNfrN(shop_fabs)}, //fabs {0 ,i1111_nnn0_1111_1101 ,Mask_nh3bit ,0xF0FD,Normal ,"FSCA FPUL, " ,1,4,FE,fix_none ,dec_Fill(DM_UnaryOp,PRM_FPN,PRM_FPUL,shop_fsca)}, //FSCA FPUL, DRn//F0FD//1111_nnnn_1111_1101 {0 ,i1111_nnnn_1011_1101 ,Mask_n ,0xF0BD,Normal ,"fcnvds ,FPUL" ,1,4,FE,fix_none}, //fcnvds ,FPUL {0 ,i1111_nnnn_1010_1101 ,Mask_n ,0xF0AD,Normal ,"fcnvsd FPUL," ,1,4,FE,fix_none}, //fcnvsd FPUL, {0 ,i1111_nnmm_1110_1101 ,Mask_n ,0xF0ED,Normal ,"fipr ," ,1,4,FE,fix_none ,dec_Fill(DM_fiprOp,PRM_FVN,PRM_FVM,shop_fipr)}, //fipr , {0 ,i1111_nnnn_1000_1101 ,Mask_n ,0xF08D,Normal ,"fldi0 " ,1,0,LS,fix_none ,dec_Fill(DM_UnaryOp,PRM_FRN,PRM_ZERO,shop_mov32)}, //fldi0 {0 ,i1111_nnnn_1001_1101 ,Mask_n ,0xF09D,Normal ,"fldi1 " ,1,0,LS,fix_none ,dec_Fill(DM_UnaryOp,PRM_FRN,PRM_ONE_F32,shop_mov32)}, //fldi1 {0 ,i1111_nnnn_0001_1101 ,Mask_n ,0xF01D,Normal ,"flds ,FPUL" ,1,0,LS,fix_none ,dec_Fill(DM_UnaryOp,PRM_FPUL,PRM_FRN,shop_mov32)}, //flds ,FPUL {0 ,i1111_nnnn_0010_1101 ,Mask_n ,0xF02D,Normal ,"float FPUL," ,1,3,FE,fix_none ,dec_Fill(DM_UnaryOp,PRM_FRN,PRM_FPUL,shop_cvt_i2f_n)}, //float FPUL, {0 ,i1111_nnnn_0100_1101 ,Mask_n ,0xF04D,Normal ,"fneg " ,1,0,LS,fix_none ,dec_Un_frNfrN(shop_fneg)}, //fneg {dec_i1111_1011_1111_1101 ,i1111_1011_1111_1101 ,Mask_none ,0xFBFD,WritesFPSCR ,"frchg" ,1,2,FE,fix_none}, //frchg {dec_i1111_0011_1111_1101 ,i1111_0011_1111_1101 ,Mask_none ,0xF3FD,WritesFPSCR ,"fschg" ,1,2,FE,fix_none}, //fschg {0 ,i1111_nnnn_0110_1101 ,Mask_n ,0xF06D,Normal ,"fsqrt " ,1,12,FE,fix_none ,dec_Un_frNfrN(shop_fsqrt)},//fsqrt {0 ,i1111_nnnn_0011_1101 ,Mask_n ,0xF03D,Normal ,"ftrc , FPUL" ,1,4,FE,fix_none ,dec_Fill(DM_UnaryOp,PRM_FPUL,PRM_FRN,shop_cvt_f2i_t)}, //ftrc , FPUL // ,dec_Fill(DM_UnaryOp,PRM_FPUL,PRM_FRN,shop_cvt) {0 ,i1111_nnnn_0000_1101 ,Mask_n ,0xF00D,Normal ,"fsts FPUL," ,1,0,LS,fix_none ,dec_Fill(DM_UnaryOp,PRM_FRN,PRM_FPUL,shop_mov32)}, //fsts FPUL, {0 ,i1111_nn01_1111_1101 ,Mask_nh2bit ,0xF1FD,Normal ,"ftrv xmtrx," ,1,6,FE,fix_none ,dec_Fill(DM_BinaryOp,PRM_FVN,PRM_XMTRX,shop_ftrv,1)}, //ftrv xmtrx, {0 ,i1111_nnnn_mmmm_1110 ,Mask_n_m ,0xF00E,Normal ,"fmac ,," ,1,4,FE,fix_none ,dec_Fill(DM_BinaryOp,PRM_FRN,PRM_FRM_FR0,shop_fmac,1)}, //fmac ,, {0 ,i1111_nnnn_0111_1101 ,Mask_n ,0xF07D,Normal ,"FSRRA " ,1,4,FE,fix_none ,dec_Un_frNfrN(shop_fsrra)}, //FSRRA (1111nnnn 01111101) //HLE ops //end of list {0,0,0,0,ReadWritePC}//Branch in order to stop the block and save pc ect :) }; void BuildOpcodeTables() { for (int i=0;i<0x10000;i++) { OpPtr[i]=iNotImplemented; OpDesc[i]=&missing_opcode; } for (int i2=0;opcodes[i2].oph;i2++) { if (opcodes[i2].diss==0) opcodes[i2].diss="Unknown Opcode"; u32 shft; u32 count; u32 mask=~opcodes[i2].mask; u32 base=opcodes[i2].rez; switch(opcodes[i2].mask) { case Mask_none: count=1; shft=0; break; case Mask_n: count=16; shft=8; break; case Mask_n_m: count=256; shft=4; break; case Mask_n_m_imm4: count=256*16; shft=0; break; case Mask_imm8: count=256; shft=0; break; case Mask_n_ml3bit: count=256; shft=4; break; case Mask_nh3bit: count=8; shft=9; break; case Mask_nh2bit: count=4; shft=10; break; default: die("error"); } for (u32 i=0;i