From: Yunsup Lee Date: Tue, 4 Jan 2011 03:12:24 +0000 (-0800) Subject: [opcodes,pk,sim,xcc] flip fields to favor little endian X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1313050769af0557d63edd3cad09fdf553dcabca;p=riscv-isa-sim.git [opcodes,pk,sim,xcc] flip fields to favor little endian --- diff --git a/riscv/decode.h b/riscv/decode.h index 189e184..5348ccc 100644 --- a/riscv/decode.h +++ b/riscv/decode.h @@ -37,7 +37,7 @@ const int FPRID_BITS = 5; const int NFPR = 1 << FPRID_BITS; const int IMM_BITS = 12; -const int IMMLO_BITS = 5; +const int IMMLO_BITS = 7; const int TARGET_BITS = 25; const int SHAMT_BITS = 6; const int FUNCT_BITS = 3; @@ -84,54 +84,54 @@ const int JUMP_ALIGN_BITS = 1; // note: bit fields are in little-endian order struct itype_t { - unsigned rd : GPRID_BITS; - unsigned rs1 : GPRID_BITS; - signed imm12 : IMM_BITS; - unsigned funct : FUNCT_BITS; unsigned opcode : OPCODE_BITS; + unsigned funct : FUNCT_BITS; + signed imm12 : IMM_BITS; + unsigned rs1 : GPRID_BITS; + unsigned rd : GPRID_BITS; }; struct btype_t { + unsigned opcode : OPCODE_BITS; + unsigned funct : FUNCT_BITS; unsigned immlo : IMMLO_BITS; - unsigned rs1 : GPRID_BITS; unsigned rs2 : GPRID_BITS; + unsigned rs1 : GPRID_BITS; signed immhi : IMM_BITS-IMMLO_BITS; - unsigned funct : FUNCT_BITS; - unsigned opcode : OPCODE_BITS; }; struct jtype_t { - signed target : TARGET_BITS; unsigned jump_opcode : OPCODE_BITS; + signed target : TARGET_BITS; }; struct rtype_t { - unsigned rd : GPRID_BITS; - unsigned rs1 : GPRID_BITS; - unsigned rs2 : GPRID_BITS; - unsigned functr : FUNCTR_BITS; - unsigned funct : FUNCT_BITS; unsigned opcode : OPCODE_BITS; + unsigned funct : FUNCT_BITS; + unsigned functr : FUNCTR_BITS; + unsigned rs2 : GPRID_BITS; + unsigned rs1 : GPRID_BITS; + unsigned rd : GPRID_BITS; }; struct ltype_t { - unsigned rd : GPRID_BITS; - unsigned bigimm : BIGIMM_BITS; unsigned opcode : OPCODE_BITS; + unsigned bigimm : BIGIMM_BITS; + unsigned rd : GPRID_BITS; }; struct ftype_t { - unsigned rd : FPRID_BITS; - unsigned rs1 : FPRID_BITS; - unsigned rs2 : FPRID_BITS; - unsigned rs3 : FPRID_BITS; - unsigned ffunct : FFUNCT_BITS; unsigned opcode : OPCODE_BITS; + unsigned ffunct : FFUNCT_BITS; + unsigned rs3 : FPRID_BITS; + unsigned rs2 : FPRID_BITS; + unsigned rs1 : FPRID_BITS; + unsigned rd : FPRID_BITS; }; union insn_t @@ -181,8 +181,8 @@ private: #define BIGIMM insn.ltype.bigimm #define SIMM insn.itype.imm12 #define BIMM ((signed)insn.btype.immlo | (insn.btype.immhi << IMMLO_BITS)) -#define SHAMT (insn.itype.imm12 & 0x3F) -#define SHAMTW (insn.itype.imm12 & 0x1F) +#define SHAMT ((insn.itype.imm12 >> (IMM_BITS-6)) & 0x3F) +#define SHAMTW ((insn.itype.imm12 >> (IMM_BITS-6)) & 0x1F) #define TARGET insn.jtype.target #define BRANCH_TARGET (npc + (BIMM << BRANCH_ALIGN_BITS)) #define JUMP_TARGET (npc + (TARGET << JUMP_ALIGN_BITS)) diff --git a/riscv/execute.h b/riscv/execute.h index 02523fe..a7f5984 100644 --- a/riscv/execute.h +++ b/riscv/execute.h @@ -1,9 +1,9 @@ /* Automatically generated by parse-opcodes */ -switch((insn.bits >> 0x19) & 0x7f) +switch((insn.bits >> 0x0) & 0x7f) { case 0x0: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { @@ -33,7 +33,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x62: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { @@ -59,7 +59,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x63: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { @@ -100,7 +100,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x68: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x2: { @@ -121,7 +121,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x69: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x2: { @@ -142,251 +142,255 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x6a: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { - if((insn.bits & 0xffff8000) == 0xd40a8000) + if((insn.bits & 0x1ffff) == 0x1506a) { #include "insns/c_eq_s.h" break; } - if((insn.bits & 0xffff8000) == 0xd4028000) + if((insn.bits & 0x1ffff) == 0x506a) { #include "insns/sgninj_s.h" break; } - if((insn.bits & 0xff8ffc00) == 0xd4050000) + if((insn.bits & 0x3ff1ff) == 0xa06a) { #include "insns/cvt_w_s.h" break; } - if((insn.bits & 0xff8ffc00) == 0xd4070000) + if((insn.bits & 0x3ff1ff) == 0xe06a) { #include "insns/cvt_s_w.h" break; } - if((insn.bits & 0xff8f8000) == 0xd4000000) + if((insn.bits & 0x1f1ff) == 0x6a) { #include "insns/add_s.h" break; } - if((insn.bits & 0xff8ffc00) == 0xd4048000) + if((insn.bits & 0x3ff1ff) == 0x906a) { #include "insns/cvtu_l_s.h" break; } - if((insn.bits & 0xffff83e0) == 0xd42c0000) + if((insn.bits & 0x7c1ffff) == 0x1846a) { #include "insns/mff_s.h" break; } - if((insn.bits & 0xfffffc00) == 0xd42e0000) + if((insn.bits & 0x3fffff) == 0x1c46a) { #include "insns/mtf_s.h" break; } - if((insn.bits & 0xffff8000) == 0xd4030000) + if((insn.bits & 0x1ffff) == 0x606a) { #include "insns/sgninjn_s.h" break; } - if((insn.bits & 0xff8ffc00) == 0xd4040000) + if((insn.bits & 0x3ff1ff) == 0x806a) { #include "insns/cvt_l_s.h" break; } - if((insn.bits & 0xff8ffc00) == 0xd4078000) + if((insn.bits & 0x3ff1ff) == 0xf06a) { #include "insns/cvtu_s_w.h" break; } - if((insn.bits & 0xff8ffc00) == 0xd4068000) + if((insn.bits & 0x3ff1ff) == 0xd06a) { #include "insns/cvtu_s_l.h" break; } - if((insn.bits & 0xff8f8000) == 0xd4008000) + if((insn.bits & 0x1f1ff) == 0x106a) { #include "insns/sub_s.h" break; } - if((insn.bits & 0xff8ffc00) == 0xd4020000) + if((insn.bits & 0x3ff1ff) == 0x406a) { #include "insns/sqrt_s.h" break; } - if((insn.bits & 0xffff8000) == 0xd40b0000) + if((insn.bits & 0x1ffff) == 0x1606a) { #include "insns/c_lt_s.h" break; } - if((insn.bits & 0xffff8000) == 0xd4038000) + if((insn.bits & 0x1ffff) == 0x706a) { #include "insns/sgnmul_s.h" break; } - if((insn.bits & 0xff8ffc00) == 0xd4060000) + if((insn.bits & 0x3ff1ff) == 0xc06a) { #include "insns/cvt_s_l.h" break; } - if((insn.bits & 0xff8f8000) == 0xd4018000) + if((insn.bits & 0x1f1ff) == 0x306a) { #include "insns/div_s.h" break; } - if((insn.bits & 0xff8ffc00) == 0xd4098000) + if((insn.bits & 0x3ff1ff) == 0x1306a) { #include "insns/cvt_s_d.h" break; } - if((insn.bits & 0xffff8000) == 0xd40b8000) + if((insn.bits & 0x1ffff) == 0x1706a) { #include "insns/c_le_s.h" break; } - if((insn.bits & 0xff8f8000) == 0xd4010000) + if((insn.bits & 0x1f1ff) == 0x206a) { #include "insns/mul_s.h" break; } - if((insn.bits & 0xff8ffc00) == 0xd4058000) + if((insn.bits & 0x3ff1ff) == 0xb06a) { #include "insns/cvtu_w_s.h" break; } #include "insns/unimp.h" } - case 0x6: + case 0x3: { - if((insn.bits & 0xff8ffc00) == 0xd5850000) + if((insn.bits & 0x3ff1ff) == 0xa1ea) { #include "insns/cvt_w_d.h" break; } - if((insn.bits & 0xffff83e0) == 0xd5ac0000) + if((insn.bits & 0x7c1ffff) == 0x185ea) { #include "insns/mff_d.h" break; } - if((insn.bits & 0xffff8000) == 0xd5828000) + if((insn.bits & 0x1ffff) == 0x51ea) { #include "insns/sgninj_d.h" break; } - if((insn.bits & 0xff8f8000) == 0xd5818000) + if((insn.bits & 0x1f1ff) == 0x31ea) { #include "insns/div_d.h" break; } - if((insn.bits & 0xffff8000) == 0xd58a8000) + if((insn.bits & 0x1ffff) == 0x151ea) { #include "insns/c_eq_d.h" break; } - if((insn.bits & 0xff8ffc00) == 0xd5868000) + if((insn.bits & 0x3ff1ff) == 0xd1ea) { #include "insns/cvtu_d_l.h" break; } - if((insn.bits & 0xfffffc00) == 0xd5878000) + if((insn.bits & 0x3fffff) == 0xf1ea) { #include "insns/cvtu_d_w.h" break; } - if((insn.bits & 0xff8ffc00) == 0xd5848000) + if((insn.bits & 0x3ff1ff) == 0x91ea) { #include "insns/cvtu_l_d.h" break; } - if((insn.bits & 0xffff83e0) == 0xd5ac8000) + if((insn.bits & 0x7c1ffff) == 0x195ea) { #include "insns/mffl_d.h" break; } - if((insn.bits & 0xffff8000) == 0xd5838000) + if((insn.bits & 0x1ffff) == 0x71ea) { #include "insns/sgnmul_d.h" break; } - if((insn.bits & 0xff8f8000) == 0xd5800000) + if((insn.bits & 0x1f1ff) == 0x1ea) { #include "insns/add_d.h" break; } - if((insn.bits & 0xffff83e0) == 0xd5ad0000) + if((insn.bits & 0x7c1ffff) == 0x1a5ea) { #include "insns/mffh_d.h" break; } - if((insn.bits & 0xffff8000) == 0xd58b8000) + if((insn.bits & 0x1ffff) == 0x171ea) { #include "insns/c_le_d.h" break; } - if((insn.bits & 0xffff8000) == 0xd5830000) + if((insn.bits & 0x1ffff) == 0x61ea) { #include "insns/sgninjn_d.h" break; } - if((insn.bits & 0xffff8000) == 0xd5be0000) - { - #include "insns/mtflh_d.h" - break; - } - if((insn.bits & 0xff8ffc00) == 0xd5840000) + if((insn.bits & 0x3ff1ff) == 0x81ea) { #include "insns/cvt_l_d.h" break; } - if((insn.bits & 0xff8f8000) == 0xd5808000) + if((insn.bits & 0x1f1ff) == 0x11ea) { #include "insns/sub_d.h" break; } - if((insn.bits & 0xfffffc00) == 0xd5ae0000) + if((insn.bits & 0x3fffff) == 0x1c5ea) { #include "insns/mtf_d.h" break; } - if((insn.bits & 0xff8ffc00) == 0xd5820000) + if((insn.bits & 0x3ff1ff) == 0x41ea) { #include "insns/sqrt_d.h" break; } - if((insn.bits & 0xfffffc00) == 0xd5880000) + if((insn.bits & 0x3fffff) == 0x101ea) { #include "insns/cvt_d_s.h" break; } - if((insn.bits & 0xfffffc00) == 0xd5870000) + if((insn.bits & 0x3fffff) == 0xe1ea) { #include "insns/cvt_d_w.h" break; } - if((insn.bits & 0xff8ffc00) == 0xd5860000) + if((insn.bits & 0x3ff1ff) == 0xc1ea) { #include "insns/cvt_d_l.h" break; } - if((insn.bits & 0xff8f8000) == 0xd5810000) + if((insn.bits & 0x1f1ff) == 0x21ea) { #include "insns/mul_d.h" break; } - if((insn.bits & 0xff8ffc00) == 0xd5858000) + if((insn.bits & 0x3ff1ff) == 0xb1ea) { #include "insns/cvtu_w_d.h" break; } - if((insn.bits & 0xffff8000) == 0xd58b0000) + if((insn.bits & 0x1ffff) == 0x161ea) { #include "insns/c_lt_d.h" break; } #include "insns/unimp.h" } + case 0x7: + { + if((insn.bits & 0x1ffff) == 0x1c7ea) + { + #include "insns/mtflh_d.h" + break; + } + #include "insns/unimp.h" + } default: { #include "insns/unimp.h" @@ -396,16 +400,16 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x6b: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { - if((insn.bits & 0xffffffe0) == 0xd6008000) + if((insn.bits & 0x7ffffff) == 0x46b) { #include "insns/di.h" break; } - if((insn.bits & 0xffffffe0) == 0xd6000000) + if((insn.bits & 0x7ffffff) == 0x6b) { #include "insns/ei.h" break; @@ -414,12 +418,12 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x1: { - if((insn.bits & 0xffff83e0) == 0xd6400000) + if((insn.bits & 0x7c1ffff) == 0xeb) { #include "insns/mfpcr.h" break; } - if((insn.bits & 0xffff801f) == 0xd6408000) + if((insn.bits & 0xf801ffff) == 0x4eb) { #include "insns/mtpcr.h" break; @@ -428,7 +432,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x2: { - if((insn.bits & 0xffffffff) == 0xd6800000) + if((insn.bits & 0xffffffff) == 0x16b) { #include "insns/eret.h" break; @@ -444,14 +448,14 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x6c: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { #include "insns/madd_s.h" break; } - case 0x6: + case 0x3: { #include "insns/madd_d.h" break; @@ -465,14 +469,14 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x6d: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { #include "insns/msub_s.h" break; } - case 0x6: + case 0x3: { #include "insns/msub_d.h" break; @@ -486,14 +490,14 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x6e: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { #include "insns/nmsub_s.h" break; } - case 0x6: + case 0x3: { #include "insns/nmsub_d.h" break; @@ -507,14 +511,14 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x6f: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { #include "insns/nmadd_s.h" break; } - case 0x6: + case 0x3: { #include "insns/nmadd_d.h" break; @@ -533,7 +537,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x74: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { @@ -567,17 +571,17 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x7: { - if((insn.bits & 0xffff0000) == 0xe9c20000) + if((insn.bits & 0xffff) == 0xbf4) { #include "insns/srli.h" break; } - if((insn.bits & 0xffff0000) == 0xe9c30000) + if((insn.bits & 0xffff) == 0xff4) { #include "insns/srai.h" break; } - if((insn.bits & 0xffff0000) == 0xe9c10000) + if((insn.bits & 0xffff) == 0x7f4) { #include "insns/slli.h" break; @@ -593,46 +597,46 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x75: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { - if((insn.bits & 0xffff8000) == 0xea000000) + if((insn.bits & 0x1ffff) == 0x75) { #include "insns/add.h" break; } - if((insn.bits & 0xffff8000) == 0xea038000) + if((insn.bits & 0x1ffff) == 0x1c75) { #include "insns/nor.h" break; } - if((insn.bits & 0xffff8000) == 0xea018000) + if((insn.bits & 0x1ffff) == 0xc75) { #include "insns/sltu.h" break; } - if((insn.bits & 0xffff8000) == 0xea030000) + if((insn.bits & 0x1ffff) == 0x1875) { #include "insns/xor.h" break; } - if((insn.bits & 0xffff8000) == 0xea008000) + if((insn.bits & 0x1ffff) == 0x475) { #include "insns/sub.h" break; } - if((insn.bits & 0xffff8000) == 0xea028000) + if((insn.bits & 0x1ffff) == 0x1475) { #include "insns/or.h" break; } - if((insn.bits & 0xffff8000) == 0xea010000) + if((insn.bits & 0x1ffff) == 0x875) { #include "insns/slt.h" break; } - if((insn.bits & 0xffff8000) == 0xea020000) + if((insn.bits & 0x1ffff) == 0x1075) { #include "insns/and.h" break; @@ -641,37 +645,37 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x1: { - if((insn.bits & 0xffff8000) == 0xea400000) + if((insn.bits & 0x1ffff) == 0xf5) { #include "insns/mul.h" break; } - if((insn.bits & 0xffff8000) == 0xea420000) + if((insn.bits & 0x1ffff) == 0x10f5) { #include "insns/div.h" break; } - if((insn.bits & 0xffff8000) == 0xea430000) + if((insn.bits & 0x1ffff) == 0x18f5) { #include "insns/rem.h" break; } - if((insn.bits & 0xffff8000) == 0xea410000) + if((insn.bits & 0x1ffff) == 0x8f5) { #include "insns/mulh.h" break; } - if((insn.bits & 0xffff8000) == 0xea438000) + if((insn.bits & 0x1ffff) == 0x1cf5) { #include "insns/remu.h" break; } - if((insn.bits & 0xffff8000) == 0xea418000) + if((insn.bits & 0x1ffff) == 0xcf5) { #include "insns/mulhu.h" break; } - if((insn.bits & 0xffff8000) == 0xea428000) + if((insn.bits & 0x1ffff) == 0x14f5) { #include "insns/divu.h" break; @@ -680,17 +684,17 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x7: { - if((insn.bits & 0xffff8000) == 0xebc30000) + if((insn.bits & 0x1ffff) == 0xff5) { #include "insns/sra.h" break; } - if((insn.bits & 0xffff8000) == 0xebc20000) + if((insn.bits & 0x1ffff) == 0xbf5) { #include "insns/srl.h" break; } - if((insn.bits & 0xffff8000) == 0xebc10000) + if((insn.bits & 0x1ffff) == 0x7f5) { #include "insns/sll.h" break; @@ -706,7 +710,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x76: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { @@ -715,17 +719,17 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x7: { - if((insn.bits & 0xffff8000) == 0xedc10000) + if((insn.bits & 0x20ffff) == 0x7f6) { #include "insns/slliw.h" break; } - if((insn.bits & 0xffff8000) == 0xedc20000) + if((insn.bits & 0x20ffff) == 0xbf6) { #include "insns/srliw.h" break; } - if((insn.bits & 0xffff8000) == 0xedc30000) + if((insn.bits & 0x20ffff) == 0xff6) { #include "insns/sraiw.h" break; @@ -741,16 +745,16 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x77: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { - if((insn.bits & 0xffff8000) == 0xee000000) + if((insn.bits & 0x1ffff) == 0x77) { #include "insns/addw.h" break; } - if((insn.bits & 0xffff8000) == 0xee008000) + if((insn.bits & 0x1ffff) == 0x477) { #include "insns/subw.h" break; @@ -759,37 +763,37 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x1: { - if((insn.bits & 0xffff8000) == 0xee438000) + if((insn.bits & 0x1ffff) == 0x1cf7) { #include "insns/remuw.h" break; } - if((insn.bits & 0xffff8000) == 0xee428000) + if((insn.bits & 0x1ffff) == 0x14f7) { #include "insns/divuw.h" break; } - if((insn.bits & 0xffff8000) == 0xee418000) + if((insn.bits & 0x1ffff) == 0xcf7) { #include "insns/mulhuw.h" break; } - if((insn.bits & 0xffff8000) == 0xee400000) + if((insn.bits & 0x1ffff) == 0xf7) { #include "insns/mulw.h" break; } - if((insn.bits & 0xffff8000) == 0xee430000) + if((insn.bits & 0x1ffff) == 0x18f7) { #include "insns/remw.h" break; } - if((insn.bits & 0xffff8000) == 0xee410000) + if((insn.bits & 0x1ffff) == 0x8f7) { #include "insns/mulhw.h" break; } - if((insn.bits & 0xffff8000) == 0xee420000) + if((insn.bits & 0x1ffff) == 0x10f7) { #include "insns/divw.h" break; @@ -798,17 +802,17 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x7: { - if((insn.bits & 0xffff8000) == 0xefc20000) + if((insn.bits & 0x1ffff) == 0xbf7) { #include "insns/srlw.h" break; } - if((insn.bits & 0xffff8000) == 0xefc30000) + if((insn.bits & 0x1ffff) == 0xff7) { #include "insns/sraw.h" break; } - if((insn.bits & 0xffff8000) == 0xefc10000) + if((insn.bits & 0x1ffff) == 0x7f7) { #include "insns/sllw.h" break; @@ -824,7 +828,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x78: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { @@ -863,7 +867,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x7: { - if((insn.bits & 0xffc0001f) == 0xf1c00000) + if((insn.bits & 0xf80003ff) == 0x3f8) { #include "insns/synci.h" break; @@ -879,7 +883,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x79: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { @@ -910,46 +914,46 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x7a: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x2: { - if((insn.bits & 0xffff8000) == 0xf4828000) + if((insn.bits & 0x1ffff) == 0x157a) { #include "insns/amow_max.h" break; } - if((insn.bits & 0xffff8000) == 0xf4810000) + if((insn.bits & 0x1ffff) == 0x97a) { #include "insns/amow_and.h" break; } - if((insn.bits & 0xffff8000) == 0xf4820000) + if((insn.bits & 0x1ffff) == 0x117a) { #include "insns/amow_min.h" break; } - if((insn.bits & 0xffff8000) == 0xf4818000) + if((insn.bits & 0x1ffff) == 0xd7a) { #include "insns/amow_or.h" break; } - if((insn.bits & 0xffff8000) == 0xf4830000) + if((insn.bits & 0x1ffff) == 0x197a) { #include "insns/amow_minu.h" break; } - if((insn.bits & 0xffff8000) == 0xf4800000) + if((insn.bits & 0x1ffff) == 0x17a) { #include "insns/amow_add.h" break; } - if((insn.bits & 0xffff8000) == 0xf4808000) + if((insn.bits & 0x1ffff) == 0x57a) { #include "insns/amow_swap.h" break; } - if((insn.bits & 0xffff8000) == 0xf4838000) + if((insn.bits & 0x1ffff) == 0x1d7a) { #include "insns/amow_maxu.h" break; @@ -958,42 +962,42 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x3: { - if((insn.bits & 0xffff8000) == 0xf4c00000) + if((insn.bits & 0x1ffff) == 0x1fa) { #include "insns/amo_add.h" break; } - if((insn.bits & 0xffff8000) == 0xf4c08000) + if((insn.bits & 0x1ffff) == 0x5fa) { #include "insns/amo_swap.h" break; } - if((insn.bits & 0xffff8000) == 0xf4c18000) + if((insn.bits & 0x1ffff) == 0xdfa) { #include "insns/amo_or.h" break; } - if((insn.bits & 0xffff8000) == 0xf4c28000) + if((insn.bits & 0x1ffff) == 0x15fa) { #include "insns/amo_max.h" break; } - if((insn.bits & 0xffff8000) == 0xf4c20000) + if((insn.bits & 0x1ffff) == 0x11fa) { #include "insns/amo_min.h" break; } - if((insn.bits & 0xffff8000) == 0xf4c30000) + if((insn.bits & 0x1ffff) == 0x19fa) { #include "insns/amo_minu.h" break; } - if((insn.bits & 0xffff8000) == 0xf4c10000) + if((insn.bits & 0x1ffff) == 0x9fa) { #include "insns/amo_and.h" break; } - if((insn.bits & 0xffff8000) == 0xf4c38000) + if((insn.bits & 0x1ffff) == 0x1dfa) { #include "insns/amo_maxu.h" break; @@ -1009,11 +1013,11 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x7b: { - switch((insn.bits >> 0x16) & 0x7) + switch((insn.bits >> 0x7) & 0x7) { case 0x0: { - if((insn.bits & 0xffffffe0) == 0xf6000000) + if((insn.bits & 0x7ffffff) == 0x7b) { #include "insns/rdnpc.h" break; @@ -1022,12 +1026,12 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x1: { - if((insn.bits & 0xffff83e0) == 0xf6400000) + if((insn.bits & 0x7c1ffff) == 0xfb) { #include "insns/mfcr.h" break; } - if((insn.bits & 0xffff801f) == 0xf6408000) + if((insn.bits & 0xf801ffff) == 0x4fb) { #include "insns/mtcr.h" break; @@ -1036,7 +1040,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x2: { - if((insn.bits & 0xffffffff) == 0xf6800000) + if((insn.bits & 0xffffffff) == 0x17b) { #include "insns/sync.h" break; @@ -1045,7 +1049,7 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x3: { - if((insn.bits & 0xffc003ff) == 0xf6c00000) + if((insn.bits & 0xffc003ff) == 0x1fb) { #include "insns/syscall.h" break;