|
4 | 4 | // Original author: Louis-Emile Ploix |
5 | 5 | // SPDX-License-Identifier: Apache-2.0 |
6 | 6 |
|
7 | | -`include "../build/ibexspec_instrs.sv" |
8 | | - |
9 | 7 | `ifndef CMP_INSNS |
10 | 8 | `define CMP_INSNS |
11 | 9 |
|
|
21 | 19 | `IS_ORI | `IS_ANDI \ |
22 | 20 | ) |
23 | 21 |
|
24 | | -`define ISS_ADDI (`IS_ADDI & `SPEC_ITYPE) |
25 | | -`define ISS_SLTI (`IS_SLTI & `SPEC_ITYPE) |
26 | | -`define ISS_SLTIU (`IS_SLTIU & `SPEC_ITYPE) |
27 | | -`define ISS_XORI (`IS_XORI & `SPEC_ITYPE) |
28 | | -`define ISS_ORI (`IS_ORI & `SPEC_ITYPE) |
29 | | -`define ISS_ANDI (`IS_ANDI & `SPEC_ITYPE) |
30 | | - |
31 | 22 | `define IS_SLLI (`IS_ITYPE(3'b001) && `INSTR[31:25] == 7'b0000000) |
32 | 23 | `define IS_SRLI (`IS_ITYPE(3'b101) && `INSTR[31:25] == 7'b0000000) |
33 | 24 | `define IS_SRAI (`IS_ITYPE(3'b101) && `INSTR[31:25] == 7'b0100000) |
34 | 25 |
|
35 | 26 | `define IS_SHIFTIOP (`IS_SLLI | `IS_SRLI | `IS_SRAI) |
36 | 27 |
|
37 | | -`define ISS_SLLI (`IS_SLLI & `SPEC_SHIFTIOP) |
38 | | -`define ISS_SRLI (`IS_SRLI & `SPEC_SHIFTIOP) |
39 | | -`define ISS_SRAI (`IS_SRAI & `SPEC_SHIFTIOP) |
40 | | - |
41 | | -`define ISS_SHIFTIOP (`ISS_SLLI | `ISS_SRLI | `ISS_SRAI) |
42 | | - |
43 | 28 | `define IS_RTYPE_0(idx) \ |
44 | 29 | (`INSTR[6:0] == 7'b0110011 && `INSTR[31:25] == 7'b0000000 && `INSTR[14:12] == idx) |
45 | 30 | `define IS_RTYPE_1(idx) \ |
|
55 | 40 | `define IS_OR `IS_RTYPE_0(3'b110) |
56 | 41 | `define IS_AND `IS_RTYPE_0(3'b111) |
57 | 42 |
|
58 | | -`define ISS_ADD (`IS_ADD & `SPEC_RTYPE) |
59 | | -`define ISS_SUB (`IS_SUB & `SPEC_RTYPE) |
60 | | -`define ISS_SLL (`IS_SLL & `SPEC_RTYPE) |
61 | | -`define ISS_SLT (`IS_SLT & `SPEC_RTYPE) |
62 | | -`define ISS_SLTU (`IS_SLTU & `SPEC_RTYPE) |
63 | | -`define ISS_XOR (`IS_XOR & `SPEC_RTYPE) |
64 | | -`define ISS_SRL (`IS_SRL & `SPEC_RTYPE) |
65 | | -`define ISS_SRA (`IS_SRA & `SPEC_RTYPE) |
66 | | -`define ISS_OR (`IS_OR & `SPEC_RTYPE) |
67 | | -`define ISS_AND (`IS_AND & `SPEC_RTYPE) |
68 | | - |
69 | 43 | `define IS_FENCETYPE(idx) ( \ |
70 | 44 | `INSTR[31:25] == 4'b0000 && `INSTR[19:15] == 5'b00000 && \ |
71 | 45 | `INSTR[11:0] == 12'b000000001111 && `INSTR[14:12] == idx) |
72 | 46 | `define IS_FENCE (`INSTR[31:28] == 4'b0 && `INSTR[19:0] == 20'b0001111) |
73 | 47 | `define IS_FENCEI (`INSTR == 32'h100f) |
74 | 48 |
|
75 | | -`define ISS_FENCE (`IS_FENCE & `SPEC_FENCE) |
76 | | -`define ISS_FENCEI (`IS_FENCEI & `SPEC_FENCEI) |
77 | | - |
78 | 49 | `define IS_LOAD(idx) (`INSTR[6:0] == 7'b0000011 && `INSTR[14:12] == idx) |
79 | 50 | `define IS_LB `IS_LOAD(3'b000) |
80 | 51 | `define IS_LH `IS_LOAD(3'b001) |
81 | 52 | `define IS_LW `IS_LOAD(3'b010) |
82 | 53 | `define IS_LBU `IS_LOAD(3'b100) |
83 | 54 | `define IS_LHU `IS_LOAD(3'b101) |
84 | 55 |
|
85 | | -`define ISS_LB (`IS_LB & `SPEC_LOAD) |
86 | | -`define ISS_LH (`IS_LH & `SPEC_LOAD) |
87 | | -`define ISS_LW (`IS_LW & `SPEC_LOAD) |
88 | | -`define ISS_LBU (`IS_LBU & `SPEC_LOAD) |
89 | | -`define ISS_LHU (`IS_LHU & `SPEC_LOAD) |
90 | | - |
91 | 56 | `define IS_STORE(idx) (`INSTR[6:0] == 7'b0100011 && `INSTR[14:12] == idx) |
92 | 57 | `define IS_SB `IS_STORE(3'b000) |
93 | 58 | `define IS_SH `IS_STORE(3'b001) |
94 | 59 | `define IS_SW `IS_STORE(3'b010) |
95 | 60 |
|
96 | | -`define ISS_SB (`IS_SB & `SPEC_STORE) |
97 | | -`define ISS_SH (`IS_SH & `SPEC_STORE) |
98 | | -`define ISS_SW (`IS_SW & `SPEC_STORE) |
99 | | - |
100 | 61 | `define IS_JAL (`INSTR[6:0] == 7'h6f) |
101 | 62 | `define IS_JALR (`INSTR[6:0] == 7'h67 && `INSTR[14:12] == 3'b0) |
102 | 63 |
|
103 | | -`define ISS_JAL (`IS_JAL & `SPEC_RISCV_JAL) |
104 | | -`define ISS_JALR (`IS_JALR & `SPEC_RISCV_JALR) |
105 | | - |
106 | 64 | `define IS_MTYPE(idx) \ |
107 | 65 | (`INSTR[6:0] == 7'b0110011 && `INSTR[31:25] == 7'b0000001 && `INSTR[14:12] == idx) |
108 | 66 | `define IS_MUL `IS_MTYPE(3'b000) |
|
114 | 72 | `define IS_REM `IS_MTYPE(3'b110) |
115 | 73 | `define IS_REMU `IS_MTYPE(3'b111) |
116 | 74 |
|
117 | | -`define ISS_MUL (`IS_MUL & `SPEC_MUL) |
118 | | -`define ISS_MULH (`IS_MULH & `SPEC_MUL) |
119 | | -`define ISS_MULHSH (`IS_MULHSH & `SPEC_MUL) |
120 | | -`define ISS_MULHU (`IS_MULHU & `SPEC_MUL) |
121 | | -`define ISS_DIV (`IS_DIV & `SPEC_DIV) |
122 | | -`define ISS_DIVU (`IS_DIVU & `SPEC_DIV) |
123 | | -`define ISS_REM (`IS_REM & `SPEC_REM) |
124 | | -`define ISS_REMU (`IS_REMU & `SPEC_REM) |
125 | | - |
126 | 75 | `define IS_CSR (`INSTR[6:0] == 7'b1110011 && (|`INSTR[13:12])) |
127 | 76 | `define CSR_ADDR (`INSTR[31:20]) |
128 | | -`define ISS_CSR (`IS_CSR & `SPEC_CSR) |
129 | | - |
130 | 77 | `define IS_ECALL (`INSTR == 32'b00000000000000000000000001110011) |
131 | | -`define ISS_ECALL (`IS_ECALL & `SPEC_ECALL) |
132 | | - |
133 | 78 | `define IS_EBREAK (`INSTR == 32'b00000000000100000000000001110011) |
134 | | -`define ISS_EBREAK (`IS_EBREAK & `SPEC_EBREAK) |
135 | | - |
136 | 79 | `define IS_LUI (`INSTR[6:0] == 7'b0110111) |
137 | | -`define ISS_LUI (`IS_LUI & `SPEC_UTYPE) |
138 | | - |
139 | 80 | `define IS_AUIPC (`INSTR[6:0] == 7'b0010111) |
140 | | -`define ISS_AUIPC (`IS_AUIPC & `SPEC_UTYPE) |
141 | | - |
142 | 81 | `define IS_BTYPE (`INSTR[6:0] == 7'b1100011 && (`INSTR[13] -> `INSTR[14])) |
143 | | -`define ISS_BTYPE (`IS_BTYPE & `SPEC_BTYPE) |
144 | | - |
145 | 82 | `define IS_MRET (`INSTR == 32'b00110000001000000000000001110011) |
146 | | -`define ISS_MRET (`IS_MRET & `SPEC_MRET) |
147 | | - |
148 | 83 | `define IS_WFI (`INSTR == 32'b00010000010100000000000001110011) |
149 | | -`define ISS_WFI (`IS_WFI & `SPEC_WFI) |
150 | 84 |
|
151 | 85 | `endif |
0 commit comments