diff options
Diffstat (limited to 'riscv/execute.h')
-rw-r--r-- | riscv/execute.h | 656 |
1 files changed, 325 insertions, 331 deletions
diff --git a/riscv/execute.h b/riscv/execute.h index d80c12f..ae8cfdf 100644 --- a/riscv/execute.h +++ b/riscv/execute.h @@ -3,7 +3,7 @@ switch((insn.bits >> 0x19) & 0x7f) { case 0x0: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x0: { @@ -33,7 +33,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x68: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x2: { @@ -54,7 +54,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x69: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x2: { @@ -75,166 +75,170 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x6a: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x0: { - if((insn.bits & 0xfe007fe0) == 0xd40002a0) + if((insn.bits & 0xffff8000) == 0xd40a8000) { #include "insns/c_eq_s.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd40000a0) + if((insn.bits & 0xffff8000) == 0xd4028000) { #include "insns/sgninj_s.h" break; } - if((insn.bits & 0xfff07fe0) == 0xd40001c0) + if((insn.bits & 0xfffffc00) == 0xd4070000) { #include "insns/cvt_s_w.h" break; } - if((insn.bits & 0xfff067e0) == 0xd40005e0) + if((insn.bits & 0xffff8000) == 0xd4000000) { - #include "insns/cvtu_s_w_rm.h" + #include "insns/add_s.h" break; } - if((insn.bits & 0xfff067e0) == 0xd4000500) + if((insn.bits & 0xffff83e0) == 0xd42c0000) { - #include "insns/cvt_l_s_rm.h" + #include "insns/mff_s.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd4000000) + if((insn.bits & 0xfffffc00) == 0xd42e0000) { - #include "insns/add_s.h" + #include "insns/mtf_s.h" break; } - if((insn.bits & 0xfff067e0) == 0xd40005a0) + if((insn.bits & 0xffff8000) == 0xd4030000) { - #include "insns/cvtu_s_l_rm.h" + #include "insns/sgninjn_s.h" break; } - if((insn.bits & 0xfe0fffe0) == 0xd4000b00) + if((insn.bits & 0xfffffc00) == 0xd4078000) { - #include "insns/mff_s.h" + #include "insns/cvtu_s_w.h" break; } - if((insn.bits & 0xfff07fe0) == 0xd4000b80) + if((insn.bits & 0xfffffc00) == 0xd4068000) { - #include "insns/mtf_s.h" + #include "insns/cvtu_s_l.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd40000c0) + if((insn.bits & 0xfffffc00) == 0xd4060000) { - #include "insns/sgninjn_s.h" + #include "insns/cvt_s_l.h" break; } - if((insn.bits & 0xfe0067e0) == 0xd4000440) + if((insn.bits & 0xffff8000) == 0xd4008000) { - #include "insns/mul_s_rm.h" + #include "insns/sub_s.h" break; } - if((insn.bits & 0xfff067e0) == 0xd4000520) + if((insn.bits & 0xfffffc00) == 0xd4020000) { - #include "insns/cvtu_l_s_rm.h" + #include "insns/sqrt_s.h" break; } - if((insn.bits & 0xfff067e0) == 0xd40005c0) + if((insn.bits & 0xffff8000) == 0xd40b0000) { - #include "insns/cvt_s_w_rm.h" + #include "insns/c_lt_s.h" break; } - if((insn.bits & 0xfff07fe0) == 0xd40001e0) + if((insn.bits & 0xffff8000) == 0xd4038000) { - #include "insns/cvtu_s_w.h" + #include "insns/sgnmul_s.h" break; } - if((insn.bits & 0xfff07fe0) == 0xd40001a0) + if((insn.bits & 0xffff8000) == 0xd4018000) { - #include "insns/cvtu_s_l.h" + #include "insns/div_s.h" break; } - if((insn.bits & 0xfff067e0) == 0xd4000480) + if((insn.bits & 0xfffffc00) == 0xd4098000) { - #include "insns/sqrt_s_rm.h" + #include "insns/cvt_s_d.h" break; } - if((insn.bits & 0xfff067e0) == 0xd4000660) + if((insn.bits & 0xffff8000) == 0xd40b8000) { - #include "insns/cvt_s_d_rm.h" + #include "insns/c_le_s.h" break; } - if((insn.bits & 0xfe0067e0) == 0xd4000420) + if((insn.bits & 0xffff8000) == 0xd4010000) { - #include "insns/sub_s_rm.h" + #include "insns/mul_s.h" break; } - if((insn.bits & 0xfff07fe0) == 0xd4000180) + #include "insns/unimp.h" + } + case 0x1: + { + if((insn.bits & 0xffcffc00) == 0xd4478000) { - #include "insns/cvt_s_l.h" + #include "insns/cvtu_s_w_rm.h" break; } - if((insn.bits & 0xfe0067e0) == 0xd4000460) + if((insn.bits & 0xffcffc00) == 0xd4440000) { - #include "insns/div_s_rm.h" + #include "insns/cvt_l_s_rm.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd4000020) + if((insn.bits & 0xffcffc00) == 0xd4468000) { - #include "insns/sub_s.h" + #include "insns/cvtu_s_l_rm.h" break; } - if((insn.bits & 0xfff067e0) == 0xd4000580) + if((insn.bits & 0xffcf8000) == 0xd4410000) { - #include "insns/cvt_s_l_rm.h" + #include "insns/mul_s_rm.h" break; } - if((insn.bits & 0xfff07fe0) == 0xd4000080) + if((insn.bits & 0xffcffc00) == 0xd4448000) { - #include "insns/sqrt_s.h" + #include "insns/cvtu_l_s_rm.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd40002c0) + if((insn.bits & 0xffcffc00) == 0xd4470000) { - #include "insns/c_lt_s.h" + #include "insns/cvt_s_w_rm.h" break; } - if((insn.bits & 0xfe0067e0) == 0xd4000400) + if((insn.bits & 0xffcffc00) == 0xd4420000) { - #include "insns/add_s_rm.h" + #include "insns/sqrt_s_rm.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd40000e0) + if((insn.bits & 0xffcffc00) == 0xd4498000) { - #include "insns/sgnmul_s.h" + #include "insns/cvt_s_d_rm.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd4000060) + if((insn.bits & 0xffcf8000) == 0xd4408000) { - #include "insns/div_s.h" + #include "insns/sub_s_rm.h" break; } - if((insn.bits & 0xfff07fe0) == 0xd4000260) + if((insn.bits & 0xffcf8000) == 0xd4418000) { - #include "insns/cvt_s_d.h" + #include "insns/div_s_rm.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd40002e0) + if((insn.bits & 0xffcffc00) == 0xd4460000) { - #include "insns/c_le_s.h" + #include "insns/cvt_s_l_rm.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd4000040) + if((insn.bits & 0xffcf8000) == 0xd4400000) { - #include "insns/mul_s.h" + #include "insns/add_s_rm.h" break; } - if((insn.bits & 0xfff067e0) == 0xd4000540) + if((insn.bits & 0xffcffc00) == 0xd4450000) { #include "insns/cvt_w_s_rm.h" break; } - if((insn.bits & 0xfff067e0) == 0xd4000560) + if((insn.bits & 0xffcffc00) == 0xd4458000) { #include "insns/cvtu_w_s_rm.h" break; @@ -243,162 +247,166 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x6: { - if((insn.bits & 0xfe0fffe0) == 0xd4006b00) + if((insn.bits & 0xffff83e0) == 0xd5ac0000) { #include "insns/mff_d.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd40060a0) + if((insn.bits & 0xffff8000) == 0xd5828000) { #include "insns/sgninj_d.h" break; } - if((insn.bits & 0xfff067e0) == 0xd4006580) - { - #include "insns/cvt_d_l_rm.h" - break; - } - if((insn.bits & 0xfe007fe0) == 0xd4006060) + if((insn.bits & 0xffff8000) == 0xd5818000) { #include "insns/div_d.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd40062a0) + if((insn.bits & 0xffff8000) == 0xd58a8000) { #include "insns/c_eq_d.h" break; } - if((insn.bits & 0xfff07fe0) == 0xd40061a0) + if((insn.bits & 0xfffffc00) == 0xd5868000) { #include "insns/cvtu_d_l.h" break; } - if((insn.bits & 0xfff067e0) == 0xd4006540) + if((insn.bits & 0xfffffc00) == 0xd5878000) { - #include "insns/cvt_w_d_rm.h" + #include "insns/cvtu_d_w.h" break; } - if((insn.bits & 0xfff07fe0) == 0xd40061e0) + if((insn.bits & 0xffff83e0) == 0xd5ac8000) { - #include "insns/cvtu_d_w.h" + #include "insns/mffl_d.h" break; } - if((insn.bits & 0xfe0fffe0) == 0xd4006b20) + if((insn.bits & 0xffff8000) == 0xd5838000) { - #include "insns/mffl_d.h" + #include "insns/sgnmul_d.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd4006000) + if((insn.bits & 0xffff8000) == 0xd5800000) { #include "insns/add_d.h" break; } - if((insn.bits & 0xfe0fffe0) == 0xd4006b40) + if((insn.bits & 0xffff83e0) == 0xd5ad0000) { #include "insns/mffh_d.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd40062e0) + if((insn.bits & 0xffff8000) == 0xd58b8000) { #include "insns/c_le_d.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd40060e0) + if((insn.bits & 0xffff8000) == 0xd5830000) { - #include "insns/sgnmul_d.h" + #include "insns/sgninjn_d.h" break; } - if((insn.bits & 0xfff067e0) == 0xd4006560) + if((insn.bits & 0xffff8000) == 0xd5be0000) { - #include "insns/cvtu_w_d_rm.h" + #include "insns/mtflh_d.h" break; } - if((insn.bits & 0xfff067e0) == 0xd4006480) + if((insn.bits & 0xffff8000) == 0xd5808000) { - #include "insns/sqrt_d_rm.h" + #include "insns/sub_d.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd40060c0) + if((insn.bits & 0xfffffc00) == 0xd5ae0000) { - #include "insns/sgninjn_d.h" + #include "insns/mtf_d.h" break; } - if((insn.bits & 0xfff067e0) == 0xd40065a0) + if((insn.bits & 0xfffffc00) == 0xd5820000) { - #include "insns/cvtu_d_l_rm.h" + #include "insns/sqrt_d.h" break; } - if((insn.bits & 0xfe0067e0) == 0xd4006400) + if((insn.bits & 0xfffffc00) == 0xd5880000) { - #include "insns/add_d_rm.h" + #include "insns/cvt_d_s.h" break; } - if((insn.bits & 0xfff067e0) == 0xd4006500) + if((insn.bits & 0xfffffc00) == 0xd5870000) { - #include "insns/cvt_l_d_rm.h" + #include "insns/cvt_d_w.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd4006f80) + if((insn.bits & 0xfffffc00) == 0xd5860000) { - #include "insns/mtflh_d.h" + #include "insns/cvt_d_l.h" break; } - if((insn.bits & 0xfff067e0) == 0xd4006520) + if((insn.bits & 0xffff8000) == 0xd5810000) { - #include "insns/cvtu_l_d_rm.h" + #include "insns/mul_d.h" break; } - if((insn.bits & 0xfe0067e0) == 0xd4006440) + if((insn.bits & 0xffff8000) == 0xd58b0000) { - #include "insns/mul_d_rm.h" + #include "insns/c_lt_d.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd4006020) + #include "insns/unimp.h" + } + case 0x7: + { + if((insn.bits & 0xffcffc00) == 0xd5c60000) { - #include "insns/sub_d.h" + #include "insns/cvt_d_l_rm.h" break; } - if((insn.bits & 0xfff07fe0) == 0xd4006b80) + if((insn.bits & 0xffcffc00) == 0xd5c50000) { - #include "insns/mtf_d.h" + #include "insns/cvt_w_d_rm.h" break; } - if((insn.bits & 0xfff07fe0) == 0xd4006080) + if((insn.bits & 0xffcffc00) == 0xd5c58000) { - #include "insns/sqrt_d.h" + #include "insns/cvtu_w_d_rm.h" break; } - if((insn.bits & 0xfe0067e0) == 0xd4006460) + if((insn.bits & 0xffcffc00) == 0xd5c20000) { - #include "insns/div_d_rm.h" + #include "insns/sqrt_d_rm.h" break; } - if((insn.bits & 0xfff07fe0) == 0xd4006200) + if((insn.bits & 0xffcffc00) == 0xd5c68000) { - #include "insns/cvt_d_s.h" + #include "insns/cvtu_d_l_rm.h" break; } - if((insn.bits & 0xfff07fe0) == 0xd40061c0) + if((insn.bits & 0xffcf8000) == 0xd5c00000) { - #include "insns/cvt_d_w.h" + #include "insns/add_d_rm.h" break; } - if((insn.bits & 0xfff07fe0) == 0xd4006180) + if((insn.bits & 0xffcffc00) == 0xd5c40000) { - #include "insns/cvt_d_l.h" + #include "insns/cvt_l_d_rm.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd4006040) + if((insn.bits & 0xffcffc00) == 0xd5c48000) { - #include "insns/mul_d.h" + #include "insns/cvtu_l_d_rm.h" break; } - if((insn.bits & 0xfe007fe0) == 0xd40062c0) + if((insn.bits & 0xffcf8000) == 0xd5c10000) { - #include "insns/c_lt_d.h" + #include "insns/mul_d_rm.h" break; } - if((insn.bits & 0xfe0067e0) == 0xd4006420) + if((insn.bits & 0xffcf8000) == 0xd5c18000) + { + #include "insns/div_d_rm.h" + break; + } + if((insn.bits & 0xffcf8000) == 0xd5c08000) { #include "insns/sub_d_rm.h" break; @@ -412,34 +420,43 @@ switch((insn.bits >> 0x19) & 0x7f) } break; } - case 0x6c: + case 0x6b: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x0: { - if((insn.bits & 0xfe006400) == 0xd8000400) + if((insn.bits & 0xffffffe0) == 0xd6008000) { - #include "insns/madd_s_rm.h" + #include "insns/di.h" break; } - if((insn.bits & 0xfe007c00) == 0xd8000000) + if((insn.bits & 0xffffffe0) == 0xd6000000) { - #include "insns/madd_s.h" + #include "insns/ei.h" break; } #include "insns/unimp.h" } - case 0x6: + case 0x1: { - if((insn.bits & 0xfe006400) == 0xd8006400) + if((insn.bits & 0xffff83e0) == 0xd6400000) { - #include "insns/madd_d_rm.h" + #include "insns/mfpcr.h" break; } - if((insn.bits & 0xfe007c00) == 0xd8006000) + if((insn.bits & 0xffff801f) == 0xd6408000) { - #include "insns/madd_d.h" + #include "insns/mtpcr.h" + break; + } + #include "insns/unimp.h" + } + case 0x2: + { + if((insn.bits & 0xffffffff) == 0xd6800000) + { + #include "insns/eret.h" break; } #include "insns/unimp.h" @@ -451,38 +468,77 @@ switch((insn.bits >> 0x19) & 0x7f) } break; } - case 0x6d: + case 0x6c: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x0: { - if((insn.bits & 0xfe006400) == 0xda000400) + if((insn.bits & 0xfff00000) == 0xd8000000) { - #include "insns/msub_s_rm.h" + #include "insns/madd_s.h" break; } - if((insn.bits & 0xfe007c00) == 0xda000000) + #include "insns/unimp.h" + } + case 0x1: + { + #include "insns/madd_s_rm.h" + break; + } + case 0x6: + { + if((insn.bits & 0xfff00000) == 0xd9800000) { - #include "insns/msub_s.h" + #include "insns/madd_d.h" break; } #include "insns/unimp.h" } - case 0x6: + case 0x7: { - if((insn.bits & 0xfe007c00) == 0xda006000) + #include "insns/madd_d_rm.h" + break; + } + default: + { + #include "insns/unimp.h" + } + } + break; + } + case 0x6d: + { + switch((insn.bits >> 0x16) & 0x7) + { + case 0x0: + { + if((insn.bits & 0xfff00000) == 0xda000000) { - #include "insns/msub_d.h" + #include "insns/msub_s.h" break; } - if((insn.bits & 0xfe006400) == 0xda006400) + #include "insns/unimp.h" + } + case 0x1: + { + #include "insns/msub_s_rm.h" + break; + } + case 0x6: + { + if((insn.bits & 0xfff00000) == 0xdb800000) { - #include "insns/msub_d_rm.h" + #include "insns/msub_d.h" break; } #include "insns/unimp.h" } + case 0x7: + { + #include "insns/msub_d_rm.h" + break; + } default: { #include "insns/unimp.h" @@ -492,36 +548,36 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x6e: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x0: { - if((insn.bits & 0xfe007c00) == 0xdc000000) + if((insn.bits & 0xfff00000) == 0xdc000000) { #include "insns/nmsub_s.h" break; } - if((insn.bits & 0xfe006400) == 0xdc000400) - { - #include "insns/nmsub_s_rm.h" - break; - } #include "insns/unimp.h" } + case 0x1: + { + #include "insns/nmsub_s_rm.h" + break; + } case 0x6: { - if((insn.bits & 0xfe007c00) == 0xdc006000) + if((insn.bits & 0xfff00000) == 0xdd800000) { #include "insns/nmsub_d.h" break; } - if((insn.bits & 0xfe006400) == 0xdc006400) - { - #include "insns/nmsub_d_rm.h" - break; - } #include "insns/unimp.h" } + case 0x7: + { + #include "insns/nmsub_d_rm.h" + break; + } default: { #include "insns/unimp.h" @@ -531,36 +587,36 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x6f: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x0: { - if((insn.bits & 0xfe007c00) == 0xde000000) + if((insn.bits & 0xfff00000) == 0xde000000) { #include "insns/nmadd_s.h" break; } - if((insn.bits & 0xfe006400) == 0xde000400) - { - #include "insns/nmadd_s_rm.h" - break; - } #include "insns/unimp.h" } + case 0x1: + { + #include "insns/nmadd_s_rm.h" + break; + } case 0x6: { - if((insn.bits & 0xfe007c00) == 0xde006000) + if((insn.bits & 0xfff00000) == 0xdf800000) { #include "insns/nmadd_d.h" break; } - if((insn.bits & 0xfe006400) == 0xde006400) - { - #include "insns/nmadd_d_rm.h" - break; - } #include "insns/unimp.h" } + case 0x7: + { + #include "insns/nmadd_d_rm.h" + break; + } default: { #include "insns/unimp.h" @@ -573,9 +629,35 @@ switch((insn.bits >> 0x19) & 0x7f) #include "insns/lui.h" break; } + case 0x72: + { + switch((insn.bits >> 0x16) & 0x7) + { + case 0x0: + { + #include "insns/jalr_c.h" + break; + } + case 0x1: + { + #include "insns/jalr_r.h" + break; + } + case 0x2: + { + #include "insns/jalr_j.h" + break; + } + default: + { + #include "insns/unimp.h" + } + } + break; + } case 0x73: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x0: { @@ -616,7 +698,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x74: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x0: { @@ -650,17 +732,17 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x7: { - if((insn.bits & 0xfe007fc0) == 0xe8007080) + if((insn.bits & 0xffff0000) == 0xe9c20000) { #include "insns/srli.h" break; } - if((insn.bits & 0xfe007fc0) == 0xe80070c0) + if((insn.bits & 0xffff0000) == 0xe9c30000) { #include "insns/srai.h" break; } - if((insn.bits & 0xfe007fc0) == 0xe8007040) + if((insn.bits & 0xffff0000) == 0xe9c10000) { #include "insns/slli.h" break; @@ -676,46 +758,46 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x75: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x0: { - if((insn.bits & 0xfe007fe0) == 0xea000000) + if((insn.bits & 0xffff8000) == 0xea000000) { #include "insns/add.h" break; } - if((insn.bits & 0xfe007fe0) == 0xea0000e0) + if((insn.bits & 0xffff8000) == 0xea038000) { #include "insns/nor.h" break; } - if((insn.bits & 0xfe007fe0) == 0xea000060) + if((insn.bits & 0xffff8000) == 0xea018000) { #include "insns/sltu.h" break; } - if((insn.bits & 0xfe007fe0) == 0xea0000c0) + if((insn.bits & 0xffff8000) == 0xea030000) { #include "insns/xor.h" break; } - if((insn.bits & 0xfe007fe0) == 0xea000020) + if((insn.bits & 0xffff8000) == 0xea008000) { #include "insns/sub.h" break; } - if((insn.bits & 0xfe007fe0) == 0xea0000a0) + if((insn.bits & 0xffff8000) == 0xea028000) { #include "insns/or.h" break; } - if((insn.bits & 0xfe007fe0) == 0xea000040) + if((insn.bits & 0xffff8000) == 0xea010000) { #include "insns/slt.h" break; } - if((insn.bits & 0xfe007fe0) == 0xea000080) + if((insn.bits & 0xffff8000) == 0xea020000) { #include "insns/and.h" break; @@ -724,37 +806,37 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x1: { - if((insn.bits & 0xfe007fe0) == 0xea001000) + if((insn.bits & 0xffff8000) == 0xea400000) { #include "insns/mul.h" break; } - if((insn.bits & 0xfe007fe0) == 0xea001080) + if((insn.bits & 0xffff8000) == 0xea420000) { #include "insns/div.h" break; } - if((insn.bits & 0xfe007fe0) == 0xea0010c0) + if((insn.bits & 0xffff8000) == 0xea430000) { #include "insns/rem.h" break; } - if((insn.bits & 0xfe007fe0) == 0xea001040) + if((insn.bits & 0xffff8000) == 0xea410000) { #include "insns/mulh.h" break; } - if((insn.bits & 0xfe007fe0) == 0xea0010e0) + if((insn.bits & 0xffff8000) == 0xea438000) { #include "insns/remu.h" break; } - if((insn.bits & 0xfe007fe0) == 0xea001060) + if((insn.bits & 0xffff8000) == 0xea418000) { #include "insns/mulhu.h" break; } - if((insn.bits & 0xfe007fe0) == 0xea0010a0) + if((insn.bits & 0xffff8000) == 0xea428000) { #include "insns/divu.h" break; @@ -763,17 +845,17 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x7: { - if((insn.bits & 0xfe007fe0) == 0xea0070c0) + if((insn.bits & 0xffff8000) == 0xebc30000) { #include "insns/sra.h" break; } - if((insn.bits & 0xfe007fe0) == 0xea007080) + if((insn.bits & 0xffff8000) == 0xebc20000) { #include "insns/srl.h" break; } - if((insn.bits & 0xfe007fe0) == 0xea007040) + if((insn.bits & 0xffff8000) == 0xebc10000) { #include "insns/sll.h" break; @@ -789,7 +871,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x76: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x0: { @@ -798,17 +880,17 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x7: { - if((insn.bits & 0xfe007fe0) == 0xec007040) + if((insn.bits & 0xffff8000) == 0xedc10000) { #include "insns/slliw.h" break; } - if((insn.bits & 0xfe007fe0) == 0xec007080) + if((insn.bits & 0xffff8000) == 0xedc20000) { #include "insns/srliw.h" break; } - if((insn.bits & 0xfe007fe0) == 0xec0070c0) + if((insn.bits & 0xffff8000) == 0xedc30000) { #include "insns/sraiw.h" break; @@ -824,16 +906,16 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x77: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x0: { - if((insn.bits & 0xfe007fe0) == 0xee000000) + if((insn.bits & 0xffff8000) == 0xee000000) { #include "insns/addw.h" break; } - if((insn.bits & 0xfe007fe0) == 0xee000020) + if((insn.bits & 0xffff8000) == 0xee008000) { #include "insns/subw.h" break; @@ -842,37 +924,37 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x1: { - if((insn.bits & 0xfe007fe0) == 0xee0010e0) + if((insn.bits & 0xffff8000) == 0xee438000) { #include "insns/remuw.h" break; } - if((insn.bits & 0xfe007fe0) == 0xee0010a0) + if((insn.bits & 0xffff8000) == 0xee428000) { #include "insns/divuw.h" break; } - if((insn.bits & 0xfe007fe0) == 0xee001060) + if((insn.bits & 0xffff8000) == 0xee418000) { #include "insns/mulhuw.h" break; } - if((insn.bits & 0xfe007fe0) == 0xee001000) + if((insn.bits & 0xffff8000) == 0xee400000) { #include "insns/mulw.h" break; } - if((insn.bits & 0xfe007fe0) == 0xee0010c0) + if((insn.bits & 0xffff8000) == 0xee430000) { #include "insns/remw.h" break; } - if((insn.bits & 0xfe007fe0) == 0xee001040) + if((insn.bits & 0xffff8000) == 0xee410000) { #include "insns/mulhw.h" break; } - if((insn.bits & 0xfe007fe0) == 0xee001080) + if((insn.bits & 0xffff8000) == 0xee420000) { #include "insns/divw.h" break; @@ -881,17 +963,17 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x7: { - if((insn.bits & 0xfe007fe0) == 0xee007080) + if((insn.bits & 0xffff8000) == 0xefc20000) { #include "insns/srlw.h" break; } - if((insn.bits & 0xfe007fe0) == 0xee0070c0) + if((insn.bits & 0xffff8000) == 0xefc30000) { #include "insns/sraw.h" break; } - if((insn.bits & 0xfe007fe0) == 0xee007040) + if((insn.bits & 0xffff8000) == 0xefc10000) { #include "insns/sllw.h" break; @@ -907,7 +989,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x78: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x0: { @@ -946,7 +1028,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x7: { - if((insn.bits & 0xfff07000) == 0xf0007000) + if((insn.bits & 0xffc0001f) == 0xf1c00000) { #include "insns/synci.h" break; @@ -962,7 +1044,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x79: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x0: { @@ -993,46 +1075,46 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x7a: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x2: { - if((insn.bits & 0xfe007fe0) == 0xf4002040) + if((insn.bits & 0xffff8000) == 0xf4828000) { - #include "insns/amow_and.h" + #include "insns/amow_max.h" break; } - if((insn.bits & 0xfe007fe0) == 0xf4002080) + if((insn.bits & 0xffff8000) == 0xf4810000) { - #include "insns/amow_min.h" + #include "insns/amow_and.h" break; } - if((insn.bits & 0xfe007fe0) == 0xf4002060) + if((insn.bits & 0xffff8000) == 0xf4820000) { - #include "insns/amow_or.h" + #include "insns/amow_min.h" break; } - if((insn.bits & 0xfe007fe0) == 0xf40020a0) + if((insn.bits & 0xffff8000) == 0xf4818000) { - #include "insns/amow_max.h" + #include "insns/amow_or.h" break; } - if((insn.bits & 0xfe007fe0) == 0xf40020c0) + if((insn.bits & 0xffff8000) == 0xf4830000) { #include "insns/amow_minu.h" break; } - if((insn.bits & 0xfe007fe0) == 0xf4002000) + if((insn.bits & 0xffff8000) == 0xf4800000) { #include "insns/amow_add.h" break; } - if((insn.bits & 0xfe007fe0) == 0xf4002020) + if((insn.bits & 0xffff8000) == 0xf4808000) { #include "insns/amow_swap.h" break; } - if((insn.bits & 0xfe007fe0) == 0xf40020e0) + if((insn.bits & 0xffff8000) == 0xf4838000) { #include "insns/amow_maxu.h" break; @@ -1041,42 +1123,42 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x3: { - if((insn.bits & 0xfe007fe0) == 0xf4003000) + if((insn.bits & 0xffff8000) == 0xf4c00000) { #include "insns/amo_add.h" break; } - if((insn.bits & 0xfe007fe0) == 0xf4003020) + if((insn.bits & 0xffff8000) == 0xf4c08000) { #include "insns/amo_swap.h" break; } - if((insn.bits & 0xfe007fe0) == 0xf4003060) + if((insn.bits & 0xffff8000) == 0xf4c18000) { #include "insns/amo_or.h" break; } - if((insn.bits & 0xfe007fe0) == 0xf40030a0) + if((insn.bits & 0xffff8000) == 0xf4c28000) { #include "insns/amo_max.h" break; } - if((insn.bits & 0xfe007fe0) == 0xf4003080) + if((insn.bits & 0xffff8000) == 0xf4c20000) { #include "insns/amo_min.h" break; } - if((insn.bits & 0xfe007fe0) == 0xf40030c0) + if((insn.bits & 0xffff8000) == 0xf4c30000) { #include "insns/amo_minu.h" break; } - if((insn.bits & 0xfe007fe0) == 0xf4003040) + if((insn.bits & 0xffff8000) == 0xf4c10000) { #include "insns/amo_and.h" break; } - if((insn.bits & 0xfe007fe0) == 0xf40030e0) + if((insn.bits & 0xffff8000) == 0xf4c38000) { #include "insns/amo_maxu.h" break; @@ -1092,137 +1174,49 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x7b: { - switch((insn.bits >> 0xc) & 0x7) + switch((insn.bits >> 0x16) & 0x7) { case 0x0: { - if((insn.bits & 0xfff07fe0) == 0xf6000000) - { - #include "insns/jalr_c.h" - break; - } - if((insn.bits & 0xfff07fe0) == 0xf6000040) - { - #include "insns/jalr_j.h" - break; - } - if((insn.bits & 0xfff07fe0) == 0xf6000020) - { - #include "insns/jalr_r.h" - break; - } - #include "insns/unimp.h" - } - case 0x1: - { - if((insn.bits & 0xffffffe0) == 0xf6001000) + if((insn.bits & 0xffffffe0) == 0xf6000000) { #include "insns/rdnpc.h" break; } #include "insns/unimp.h" } - case 0x2: + case 0x1: { - if((insn.bits & 0xfe0fffe0) == 0xf6002000) + if((insn.bits & 0xffff83e0) == 0xf6400000) { #include "insns/mfcr.h" break; } - #include "insns/unimp.h" - } - case 0x3: - { - if((insn.bits & 0xfe007fff) == 0xf6003000) + if((insn.bits & 0xffff801f) == 0xf6408000) { #include "insns/mtcr.h" break; } #include "insns/unimp.h" } - case 0x4: + case 0x2: { - if((insn.bits & 0xffffffff) == 0xf6004000) + if((insn.bits & 0xffffffff) == 0xf6800000) { #include "insns/sync.h" break; } #include "insns/unimp.h" } - case 0x5: + case 0x3: { - if((insn.bits & 0xfffff000) == 0xf6005000) + if((insn.bits & 0xffc003ff) == 0xf6c00000) { #include "insns/syscall.h" break; } #include "insns/unimp.h" } - case 0x6: - { - if((insn.bits & 0xfffff000) == 0xf6006000) - { - #include "insns/break.h" - break; - } - #include "insns/unimp.h" - } - default: - { - #include "insns/unimp.h" - } - } - break; - } - case 0x7e: - { - switch((insn.bits >> 0xc) & 0x7) - { - case 0x0: - { - if((insn.bits & 0xffffffe0) == 0xfc000000) - { - #include "insns/ei.h" - break; - } - #include "insns/unimp.h" - } - case 0x1: - { - if((insn.bits & 0xffffffe0) == 0xfc001000) - { - #include "insns/di.h" - break; - } - #include "insns/unimp.h" - } - case 0x2: - { - if((insn.bits & 0xffffffff) == 0xfc002000) - { - #include "insns/eret.h" - break; - } - #include "insns/unimp.h" - } - case 0x4: - { - if((insn.bits & 0xfe0fffe0) == 0xfc004000) - { - #include "insns/mfpcr.h" - break; - } - #include "insns/unimp.h" - } - case 0x5: - { - if((insn.bits & 0xfe007fff) == 0xfc005000) - { - #include "insns/mtpcr.h" - break; - } - #include "insns/unimp.h" - } default: { #include "insns/unimp.h" |