ETISS 0.11.2
ExtendableTranslatingInstructionSetSimulator(version0.11.2)
Loading...
Searching...
No Matches
RV64IMACFD_RV64IInstr.cpp
Go to the documentation of this file.
1// clang-format off
9#include "RV64IMACFDArch.h"
10#include "RV64IMACFDFuncs.h"
11
12using namespace etiss;
13using namespace etiss::instr;
14
15// LWU -------------------------------------------------------------------------
18 "lwu",
19 (uint64_t) 0x006003,
20 (uint64_t) 0x00707f,
22 {
23
24// -----------------------------------------------------------------------------
25
26// -----------------------------------------------------------------------------
27
28// -----------------------------------------------------------------------------
29// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
30etiss_uint8 rd = 0;
31static BitArrayRange R_rd_0(11, 7);
32rd += R_rd_0.read(ba) << 0;
33etiss_uint8 rs1 = 0;
34static BitArrayRange R_rs1_0(19, 15);
35rs1 += R_rs1_0.read(ba) << 0;
36etiss_uint16 imm = 0;
37static BitArrayRange R_imm_0(31, 20);
38imm += R_imm_0.read(ba) << 0;
39
40// NOLINTEND(clang-diagnostic-unused-but-set-variable)
41// -----------------------------------------------------------------------------
42
43 {
45
46 cp.code() = std::string("//LWU\n");
47
48// -----------------------------------------------------------------------------
49cp.code() += "etiss_coverage_count(1, 184);\n";
50{ // block
51cp.code() += "etiss_coverage_count(1, 1189);\n";
52cp.code() += "{ // block\n";
53cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint64)((ic.current_address_ + 4))) + "ULL;\n";
54cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
55cp.code() += "} // block\n";
56} // block
57{ // block
58cp.code() += "etiss_coverage_count(1, 7507);\n";
59cp.code() += "{ // block\n";
60cp.code() += "etiss_uint64 offs = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] + " + std::to_string(((etiss_int16)(((etiss_int16)imm) << (4)) >> (4))) + "LL;\n";
61cp.code() += "etiss_coverage_count(7, 7480, 7479, 7475, 7474, 7472, 7478, 7476);\n";
62cp.code() += "etiss_uint32 mem_val_0;\n";
63cp.code() += "cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";
64cp.code() += "if (cpu->exception) { // conditional\n";
65{ // procedure
66cp.code() += "{ // procedure\n";
67cp.code() += "RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
68cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
69cp.code() += "} // procedure\n";
70} // procedure
71cp.code() += "} // conditional\n";
72cp.code() += "etiss_uint32 res = (etiss_uint32)(mem_val_0);\n";
73cp.code() += "etiss_coverage_count(6, 7490, 7489, 7487, 7485, 7483, 7484);\n";
74cp.code() += "etiss_coverage_count(1, 7491);\n";
75if ((rd % 32ULL) != 0LL) { // conditional
76cp.code() += "etiss_coverage_count(5, 7497, 7494, 7492, 7495, 7496);\n";
77cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_uint64)(res);\n";
78cp.code() += "etiss_coverage_count(6, 7506, 7502, 7501, 7499, 7505, 7503);\n";
79} // conditional
80cp.code() += "} // block\n";
81} // block
82cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
83cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
84// -----------------------------------------------------------------------------
85 cp.getAffectedRegisters().add("instructionPointer", 32);
86 }
87 {
89
90 cp.code() = std::string("//LWU\n");
91
92// -----------------------------------------------------------------------------
93cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
94// -----------------------------------------------------------------------------
95 }
96
97 return true;
98 },
99 0,
100 [] (BitArray & ba, Instruction & instr)
101 {
102// -----------------------------------------------------------------------------
103etiss_uint8 rd = 0;
104static BitArrayRange R_rd_0(11, 7);
105rd += R_rd_0.read(ba) << 0;
106etiss_uint8 rs1 = 0;
107static BitArrayRange R_rs1_0(19, 15);
108rs1 += R_rs1_0.read(ba) << 0;
109etiss_uint16 imm = 0;
110static BitArrayRange R_imm_0(31, 20);
111imm += R_imm_0.read(ba) << 0;
112
113// -----------------------------------------------------------------------------
114
115 std::stringstream ss;
116// -----------------------------------------------------------------------------
117ss << "lwu" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | imm=" + std::to_string(imm) + "]");
118// -----------------------------------------------------------------------------
119 return ss.str();
120 }
121);
122
123// LD --------------------------------------------------------------------------
126 "ld",
127 (uint64_t) 0x003003,
128 (uint64_t) 0x00707f,
129 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
130 {
131
132// -----------------------------------------------------------------------------
133
134// -----------------------------------------------------------------------------
135
136// -----------------------------------------------------------------------------
137// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
138etiss_uint8 rd = 0;
139static BitArrayRange R_rd_0(11, 7);
140rd += R_rd_0.read(ba) << 0;
141etiss_uint8 rs1 = 0;
142static BitArrayRange R_rs1_0(19, 15);
143rs1 += R_rs1_0.read(ba) << 0;
144etiss_uint16 imm = 0;
145static BitArrayRange R_imm_0(31, 20);
146imm += R_imm_0.read(ba) << 0;
147
148// NOLINTEND(clang-diagnostic-unused-but-set-variable)
149// -----------------------------------------------------------------------------
150
151 {
153
154 cp.code() = std::string("//LD\n");
155
156// -----------------------------------------------------------------------------
157cp.code() += "etiss_coverage_count(1, 185);\n";
158{ // block
159cp.code() += "etiss_coverage_count(1, 1189);\n";
160cp.code() += "{ // block\n";
161cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint64)((ic.current_address_ + 4))) + "ULL;\n";
162cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
163cp.code() += "} // block\n";
164} // block
165{ // block
166cp.code() += "etiss_coverage_count(1, 7544);\n";
167cp.code() += "{ // block\n";
168cp.code() += "etiss_uint64 offs = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] + " + std::to_string(((etiss_int16)(((etiss_int16)imm) << (4)) >> (4))) + "LL;\n";
169cp.code() += "etiss_coverage_count(7, 7517, 7516, 7513, 7512, 7510, 7515, 7514);\n";
170cp.code() += "etiss_uint64 mem_val_0;\n";
171cp.code() += "cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\n";
172cp.code() += "if (cpu->exception) { // conditional\n";
173{ // procedure
174cp.code() += "{ // procedure\n";
175cp.code() += "RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
176cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
177cp.code() += "} // procedure\n";
178} // procedure
179cp.code() += "} // conditional\n";
180cp.code() += "etiss_int64 res = (etiss_int64)(mem_val_0);\n";
181cp.code() += "etiss_coverage_count(6, 7527, 7526, 7524, 7522, 7520, 7521);\n";
182cp.code() += "etiss_coverage_count(1, 7528);\n";
183if ((rd % 32ULL) != 0LL) { // conditional
184cp.code() += "etiss_coverage_count(5, 7534, 7531, 7529, 7532, 7533);\n";
185cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_uint64)(res);\n";
186cp.code() += "etiss_coverage_count(6, 7543, 7539, 7538, 7536, 7542, 7540);\n";
187} // conditional
188cp.code() += "} // block\n";
189} // block
190cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
191cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
192// -----------------------------------------------------------------------------
193 cp.getAffectedRegisters().add("instructionPointer", 32);
194 }
195 {
197
198 cp.code() = std::string("//LD\n");
199
200// -----------------------------------------------------------------------------
201cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
202// -----------------------------------------------------------------------------
203 }
204
205 return true;
206 },
207 0,
208 [] (BitArray & ba, Instruction & instr)
209 {
210// -----------------------------------------------------------------------------
211etiss_uint8 rd = 0;
212static BitArrayRange R_rd_0(11, 7);
213rd += R_rd_0.read(ba) << 0;
214etiss_uint8 rs1 = 0;
215static BitArrayRange R_rs1_0(19, 15);
216rs1 += R_rs1_0.read(ba) << 0;
217etiss_uint16 imm = 0;
218static BitArrayRange R_imm_0(31, 20);
219imm += R_imm_0.read(ba) << 0;
220
221// -----------------------------------------------------------------------------
222
223 std::stringstream ss;
224// -----------------------------------------------------------------------------
225ss << "ld" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | imm=" + std::to_string(imm) + "]");
226// -----------------------------------------------------------------------------
227 return ss.str();
228 }
229);
230
231// SD --------------------------------------------------------------------------
234 "sd",
235 (uint64_t) 0x003023,
236 (uint64_t) 0x00707f,
237 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
238 {
239
240// -----------------------------------------------------------------------------
241
242// -----------------------------------------------------------------------------
243
244// -----------------------------------------------------------------------------
245// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
246etiss_uint16 imm = 0;
247static BitArrayRange R_imm_0(11, 7);
248imm += R_imm_0.read(ba) << 0;
249etiss_uint8 rs1 = 0;
250static BitArrayRange R_rs1_0(19, 15);
251rs1 += R_rs1_0.read(ba) << 0;
252etiss_uint8 rs2 = 0;
253static BitArrayRange R_rs2_0(24, 20);
254rs2 += R_rs2_0.read(ba) << 0;
255static BitArrayRange R_imm_5(31, 25);
256imm += R_imm_5.read(ba) << 5;
257
258// NOLINTEND(clang-diagnostic-unused-but-set-variable)
259// -----------------------------------------------------------------------------
260
261 {
263
264 cp.code() = std::string("//SD\n");
265
266// -----------------------------------------------------------------------------
267cp.code() += "etiss_coverage_count(1, 186);\n";
268{ // block
269cp.code() += "etiss_coverage_count(1, 1189);\n";
270cp.code() += "{ // block\n";
271cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint64)((ic.current_address_ + 4))) + "ULL;\n";
272cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
273cp.code() += "} // block\n";
274} // block
275{ // block
276cp.code() += "etiss_coverage_count(1, 7569);\n";
277cp.code() += "{ // block\n";
278cp.code() += "etiss_uint64 offs = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] + " + std::to_string(((etiss_int16)(((etiss_int16)imm) << (4)) >> (4))) + "LL;\n";
279cp.code() += "etiss_coverage_count(7, 7554, 7553, 7550, 7549, 7547, 7552, 7551);\n";
280cp.code() += "etiss_uint64 mem_val_0;\n";
281cp.code() += "mem_val_0 = (etiss_uint64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) + "ULL]);\n";
282cp.code() += "etiss_coverage_count(9, 7568, 7560, 7558, 7556, 7557, 7567, 7565, 7564, 7562);\n";
283cp.code() += "cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\n";
284cp.code() += "if (cpu->exception) { // conditional\n";
285{ // procedure
286cp.code() += "{ // procedure\n";
287cp.code() += "RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
288cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
289cp.code() += "} // procedure\n";
290} // procedure
291cp.code() += "} // conditional\n";
292cp.code() += "} // block\n";
293} // block
294cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
295cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
296// -----------------------------------------------------------------------------
297 cp.getAffectedRegisters().add("instructionPointer", 32);
298 }
299 {
301
302 cp.code() = std::string("//SD\n");
303
304// -----------------------------------------------------------------------------
305cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
306// -----------------------------------------------------------------------------
307 }
308
309 return true;
310 },
311 0,
312 [] (BitArray & ba, Instruction & instr)
313 {
314// -----------------------------------------------------------------------------
315etiss_uint16 imm = 0;
316static BitArrayRange R_imm_0(11, 7);
317imm += R_imm_0.read(ba) << 0;
318etiss_uint8 rs1 = 0;
319static BitArrayRange R_rs1_0(19, 15);
320rs1 += R_rs1_0.read(ba) << 0;
321etiss_uint8 rs2 = 0;
322static BitArrayRange R_rs2_0(24, 20);
323rs2 += R_rs2_0.read(ba) << 0;
324static BitArrayRange R_imm_5(31, 25);
325imm += R_imm_5.read(ba) << 5;
326
327// -----------------------------------------------------------------------------
328
329 std::stringstream ss;
330// -----------------------------------------------------------------------------
331ss << "sd" << " # " << ba << (" [imm=" + std::to_string(imm) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
332// -----------------------------------------------------------------------------
333 return ss.str();
334 }
335);
336
337// SLLI ------------------------------------------------------------------------
340 "slli",
341 (uint64_t) 0x001013,
342 (uint64_t) 0xfc00707f,
343 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
344 {
345
346// -----------------------------------------------------------------------------
347
348// -----------------------------------------------------------------------------
349
350// -----------------------------------------------------------------------------
351// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
352etiss_uint8 rd = 0;
353static BitArrayRange R_rd_0(11, 7);
354rd += R_rd_0.read(ba) << 0;
355etiss_uint8 rs1 = 0;
356static BitArrayRange R_rs1_0(19, 15);
357rs1 += R_rs1_0.read(ba) << 0;
358etiss_uint8 shamt = 0;
359static BitArrayRange R_shamt_0(25, 20);
360shamt += R_shamt_0.read(ba) << 0;
361
362// NOLINTEND(clang-diagnostic-unused-but-set-variable)
363// -----------------------------------------------------------------------------
364
365 {
367
368 cp.code() = std::string("//SLLI\n");
369
370// -----------------------------------------------------------------------------
371cp.code() += "etiss_coverage_count(1, 187);\n";
372{ // block
373cp.code() += "etiss_coverage_count(1, 1189);\n";
374cp.code() += "{ // block\n";
375cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint64)((ic.current_address_ + 4))) + "ULL;\n";
376cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
377cp.code() += "} // block\n";
378} // block
379cp.code() += "etiss_coverage_count(1, 7570);\n";
380if ((rd % 32ULL) != 0LL) { // conditional
381cp.code() += "etiss_coverage_count(5, 7576, 7573, 7571, 7574, 7575);\n";
382cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] << " + std::to_string(shamt) + "ULL;\n";
383cp.code() += "etiss_coverage_count(9, 7589, 7581, 7580, 7578, 7588, 7586, 7585, 7583, 7587);\n";
384} // conditional
385cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
386cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
387// -----------------------------------------------------------------------------
388 cp.getAffectedRegisters().add("instructionPointer", 32);
389 }
390
391 return true;
392 },
393 0,
394 [] (BitArray & ba, Instruction & instr)
395 {
396// -----------------------------------------------------------------------------
397etiss_uint8 rd = 0;
398static BitArrayRange R_rd_0(11, 7);
399rd += R_rd_0.read(ba) << 0;
400etiss_uint8 rs1 = 0;
401static BitArrayRange R_rs1_0(19, 15);
402rs1 += R_rs1_0.read(ba) << 0;
403etiss_uint8 shamt = 0;
404static BitArrayRange R_shamt_0(25, 20);
405shamt += R_shamt_0.read(ba) << 0;
406
407// -----------------------------------------------------------------------------
408
409 std::stringstream ss;
410// -----------------------------------------------------------------------------
411ss << "slli" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | shamt=" + std::to_string(shamt) + "]");
412// -----------------------------------------------------------------------------
413 return ss.str();
414 }
415);
416
417// SRLI ------------------------------------------------------------------------
420 "srli",
421 (uint64_t) 0x005013,
422 (uint64_t) 0xfc00707f,
423 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
424 {
425
426// -----------------------------------------------------------------------------
427
428// -----------------------------------------------------------------------------
429
430// -----------------------------------------------------------------------------
431// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
432etiss_uint8 rd = 0;
433static BitArrayRange R_rd_0(11, 7);
434rd += R_rd_0.read(ba) << 0;
435etiss_uint8 rs1 = 0;
436static BitArrayRange R_rs1_0(19, 15);
437rs1 += R_rs1_0.read(ba) << 0;
438etiss_uint8 shamt = 0;
439static BitArrayRange R_shamt_0(25, 20);
440shamt += R_shamt_0.read(ba) << 0;
441
442// NOLINTEND(clang-diagnostic-unused-but-set-variable)
443// -----------------------------------------------------------------------------
444
445 {
447
448 cp.code() = std::string("//SRLI\n");
449
450// -----------------------------------------------------------------------------
451cp.code() += "etiss_coverage_count(1, 188);\n";
452{ // block
453cp.code() += "etiss_coverage_count(1, 1189);\n";
454cp.code() += "{ // block\n";
455cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint64)((ic.current_address_ + 4))) + "ULL;\n";
456cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
457cp.code() += "} // block\n";
458} // block
459cp.code() += "etiss_coverage_count(1, 7590);\n";
460if ((rd % 32ULL) != 0LL) { // conditional
461cp.code() += "etiss_coverage_count(5, 7596, 7593, 7591, 7594, 7595);\n";
462cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] >> " + std::to_string(shamt) + "ULL;\n";
463cp.code() += "etiss_coverage_count(9, 7609, 7601, 7600, 7598, 7608, 7606, 7605, 7603, 7607);\n";
464} // conditional
465cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
466cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
467// -----------------------------------------------------------------------------
468 cp.getAffectedRegisters().add("instructionPointer", 32);
469 }
470
471 return true;
472 },
473 0,
474 [] (BitArray & ba, Instruction & instr)
475 {
476// -----------------------------------------------------------------------------
477etiss_uint8 rd = 0;
478static BitArrayRange R_rd_0(11, 7);
479rd += R_rd_0.read(ba) << 0;
480etiss_uint8 rs1 = 0;
481static BitArrayRange R_rs1_0(19, 15);
482rs1 += R_rs1_0.read(ba) << 0;
483etiss_uint8 shamt = 0;
484static BitArrayRange R_shamt_0(25, 20);
485shamt += R_shamt_0.read(ba) << 0;
486
487// -----------------------------------------------------------------------------
488
489 std::stringstream ss;
490// -----------------------------------------------------------------------------
491ss << "srli" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | shamt=" + std::to_string(shamt) + "]");
492// -----------------------------------------------------------------------------
493 return ss.str();
494 }
495);
496
497// SRAI ------------------------------------------------------------------------
500 "srai",
501 (uint64_t) 0x40005013,
502 (uint64_t) 0xfc00707f,
503 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
504 {
505
506// -----------------------------------------------------------------------------
507
508// -----------------------------------------------------------------------------
509
510// -----------------------------------------------------------------------------
511// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
512etiss_uint8 rd = 0;
513static BitArrayRange R_rd_0(11, 7);
514rd += R_rd_0.read(ba) << 0;
515etiss_uint8 rs1 = 0;
516static BitArrayRange R_rs1_0(19, 15);
517rs1 += R_rs1_0.read(ba) << 0;
518etiss_uint8 shamt = 0;
519static BitArrayRange R_shamt_0(25, 20);
520shamt += R_shamt_0.read(ba) << 0;
521
522// NOLINTEND(clang-diagnostic-unused-but-set-variable)
523// -----------------------------------------------------------------------------
524
525 {
527
528 cp.code() = std::string("//SRAI\n");
529
530// -----------------------------------------------------------------------------
531cp.code() += "etiss_coverage_count(1, 189);\n";
532{ // block
533cp.code() += "etiss_coverage_count(1, 1189);\n";
534cp.code() += "{ // block\n";
535cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint64)((ic.current_address_ + 4))) + "ULL;\n";
536cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
537cp.code() += "} // block\n";
538} // block
539cp.code() += "etiss_coverage_count(1, 7610);\n";
540if ((rd % 32ULL) != 0LL) { // conditional
541cp.code() += "etiss_coverage_count(5, 7616, 7613, 7611, 7614, 7615);\n";
542cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = ((etiss_int64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL])) >> " + std::to_string(shamt) + "ULL;\n";
543cp.code() += "etiss_coverage_count(11, 7631, 7621, 7620, 7618, 7630, 7627, 7626, 7625, 7623, 7628, 7629);\n";
544} // conditional
545cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
546cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
547// -----------------------------------------------------------------------------
548 cp.getAffectedRegisters().add("instructionPointer", 32);
549 }
550
551 return true;
552 },
553 0,
554 [] (BitArray & ba, Instruction & instr)
555 {
556// -----------------------------------------------------------------------------
557etiss_uint8 rd = 0;
558static BitArrayRange R_rd_0(11, 7);
559rd += R_rd_0.read(ba) << 0;
560etiss_uint8 rs1 = 0;
561static BitArrayRange R_rs1_0(19, 15);
562rs1 += R_rs1_0.read(ba) << 0;
563etiss_uint8 shamt = 0;
564static BitArrayRange R_shamt_0(25, 20);
565shamt += R_shamt_0.read(ba) << 0;
566
567// -----------------------------------------------------------------------------
568
569 std::stringstream ss;
570// -----------------------------------------------------------------------------
571ss << "srai" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | shamt=" + std::to_string(shamt) + "]");
572// -----------------------------------------------------------------------------
573 return ss.str();
574 }
575);
576
577// ADDIW -----------------------------------------------------------------------
580 "addiw",
581 (uint64_t) 0x00001b,
582 (uint64_t) 0x00707f,
583 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
584 {
585
586// -----------------------------------------------------------------------------
587
588// -----------------------------------------------------------------------------
589
590// -----------------------------------------------------------------------------
591// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
592etiss_uint8 rd = 0;
593static BitArrayRange R_rd_0(11, 7);
594rd += R_rd_0.read(ba) << 0;
595etiss_uint8 rs1 = 0;
596static BitArrayRange R_rs1_0(19, 15);
597rs1 += R_rs1_0.read(ba) << 0;
598etiss_uint16 imm = 0;
599static BitArrayRange R_imm_0(31, 20);
600imm += R_imm_0.read(ba) << 0;
601
602// NOLINTEND(clang-diagnostic-unused-but-set-variable)
603// -----------------------------------------------------------------------------
604
605 {
607
608 cp.code() = std::string("//ADDIW\n");
609
610// -----------------------------------------------------------------------------
611cp.code() += "etiss_coverage_count(1, 190);\n";
612{ // block
613cp.code() += "etiss_coverage_count(1, 1189);\n";
614cp.code() += "{ // block\n";
615cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint64)((ic.current_address_ + 4))) + "ULL;\n";
616cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
617cp.code() += "} // block\n";
618} // block
619{ // block
620cp.code() += "etiss_coverage_count(1, 7659);\n";
621cp.code() += "{ // block\n";
622cp.code() += "etiss_coverage_count(1, 7632);\n";
623if ((rd % 32ULL) != 0LL) { // conditional
624cp.code() += "etiss_coverage_count(5, 7638, 7635, 7633, 7636, 7637);\n";
625{ // block
626cp.code() += "etiss_coverage_count(1, 7658);\n";
627cp.code() += "{ // block\n";
628cp.code() += "etiss_int32 res = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] + " + std::to_string(((etiss_int16)(((etiss_int16)imm) << (4)) >> (4))) + "LL;\n";
629cp.code() += "etiss_coverage_count(7, 7648, 7647, 7644, 7643, 7641, 7646, 7645);\n";
630cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_int64)(res);\n";
631cp.code() += "etiss_coverage_count(6, 7657, 7653, 7652, 7650, 7656, 7654);\n";
632cp.code() += "} // block\n";
633} // block
634} // conditional
635cp.code() += "} // block\n";
636} // block
637cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
638cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
639// -----------------------------------------------------------------------------
640 cp.getAffectedRegisters().add("instructionPointer", 32);
641 }
642
643 return true;
644 },
645 0,
646 [] (BitArray & ba, Instruction & instr)
647 {
648// -----------------------------------------------------------------------------
649etiss_uint8 rd = 0;
650static BitArrayRange R_rd_0(11, 7);
651rd += R_rd_0.read(ba) << 0;
652etiss_uint8 rs1 = 0;
653static BitArrayRange R_rs1_0(19, 15);
654rs1 += R_rs1_0.read(ba) << 0;
655etiss_uint16 imm = 0;
656static BitArrayRange R_imm_0(31, 20);
657imm += R_imm_0.read(ba) << 0;
658
659// -----------------------------------------------------------------------------
660
661 std::stringstream ss;
662// -----------------------------------------------------------------------------
663ss << "addiw" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | imm=" + std::to_string(imm) + "]");
664// -----------------------------------------------------------------------------
665 return ss.str();
666 }
667);
668
669// SLLIW -----------------------------------------------------------------------
672 "slliw",
673 (uint64_t) 0x00101b,
674 (uint64_t) 0xfe00707f,
675 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
676 {
677
678// -----------------------------------------------------------------------------
679
680// -----------------------------------------------------------------------------
681
682// -----------------------------------------------------------------------------
683// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
684etiss_uint8 rd = 0;
685static BitArrayRange R_rd_0(11, 7);
686rd += R_rd_0.read(ba) << 0;
687etiss_uint8 rs1 = 0;
688static BitArrayRange R_rs1_0(19, 15);
689rs1 += R_rs1_0.read(ba) << 0;
690etiss_uint8 shamt = 0;
691static BitArrayRange R_shamt_0(24, 20);
692shamt += R_shamt_0.read(ba) << 0;
693
694// NOLINTEND(clang-diagnostic-unused-but-set-variable)
695// -----------------------------------------------------------------------------
696
697 {
699
700 cp.code() = std::string("//SLLIW\n");
701
702// -----------------------------------------------------------------------------
703cp.code() += "etiss_coverage_count(1, 191);\n";
704{ // block
705cp.code() += "etiss_coverage_count(1, 1189);\n";
706cp.code() += "{ // block\n";
707cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint64)((ic.current_address_ + 4))) + "ULL;\n";
708cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
709cp.code() += "} // block\n";
710} // block
711{ // block
712cp.code() += "etiss_coverage_count(1, 7690);\n";
713cp.code() += "{ // block\n";
714cp.code() += "etiss_coverage_count(1, 7660);\n";
715if ((rd % 32ULL) != 0LL) { // conditional
716cp.code() += "etiss_coverage_count(5, 7666, 7663, 7661, 7664, 7665);\n";
717{ // block
718cp.code() += "etiss_coverage_count(1, 7689);\n";
719cp.code() += "{ // block\n";
720cp.code() += "etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL])) << " + std::to_string(shamt) + "ULL;\n";
721cp.code() += "etiss_coverage_count(8, 7678, 7677, 7674, 7672, 7671, 7669, 7675, 7676);\n";
722cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";
723cp.code() += "etiss_coverage_count(7, 7688, 7683, 7682, 7680, 7687, 7685, 7684);\n";
724cp.code() += "} // block\n";
725} // block
726} // conditional
727cp.code() += "} // block\n";
728} // block
729cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
730cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
731// -----------------------------------------------------------------------------
732 cp.getAffectedRegisters().add("instructionPointer", 32);
733 }
734
735 return true;
736 },
737 0,
738 [] (BitArray & ba, Instruction & instr)
739 {
740// -----------------------------------------------------------------------------
741etiss_uint8 rd = 0;
742static BitArrayRange R_rd_0(11, 7);
743rd += R_rd_0.read(ba) << 0;
744etiss_uint8 rs1 = 0;
745static BitArrayRange R_rs1_0(19, 15);
746rs1 += R_rs1_0.read(ba) << 0;
747etiss_uint8 shamt = 0;
748static BitArrayRange R_shamt_0(24, 20);
749shamt += R_shamt_0.read(ba) << 0;
750
751// -----------------------------------------------------------------------------
752
753 std::stringstream ss;
754// -----------------------------------------------------------------------------
755ss << "slliw" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | shamt=" + std::to_string(shamt) + "]");
756// -----------------------------------------------------------------------------
757 return ss.str();
758 }
759);
760
761// SRLIW -----------------------------------------------------------------------
764 "srliw",
765 (uint64_t) 0x00501b,
766 (uint64_t) 0xfe00707f,
767 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
768 {
769
770// -----------------------------------------------------------------------------
771
772// -----------------------------------------------------------------------------
773
774// -----------------------------------------------------------------------------
775// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
776etiss_uint8 rd = 0;
777static BitArrayRange R_rd_0(11, 7);
778rd += R_rd_0.read(ba) << 0;
779etiss_uint8 rs1 = 0;
780static BitArrayRange R_rs1_0(19, 15);
781rs1 += R_rs1_0.read(ba) << 0;
782etiss_uint8 shamt = 0;
783static BitArrayRange R_shamt_0(24, 20);
784shamt += R_shamt_0.read(ba) << 0;
785
786// NOLINTEND(clang-diagnostic-unused-but-set-variable)
787// -----------------------------------------------------------------------------
788
789 {
791
792 cp.code() = std::string("//SRLIW\n");
793
794// -----------------------------------------------------------------------------
795cp.code() += "etiss_coverage_count(1, 192);\n";
796{ // block
797cp.code() += "etiss_coverage_count(1, 1189);\n";
798cp.code() += "{ // block\n";
799cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint64)((ic.current_address_ + 4))) + "ULL;\n";
800cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
801cp.code() += "} // block\n";
802} // block
803{ // block
804cp.code() += "etiss_coverage_count(1, 7721);\n";
805cp.code() += "{ // block\n";
806cp.code() += "etiss_coverage_count(1, 7691);\n";
807if ((rd % 32ULL) != 0LL) { // conditional
808cp.code() += "etiss_coverage_count(5, 7697, 7694, 7692, 7695, 7696);\n";
809{ // block
810cp.code() += "etiss_coverage_count(1, 7720);\n";
811cp.code() += "{ // block\n";
812cp.code() += "etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL])) >> " + std::to_string(shamt) + "ULL;\n";
813cp.code() += "etiss_coverage_count(8, 7709, 7708, 7705, 7703, 7702, 7700, 7706, 7707);\n";
814cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";
815cp.code() += "etiss_coverage_count(7, 7719, 7714, 7713, 7711, 7718, 7716, 7715);\n";
816cp.code() += "} // block\n";
817} // block
818} // conditional
819cp.code() += "} // block\n";
820} // block
821cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
822cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
823// -----------------------------------------------------------------------------
824 cp.getAffectedRegisters().add("instructionPointer", 32);
825 }
826
827 return true;
828 },
829 0,
830 [] (BitArray & ba, Instruction & instr)
831 {
832// -----------------------------------------------------------------------------
833etiss_uint8 rd = 0;
834static BitArrayRange R_rd_0(11, 7);
835rd += R_rd_0.read(ba) << 0;
836etiss_uint8 rs1 = 0;
837static BitArrayRange R_rs1_0(19, 15);
838rs1 += R_rs1_0.read(ba) << 0;
839etiss_uint8 shamt = 0;
840static BitArrayRange R_shamt_0(24, 20);
841shamt += R_shamt_0.read(ba) << 0;
842
843// -----------------------------------------------------------------------------
844
845 std::stringstream ss;
846// -----------------------------------------------------------------------------
847ss << "srliw" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | shamt=" + std::to_string(shamt) + "]");
848// -----------------------------------------------------------------------------
849 return ss.str();
850 }
851);
852
853// SRAIW -----------------------------------------------------------------------
856 "sraiw",
857 (uint64_t) 0x4000501b,
858 (uint64_t) 0xfe00707f,
859 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
860 {
861
862// -----------------------------------------------------------------------------
863
864// -----------------------------------------------------------------------------
865
866// -----------------------------------------------------------------------------
867// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
868etiss_uint8 rd = 0;
869static BitArrayRange R_rd_0(11, 7);
870rd += R_rd_0.read(ba) << 0;
871etiss_uint8 rs1 = 0;
872static BitArrayRange R_rs1_0(19, 15);
873rs1 += R_rs1_0.read(ba) << 0;
874etiss_uint8 shamt = 0;
875static BitArrayRange R_shamt_0(24, 20);
876shamt += R_shamt_0.read(ba) << 0;
877
878// NOLINTEND(clang-diagnostic-unused-but-set-variable)
879// -----------------------------------------------------------------------------
880
881 {
883
884 cp.code() = std::string("//SRAIW\n");
885
886// -----------------------------------------------------------------------------
887cp.code() += "etiss_coverage_count(1, 193);\n";
888{ // block
889cp.code() += "etiss_coverage_count(1, 1189);\n";
890cp.code() += "{ // block\n";
891cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint64)((ic.current_address_ + 4))) + "ULL;\n";
892cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
893cp.code() += "} // block\n";
894} // block
895{ // block
896cp.code() += "etiss_coverage_count(1, 7751);\n";
897cp.code() += "{ // block\n";
898cp.code() += "etiss_coverage_count(1, 7722);\n";
899if ((rd % 32ULL) != 0LL) { // conditional
900cp.code() += "etiss_coverage_count(5, 7728, 7725, 7723, 7726, 7727);\n";
901{ // block
902cp.code() += "etiss_coverage_count(1, 7750);\n";
903cp.code() += "{ // block\n";
904cp.code() += "etiss_int32 sh_val = ((etiss_int32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL])) >> " + std::to_string(shamt) + "ULL;\n";
905cp.code() += "etiss_coverage_count(8, 7740, 7739, 7736, 7734, 7733, 7731, 7737, 7738);\n";
906cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_uint64)(sh_val);\n";
907cp.code() += "etiss_coverage_count(6, 7749, 7745, 7744, 7742, 7748, 7746);\n";
908cp.code() += "} // block\n";
909} // block
910} // conditional
911cp.code() += "} // block\n";
912} // block
913cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
914cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
915// -----------------------------------------------------------------------------
916 cp.getAffectedRegisters().add("instructionPointer", 32);
917 }
918
919 return true;
920 },
921 0,
922 [] (BitArray & ba, Instruction & instr)
923 {
924// -----------------------------------------------------------------------------
925etiss_uint8 rd = 0;
926static BitArrayRange R_rd_0(11, 7);
927rd += R_rd_0.read(ba) << 0;
928etiss_uint8 rs1 = 0;
929static BitArrayRange R_rs1_0(19, 15);
930rs1 += R_rs1_0.read(ba) << 0;
931etiss_uint8 shamt = 0;
932static BitArrayRange R_shamt_0(24, 20);
933shamt += R_shamt_0.read(ba) << 0;
934
935// -----------------------------------------------------------------------------
936
937 std::stringstream ss;
938// -----------------------------------------------------------------------------
939ss << "sraiw" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | shamt=" + std::to_string(shamt) + "]");
940// -----------------------------------------------------------------------------
941 return ss.str();
942 }
943);
944
945// ADDW ------------------------------------------------------------------------
948 "addw",
949 (uint64_t) 0x00003b,
950 (uint64_t) 0xfe00707f,
951 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
952 {
953
954// -----------------------------------------------------------------------------
955
956// -----------------------------------------------------------------------------
957
958// -----------------------------------------------------------------------------
959// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
960etiss_uint8 rd = 0;
961static BitArrayRange R_rd_0(11, 7);
962rd += R_rd_0.read(ba) << 0;
963etiss_uint8 rs1 = 0;
964static BitArrayRange R_rs1_0(19, 15);
965rs1 += R_rs1_0.read(ba) << 0;
966etiss_uint8 rs2 = 0;
967static BitArrayRange R_rs2_0(24, 20);
968rs2 += R_rs2_0.read(ba) << 0;
969
970// NOLINTEND(clang-diagnostic-unused-but-set-variable)
971// -----------------------------------------------------------------------------
972
973 {
975
976 cp.code() = std::string("//ADDW\n");
977
978// -----------------------------------------------------------------------------
979cp.code() += "etiss_coverage_count(1, 194);\n";
980{ // block
981cp.code() += "etiss_coverage_count(1, 1189);\n";
982cp.code() += "{ // block\n";
983cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint64)((ic.current_address_ + 4))) + "ULL;\n";
984cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
985cp.code() += "} // block\n";
986} // block
987{ // block
988cp.code() += "etiss_coverage_count(1, 7786);\n";
989cp.code() += "{ // block\n";
990cp.code() += "etiss_coverage_count(1, 7752);\n";
991if ((rd % 32ULL) != 0LL) { // conditional
992cp.code() += "etiss_coverage_count(5, 7758, 7755, 7753, 7756, 7757);\n";
993{ // block
994cp.code() += "etiss_coverage_count(1, 7785);\n";
995cp.code() += "{ // block\n";
996cp.code() += "etiss_int32 res = (etiss_int32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL]) + (etiss_int32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) + "ULL]);\n";
997cp.code() += "etiss_coverage_count(10, 7775, 7774, 7766, 7764, 7763, 7761, 7773, 7771, 7770, 7768);\n";
998cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_int64)(res);\n";
999cp.code() += "etiss_coverage_count(6, 7784, 7780, 7779, 7777, 7783, 7781);\n";
1000cp.code() += "} // block\n";
1001} // block
1002} // conditional
1003cp.code() += "} // block\n";
1004} // block
1005cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1006cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1007// -----------------------------------------------------------------------------
1008 cp.getAffectedRegisters().add("instructionPointer", 32);
1009 }
1010
1011 return true;
1012 },
1013 0,
1014 [] (BitArray & ba, Instruction & instr)
1015 {
1016// -----------------------------------------------------------------------------
1017etiss_uint8 rd = 0;
1018static BitArrayRange R_rd_0(11, 7);
1019rd += R_rd_0.read(ba) << 0;
1020etiss_uint8 rs1 = 0;
1021static BitArrayRange R_rs1_0(19, 15);
1022rs1 += R_rs1_0.read(ba) << 0;
1023etiss_uint8 rs2 = 0;
1024static BitArrayRange R_rs2_0(24, 20);
1025rs2 += R_rs2_0.read(ba) << 0;
1026
1027// -----------------------------------------------------------------------------
1028
1029 std::stringstream ss;
1030// -----------------------------------------------------------------------------
1031ss << "addw" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
1032// -----------------------------------------------------------------------------
1033 return ss.str();
1034 }
1035);
1036
1037// SUBW ------------------------------------------------------------------------
1040 "subw",
1041 (uint64_t) 0x4000003b,
1042 (uint64_t) 0xfe00707f,
1043 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1044 {
1045
1046// -----------------------------------------------------------------------------
1047
1048// -----------------------------------------------------------------------------
1049
1050// -----------------------------------------------------------------------------
1051// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1052etiss_uint8 rd = 0;
1053static BitArrayRange R_rd_0(11, 7);
1054rd += R_rd_0.read(ba) << 0;
1055etiss_uint8 rs1 = 0;
1056static BitArrayRange R_rs1_0(19, 15);
1057rs1 += R_rs1_0.read(ba) << 0;
1058etiss_uint8 rs2 = 0;
1059static BitArrayRange R_rs2_0(24, 20);
1060rs2 += R_rs2_0.read(ba) << 0;
1061
1062// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1063// -----------------------------------------------------------------------------
1064
1065 {
1067
1068 cp.code() = std::string("//SUBW\n");
1069
1070// -----------------------------------------------------------------------------
1071cp.code() += "etiss_coverage_count(1, 195);\n";
1072{ // block
1073cp.code() += "etiss_coverage_count(1, 1189);\n";
1074cp.code() += "{ // block\n";
1075cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint64)((ic.current_address_ + 4))) + "ULL;\n";
1076cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1077cp.code() += "} // block\n";
1078} // block
1079{ // block
1080cp.code() += "etiss_coverage_count(1, 7821);\n";
1081cp.code() += "{ // block\n";
1082cp.code() += "etiss_coverage_count(1, 7787);\n";
1083if ((rd % 32ULL) != 0LL) { // conditional
1084cp.code() += "etiss_coverage_count(5, 7793, 7790, 7788, 7791, 7792);\n";
1085{ // block
1086cp.code() += "etiss_coverage_count(1, 7820);\n";
1087cp.code() += "{ // block\n";
1088cp.code() += "etiss_int32 res = (etiss_int32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL]) - (etiss_int32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) + "ULL]);\n";
1089cp.code() += "etiss_coverage_count(10, 7810, 7809, 7801, 7799, 7798, 7796, 7808, 7806, 7805, 7803);\n";
1090cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_int64)(res);\n";
1091cp.code() += "etiss_coverage_count(6, 7819, 7815, 7814, 7812, 7818, 7816);\n";
1092cp.code() += "} // block\n";
1093} // block
1094} // conditional
1095cp.code() += "} // block\n";
1096} // block
1097cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1098cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1099// -----------------------------------------------------------------------------
1100 cp.getAffectedRegisters().add("instructionPointer", 32);
1101 }
1102
1103 return true;
1104 },
1105 0,
1106 [] (BitArray & ba, Instruction & instr)
1107 {
1108// -----------------------------------------------------------------------------
1109etiss_uint8 rd = 0;
1110static BitArrayRange R_rd_0(11, 7);
1111rd += R_rd_0.read(ba) << 0;
1112etiss_uint8 rs1 = 0;
1113static BitArrayRange R_rs1_0(19, 15);
1114rs1 += R_rs1_0.read(ba) << 0;
1115etiss_uint8 rs2 = 0;
1116static BitArrayRange R_rs2_0(24, 20);
1117rs2 += R_rs2_0.read(ba) << 0;
1118
1119// -----------------------------------------------------------------------------
1120
1121 std::stringstream ss;
1122// -----------------------------------------------------------------------------
1123ss << "subw" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
1124// -----------------------------------------------------------------------------
1125 return ss.str();
1126 }
1127);
1128
1129// SLLW ------------------------------------------------------------------------
1132 "sllw",
1133 (uint64_t) 0x00103b,
1134 (uint64_t) 0xfe00707f,
1135 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1136 {
1137
1138// -----------------------------------------------------------------------------
1139
1140// -----------------------------------------------------------------------------
1141
1142// -----------------------------------------------------------------------------
1143// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1144etiss_uint8 rd = 0;
1145static BitArrayRange R_rd_0(11, 7);
1146rd += R_rd_0.read(ba) << 0;
1147etiss_uint8 rs1 = 0;
1148static BitArrayRange R_rs1_0(19, 15);
1149rs1 += R_rs1_0.read(ba) << 0;
1150etiss_uint8 rs2 = 0;
1151static BitArrayRange R_rs2_0(24, 20);
1152rs2 += R_rs2_0.read(ba) << 0;
1153
1154// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1155// -----------------------------------------------------------------------------
1156
1157 {
1159
1160 cp.code() = std::string("//SLLW\n");
1161
1162// -----------------------------------------------------------------------------
1163cp.code() += "etiss_coverage_count(1, 196);\n";
1164{ // block
1165cp.code() += "etiss_coverage_count(1, 1189);\n";
1166cp.code() += "{ // block\n";
1167cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint64)((ic.current_address_ + 4))) + "ULL;\n";
1168cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1169cp.code() += "} // block\n";
1170} // block
1171{ // block
1172cp.code() += "etiss_coverage_count(1, 7862);\n";
1173cp.code() += "{ // block\n";
1174cp.code() += "etiss_coverage_count(1, 7822);\n";
1175if ((rd % 32ULL) != 0LL) { // conditional
1176cp.code() += "etiss_coverage_count(5, 7828, 7825, 7823, 7826, 7827);\n";
1177{ // block
1178cp.code() += "etiss_coverage_count(1, 7861);\n";
1179cp.code() += "{ // block\n";
1180cp.code() += "etiss_uint32 count = (etiss_uint64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) + "ULL]) & 31ULL;\n";
1181cp.code() += "etiss_coverage_count(7, 7838, 7837, 7835, 7834, 7833, 7831, 7836);\n";
1182cp.code() += "etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL])) << count;\n";
1183cp.code() += "etiss_coverage_count(8, 7850, 7849, 7846, 7844, 7843, 7841, 7847, 7848);\n";
1184cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";
1185cp.code() += "etiss_coverage_count(7, 7860, 7855, 7854, 7852, 7859, 7857, 7856);\n";
1186cp.code() += "} // block\n";
1187} // block
1188} // conditional
1189cp.code() += "} // block\n";
1190} // block
1191cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1192cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1193// -----------------------------------------------------------------------------
1194 cp.getAffectedRegisters().add("instructionPointer", 32);
1195 }
1196
1197 return true;
1198 },
1199 0,
1200 [] (BitArray & ba, Instruction & instr)
1201 {
1202// -----------------------------------------------------------------------------
1203etiss_uint8 rd = 0;
1204static BitArrayRange R_rd_0(11, 7);
1205rd += R_rd_0.read(ba) << 0;
1206etiss_uint8 rs1 = 0;
1207static BitArrayRange R_rs1_0(19, 15);
1208rs1 += R_rs1_0.read(ba) << 0;
1209etiss_uint8 rs2 = 0;
1210static BitArrayRange R_rs2_0(24, 20);
1211rs2 += R_rs2_0.read(ba) << 0;
1212
1213// -----------------------------------------------------------------------------
1214
1215 std::stringstream ss;
1216// -----------------------------------------------------------------------------
1217ss << "sllw" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
1218// -----------------------------------------------------------------------------
1219 return ss.str();
1220 }
1221);
1222
1223// SRLW ------------------------------------------------------------------------
1226 "srlw",
1227 (uint64_t) 0x00503b,
1228 (uint64_t) 0xfe00707f,
1229 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1230 {
1231
1232// -----------------------------------------------------------------------------
1233
1234// -----------------------------------------------------------------------------
1235
1236// -----------------------------------------------------------------------------
1237// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1238etiss_uint8 rd = 0;
1239static BitArrayRange R_rd_0(11, 7);
1240rd += R_rd_0.read(ba) << 0;
1241etiss_uint8 rs1 = 0;
1242static BitArrayRange R_rs1_0(19, 15);
1243rs1 += R_rs1_0.read(ba) << 0;
1244etiss_uint8 rs2 = 0;
1245static BitArrayRange R_rs2_0(24, 20);
1246rs2 += R_rs2_0.read(ba) << 0;
1247
1248// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1249// -----------------------------------------------------------------------------
1250
1251 {
1253
1254 cp.code() = std::string("//SRLW\n");
1255
1256// -----------------------------------------------------------------------------
1257cp.code() += "etiss_coverage_count(1, 197);\n";
1258{ // block
1259cp.code() += "etiss_coverage_count(1, 1189);\n";
1260cp.code() += "{ // block\n";
1261cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint64)((ic.current_address_ + 4))) + "ULL;\n";
1262cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1263cp.code() += "} // block\n";
1264} // block
1265{ // block
1266cp.code() += "etiss_coverage_count(1, 7903);\n";
1267cp.code() += "{ // block\n";
1268cp.code() += "etiss_coverage_count(1, 7863);\n";
1269if ((rd % 32ULL) != 0LL) { // conditional
1270cp.code() += "etiss_coverage_count(5, 7869, 7866, 7864, 7867, 7868);\n";
1271{ // block
1272cp.code() += "etiss_coverage_count(1, 7902);\n";
1273cp.code() += "{ // block\n";
1274cp.code() += "etiss_uint32 count = (etiss_uint64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) + "ULL]) & 31ULL;\n";
1275cp.code() += "etiss_coverage_count(7, 7879, 7878, 7876, 7875, 7874, 7872, 7877);\n";
1276cp.code() += "etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL])) >> count;\n";
1277cp.code() += "etiss_coverage_count(8, 7891, 7890, 7887, 7885, 7884, 7882, 7888, 7889);\n";
1278cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";
1279cp.code() += "etiss_coverage_count(7, 7901, 7896, 7895, 7893, 7900, 7898, 7897);\n";
1280cp.code() += "} // block\n";
1281} // block
1282} // conditional
1283cp.code() += "} // block\n";
1284} // block
1285cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1286cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1287// -----------------------------------------------------------------------------
1288 cp.getAffectedRegisters().add("instructionPointer", 32);
1289 }
1290
1291 return true;
1292 },
1293 0,
1294 [] (BitArray & ba, Instruction & instr)
1295 {
1296// -----------------------------------------------------------------------------
1297etiss_uint8 rd = 0;
1298static BitArrayRange R_rd_0(11, 7);
1299rd += R_rd_0.read(ba) << 0;
1300etiss_uint8 rs1 = 0;
1301static BitArrayRange R_rs1_0(19, 15);
1302rs1 += R_rs1_0.read(ba) << 0;
1303etiss_uint8 rs2 = 0;
1304static BitArrayRange R_rs2_0(24, 20);
1305rs2 += R_rs2_0.read(ba) << 0;
1306
1307// -----------------------------------------------------------------------------
1308
1309 std::stringstream ss;
1310// -----------------------------------------------------------------------------
1311ss << "srlw" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
1312// -----------------------------------------------------------------------------
1313 return ss.str();
1314 }
1315);
1316
1317// SRAW ------------------------------------------------------------------------
1320 "sraw",
1321 (uint64_t) 0x4000503b,
1322 (uint64_t) 0xfe00707f,
1323 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1324 {
1325
1326// -----------------------------------------------------------------------------
1327
1328// -----------------------------------------------------------------------------
1329
1330// -----------------------------------------------------------------------------
1331// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1332etiss_uint8 rd = 0;
1333static BitArrayRange R_rd_0(11, 7);
1334rd += R_rd_0.read(ba) << 0;
1335etiss_uint8 rs1 = 0;
1336static BitArrayRange R_rs1_0(19, 15);
1337rs1 += R_rs1_0.read(ba) << 0;
1338etiss_uint8 rs2 = 0;
1339static BitArrayRange R_rs2_0(24, 20);
1340rs2 += R_rs2_0.read(ba) << 0;
1341
1342// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1343// -----------------------------------------------------------------------------
1344
1345 {
1347
1348 cp.code() = std::string("//SRAW\n");
1349
1350// -----------------------------------------------------------------------------
1351cp.code() += "etiss_coverage_count(1, 198);\n";
1352{ // block
1353cp.code() += "etiss_coverage_count(1, 1189);\n";
1354cp.code() += "{ // block\n";
1355cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint64)((ic.current_address_ + 4))) + "ULL;\n";
1356cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1357cp.code() += "} // block\n";
1358} // block
1359{ // block
1360cp.code() += "etiss_coverage_count(1, 7943);\n";
1361cp.code() += "{ // block\n";
1362cp.code() += "etiss_coverage_count(1, 7904);\n";
1363if ((rd % 32ULL) != 0LL) { // conditional
1364cp.code() += "etiss_coverage_count(5, 7910, 7907, 7905, 7908, 7909);\n";
1365{ // block
1366cp.code() += "etiss_coverage_count(1, 7942);\n";
1367cp.code() += "{ // block\n";
1368cp.code() += "etiss_uint32 count = (etiss_uint64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) + "ULL]) & 31ULL;\n";
1369cp.code() += "etiss_coverage_count(7, 7920, 7919, 7917, 7916, 7915, 7913, 7918);\n";
1370cp.code() += "etiss_int32 sh_val = ((etiss_int32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL])) >> count;\n";
1371cp.code() += "etiss_coverage_count(8, 7932, 7931, 7928, 7926, 7925, 7923, 7929, 7930);\n";
1372cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_int64)(sh_val);\n";
1373cp.code() += "etiss_coverage_count(6, 7941, 7937, 7936, 7934, 7940, 7938);\n";
1374cp.code() += "} // block\n";
1375} // block
1376} // conditional
1377cp.code() += "} // block\n";
1378} // block
1379cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1380cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1381// -----------------------------------------------------------------------------
1382 cp.getAffectedRegisters().add("instructionPointer", 32);
1383 }
1384
1385 return true;
1386 },
1387 0,
1388 [] (BitArray & ba, Instruction & instr)
1389 {
1390// -----------------------------------------------------------------------------
1391etiss_uint8 rd = 0;
1392static BitArrayRange R_rd_0(11, 7);
1393rd += R_rd_0.read(ba) << 0;
1394etiss_uint8 rs1 = 0;
1395static BitArrayRange R_rs1_0(19, 15);
1396rs1 += R_rs1_0.read(ba) << 0;
1397etiss_uint8 rs2 = 0;
1398static BitArrayRange R_rs2_0(24, 20);
1399rs2 += R_rs2_0.read(ba) << 0;
1400
1401// -----------------------------------------------------------------------------
1402
1403 std::stringstream ss;
1404// -----------------------------------------------------------------------------
1405ss << "sraw" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
1406// -----------------------------------------------------------------------------
1407 return ss.str();
1408 }
1409);
1410// clang-format on
etiss::instr::InstructionGroup ISA32_RV64IMACFD("ISA32_RV64IMACFD", 32)
static InstructionDefinition lwu_rd_rs1_imm(ISA32_RV64IMACFD, "lwu",(uint64_t) 0x006003,(uint64_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//LWU\n");cp.code()+="etiss_coverage_count(1, 184);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 7507);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint64 offs = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + "+std::to_string(((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL;\n";cp.code()+="etiss_coverage_count(7, 7480, 7479, 7475, 7474, 7472, 7478, 7476);\n";cp.code()+="etiss_uint32 mem_val_0;\n";cp.code()+="cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // conditional\n";cp.code()+="etiss_uint32 res = (etiss_uint32)(mem_val_0);\n";cp.code()+="etiss_coverage_count(6, 7490, 7489, 7487, 7485, 7483, 7484);\n";cp.code()+="etiss_coverage_count(1, 7491);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7497, 7494, 7492, 7495, 7496);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 7506, 7502, 7501, 7499, 7505, 7503);\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} { CodePart &cp=cs.append(CodePart::APPENDEDRETURNINGREQUIRED);cp.code()=std::string("//LWU\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;std::stringstream ss;ss<< "lwu"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition slliw_rd_rs1_shamt(ISA32_RV64IMACFD, "slliw",(uint64_t) 0x00101b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SLLIW\n");cp.code()+="etiss_coverage_count(1, 191);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 7690);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7660);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7666, 7663, 7661, 7664, 7665);\n";{ cp.code()+="etiss_coverage_count(1, 7689);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL])) << "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(8, 7678, 7677, 7674, 7672, 7671, 7669, 7675, 7676);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";cp.code()+="etiss_coverage_count(7, 7688, 7683, 7682, 7680, 7687, 7685, 7684);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;std::stringstream ss;ss<< "slliw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | shamt="+std::to_string(shamt)+"]");return ss.str();})
static InstructionDefinition subw_rd_rs1_rs2(ISA32_RV64IMACFD, "subw",(uint64_t) 0x4000003b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SUBW\n");cp.code()+="etiss_coverage_count(1, 195);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 7821);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7787);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7793, 7790, 7788, 7791, 7792);\n";{ cp.code()+="etiss_coverage_count(1, 7820);\n";cp.code()+="{ // block\n";cp.code()+="etiss_int32 res = (etiss_int32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]) - (etiss_int32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(10, 7810, 7809, 7801, 7799, 7798, 7796, 7808, 7806, 7805, 7803);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_int64)(res);\n";cp.code()+="etiss_coverage_count(6, 7819, 7815, 7814, 7812, 7818, 7816);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "subw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition srli_rd_rs1_shamt(ISA32_RV64IMACFD, "srli",(uint64_t) 0x005013,(uint64_t) 0xfc00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(25, 20);shamt+=R_shamt_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SRLI\n");cp.code()+="etiss_coverage_count(1, 188);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 7590);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7596, 7593, 7591, 7594, 7595);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] >> "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(9, 7609, 7601, 7600, 7598, 7608, 7606, 7605, 7603, 7607);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(25, 20);shamt+=R_shamt_0.read(ba)<< 0;std::stringstream ss;ss<< "srli"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | shamt="+std::to_string(shamt)+"]");return ss.str();})
static InstructionDefinition addw_rd_rs1_rs2(ISA32_RV64IMACFD, "addw",(uint64_t) 0x00003b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//ADDW\n");cp.code()+="etiss_coverage_count(1, 194);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 7786);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7752);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7758, 7755, 7753, 7756, 7757);\n";{ cp.code()+="etiss_coverage_count(1, 7785);\n";cp.code()+="{ // block\n";cp.code()+="etiss_int32 res = (etiss_int32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]) + (etiss_int32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(10, 7775, 7774, 7766, 7764, 7763, 7761, 7773, 7771, 7770, 7768);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_int64)(res);\n";cp.code()+="etiss_coverage_count(6, 7784, 7780, 7779, 7777, 7783, 7781);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "addw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition slli_rd_rs1_shamt(ISA32_RV64IMACFD, "slli",(uint64_t) 0x001013,(uint64_t) 0xfc00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(25, 20);shamt+=R_shamt_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SLLI\n");cp.code()+="etiss_coverage_count(1, 187);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 7570);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7576, 7573, 7571, 7574, 7575);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] << "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(9, 7589, 7581, 7580, 7578, 7588, 7586, 7585, 7583, 7587);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(25, 20);shamt+=R_shamt_0.read(ba)<< 0;std::stringstream ss;ss<< "slli"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | shamt="+std::to_string(shamt)+"]");return ss.str();})
static InstructionDefinition sraw_rd_rs1_rs2(ISA32_RV64IMACFD, "sraw",(uint64_t) 0x4000503b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SRAW\n");cp.code()+="etiss_coverage_count(1, 198);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 7943);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7904);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7910, 7907, 7905, 7908, 7909);\n";{ cp.code()+="etiss_coverage_count(1, 7942);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 count = (etiss_uint64)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]) & 31ULL;\n";cp.code()+="etiss_coverage_count(7, 7920, 7919, 7917, 7916, 7915, 7913, 7918);\n";cp.code()+="etiss_int32 sh_val = ((etiss_int32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL])) >> count;\n";cp.code()+="etiss_coverage_count(8, 7932, 7931, 7928, 7926, 7925, 7923, 7929, 7930);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_int64)(sh_val);\n";cp.code()+="etiss_coverage_count(6, 7941, 7937, 7936, 7934, 7940, 7938);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "sraw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition sllw_rd_rs1_rs2(ISA32_RV64IMACFD, "sllw",(uint64_t) 0x00103b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SLLW\n");cp.code()+="etiss_coverage_count(1, 196);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 7862);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7822);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7828, 7825, 7823, 7826, 7827);\n";{ cp.code()+="etiss_coverage_count(1, 7861);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 count = (etiss_uint64)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]) & 31ULL;\n";cp.code()+="etiss_coverage_count(7, 7838, 7837, 7835, 7834, 7833, 7831, 7836);\n";cp.code()+="etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL])) << count;\n";cp.code()+="etiss_coverage_count(8, 7850, 7849, 7846, 7844, 7843, 7841, 7847, 7848);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";cp.code()+="etiss_coverage_count(7, 7860, 7855, 7854, 7852, 7859, 7857, 7856);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "sllw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition srliw_rd_rs1_shamt(ISA32_RV64IMACFD, "srliw",(uint64_t) 0x00501b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SRLIW\n");cp.code()+="etiss_coverage_count(1, 192);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 7721);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7691);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7697, 7694, 7692, 7695, 7696);\n";{ cp.code()+="etiss_coverage_count(1, 7720);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL])) >> "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(8, 7709, 7708, 7705, 7703, 7702, 7700, 7706, 7707);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";cp.code()+="etiss_coverage_count(7, 7719, 7714, 7713, 7711, 7718, 7716, 7715);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;std::stringstream ss;ss<< "srliw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | shamt="+std::to_string(shamt)+"]");return ss.str();})
static InstructionDefinition srai_rd_rs1_shamt(ISA32_RV64IMACFD, "srai",(uint64_t) 0x40005013,(uint64_t) 0xfc00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(25, 20);shamt+=R_shamt_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SRAI\n");cp.code()+="etiss_coverage_count(1, 189);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 7610);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7616, 7613, 7611, 7614, 7615);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = ((etiss_int64)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL])) >> "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(11, 7631, 7621, 7620, 7618, 7630, 7627, 7626, 7625, 7623, 7628, 7629);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(25, 20);shamt+=R_shamt_0.read(ba)<< 0;std::stringstream ss;ss<< "srai"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | shamt="+std::to_string(shamt)+"]");return ss.str();})
static InstructionDefinition sraiw_rd_rs1_shamt(ISA32_RV64IMACFD, "sraiw",(uint64_t) 0x4000501b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SRAIW\n");cp.code()+="etiss_coverage_count(1, 193);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 7751);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7722);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7728, 7725, 7723, 7726, 7727);\n";{ cp.code()+="etiss_coverage_count(1, 7750);\n";cp.code()+="{ // block\n";cp.code()+="etiss_int32 sh_val = ((etiss_int32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL])) >> "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(8, 7740, 7739, 7736, 7734, 7733, 7731, 7737, 7738);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)(sh_val);\n";cp.code()+="etiss_coverage_count(6, 7749, 7745, 7744, 7742, 7748, 7746);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;std::stringstream ss;ss<< "sraiw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | shamt="+std::to_string(shamt)+"]");return ss.str();})
static InstructionDefinition ld_rd_rs1_imm(ISA32_RV64IMACFD, "ld",(uint64_t) 0x003003,(uint64_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//LD\n");cp.code()+="etiss_coverage_count(1, 185);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 7544);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint64 offs = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + "+std::to_string(((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL;\n";cp.code()+="etiss_coverage_count(7, 7517, 7516, 7513, 7512, 7510, 7515, 7514);\n";cp.code()+="etiss_uint64 mem_val_0;\n";cp.code()+="cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // conditional\n";cp.code()+="etiss_int64 res = (etiss_int64)(mem_val_0);\n";cp.code()+="etiss_coverage_count(6, 7527, 7526, 7524, 7522, 7520, 7521);\n";cp.code()+="etiss_coverage_count(1, 7528);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7534, 7531, 7529, 7532, 7533);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 7543, 7539, 7538, 7536, 7542, 7540);\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} { CodePart &cp=cs.append(CodePart::APPENDEDRETURNINGREQUIRED);cp.code()=std::string("//LD\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;std::stringstream ss;ss<< "ld"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition sd_imm_rs1_rs2(ISA32_RV64IMACFD, "sd",(uint64_t) 0x003023,(uint64_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_0(11, 7);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;static BitArrayRange R_imm_5(31, 25);imm+=R_imm_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SD\n");cp.code()+="etiss_coverage_count(1, 186);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 7569);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint64 offs = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + "+std::to_string(((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL;\n";cp.code()+="etiss_coverage_count(7, 7554, 7553, 7550, 7549, 7547, 7552, 7551);\n";cp.code()+="etiss_uint64 mem_val_0;\n";cp.code()+="mem_val_0 = (etiss_uint64)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(9, 7568, 7560, 7558, 7556, 7557, 7567, 7565, 7564, 7562);\n";cp.code()+="cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // conditional\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} { CodePart &cp=cs.append(CodePart::APPENDEDRETURNINGREQUIRED);cp.code()=std::string("//SD\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_0(11, 7);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;static BitArrayRange R_imm_5(31, 25);imm+=R_imm_5.read(ba)<< 5;std::stringstream ss;ss<< "sd"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition addiw_rd_rs1_imm(ISA32_RV64IMACFD, "addiw",(uint64_t) 0x00001b,(uint64_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//ADDIW\n");cp.code()+="etiss_coverage_count(1, 190);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 7659);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7632);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7638, 7635, 7633, 7636, 7637);\n";{ cp.code()+="etiss_coverage_count(1, 7658);\n";cp.code()+="{ // block\n";cp.code()+="etiss_int32 res = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + "+std::to_string(((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL;\n";cp.code()+="etiss_coverage_count(7, 7648, 7647, 7644, 7643, 7641, 7646, 7645);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_int64)(res);\n";cp.code()+="etiss_coverage_count(6, 7657, 7653, 7652, 7650, 7656, 7654);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;std::stringstream ss;ss<< "addiw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition srlw_rd_rs1_rs2(ISA32_RV64IMACFD, "srlw",(uint64_t) 0x00503b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SRLW\n");cp.code()+="etiss_coverage_count(1, 197);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 7903);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7863);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7869, 7866, 7864, 7867, 7868);\n";{ cp.code()+="etiss_coverage_count(1, 7902);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 count = (etiss_uint64)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]) & 31ULL;\n";cp.code()+="etiss_coverage_count(7, 7879, 7878, 7876, 7875, 7874, 7872, 7877);\n";cp.code()+="etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL])) >> count;\n";cp.code()+="etiss_coverage_count(8, 7891, 7890, 7887, 7885, 7884, 7882, 7888, 7889);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";cp.code()+="etiss_coverage_count(7, 7901, 7896, 7895, 7893, 7900, 7898, 7897);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "srlw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
int16_t etiss_int16
Definition types.h:51
uint64_t etiss_uint64
Definition types.h:58
uint8_t etiss_uint8
Definition types.h:49
uint16_t etiss_uint16
Definition types.h:52
Contains a small code snipped.
Definition CodePart.h:348
@ APPENDEDRETURNINGREQUIRED
Definition CodePart.h:364
std::string & code()
Definition CodePart.h:378
RegisterSet & getAffectedRegisters()
Definition CodePart.h:376
A set of CodeParts.
Definition CodePart.h:399
void append(const CodePart &part, CodePart::TYPE type)
Definition CodePart.h:412
void add(const RegisterPart &rp)
add a registerPart to the set or just its relevant bits if a register with the same name is already p...
Definition CodePart.h:184
Reading through it will only return bits within the range.
I read(const BitArray &ba)
reads bits from the range to the return value starting at the lsb.
stores a bit vector
this class contains parameters that persist in between instruction lookpus/translation within a trans...
uint64_t current_address_
start address of current instruction
holds information and translation callbacks for an instruction.
forwards: include/jit/*
Definition Benchmark.h:17