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