9cd8f4dbef2c08599371c3880e0498d260e19eaf
[riscv-isa-sim.git] / riscv / riscv.mk.in
1 get_insn_list = $(shell grep ^DECLARE_INSN $(1) | sed 's/DECLARE_INSN(\(.*\),.*,.*)/\1/')
2 get_opcode = $(shell grep ^DECLARE_INSN.*\\\<$(2)\\\> $(1) | sed 's/DECLARE_INSN(.*,\(.*\),.*)/\1/')
3
4 riscv_subproject_deps = \
5 softfloat \
6
7 riscv_install_prog_srcs = \
8
9 riscv_hdrs = \
10 common.h \
11 decode.h \
12 devices.h \
13 disasm.h \
14 mmu.h \
15 processor.h \
16 sim.h \
17 trap.h \
18 encoding.h \
19 cachesim.h \
20 memtracer.h \
21 tracer.h \
22 extension.h \
23 rocc.h \
24 insn_template.h \
25 mulhi.h \
26 debug_module.h \
27 remote_bitbang.h \
28 jtag_dtm.h \
29
30 riscv_precompiled_hdrs = \
31 insn_template.h \
32
33 riscv_srcs = \
34 processor.cc \
35 execute.cc \
36 sim.cc \
37 interactive.cc \
38 trap.cc \
39 cachesim.cc \
40 mmu.cc \
41 disasm.cc \
42 extension.cc \
43 extensions.cc \
44 rocc.cc \
45 regnames.cc \
46 devices.cc \
47 rom.cc \
48 rtc.cc \
49 clint.cc \
50 gdbserver.cc \
51 debug_module.cc \
52 remote_bitbang.cc \
53 jtag_dtm.cc \
54 $(riscv_gen_srcs) \
55
56 riscv_test_srcs =
57
58 riscv_gen_hdrs = \
59 icache.h \
60 insn_list.h \
61
62 riscv_insn_list = \
63 add \
64 addi \
65 addiw \
66 addw \
67 amoadd_d \
68 amoadd_w \
69 amoand_d \
70 amoand_w \
71 amomax_d \
72 amomaxu_d \
73 amomaxu_w \
74 amomax_w \
75 amomin_d \
76 amominu_d \
77 amominu_w \
78 amomin_w \
79 amoor_d \
80 amoor_w \
81 amoswap_d \
82 amoswap_w \
83 amoxor_d \
84 amoxor_w \
85 and \
86 andi \
87 auipc \
88 beq \
89 bge \
90 bgeu \
91 blt \
92 bltu \
93 bne \
94 c_add \
95 c_addi4spn \
96 c_addi \
97 c_addw \
98 c_and \
99 c_andi \
100 c_beqz \
101 c_bnez \
102 c_ebreak \
103 c_fld \
104 c_fldsp \
105 c_flw \
106 c_flwsp \
107 c_fsd \
108 c_fsdsp \
109 c_fsw \
110 c_fswsp \
111 c_jal \
112 c_jalr \
113 c_j \
114 c_jr \
115 c_li \
116 c_lui \
117 c_lw \
118 c_lwsp \
119 c_mv \
120 c_or \
121 c_slli \
122 c_srai \
123 c_srli \
124 c_sub \
125 c_subw \
126 c_xor \
127 csrrc \
128 csrrci \
129 csrrs \
130 csrrsi \
131 csrrw \
132 csrrwi \
133 c_sw \
134 c_swsp \
135 div \
136 divu \
137 divuw \
138 divw \
139 dret \
140 ebreak \
141 ecall \
142 fadd_d \
143 fadd_s \
144 fclass_d \
145 fclass_s \
146 fcvt_d_l \
147 fcvt_d_lu \
148 fcvt_d_s \
149 fcvt_d_w \
150 fcvt_d_wu \
151 fcvt_l_d \
152 fcvt_l_s \
153 fcvt_lu_d \
154 fcvt_lu_s \
155 fcvt_s_d \
156 fcvt_s_l \
157 fcvt_s_lu \
158 fcvt_s_w \
159 fcvt_s_wu \
160 fcvt_w_d \
161 fcvt_w_s \
162 fcvt_wu_d \
163 fcvt_wu_s \
164 fdiv_d \
165 fdiv_s \
166 fence \
167 fence_i \
168 feq_d \
169 feq_s \
170 fld \
171 fle_d \
172 fle_s \
173 flt_d \
174 flt_s \
175 flw \
176 fmadd_d \
177 fmadd_s \
178 fmax_d \
179 fmax_s \
180 fmin_d \
181 fmin_s \
182 fmsub_d \
183 fmsub_s \
184 fmul_d \
185 fmul_s \
186 fmv_d_x \
187 fmv_s_x \
188 fmv_x_d \
189 fmv_x_s \
190 fnmadd_d \
191 fnmadd_s \
192 fnmsub_d \
193 fnmsub_s \
194 fsd \
195 fsgnj_d \
196 fsgnjn_d \
197 fsgnjn_s \
198 fsgnj_s \
199 fsgnjx_d \
200 fsgnjx_s \
201 fsqrt_d \
202 fsqrt_s \
203 fsub_d \
204 fsub_s \
205 fsw \
206 jal \
207 jalr \
208 lb \
209 lbu \
210 ld \
211 lh \
212 lhu \
213 lr_d \
214 lr_w \
215 lui \
216 lw \
217 lwu \
218 mret \
219 mul \
220 mulh \
221 mulhsu \
222 mulhu \
223 mulw \
224 or \
225 ori \
226 rem \
227 remu \
228 remuw \
229 remw \
230 sb \
231 sc_d \
232 sc_w \
233 sd \
234 sfence_vma \
235 sh \
236 sll \
237 slli \
238 slliw \
239 sllw \
240 slt \
241 slti \
242 sltiu \
243 sltu \
244 sra \
245 srai \
246 sraiw \
247 sraw \
248 sret \
249 srl \
250 srli \
251 srliw \
252 srlw \
253 sub \
254 subw \
255 sw \
256 wfi \
257 xor \
258 xori \
259
260 riscv_gen_srcs = \
261 $(addsuffix .cc,$(riscv_insn_list))
262
263 icache_entries := `grep "ICACHE_ENTRIES =" $(src_dir)/riscv/mmu.h | sed 's/.* = \(.*\);/\1/'`
264
265 icache.h: mmu.h
266 $(src_dir)/riscv/gen_icache $(icache_entries) > $@.tmp
267 mv $@.tmp $@
268
269 insn_list.h: $(src_dir)/riscv/riscv.mk.in
270 for insn in $(foreach insn,$(riscv_insn_list),$(subst .,_,$(insn))) ; do \
271 printf 'DEFINE_INSN(%s)\n' "$${insn}" ; \
272 done > $@.tmp
273 mv $@.tmp $@
274
275 $(riscv_gen_srcs): %.cc: insns/%.h insn_template.cc
276 sed 's/NAME/$(subst .cc,,$@)/' $(src_dir)/riscv/insn_template.cc | sed 's/OPCODE/$(call get_opcode,$(src_dir)/riscv/encoding.h,$(subst .cc,,$@))/' > $@
277
278 riscv_junk = \
279 $(riscv_gen_srcs) \