ETISS 0.11.2
ExtendableTranslatingInstructionSetSimulator(version0.11.2)
Loading...
Searching...
No Matches
RV32IMACFD_RV32ICInstr.cpp
Go to the documentation of this file.
1// clang-format off
9#include "RV32IMACFDArch.h"
10#include "RV32IMACFDFuncs.h"
11
12using namespace etiss;
13using namespace etiss::instr;
14
15// CADDI4SPN -------------------------------------------------------------------
18 "caddi4spn",
19 (uint64_t) 0x00,
20 (uint64_t) 0xe003,
22 {
23
24// -----------------------------------------------------------------------------
25
26// -----------------------------------------------------------------------------
27
28// -----------------------------------------------------------------------------
29// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
30etiss_uint8 rd = 0;
31static BitArrayRange R_rd_0(4, 2);
32rd += R_rd_0.read(ba) << 0;
33etiss_uint16 imm = 0;
34static BitArrayRange R_imm_3(5, 5);
35imm += R_imm_3.read(ba) << 3;
36static BitArrayRange R_imm_2(6, 6);
37imm += R_imm_2.read(ba) << 2;
38static BitArrayRange R_imm_6(10, 7);
39imm += R_imm_6.read(ba) << 6;
40static BitArrayRange R_imm_4(12, 11);
41imm += R_imm_4.read(ba) << 4;
42
43// NOLINTEND(clang-diagnostic-unused-but-set-variable)
44// -----------------------------------------------------------------------------
45
46 {
48
49 cp.code() = std::string("//CADDI4SPN\n");
50
51// -----------------------------------------------------------------------------
52cp.code() += "etiss_coverage_count(1, 42);\n";
53{ // block
54cp.code() += "etiss_coverage_count(1, 1189);\n";
55cp.code() += "{ // block\n";
56cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
57cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
58cp.code() += "} // block\n";
59} // block
60cp.code() += "etiss_coverage_count(1, 2240);\n";
61if (imm) { // conditional
62cp.code() += "etiss_coverage_count(1, 2241);\n";
63cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] = *((RV32IMACFD*)cpu)->X[2ULL] + " + std::to_string(imm) + "ULL;\n";
64cp.code() += "etiss_coverage_count(9, 2252, 2246, 2245, 2243, 2244, 2251, 2249, 2248, 2250);\n";
65} // conditional
66else { // conditional
67{ // procedure
68cp.code() += "{ // procedure\n";
69cp.code() += "RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
70cp.code() += "etiss_coverage_count(2, 2255, 2253);\n";
71cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
72cp.code() += "} // procedure\n";
73} // procedure
74} // conditional
75cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
76cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
77// -----------------------------------------------------------------------------
78 cp.getAffectedRegisters().add("instructionPointer", 32);
79 }
80 {
82
83 cp.code() = std::string("//CADDI4SPN\n");
84
85// -----------------------------------------------------------------------------
86cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
87// -----------------------------------------------------------------------------
88 }
89
90 return true;
91 },
92 0,
93 [] (BitArray & ba, Instruction & instr)
94 {
95// -----------------------------------------------------------------------------
96etiss_uint8 rd = 0;
97static BitArrayRange R_rd_0(4, 2);
98rd += R_rd_0.read(ba) << 0;
99etiss_uint16 imm = 0;
100static BitArrayRange R_imm_3(5, 5);
101imm += R_imm_3.read(ba) << 3;
102static BitArrayRange R_imm_2(6, 6);
103imm += R_imm_2.read(ba) << 2;
104static BitArrayRange R_imm_6(10, 7);
105imm += R_imm_6.read(ba) << 6;
106static BitArrayRange R_imm_4(12, 11);
107imm += R_imm_4.read(ba) << 4;
108
109// -----------------------------------------------------------------------------
110
111 std::stringstream ss;
112// -----------------------------------------------------------------------------
113ss << "caddi4spn" << " # " << ba << (" [rd=" + std::to_string(rd) + " | imm=" + std::to_string(imm) + "]");
114// -----------------------------------------------------------------------------
115 return ss.str();
116 }
117);
118
119// CLW -------------------------------------------------------------------------
122 "clw",
123 (uint64_t) 0x4000,
124 (uint64_t) 0xe003,
125 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
126 {
127
128// -----------------------------------------------------------------------------
129
130// -----------------------------------------------------------------------------
131
132// -----------------------------------------------------------------------------
133// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
134etiss_uint8 rd = 0;
135static BitArrayRange R_rd_0(4, 2);
136rd += R_rd_0.read(ba) << 0;
137etiss_uint8 uimm = 0;
138static BitArrayRange R_uimm_6(5, 5);
139uimm += R_uimm_6.read(ba) << 6;
140static BitArrayRange R_uimm_2(6, 6);
141uimm += R_uimm_2.read(ba) << 2;
142etiss_uint8 rs1 = 0;
143static BitArrayRange R_rs1_0(9, 7);
144rs1 += R_rs1_0.read(ba) << 0;
145static BitArrayRange R_uimm_3(12, 10);
146uimm += R_uimm_3.read(ba) << 3;
147
148// NOLINTEND(clang-diagnostic-unused-but-set-variable)
149// -----------------------------------------------------------------------------
150
151 {
153
154 cp.code() = std::string("//CLW\n");
155
156// -----------------------------------------------------------------------------
157cp.code() += "etiss_coverage_count(1, 43);\n";
158{ // block
159cp.code() += "etiss_coverage_count(1, 1189);\n";
160cp.code() += "{ // block\n";
161cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "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, 2279);\n";
167cp.code() += "{ // block\n";
168cp.code() += "etiss_uint32 load_address = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] + " + std::to_string(uimm) + "ULL;\n";
169cp.code() += "etiss_coverage_count(7, 2264, 2263, 2261, 2260, 2258, 2259, 2262);\n";
170cp.code() += "etiss_uint32 mem_val_0;\n";
171cp.code() += "cpu->exception |= (*(system->dread))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 4);\n";
172cp.code() += "if (cpu->exception) { // conditional\n";
173{ // procedure
174cp.code() += "{ // procedure\n";
175cp.code() += "RV32IMACFD_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() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] = (etiss_int32)(mem_val_0);\n";
181cp.code() += "etiss_coverage_count(10, 2278, 2269, 2268, 2266, 2267, 2277, 2275, 2273, 2271, 2272);\n";
182cp.code() += "} // block\n";
183} // block
184cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
185cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
186// -----------------------------------------------------------------------------
187 cp.getAffectedRegisters().add("instructionPointer", 32);
188 }
189 {
191
192 cp.code() = std::string("//CLW\n");
193
194// -----------------------------------------------------------------------------
195cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
196// -----------------------------------------------------------------------------
197 }
198
199 return true;
200 },
201 0,
202 [] (BitArray & ba, Instruction & instr)
203 {
204// -----------------------------------------------------------------------------
205etiss_uint8 rd = 0;
206static BitArrayRange R_rd_0(4, 2);
207rd += R_rd_0.read(ba) << 0;
208etiss_uint8 uimm = 0;
209static BitArrayRange R_uimm_6(5, 5);
210uimm += R_uimm_6.read(ba) << 6;
211static BitArrayRange R_uimm_2(6, 6);
212uimm += R_uimm_2.read(ba) << 2;
213etiss_uint8 rs1 = 0;
214static BitArrayRange R_rs1_0(9, 7);
215rs1 += R_rs1_0.read(ba) << 0;
216static BitArrayRange R_uimm_3(12, 10);
217uimm += R_uimm_3.read(ba) << 3;
218
219// -----------------------------------------------------------------------------
220
221 std::stringstream ss;
222// -----------------------------------------------------------------------------
223ss << "clw" << " # " << ba << (" [rd=" + std::to_string(rd) + " | uimm=" + std::to_string(uimm) + " | rs1=" + std::to_string(rs1) + "]");
224// -----------------------------------------------------------------------------
225 return ss.str();
226 }
227);
228
229// CSW -------------------------------------------------------------------------
232 "csw",
233 (uint64_t) 0xc000,
234 (uint64_t) 0xe003,
235 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
236 {
237
238// -----------------------------------------------------------------------------
239
240// -----------------------------------------------------------------------------
241
242// -----------------------------------------------------------------------------
243// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
244etiss_uint8 rs2 = 0;
245static BitArrayRange R_rs2_0(4, 2);
246rs2 += R_rs2_0.read(ba) << 0;
247etiss_uint8 uimm = 0;
248static BitArrayRange R_uimm_6(5, 5);
249uimm += R_uimm_6.read(ba) << 6;
250static BitArrayRange R_uimm_2(6, 6);
251uimm += R_uimm_2.read(ba) << 2;
252etiss_uint8 rs1 = 0;
253static BitArrayRange R_rs1_0(9, 7);
254rs1 += R_rs1_0.read(ba) << 0;
255static BitArrayRange R_uimm_3(12, 10);
256uimm += R_uimm_3.read(ba) << 3;
257
258// NOLINTEND(clang-diagnostic-unused-but-set-variable)
259// -----------------------------------------------------------------------------
260
261 {
263
264 cp.code() = std::string("//CSW\n");
265
266// -----------------------------------------------------------------------------
267cp.code() += "etiss_coverage_count(1, 44);\n";
268{ // block
269cp.code() += "etiss_coverage_count(1, 1189);\n";
270cp.code() += "{ // block\n";
271cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "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, 2303);\n";
277cp.code() += "{ // block\n";
278cp.code() += "etiss_uint32 load_address = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] + " + std::to_string(uimm) + "ULL;\n";
279cp.code() += "etiss_coverage_count(7, 2288, 2287, 2285, 2284, 2282, 2283, 2286);\n";
280cp.code() += "etiss_uint32 mem_val_0;\n";
281cp.code() += "mem_val_0 = (etiss_int32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) + "ULL]);\n";
282cp.code() += "etiss_coverage_count(10, 2302, 2294, 2292, 2290, 2291, 2301, 2299, 2298, 2296, 2297);\n";
283cp.code() += "cpu->exception |= (*(system->dwrite))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 4);\n";
284cp.code() += "if (cpu->exception) { // conditional\n";
285{ // procedure
286cp.code() += "{ // procedure\n";
287cp.code() += "RV32IMACFD_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("//CSW\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_uint8 rs2 = 0;
316static BitArrayRange R_rs2_0(4, 2);
317rs2 += R_rs2_0.read(ba) << 0;
318etiss_uint8 uimm = 0;
319static BitArrayRange R_uimm_6(5, 5);
320uimm += R_uimm_6.read(ba) << 6;
321static BitArrayRange R_uimm_2(6, 6);
322uimm += R_uimm_2.read(ba) << 2;
323etiss_uint8 rs1 = 0;
324static BitArrayRange R_rs1_0(9, 7);
325rs1 += R_rs1_0.read(ba) << 0;
326static BitArrayRange R_uimm_3(12, 10);
327uimm += R_uimm_3.read(ba) << 3;
328
329// -----------------------------------------------------------------------------
330
331 std::stringstream ss;
332// -----------------------------------------------------------------------------
333ss << "csw" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | uimm=" + std::to_string(uimm) + " | rs1=" + std::to_string(rs1) + "]");
334// -----------------------------------------------------------------------------
335 return ss.str();
336 }
337);
338
339// CADDI -----------------------------------------------------------------------
342 "caddi",
343 (uint64_t) 0x01,
344 (uint64_t) 0xe003,
345 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
346 {
347
348// -----------------------------------------------------------------------------
349
350// -----------------------------------------------------------------------------
351
352// -----------------------------------------------------------------------------
353// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
354etiss_uint8 imm = 0;
355static BitArrayRange R_imm_0(6, 2);
356imm += R_imm_0.read(ba) << 0;
357etiss_uint8 rs1 = 0;
358static BitArrayRange R_rs1_0(11, 7);
359rs1 += R_rs1_0.read(ba) << 0;
360static BitArrayRange R_imm_5(12, 12);
361imm += R_imm_5.read(ba) << 5;
362
363// NOLINTEND(clang-diagnostic-unused-but-set-variable)
364// -----------------------------------------------------------------------------
365
366 {
368
369 cp.code() = std::string("//CADDI\n");
370
371// -----------------------------------------------------------------------------
372cp.code() += "etiss_coverage_count(1, 45);\n";
373{ // block
374cp.code() += "etiss_coverage_count(1, 1189);\n";
375cp.code() += "{ // block\n";
376cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
377cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
378cp.code() += "} // block\n";
379} // block
380cp.code() += "etiss_coverage_count(1, 2304);\n";
381if ((rs1 % 32ULL) != 0LL) { // conditional
382cp.code() += "etiss_coverage_count(5, 2310, 2307, 2305, 2308, 2309);\n";
383cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] + " + std::to_string(((etiss_int8)(((etiss_int8)imm) << (2)) >> (2))) + "LL;\n";
384cp.code() += "etiss_coverage_count(10, 2325, 2315, 2314, 2312, 2324, 2320, 2319, 2317, 2323, 2321);\n";
385} // conditional
386cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
387cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
388// -----------------------------------------------------------------------------
389 cp.getAffectedRegisters().add("instructionPointer", 32);
390 }
391
392 return true;
393 },
394 0,
395 [] (BitArray & ba, Instruction & instr)
396 {
397// -----------------------------------------------------------------------------
398etiss_uint8 imm = 0;
399static BitArrayRange R_imm_0(6, 2);
400imm += R_imm_0.read(ba) << 0;
401etiss_uint8 rs1 = 0;
402static BitArrayRange R_rs1_0(11, 7);
403rs1 += R_rs1_0.read(ba) << 0;
404static BitArrayRange R_imm_5(12, 12);
405imm += R_imm_5.read(ba) << 5;
406
407// -----------------------------------------------------------------------------
408
409 std::stringstream ss;
410// -----------------------------------------------------------------------------
411ss << "caddi" << " # " << ba << (" [imm=" + std::to_string(imm) + " | rs1=" + std::to_string(rs1) + "]");
412// -----------------------------------------------------------------------------
413 return ss.str();
414 }
415);
416
417// CNOP ------------------------------------------------------------------------
420 "cnop",
421 (uint64_t) 0x01,
422 (uint64_t) 0xef83,
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 nzimm = 0;
433static BitArrayRange R_nzimm_0(6, 2);
434nzimm += R_nzimm_0.read(ba) << 0;
435static BitArrayRange R_nzimm_5(12, 12);
436nzimm += R_nzimm_5.read(ba) << 5;
437
438// NOLINTEND(clang-diagnostic-unused-but-set-variable)
439// -----------------------------------------------------------------------------
440
441 {
443
444 cp.code() = std::string("//CNOP\n");
445
446// -----------------------------------------------------------------------------
447cp.code() += "etiss_coverage_count(1, 46);\n";
448{ // block
449cp.code() += "etiss_coverage_count(1, 1189);\n";
450cp.code() += "{ // block\n";
451cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
452cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
453cp.code() += "} // block\n";
454} // block
455{ // block
456cp.code() += "etiss_coverage_count(1, 2326);\n";
457cp.code() += "{ // block\n";
458cp.code() += "} // block\n";
459} // block
460cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
461cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
462// -----------------------------------------------------------------------------
463 cp.getAffectedRegisters().add("instructionPointer", 32);
464 }
465
466 return true;
467 },
468 0,
469 [] (BitArray & ba, Instruction & instr)
470 {
471// -----------------------------------------------------------------------------
472etiss_uint8 nzimm = 0;
473static BitArrayRange R_nzimm_0(6, 2);
474nzimm += R_nzimm_0.read(ba) << 0;
475static BitArrayRange R_nzimm_5(12, 12);
476nzimm += R_nzimm_5.read(ba) << 5;
477
478// -----------------------------------------------------------------------------
479
480 std::stringstream ss;
481// -----------------------------------------------------------------------------
482ss << "cnop" << " # " << ba << (" [nzimm=" + std::to_string(nzimm) + "]");
483// -----------------------------------------------------------------------------
484 return ss.str();
485 }
486);
487
488// CJAL ------------------------------------------------------------------------
491 "cjal",
492 (uint64_t) 0x2001,
493 (uint64_t) 0xe003,
494 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
495 {
496
497// -----------------------------------------------------------------------------
498
499// -----------------------------------------------------------------------------
500
501// -----------------------------------------------------------------------------
502// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
503etiss_uint16 imm = 0;
504static BitArrayRange R_imm_5(2, 2);
505imm += R_imm_5.read(ba) << 5;
506static BitArrayRange R_imm_1(5, 3);
507imm += R_imm_1.read(ba) << 1;
508static BitArrayRange R_imm_7(6, 6);
509imm += R_imm_7.read(ba) << 7;
510static BitArrayRange R_imm_6(7, 7);
511imm += R_imm_6.read(ba) << 6;
512static BitArrayRange R_imm_10(8, 8);
513imm += R_imm_10.read(ba) << 10;
514static BitArrayRange R_imm_8(10, 9);
515imm += R_imm_8.read(ba) << 8;
516static BitArrayRange R_imm_4(11, 11);
517imm += R_imm_4.read(ba) << 4;
518static BitArrayRange R_imm_11(12, 12);
519imm += R_imm_11.read(ba) << 11;
520
521// NOLINTEND(clang-diagnostic-unused-but-set-variable)
522// -----------------------------------------------------------------------------
523
524 {
526
527 cp.code() = std::string("//CJAL\n");
528
529// -----------------------------------------------------------------------------
530cp.code() += "etiss_coverage_count(1, 47);\n";
531{ // block
532cp.code() += "etiss_coverage_count(1, 1189);\n";
533cp.code() += "{ // block\n";
534cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
535cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
536cp.code() += "} // block\n";
537} // block
538{ // block
539cp.code() += "etiss_coverage_count(1, 2341);\n";
540cp.code() += "{ // block\n";
541cp.code() += "*((RV32IMACFD*)cpu)->X[1ULL] = " + std::to_string(ic.current_address_ + 2ULL) + "ULL;\n";
542cp.code() += "etiss_coverage_count(6, 2333, 2329, 2328, 2332, 2330, 2331);\n";
543cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + ((etiss_int16)(((etiss_int16)imm) << (4)) >> (4))) + "LL;\n";
544cp.code() += "etiss_coverage_count(6, 2340, 2334, 2339, 2335, 2338, 2336);\n";
545cp.code() += "} // block\n";
546} // block
547cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
548cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
549// -----------------------------------------------------------------------------
550 cp.getAffectedRegisters().add("instructionPointer", 32);
551 }
552 {
554
555 cp.code() = std::string("//CJAL\n");
556
557// -----------------------------------------------------------------------------
558cp.code() += "return cpu->exception;\n";
559// -----------------------------------------------------------------------------
560 }
561
562 return true;
563 },
564 0,
565 [] (BitArray & ba, Instruction & instr)
566 {
567// -----------------------------------------------------------------------------
568etiss_uint16 imm = 0;
569static BitArrayRange R_imm_5(2, 2);
570imm += R_imm_5.read(ba) << 5;
571static BitArrayRange R_imm_1(5, 3);
572imm += R_imm_1.read(ba) << 1;
573static BitArrayRange R_imm_7(6, 6);
574imm += R_imm_7.read(ba) << 7;
575static BitArrayRange R_imm_6(7, 7);
576imm += R_imm_6.read(ba) << 6;
577static BitArrayRange R_imm_10(8, 8);
578imm += R_imm_10.read(ba) << 10;
579static BitArrayRange R_imm_8(10, 9);
580imm += R_imm_8.read(ba) << 8;
581static BitArrayRange R_imm_4(11, 11);
582imm += R_imm_4.read(ba) << 4;
583static BitArrayRange R_imm_11(12, 12);
584imm += R_imm_11.read(ba) << 11;
585
586// -----------------------------------------------------------------------------
587
588 std::stringstream ss;
589// -----------------------------------------------------------------------------
590ss << "cjal" << " # " << ba << (" [imm=" + std::to_string(imm) + "]");
591// -----------------------------------------------------------------------------
592 return ss.str();
593 }
594);
595
596// CLI -------------------------------------------------------------------------
599 "cli",
600 (uint64_t) 0x4001,
601 (uint64_t) 0xe003,
602 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
603 {
604
605// -----------------------------------------------------------------------------
606
607// -----------------------------------------------------------------------------
608
609// -----------------------------------------------------------------------------
610// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
611etiss_uint8 imm = 0;
612static BitArrayRange R_imm_0(6, 2);
613imm += R_imm_0.read(ba) << 0;
614etiss_uint8 rd = 0;
615static BitArrayRange R_rd_0(11, 7);
616rd += R_rd_0.read(ba) << 0;
617static BitArrayRange R_imm_5(12, 12);
618imm += R_imm_5.read(ba) << 5;
619
620// NOLINTEND(clang-diagnostic-unused-but-set-variable)
621// -----------------------------------------------------------------------------
622
623 {
625
626 cp.code() = std::string("//CLI\n");
627
628// -----------------------------------------------------------------------------
629cp.code() += "etiss_coverage_count(1, 48);\n";
630{ // block
631cp.code() += "etiss_coverage_count(1, 1189);\n";
632cp.code() += "{ // block\n";
633cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
634cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
635cp.code() += "} // block\n";
636} // block
637{ // block
638cp.code() += "etiss_coverage_count(1, 2358);\n";
639cp.code() += "{ // block\n";
640cp.code() += "etiss_coverage_count(1, 2342);\n";
641if ((rd % 32ULL) != 0LL) { // conditional
642cp.code() += "etiss_coverage_count(5, 2348, 2345, 2343, 2346, 2347);\n";
643cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = " + std::to_string(((etiss_int8)(((etiss_int8)imm) << (2)) >> (2))) + "LL;\n";
644cp.code() += "etiss_coverage_count(6, 2357, 2353, 2352, 2350, 2356, 2354);\n";
645} // conditional
646cp.code() += "} // block\n";
647} // block
648cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
649cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
650// -----------------------------------------------------------------------------
651 cp.getAffectedRegisters().add("instructionPointer", 32);
652 }
653
654 return true;
655 },
656 0,
657 [] (BitArray & ba, Instruction & instr)
658 {
659// -----------------------------------------------------------------------------
660etiss_uint8 imm = 0;
661static BitArrayRange R_imm_0(6, 2);
662imm += R_imm_0.read(ba) << 0;
663etiss_uint8 rd = 0;
664static BitArrayRange R_rd_0(11, 7);
665rd += R_rd_0.read(ba) << 0;
666static BitArrayRange R_imm_5(12, 12);
667imm += R_imm_5.read(ba) << 5;
668
669// -----------------------------------------------------------------------------
670
671 std::stringstream ss;
672// -----------------------------------------------------------------------------
673ss << "cli" << " # " << ba << (" [imm=" + std::to_string(imm) + " | rd=" + std::to_string(rd) + "]");
674// -----------------------------------------------------------------------------
675 return ss.str();
676 }
677);
678
679// CLUI ------------------------------------------------------------------------
682 "clui",
683 (uint64_t) 0x6001,
684 (uint64_t) 0xe003,
685 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
686 {
687
688// -----------------------------------------------------------------------------
689
690// -----------------------------------------------------------------------------
691
692// -----------------------------------------------------------------------------
693// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
694etiss_uint32 imm = 0;
695static BitArrayRange R_imm_12(6, 2);
696imm += R_imm_12.read(ba) << 12;
697etiss_uint8 rd = 0;
698static BitArrayRange R_rd_0(11, 7);
699rd += R_rd_0.read(ba) << 0;
700static BitArrayRange R_imm_17(12, 12);
701imm += R_imm_17.read(ba) << 17;
702
703// NOLINTEND(clang-diagnostic-unused-but-set-variable)
704// -----------------------------------------------------------------------------
705
706 {
708
709 cp.code() = std::string("//CLUI\n");
710
711// -----------------------------------------------------------------------------
712cp.code() += "etiss_coverage_count(1, 49);\n";
713{ // block
714cp.code() += "etiss_coverage_count(1, 1189);\n";
715cp.code() += "{ // block\n";
716cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
717cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
718cp.code() += "} // block\n";
719} // block
720{ // block
721cp.code() += "etiss_coverage_count(1, 2382);\n";
722cp.code() += "{ // block\n";
723cp.code() += "etiss_coverage_count(1, 2359);\n";
724if (imm == 0LL) { // conditional
725cp.code() += "etiss_coverage_count(3, 2362, 2360, 2361);\n";
726{ // procedure
727cp.code() += "{ // procedure\n";
728cp.code() += "RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
729cp.code() += "etiss_coverage_count(2, 2365, 2363);\n";
730cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
731cp.code() += "} // procedure\n";
732} // procedure
733} // conditional
734cp.code() += "etiss_coverage_count(1, 2366);\n";
735if ((rd % 32ULL) != 0LL) { // conditional
736cp.code() += "etiss_coverage_count(5, 2372, 2369, 2367, 2370, 2371);\n";
737cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = " + std::to_string(((etiss_int32)(((etiss_int32)imm) << (14)) >> (14))) + "LL;\n";
738cp.code() += "etiss_coverage_count(6, 2381, 2377, 2376, 2374, 2380, 2378);\n";
739} // conditional
740cp.code() += "} // block\n";
741} // block
742cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
743cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
744// -----------------------------------------------------------------------------
745 cp.getAffectedRegisters().add("instructionPointer", 32);
746 }
747 {
749
750 cp.code() = std::string("//CLUI\n");
751
752// -----------------------------------------------------------------------------
753cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
754// -----------------------------------------------------------------------------
755 }
756
757 return true;
758 },
759 0,
760 [] (BitArray & ba, Instruction & instr)
761 {
762// -----------------------------------------------------------------------------
763etiss_uint32 imm = 0;
764static BitArrayRange R_imm_12(6, 2);
765imm += R_imm_12.read(ba) << 12;
766etiss_uint8 rd = 0;
767static BitArrayRange R_rd_0(11, 7);
768rd += R_rd_0.read(ba) << 0;
769static BitArrayRange R_imm_17(12, 12);
770imm += R_imm_17.read(ba) << 17;
771
772// -----------------------------------------------------------------------------
773
774 std::stringstream ss;
775// -----------------------------------------------------------------------------
776ss << "clui" << " # " << ba << (" [imm=" + std::to_string(imm) + " | rd=" + std::to_string(rd) + "]");
777// -----------------------------------------------------------------------------
778 return ss.str();
779 }
780);
781
782// CADDI16SP -------------------------------------------------------------------
785 "caddi16sp",
786 (uint64_t) 0x6101,
787 (uint64_t) 0xef83,
788 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
789 {
790
791// -----------------------------------------------------------------------------
792
793// -----------------------------------------------------------------------------
794
795// -----------------------------------------------------------------------------
796// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
797etiss_uint16 nzimm = 0;
798static BitArrayRange R_nzimm_5(2, 2);
799nzimm += R_nzimm_5.read(ba) << 5;
800static BitArrayRange R_nzimm_7(4, 3);
801nzimm += R_nzimm_7.read(ba) << 7;
802static BitArrayRange R_nzimm_6(5, 5);
803nzimm += R_nzimm_6.read(ba) << 6;
804static BitArrayRange R_nzimm_4(6, 6);
805nzimm += R_nzimm_4.read(ba) << 4;
806static BitArrayRange R_nzimm_9(12, 12);
807nzimm += R_nzimm_9.read(ba) << 9;
808
809// NOLINTEND(clang-diagnostic-unused-but-set-variable)
810// -----------------------------------------------------------------------------
811
812 {
814
815 cp.code() = std::string("//CADDI16SP\n");
816
817// -----------------------------------------------------------------------------
818cp.code() += "etiss_coverage_count(1, 50);\n";
819{ // block
820cp.code() += "etiss_coverage_count(1, 1189);\n";
821cp.code() += "{ // block\n";
822cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
823cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
824cp.code() += "} // block\n";
825} // block
826cp.code() += "etiss_coverage_count(1, 2383);\n";
827if (nzimm) { // conditional
828cp.code() += "etiss_coverage_count(1, 2384);\n";
829cp.code() += "*((RV32IMACFD*)cpu)->X[2ULL] = *((RV32IMACFD*)cpu)->X[2ULL] + " + std::to_string(((etiss_int16)(((etiss_int16)nzimm) << (6)) >> (6))) + "LL;\n";
830cp.code() += "etiss_coverage_count(8, 2395, 2387, 2386, 2394, 2390, 2389, 2393, 2391);\n";
831} // conditional
832else { // conditional
833{ // procedure
834cp.code() += "{ // procedure\n";
835cp.code() += "RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
836cp.code() += "etiss_coverage_count(2, 2398, 2396);\n";
837cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
838cp.code() += "} // procedure\n";
839} // procedure
840} // conditional
841cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
842cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
843// -----------------------------------------------------------------------------
844 cp.getAffectedRegisters().add("instructionPointer", 32);
845 }
846 {
848
849 cp.code() = std::string("//CADDI16SP\n");
850
851// -----------------------------------------------------------------------------
852cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
853// -----------------------------------------------------------------------------
854 }
855
856 return true;
857 },
858 0,
859 [] (BitArray & ba, Instruction & instr)
860 {
861// -----------------------------------------------------------------------------
862etiss_uint16 nzimm = 0;
863static BitArrayRange R_nzimm_5(2, 2);
864nzimm += R_nzimm_5.read(ba) << 5;
865static BitArrayRange R_nzimm_7(4, 3);
866nzimm += R_nzimm_7.read(ba) << 7;
867static BitArrayRange R_nzimm_6(5, 5);
868nzimm += R_nzimm_6.read(ba) << 6;
869static BitArrayRange R_nzimm_4(6, 6);
870nzimm += R_nzimm_4.read(ba) << 4;
871static BitArrayRange R_nzimm_9(12, 12);
872nzimm += R_nzimm_9.read(ba) << 9;
873
874// -----------------------------------------------------------------------------
875
876 std::stringstream ss;
877// -----------------------------------------------------------------------------
878ss << "caddi16sp" << " # " << ba << (" [nzimm=" + std::to_string(nzimm) + "]");
879// -----------------------------------------------------------------------------
880 return ss.str();
881 }
882);
883
884// __reserved_clui -------------------------------------------------------------
887 "__reserved_clui",
888 (uint64_t) 0x6001,
889 (uint64_t) 0xf07f,
890 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
891 {
892
893// -----------------------------------------------------------------------------
894
895// -----------------------------------------------------------------------------
896
897// -----------------------------------------------------------------------------
898// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
899etiss_uint8 rd = 0;
900static BitArrayRange R_rd_0(11, 7);
901rd += R_rd_0.read(ba) << 0;
902
903// NOLINTEND(clang-diagnostic-unused-but-set-variable)
904// -----------------------------------------------------------------------------
905
906 {
908
909 cp.code() = std::string("//__reserved_clui\n");
910
911// -----------------------------------------------------------------------------
912cp.code() += "etiss_coverage_count(1, 51);\n";
913{ // block
914cp.code() += "etiss_coverage_count(1, 1189);\n";
915cp.code() += "{ // block\n";
916cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
917cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
918cp.code() += "} // block\n";
919} // block
920{ // procedure
921cp.code() += "{ // procedure\n";
922cp.code() += "RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
923cp.code() += "etiss_coverage_count(2, 2401, 2399);\n";
924cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
925cp.code() += "} // procedure\n";
926} // procedure
927cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
928cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
929// -----------------------------------------------------------------------------
930 cp.getAffectedRegisters().add("instructionPointer", 32);
931 }
932 {
934
935 cp.code() = std::string("//__reserved_clui\n");
936
937// -----------------------------------------------------------------------------
938cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
939// -----------------------------------------------------------------------------
940 }
941
942 return true;
943 },
944 0,
945 [] (BitArray & ba, Instruction & instr)
946 {
947// -----------------------------------------------------------------------------
948etiss_uint8 rd = 0;
949static BitArrayRange R_rd_0(11, 7);
950rd += R_rd_0.read(ba) << 0;
951
952// -----------------------------------------------------------------------------
953
954 std::stringstream ss;
955// -----------------------------------------------------------------------------
956ss << "__reserved_clui" << " # " << ba << (" [rd=" + std::to_string(rd) + "]");
957// -----------------------------------------------------------------------------
958 return ss.str();
959 }
960);
961
962// CSRLI -----------------------------------------------------------------------
965 "csrli",
966 (uint64_t) 0x8001,
967 (uint64_t) 0xfc03,
968 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
969 {
970
971// -----------------------------------------------------------------------------
972
973// -----------------------------------------------------------------------------
974
975// -----------------------------------------------------------------------------
976// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
977etiss_uint8 shamt = 0;
978static BitArrayRange R_shamt_0(6, 2);
979shamt += R_shamt_0.read(ba) << 0;
980etiss_uint8 rs1 = 0;
981static BitArrayRange R_rs1_0(9, 7);
982rs1 += R_rs1_0.read(ba) << 0;
983
984// NOLINTEND(clang-diagnostic-unused-but-set-variable)
985// -----------------------------------------------------------------------------
986
987 {
989
990 cp.code() = std::string("//CSRLI\n");
991
992// -----------------------------------------------------------------------------
993cp.code() += "etiss_coverage_count(1, 52);\n";
994{ // block
995cp.code() += "etiss_coverage_count(1, 1189);\n";
996cp.code() += "{ // block\n";
997cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
998cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
999cp.code() += "} // block\n";
1000} // block
1001{ // block
1002cp.code() += "etiss_coverage_count(1, 2418);\n";
1003cp.code() += "{ // block\n";
1004cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] >> " + std::to_string(shamt) + "ULL;\n";
1005cp.code() += "etiss_coverage_count(11, 2417, 2409, 2408, 2406, 2407, 2416, 2414, 2413, 2411, 2412, 2415);\n";
1006cp.code() += "} // block\n";
1007} // block
1008cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1009cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1010// -----------------------------------------------------------------------------
1011 cp.getAffectedRegisters().add("instructionPointer", 32);
1012 }
1013
1014 return true;
1015 },
1016 0,
1017 [] (BitArray & ba, Instruction & instr)
1018 {
1019// -----------------------------------------------------------------------------
1020etiss_uint8 shamt = 0;
1021static BitArrayRange R_shamt_0(6, 2);
1022shamt += R_shamt_0.read(ba) << 0;
1023etiss_uint8 rs1 = 0;
1024static BitArrayRange R_rs1_0(9, 7);
1025rs1 += R_rs1_0.read(ba) << 0;
1026
1027// -----------------------------------------------------------------------------
1028
1029 std::stringstream ss;
1030// -----------------------------------------------------------------------------
1031ss << "csrli" << " # " << ba << (" [shamt=" + std::to_string(shamt) + " | rs1=" + std::to_string(rs1) + "]");
1032// -----------------------------------------------------------------------------
1033 return ss.str();
1034 }
1035);
1036
1037// CSRAI -----------------------------------------------------------------------
1040 "csrai",
1041 (uint64_t) 0x8401,
1042 (uint64_t) 0xfc03,
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 shamt = 0;
1053static BitArrayRange R_shamt_0(6, 2);
1054shamt += R_shamt_0.read(ba) << 0;
1055etiss_uint8 rs1 = 0;
1056static BitArrayRange R_rs1_0(9, 7);
1057rs1 += R_rs1_0.read(ba) << 0;
1058
1059// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1060// -----------------------------------------------------------------------------
1061
1062 {
1064
1065 cp.code() = std::string("//CSRAI\n");
1066
1067// -----------------------------------------------------------------------------
1068cp.code() += "etiss_coverage_count(1, 53);\n";
1069{ // block
1070cp.code() += "etiss_coverage_count(1, 1189);\n";
1071cp.code() += "{ // block\n";
1072cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
1073cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1074cp.code() += "} // block\n";
1075} // block
1076{ // block
1077cp.code() += "etiss_coverage_count(1, 2461);\n";
1078cp.code() += "{ // block\n";
1079cp.code() += "etiss_coverage_count(1, 2422);\n";
1080if (shamt) { // conditional
1081cp.code() += "etiss_coverage_count(1, 2423);\n";
1082{ // block
1083cp.code() += "etiss_coverage_count(1, 2443);\n";
1084cp.code() += "{ // block\n";
1085cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] = ((etiss_int32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL])) >> " + std::to_string(shamt) + "ULL;\n";
1086cp.code() += "etiss_coverage_count(13, 2442, 2431, 2430, 2428, 2429, 2441, 2438, 2436, 2435, 2433, 2434, 2439, 2440);\n";
1087cp.code() += "} // block\n";
1088} // block
1089} // conditional
1090cp.code() += "} // block\n";
1091} // block
1092cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1093cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1094// -----------------------------------------------------------------------------
1095 cp.getAffectedRegisters().add("instructionPointer", 32);
1096 }
1097
1098 return true;
1099 },
1100 0,
1101 [] (BitArray & ba, Instruction & instr)
1102 {
1103// -----------------------------------------------------------------------------
1104etiss_uint8 shamt = 0;
1105static BitArrayRange R_shamt_0(6, 2);
1106shamt += R_shamt_0.read(ba) << 0;
1107etiss_uint8 rs1 = 0;
1108static BitArrayRange R_rs1_0(9, 7);
1109rs1 += R_rs1_0.read(ba) << 0;
1110
1111// -----------------------------------------------------------------------------
1112
1113 std::stringstream ss;
1114// -----------------------------------------------------------------------------
1115ss << "csrai" << " # " << ba << (" [shamt=" + std::to_string(shamt) + " | rs1=" + std::to_string(rs1) + "]");
1116// -----------------------------------------------------------------------------
1117 return ss.str();
1118 }
1119);
1120
1121// CANDI -----------------------------------------------------------------------
1124 "candi",
1125 (uint64_t) 0x8801,
1126 (uint64_t) 0xec03,
1127 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1128 {
1129
1130// -----------------------------------------------------------------------------
1131
1132// -----------------------------------------------------------------------------
1133
1134// -----------------------------------------------------------------------------
1135// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1136etiss_uint8 imm = 0;
1137static BitArrayRange R_imm_0(6, 2);
1138imm += R_imm_0.read(ba) << 0;
1139etiss_uint8 rs1 = 0;
1140static BitArrayRange R_rs1_0(9, 7);
1141rs1 += R_rs1_0.read(ba) << 0;
1142static BitArrayRange R_imm_5(12, 12);
1143imm += R_imm_5.read(ba) << 5;
1144
1145// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1146// -----------------------------------------------------------------------------
1147
1148 {
1150
1151 cp.code() = std::string("//CANDI\n");
1152
1153// -----------------------------------------------------------------------------
1154cp.code() += "etiss_coverage_count(1, 54);\n";
1155{ // block
1156cp.code() += "etiss_coverage_count(1, 1189);\n";
1157cp.code() += "{ // block\n";
1158cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
1159cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1160cp.code() += "} // block\n";
1161} // block
1162{ // block
1163cp.code() += "etiss_coverage_count(1, 2477);\n";
1164cp.code() += "{ // block\n";
1165cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] & " + std::to_string(((etiss_int8)(((etiss_int8)imm) << (2)) >> (2))) + "LL;\n";
1166cp.code() += "etiss_coverage_count(12, 2476, 2466, 2465, 2463, 2464, 2475, 2471, 2470, 2468, 2469, 2474, 2472);\n";
1167cp.code() += "} // block\n";
1168} // block
1169cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1170cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1171// -----------------------------------------------------------------------------
1172 cp.getAffectedRegisters().add("instructionPointer", 32);
1173 }
1174
1175 return true;
1176 },
1177 0,
1178 [] (BitArray & ba, Instruction & instr)
1179 {
1180// -----------------------------------------------------------------------------
1181etiss_uint8 imm = 0;
1182static BitArrayRange R_imm_0(6, 2);
1183imm += R_imm_0.read(ba) << 0;
1184etiss_uint8 rs1 = 0;
1185static BitArrayRange R_rs1_0(9, 7);
1186rs1 += R_rs1_0.read(ba) << 0;
1187static BitArrayRange R_imm_5(12, 12);
1188imm += R_imm_5.read(ba) << 5;
1189
1190// -----------------------------------------------------------------------------
1191
1192 std::stringstream ss;
1193// -----------------------------------------------------------------------------
1194ss << "candi" << " # " << ba << (" [imm=" + std::to_string(imm) + " | rs1=" + std::to_string(rs1) + "]");
1195// -----------------------------------------------------------------------------
1196 return ss.str();
1197 }
1198);
1199
1200// CSUB ------------------------------------------------------------------------
1203 "csub",
1204 (uint64_t) 0x8c01,
1205 (uint64_t) 0xfc63,
1206 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1207 {
1208
1209// -----------------------------------------------------------------------------
1210
1211// -----------------------------------------------------------------------------
1212
1213// -----------------------------------------------------------------------------
1214// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1215etiss_uint8 rs2 = 0;
1216static BitArrayRange R_rs2_0(4, 2);
1217rs2 += R_rs2_0.read(ba) << 0;
1218etiss_uint8 rd = 0;
1219static BitArrayRange R_rd_0(9, 7);
1220rd += R_rd_0.read(ba) << 0;
1221
1222// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1223// -----------------------------------------------------------------------------
1224
1225 {
1227
1228 cp.code() = std::string("//CSUB\n");
1229
1230// -----------------------------------------------------------------------------
1231cp.code() += "etiss_coverage_count(1, 55);\n";
1232{ // block
1233cp.code() += "etiss_coverage_count(1, 1189);\n";
1234cp.code() += "{ // block\n";
1235cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
1236cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1237cp.code() += "} // block\n";
1238} // block
1239{ // block
1240cp.code() += "etiss_coverage_count(1, 2495);\n";
1241cp.code() += "{ // block\n";
1242cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] - *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) + "ULL];\n";
1243cp.code() += "etiss_coverage_count(14, 2494, 2482, 2481, 2479, 2480, 2493, 2487, 2486, 2484, 2485, 2492, 2491, 2489, 2490);\n";
1244cp.code() += "} // block\n";
1245} // block
1246cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1247cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1248// -----------------------------------------------------------------------------
1249 cp.getAffectedRegisters().add("instructionPointer", 32);
1250 }
1251
1252 return true;
1253 },
1254 0,
1255 [] (BitArray & ba, Instruction & instr)
1256 {
1257// -----------------------------------------------------------------------------
1258etiss_uint8 rs2 = 0;
1259static BitArrayRange R_rs2_0(4, 2);
1260rs2 += R_rs2_0.read(ba) << 0;
1261etiss_uint8 rd = 0;
1262static BitArrayRange R_rd_0(9, 7);
1263rd += R_rd_0.read(ba) << 0;
1264
1265// -----------------------------------------------------------------------------
1266
1267 std::stringstream ss;
1268// -----------------------------------------------------------------------------
1269ss << "csub" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
1270// -----------------------------------------------------------------------------
1271 return ss.str();
1272 }
1273);
1274
1275// CXOR ------------------------------------------------------------------------
1278 "cxor",
1279 (uint64_t) 0x8c21,
1280 (uint64_t) 0xfc63,
1281 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1282 {
1283
1284// -----------------------------------------------------------------------------
1285
1286// -----------------------------------------------------------------------------
1287
1288// -----------------------------------------------------------------------------
1289// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1290etiss_uint8 rs2 = 0;
1291static BitArrayRange R_rs2_0(4, 2);
1292rs2 += R_rs2_0.read(ba) << 0;
1293etiss_uint8 rd = 0;
1294static BitArrayRange R_rd_0(9, 7);
1295rd += R_rd_0.read(ba) << 0;
1296
1297// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1298// -----------------------------------------------------------------------------
1299
1300 {
1302
1303 cp.code() = std::string("//CXOR\n");
1304
1305// -----------------------------------------------------------------------------
1306cp.code() += "etiss_coverage_count(1, 56);\n";
1307{ // block
1308cp.code() += "etiss_coverage_count(1, 1189);\n";
1309cp.code() += "{ // block\n";
1310cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
1311cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1312cp.code() += "} // block\n";
1313} // block
1314{ // block
1315cp.code() += "etiss_coverage_count(1, 2513);\n";
1316cp.code() += "{ // block\n";
1317cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] ^ *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) + "ULL];\n";
1318cp.code() += "etiss_coverage_count(14, 2512, 2500, 2499, 2497, 2498, 2511, 2505, 2504, 2502, 2503, 2510, 2509, 2507, 2508);\n";
1319cp.code() += "} // block\n";
1320} // block
1321cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1322cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1323// -----------------------------------------------------------------------------
1324 cp.getAffectedRegisters().add("instructionPointer", 32);
1325 }
1326
1327 return true;
1328 },
1329 0,
1330 [] (BitArray & ba, Instruction & instr)
1331 {
1332// -----------------------------------------------------------------------------
1333etiss_uint8 rs2 = 0;
1334static BitArrayRange R_rs2_0(4, 2);
1335rs2 += R_rs2_0.read(ba) << 0;
1336etiss_uint8 rd = 0;
1337static BitArrayRange R_rd_0(9, 7);
1338rd += R_rd_0.read(ba) << 0;
1339
1340// -----------------------------------------------------------------------------
1341
1342 std::stringstream ss;
1343// -----------------------------------------------------------------------------
1344ss << "cxor" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
1345// -----------------------------------------------------------------------------
1346 return ss.str();
1347 }
1348);
1349
1350// COR -------------------------------------------------------------------------
1353 "cor",
1354 (uint64_t) 0x8c41,
1355 (uint64_t) 0xfc63,
1356 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1357 {
1358
1359// -----------------------------------------------------------------------------
1360
1361// -----------------------------------------------------------------------------
1362
1363// -----------------------------------------------------------------------------
1364// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1365etiss_uint8 rs2 = 0;
1366static BitArrayRange R_rs2_0(4, 2);
1367rs2 += R_rs2_0.read(ba) << 0;
1368etiss_uint8 rd = 0;
1369static BitArrayRange R_rd_0(9, 7);
1370rd += R_rd_0.read(ba) << 0;
1371
1372// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1373// -----------------------------------------------------------------------------
1374
1375 {
1377
1378 cp.code() = std::string("//COR\n");
1379
1380// -----------------------------------------------------------------------------
1381cp.code() += "etiss_coverage_count(1, 57);\n";
1382{ // block
1383cp.code() += "etiss_coverage_count(1, 1189);\n";
1384cp.code() += "{ // block\n";
1385cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
1386cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1387cp.code() += "} // block\n";
1388} // block
1389{ // block
1390cp.code() += "etiss_coverage_count(1, 2531);\n";
1391cp.code() += "{ // block\n";
1392cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] | *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) + "ULL];\n";
1393cp.code() += "etiss_coverage_count(14, 2530, 2518, 2517, 2515, 2516, 2529, 2523, 2522, 2520, 2521, 2528, 2527, 2525, 2526);\n";
1394cp.code() += "} // block\n";
1395} // block
1396cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1397cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1398// -----------------------------------------------------------------------------
1399 cp.getAffectedRegisters().add("instructionPointer", 32);
1400 }
1401
1402 return true;
1403 },
1404 0,
1405 [] (BitArray & ba, Instruction & instr)
1406 {
1407// -----------------------------------------------------------------------------
1408etiss_uint8 rs2 = 0;
1409static BitArrayRange R_rs2_0(4, 2);
1410rs2 += R_rs2_0.read(ba) << 0;
1411etiss_uint8 rd = 0;
1412static BitArrayRange R_rd_0(9, 7);
1413rd += R_rd_0.read(ba) << 0;
1414
1415// -----------------------------------------------------------------------------
1416
1417 std::stringstream ss;
1418// -----------------------------------------------------------------------------
1419ss << "cor" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
1420// -----------------------------------------------------------------------------
1421 return ss.str();
1422 }
1423);
1424
1425// CAND ------------------------------------------------------------------------
1428 "cand",
1429 (uint64_t) 0x8c61,
1430 (uint64_t) 0xfc63,
1431 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1432 {
1433
1434// -----------------------------------------------------------------------------
1435
1436// -----------------------------------------------------------------------------
1437
1438// -----------------------------------------------------------------------------
1439// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1440etiss_uint8 rs2 = 0;
1441static BitArrayRange R_rs2_0(4, 2);
1442rs2 += R_rs2_0.read(ba) << 0;
1443etiss_uint8 rd = 0;
1444static BitArrayRange R_rd_0(9, 7);
1445rd += R_rd_0.read(ba) << 0;
1446
1447// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1448// -----------------------------------------------------------------------------
1449
1450 {
1452
1453 cp.code() = std::string("//CAND\n");
1454
1455// -----------------------------------------------------------------------------
1456cp.code() += "etiss_coverage_count(1, 58);\n";
1457{ // block
1458cp.code() += "etiss_coverage_count(1, 1189);\n";
1459cp.code() += "{ // block\n";
1460cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
1461cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1462cp.code() += "} // block\n";
1463} // block
1464{ // block
1465cp.code() += "etiss_coverage_count(1, 2549);\n";
1466cp.code() += "{ // block\n";
1467cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] & *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) + "ULL];\n";
1468cp.code() += "etiss_coverage_count(14, 2548, 2536, 2535, 2533, 2534, 2547, 2541, 2540, 2538, 2539, 2546, 2545, 2543, 2544);\n";
1469cp.code() += "} // block\n";
1470} // block
1471cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1472cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1473// -----------------------------------------------------------------------------
1474 cp.getAffectedRegisters().add("instructionPointer", 32);
1475 }
1476
1477 return true;
1478 },
1479 0,
1480 [] (BitArray & ba, Instruction & instr)
1481 {
1482// -----------------------------------------------------------------------------
1483etiss_uint8 rs2 = 0;
1484static BitArrayRange R_rs2_0(4, 2);
1485rs2 += R_rs2_0.read(ba) << 0;
1486etiss_uint8 rd = 0;
1487static BitArrayRange R_rd_0(9, 7);
1488rd += R_rd_0.read(ba) << 0;
1489
1490// -----------------------------------------------------------------------------
1491
1492 std::stringstream ss;
1493// -----------------------------------------------------------------------------
1494ss << "cand" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
1495// -----------------------------------------------------------------------------
1496 return ss.str();
1497 }
1498);
1499
1500// CJ --------------------------------------------------------------------------
1503 "cj",
1504 (uint64_t) 0xa001,
1505 (uint64_t) 0xe003,
1506 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1507 {
1508
1509// -----------------------------------------------------------------------------
1510
1511// -----------------------------------------------------------------------------
1512
1513// -----------------------------------------------------------------------------
1514// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1515etiss_uint16 imm = 0;
1516static BitArrayRange R_imm_5(2, 2);
1517imm += R_imm_5.read(ba) << 5;
1518static BitArrayRange R_imm_1(5, 3);
1519imm += R_imm_1.read(ba) << 1;
1520static BitArrayRange R_imm_7(6, 6);
1521imm += R_imm_7.read(ba) << 7;
1522static BitArrayRange R_imm_6(7, 7);
1523imm += R_imm_6.read(ba) << 6;
1524static BitArrayRange R_imm_10(8, 8);
1525imm += R_imm_10.read(ba) << 10;
1526static BitArrayRange R_imm_8(10, 9);
1527imm += R_imm_8.read(ba) << 8;
1528static BitArrayRange R_imm_4(11, 11);
1529imm += R_imm_4.read(ba) << 4;
1530static BitArrayRange R_imm_11(12, 12);
1531imm += R_imm_11.read(ba) << 11;
1532
1533// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1534// -----------------------------------------------------------------------------
1535
1536 {
1538
1539 cp.code() = std::string("//CJ\n");
1540
1541// -----------------------------------------------------------------------------
1542cp.code() += "etiss_coverage_count(1, 59);\n";
1543{ // block
1544cp.code() += "etiss_coverage_count(1, 1189);\n";
1545cp.code() += "{ // block\n";
1546cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
1547cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1548cp.code() += "} // block\n";
1549} // block
1550cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + ((etiss_int16)(((etiss_int16)imm) << (4)) >> (4))) + "LL;\n";
1551cp.code() += "etiss_coverage_count(6, 2556, 2550, 2555, 2551, 2554, 2552);\n";
1552cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1553cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1554// -----------------------------------------------------------------------------
1555 cp.getAffectedRegisters().add("instructionPointer", 32);
1556 }
1557 {
1559
1560 cp.code() = std::string("//CJ\n");
1561
1562// -----------------------------------------------------------------------------
1563cp.code() += "return cpu->exception;\n";
1564// -----------------------------------------------------------------------------
1565 }
1566
1567 return true;
1568 },
1569 0,
1570 [] (BitArray & ba, Instruction & instr)
1571 {
1572// -----------------------------------------------------------------------------
1573etiss_uint16 imm = 0;
1574static BitArrayRange R_imm_5(2, 2);
1575imm += R_imm_5.read(ba) << 5;
1576static BitArrayRange R_imm_1(5, 3);
1577imm += R_imm_1.read(ba) << 1;
1578static BitArrayRange R_imm_7(6, 6);
1579imm += R_imm_7.read(ba) << 7;
1580static BitArrayRange R_imm_6(7, 7);
1581imm += R_imm_6.read(ba) << 6;
1582static BitArrayRange R_imm_10(8, 8);
1583imm += R_imm_10.read(ba) << 10;
1584static BitArrayRange R_imm_8(10, 9);
1585imm += R_imm_8.read(ba) << 8;
1586static BitArrayRange R_imm_4(11, 11);
1587imm += R_imm_4.read(ba) << 4;
1588static BitArrayRange R_imm_11(12, 12);
1589imm += R_imm_11.read(ba) << 11;
1590
1591// -----------------------------------------------------------------------------
1592
1593 std::stringstream ss;
1594// -----------------------------------------------------------------------------
1595ss << "cj" << " # " << ba << (" [imm=" + std::to_string(imm) + "]");
1596// -----------------------------------------------------------------------------
1597 return ss.str();
1598 }
1599);
1600
1601// CBEQZ -----------------------------------------------------------------------
1604 "cbeqz",
1605 (uint64_t) 0xc001,
1606 (uint64_t) 0xe003,
1607 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1608 {
1609
1610// -----------------------------------------------------------------------------
1611
1612// -----------------------------------------------------------------------------
1613
1614// -----------------------------------------------------------------------------
1615// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1616etiss_uint16 imm = 0;
1617static BitArrayRange R_imm_5(2, 2);
1618imm += R_imm_5.read(ba) << 5;
1619static BitArrayRange R_imm_1(4, 3);
1620imm += R_imm_1.read(ba) << 1;
1621static BitArrayRange R_imm_6(6, 5);
1622imm += R_imm_6.read(ba) << 6;
1623etiss_uint8 rs1 = 0;
1624static BitArrayRange R_rs1_0(9, 7);
1625rs1 += R_rs1_0.read(ba) << 0;
1626static BitArrayRange R_imm_3(11, 10);
1627imm += R_imm_3.read(ba) << 3;
1628static BitArrayRange R_imm_8(12, 12);
1629imm += R_imm_8.read(ba) << 8;
1630
1631// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1632// -----------------------------------------------------------------------------
1633
1634 {
1636
1637 cp.code() = std::string("//CBEQZ\n");
1638
1639// -----------------------------------------------------------------------------
1640cp.code() += "etiss_coverage_count(1, 60);\n";
1641{ // block
1642cp.code() += "etiss_coverage_count(1, 1189);\n";
1643cp.code() += "{ // block\n";
1644cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
1645cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1646cp.code() += "} // block\n";
1647} // block
1648cp.code() += "etiss_coverage_count(1, 2557);\n";
1649cp.code() += "if (*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] == 0LL) { // conditional\n";
1650cp.code() += "etiss_coverage_count(6, 2564, 2562, 2561, 2559, 2560, 2563);\n";
1651cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + ((etiss_int16)(((etiss_int16)imm) << (7)) >> (7))) + "LL;\n";
1652cp.code() += "etiss_coverage_count(6, 2571, 2565, 2570, 2566, 2569, 2567);\n";
1653cp.code() += "} // conditional\n";
1654cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1655cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1656// -----------------------------------------------------------------------------
1657 cp.getAffectedRegisters().add("instructionPointer", 32);
1658 }
1659 {
1661
1662 cp.code() = std::string("//CBEQZ\n");
1663
1664// -----------------------------------------------------------------------------
1665cp.code() += "if (cpu->nextPc != " + std::to_string(ic.current_address_ + 2) + "ULL) return cpu->exception;\n";
1666// -----------------------------------------------------------------------------
1667 }
1668
1669 return true;
1670 },
1671 0,
1672 [] (BitArray & ba, Instruction & instr)
1673 {
1674// -----------------------------------------------------------------------------
1675etiss_uint16 imm = 0;
1676static BitArrayRange R_imm_5(2, 2);
1677imm += R_imm_5.read(ba) << 5;
1678static BitArrayRange R_imm_1(4, 3);
1679imm += R_imm_1.read(ba) << 1;
1680static BitArrayRange R_imm_6(6, 5);
1681imm += R_imm_6.read(ba) << 6;
1682etiss_uint8 rs1 = 0;
1683static BitArrayRange R_rs1_0(9, 7);
1684rs1 += R_rs1_0.read(ba) << 0;
1685static BitArrayRange R_imm_3(11, 10);
1686imm += R_imm_3.read(ba) << 3;
1687static BitArrayRange R_imm_8(12, 12);
1688imm += R_imm_8.read(ba) << 8;
1689
1690// -----------------------------------------------------------------------------
1691
1692 std::stringstream ss;
1693// -----------------------------------------------------------------------------
1694ss << "cbeqz" << " # " << ba << (" [imm=" + std::to_string(imm) + " | rs1=" + std::to_string(rs1) + "]");
1695// -----------------------------------------------------------------------------
1696 return ss.str();
1697 }
1698);
1699
1700// CBNEZ -----------------------------------------------------------------------
1703 "cbnez",
1704 (uint64_t) 0xe001,
1705 (uint64_t) 0xe003,
1706 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1707 {
1708
1709// -----------------------------------------------------------------------------
1710
1711// -----------------------------------------------------------------------------
1712
1713// -----------------------------------------------------------------------------
1714// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1715etiss_uint16 imm = 0;
1716static BitArrayRange R_imm_5(2, 2);
1717imm += R_imm_5.read(ba) << 5;
1718static BitArrayRange R_imm_1(4, 3);
1719imm += R_imm_1.read(ba) << 1;
1720static BitArrayRange R_imm_6(6, 5);
1721imm += R_imm_6.read(ba) << 6;
1722etiss_uint8 rs1 = 0;
1723static BitArrayRange R_rs1_0(9, 7);
1724rs1 += R_rs1_0.read(ba) << 0;
1725static BitArrayRange R_imm_3(11, 10);
1726imm += R_imm_3.read(ba) << 3;
1727static BitArrayRange R_imm_8(12, 12);
1728imm += R_imm_8.read(ba) << 8;
1729
1730// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1731// -----------------------------------------------------------------------------
1732
1733 {
1735
1736 cp.code() = std::string("//CBNEZ\n");
1737
1738// -----------------------------------------------------------------------------
1739cp.code() += "etiss_coverage_count(1, 61);\n";
1740{ // block
1741cp.code() += "etiss_coverage_count(1, 1189);\n";
1742cp.code() += "{ // block\n";
1743cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
1744cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1745cp.code() += "} // block\n";
1746} // block
1747cp.code() += "etiss_coverage_count(1, 2572);\n";
1748cp.code() += "if (*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] != 0LL) { // conditional\n";
1749cp.code() += "etiss_coverage_count(6, 2579, 2577, 2576, 2574, 2575, 2578);\n";
1750cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + ((etiss_int16)(((etiss_int16)imm) << (7)) >> (7))) + "LL;\n";
1751cp.code() += "etiss_coverage_count(6, 2586, 2580, 2585, 2581, 2584, 2582);\n";
1752cp.code() += "} // conditional\n";
1753cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1754cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1755// -----------------------------------------------------------------------------
1756 cp.getAffectedRegisters().add("instructionPointer", 32);
1757 }
1758 {
1760
1761 cp.code() = std::string("//CBNEZ\n");
1762
1763// -----------------------------------------------------------------------------
1764cp.code() += "if (cpu->nextPc != " + std::to_string(ic.current_address_ + 2) + "ULL) return cpu->exception;\n";
1765// -----------------------------------------------------------------------------
1766 }
1767
1768 return true;
1769 },
1770 0,
1771 [] (BitArray & ba, Instruction & instr)
1772 {
1773// -----------------------------------------------------------------------------
1774etiss_uint16 imm = 0;
1775static BitArrayRange R_imm_5(2, 2);
1776imm += R_imm_5.read(ba) << 5;
1777static BitArrayRange R_imm_1(4, 3);
1778imm += R_imm_1.read(ba) << 1;
1779static BitArrayRange R_imm_6(6, 5);
1780imm += R_imm_6.read(ba) << 6;
1781etiss_uint8 rs1 = 0;
1782static BitArrayRange R_rs1_0(9, 7);
1783rs1 += R_rs1_0.read(ba) << 0;
1784static BitArrayRange R_imm_3(11, 10);
1785imm += R_imm_3.read(ba) << 3;
1786static BitArrayRange R_imm_8(12, 12);
1787imm += R_imm_8.read(ba) << 8;
1788
1789// -----------------------------------------------------------------------------
1790
1791 std::stringstream ss;
1792// -----------------------------------------------------------------------------
1793ss << "cbnez" << " # " << ba << (" [imm=" + std::to_string(imm) + " | rs1=" + std::to_string(rs1) + "]");
1794// -----------------------------------------------------------------------------
1795 return ss.str();
1796 }
1797);
1798
1799// CSLLI -----------------------------------------------------------------------
1802 "cslli",
1803 (uint64_t) 0x02,
1804 (uint64_t) 0xf003,
1805 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1806 {
1807
1808// -----------------------------------------------------------------------------
1809
1810// -----------------------------------------------------------------------------
1811
1812// -----------------------------------------------------------------------------
1813// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1814etiss_uint8 nzuimm = 0;
1815static BitArrayRange R_nzuimm_0(6, 2);
1816nzuimm += R_nzuimm_0.read(ba) << 0;
1817etiss_uint8 rs1 = 0;
1818static BitArrayRange R_rs1_0(11, 7);
1819rs1 += R_rs1_0.read(ba) << 0;
1820
1821// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1822// -----------------------------------------------------------------------------
1823
1824 {
1826
1827 cp.code() = std::string("//CSLLI\n");
1828
1829// -----------------------------------------------------------------------------
1830cp.code() += "etiss_coverage_count(1, 62);\n";
1831{ // block
1832cp.code() += "etiss_coverage_count(1, 1189);\n";
1833cp.code() += "{ // block\n";
1834cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
1835cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1836cp.code() += "} // block\n";
1837} // block
1838cp.code() += "etiss_coverage_count(1, 2590);\n";
1839if (nzuimm) { // conditional
1840cp.code() += "etiss_coverage_count(1, 2591);\n";
1841cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] << " + std::to_string(nzuimm) + "ULL;\n";
1842cp.code() += "etiss_coverage_count(9, 2604, 2596, 2595, 2593, 2603, 2601, 2600, 2598, 2602);\n";
1843} // conditional
1844cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1845cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1846// -----------------------------------------------------------------------------
1847 cp.getAffectedRegisters().add("instructionPointer", 32);
1848 }
1849
1850 return true;
1851 },
1852 0,
1853 [] (BitArray & ba, Instruction & instr)
1854 {
1855// -----------------------------------------------------------------------------
1856etiss_uint8 nzuimm = 0;
1857static BitArrayRange R_nzuimm_0(6, 2);
1858nzuimm += R_nzuimm_0.read(ba) << 0;
1859etiss_uint8 rs1 = 0;
1860static BitArrayRange R_rs1_0(11, 7);
1861rs1 += R_rs1_0.read(ba) << 0;
1862
1863// -----------------------------------------------------------------------------
1864
1865 std::stringstream ss;
1866// -----------------------------------------------------------------------------
1867ss << "cslli" << " # " << ba << (" [nzuimm=" + std::to_string(nzuimm) + " | rs1=" + std::to_string(rs1) + "]");
1868// -----------------------------------------------------------------------------
1869 return ss.str();
1870 }
1871);
1872
1873// CLWSP -----------------------------------------------------------------------
1876 "clwsp",
1877 (uint64_t) 0x4002,
1878 (uint64_t) 0xe003,
1879 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1880 {
1881
1882// -----------------------------------------------------------------------------
1883
1884// -----------------------------------------------------------------------------
1885
1886// -----------------------------------------------------------------------------
1887// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1888etiss_uint8 uimm = 0;
1889static BitArrayRange R_uimm_6(3, 2);
1890uimm += R_uimm_6.read(ba) << 6;
1891static BitArrayRange R_uimm_2(6, 4);
1892uimm += R_uimm_2.read(ba) << 2;
1893etiss_uint8 rd = 0;
1894static BitArrayRange R_rd_0(11, 7);
1895rd += R_rd_0.read(ba) << 0;
1896static BitArrayRange R_uimm_5(12, 12);
1897uimm += R_uimm_5.read(ba) << 5;
1898
1899// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1900// -----------------------------------------------------------------------------
1901
1902 {
1904
1905 cp.code() = std::string("//CLWSP\n");
1906
1907// -----------------------------------------------------------------------------
1908cp.code() += "etiss_coverage_count(1, 63);\n";
1909{ // block
1910cp.code() += "etiss_coverage_count(1, 1189);\n";
1911cp.code() += "{ // block\n";
1912cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
1913cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1914cp.code() += "} // block\n";
1915} // block
1916{ // block
1917cp.code() += "etiss_coverage_count(1, 2640);\n";
1918cp.code() += "{ // block\n";
1919cp.code() += "etiss_coverage_count(1, 2605);\n";
1920if (rd % 32ULL) { // conditional
1921cp.code() += "etiss_coverage_count(2, 2608, 2606);\n";
1922{ // block
1923cp.code() += "etiss_coverage_count(1, 2636);\n";
1924cp.code() += "{ // block\n";
1925cp.code() += "etiss_uint32 offs = (etiss_uint32)((*((RV32IMACFD*)cpu)->X[2ULL] + " + std::to_string(uimm) + "ULL));\n";
1926cp.code() += "etiss_coverage_count(7, 2618, 2617, 2614, 2612, 2611, 2613, 2615);\n";
1927cp.code() += "etiss_uint32 mem_val_0;\n";
1928cp.code() += "cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";
1929cp.code() += "if (cpu->exception) { // conditional\n";
1930{ // procedure
1931cp.code() += "{ // procedure\n";
1932cp.code() += "RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
1933cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
1934cp.code() += "} // procedure\n";
1935} // procedure
1936cp.code() += "} // conditional\n";
1937cp.code() += "etiss_int32 res = mem_val_0;\n";
1938cp.code() += "etiss_coverage_count(5, 2626, 2625, 2623, 2621, 2622);\n";
1939cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_int32)(res);\n";
1940cp.code() += "etiss_coverage_count(6, 2635, 2631, 2630, 2628, 2634, 2632);\n";
1941cp.code() += "} // block\n";
1942} // block
1943} // conditional
1944else { // conditional
1945{ // procedure
1946cp.code() += "{ // procedure\n";
1947cp.code() += "RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";
1948cp.code() += "etiss_coverage_count(3, 2639, 2637, 2638);\n";
1949cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
1950cp.code() += "} // procedure\n";
1951} // procedure
1952} // conditional
1953cp.code() += "} // block\n";
1954} // block
1955cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1956cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1957// -----------------------------------------------------------------------------
1958 cp.getAffectedRegisters().add("instructionPointer", 32);
1959 }
1960 {
1962
1963 cp.code() = std::string("//CLWSP\n");
1964
1965// -----------------------------------------------------------------------------
1966cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
1967// -----------------------------------------------------------------------------
1968 }
1969
1970 return true;
1971 },
1972 0,
1973 [] (BitArray & ba, Instruction & instr)
1974 {
1975// -----------------------------------------------------------------------------
1976etiss_uint8 uimm = 0;
1977static BitArrayRange R_uimm_6(3, 2);
1978uimm += R_uimm_6.read(ba) << 6;
1979static BitArrayRange R_uimm_2(6, 4);
1980uimm += R_uimm_2.read(ba) << 2;
1981etiss_uint8 rd = 0;
1982static BitArrayRange R_rd_0(11, 7);
1983rd += R_rd_0.read(ba) << 0;
1984static BitArrayRange R_uimm_5(12, 12);
1985uimm += R_uimm_5.read(ba) << 5;
1986
1987// -----------------------------------------------------------------------------
1988
1989 std::stringstream ss;
1990// -----------------------------------------------------------------------------
1991ss << "clwsp" << " # " << ba << (" [uimm=" + std::to_string(uimm) + " | rd=" + std::to_string(rd) + "]");
1992// -----------------------------------------------------------------------------
1993 return ss.str();
1994 }
1995);
1996
1997// CMV -------------------------------------------------------------------------
2000 "cmv",
2001 (uint64_t) 0x8002,
2002 (uint64_t) 0xf003,
2003 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2004 {
2005
2006// -----------------------------------------------------------------------------
2007
2008// -----------------------------------------------------------------------------
2009
2010// -----------------------------------------------------------------------------
2011// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2012etiss_uint8 rs2 = 0;
2013static BitArrayRange R_rs2_0(6, 2);
2014rs2 += R_rs2_0.read(ba) << 0;
2015etiss_uint8 rd = 0;
2016static BitArrayRange R_rd_0(11, 7);
2017rd += R_rd_0.read(ba) << 0;
2018
2019// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2020// -----------------------------------------------------------------------------
2021
2022 {
2024
2025 cp.code() = std::string("//CMV\n");
2026
2027// -----------------------------------------------------------------------------
2028cp.code() += "etiss_coverage_count(1, 64);\n";
2029{ // block
2030cp.code() += "etiss_coverage_count(1, 1189);\n";
2031cp.code() += "{ // block\n";
2032cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
2033cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2034cp.code() += "} // block\n";
2035} // block
2036cp.code() += "etiss_coverage_count(1, 2641);\n";
2037if ((rd % 32ULL) != 0LL) { // conditional
2038cp.code() += "etiss_coverage_count(5, 2647, 2644, 2642, 2645, 2646);\n";
2039cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) + "ULL];\n";
2040cp.code() += "etiss_coverage_count(7, 2658, 2652, 2651, 2649, 2657, 2656, 2654);\n";
2041} // conditional
2042cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2043cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2044// -----------------------------------------------------------------------------
2045 cp.getAffectedRegisters().add("instructionPointer", 32);
2046 }
2047
2048 return true;
2049 },
2050 0,
2051 [] (BitArray & ba, Instruction & instr)
2052 {
2053// -----------------------------------------------------------------------------
2054etiss_uint8 rs2 = 0;
2055static BitArrayRange R_rs2_0(6, 2);
2056rs2 += R_rs2_0.read(ba) << 0;
2057etiss_uint8 rd = 0;
2058static BitArrayRange R_rd_0(11, 7);
2059rd += R_rd_0.read(ba) << 0;
2060
2061// -----------------------------------------------------------------------------
2062
2063 std::stringstream ss;
2064// -----------------------------------------------------------------------------
2065ss << "cmv" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
2066// -----------------------------------------------------------------------------
2067 return ss.str();
2068 }
2069);
2070
2071// CJR -------------------------------------------------------------------------
2074 "cjr",
2075 (uint64_t) 0x8002,
2076 (uint64_t) 0xf07f,
2077 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2078 {
2079
2080// -----------------------------------------------------------------------------
2081
2082// -----------------------------------------------------------------------------
2083
2084// -----------------------------------------------------------------------------
2085// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2086etiss_uint8 rs1 = 0;
2087static BitArrayRange R_rs1_0(11, 7);
2088rs1 += R_rs1_0.read(ba) << 0;
2089
2090// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2091// -----------------------------------------------------------------------------
2092
2093 {
2095
2096 cp.code() = std::string("//CJR\n");
2097
2098// -----------------------------------------------------------------------------
2099cp.code() += "etiss_coverage_count(1, 65);\n";
2100{ // block
2101cp.code() += "etiss_coverage_count(1, 1189);\n";
2102cp.code() += "{ // block\n";
2103cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
2104cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2105cp.code() += "} // block\n";
2106} // block
2107cp.code() += "etiss_coverage_count(1, 2659);\n";
2108if (rs1) { // conditional
2109cp.code() += "etiss_coverage_count(1, 2660);\n";
2110cp.code() += "cpu->nextPc = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] & -2LL;\n";
2111cp.code() += "etiss_coverage_count(6, 2670, 2661, 2669, 2666, 2665, 2663);\n";
2112} // conditional
2113else { // conditional
2114{ // procedure
2115cp.code() += "{ // procedure\n";
2116cp.code() += "RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";
2117cp.code() += "etiss_coverage_count(3, 2673, 2671, 2672);\n";
2118cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
2119cp.code() += "} // procedure\n";
2120} // procedure
2121} // conditional
2122cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2123cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2124// -----------------------------------------------------------------------------
2125 cp.getAffectedRegisters().add("instructionPointer", 32);
2126 }
2127 {
2129
2130 cp.code() = std::string("//CJR\n");
2131
2132// -----------------------------------------------------------------------------
2133cp.code() += "return cpu->exception;\n";
2134// -----------------------------------------------------------------------------
2135 }
2136
2137 return true;
2138 },
2139 0,
2140 [] (BitArray & ba, Instruction & instr)
2141 {
2142// -----------------------------------------------------------------------------
2143etiss_uint8 rs1 = 0;
2144static BitArrayRange R_rs1_0(11, 7);
2145rs1 += R_rs1_0.read(ba) << 0;
2146
2147// -----------------------------------------------------------------------------
2148
2149 std::stringstream ss;
2150// -----------------------------------------------------------------------------
2151ss << "cjr" << " # " << ba << (" [rs1=" + std::to_string(rs1) + "]");
2152// -----------------------------------------------------------------------------
2153 return ss.str();
2154 }
2155);
2156
2157// __reserved_cmv --------------------------------------------------------------
2160 "__reserved_cmv",
2161 (uint64_t) 0x8002,
2162 (uint64_t) 0xffff,
2163 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2164 {
2165
2166// -----------------------------------------------------------------------------
2167
2168// -----------------------------------------------------------------------------
2169
2170// -----------------------------------------------------------------------------
2171// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2172
2173// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2174// -----------------------------------------------------------------------------
2175
2176 {
2178
2179 cp.code() = std::string("//__reserved_cmv\n");
2180
2181// -----------------------------------------------------------------------------
2182cp.code() += "etiss_coverage_count(1, 66);\n";
2183{ // block
2184cp.code() += "etiss_coverage_count(1, 1189);\n";
2185cp.code() += "{ // block\n";
2186cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
2187cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2188cp.code() += "} // block\n";
2189} // block
2190{ // procedure
2191cp.code() += "{ // procedure\n";
2192cp.code() += "RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";
2193cp.code() += "etiss_coverage_count(3, 2676, 2674, 2675);\n";
2194cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
2195cp.code() += "} // procedure\n";
2196} // procedure
2197cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2198cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2199// -----------------------------------------------------------------------------
2200 cp.getAffectedRegisters().add("instructionPointer", 32);
2201 }
2202 {
2204
2205 cp.code() = std::string("//__reserved_cmv\n");
2206
2207// -----------------------------------------------------------------------------
2208cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
2209// -----------------------------------------------------------------------------
2210 }
2211
2212 return true;
2213 },
2214 0,
2215 [] (BitArray & ba, Instruction & instr)
2216 {
2217// -----------------------------------------------------------------------------
2218
2219// -----------------------------------------------------------------------------
2220
2221 std::stringstream ss;
2222// -----------------------------------------------------------------------------
2223ss << "__reserved_cmv" << " # " << ba << (" []");
2224// -----------------------------------------------------------------------------
2225 return ss.str();
2226 }
2227);
2228
2229// CADD ------------------------------------------------------------------------
2232 "cadd",
2233 (uint64_t) 0x9002,
2234 (uint64_t) 0xf003,
2235 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2236 {
2237
2238// -----------------------------------------------------------------------------
2239
2240// -----------------------------------------------------------------------------
2241
2242// -----------------------------------------------------------------------------
2243// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2244etiss_uint8 rs2 = 0;
2245static BitArrayRange R_rs2_0(6, 2);
2246rs2 += R_rs2_0.read(ba) << 0;
2247etiss_uint8 rd = 0;
2248static BitArrayRange R_rd_0(11, 7);
2249rd += R_rd_0.read(ba) << 0;
2250
2251// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2252// -----------------------------------------------------------------------------
2253
2254 {
2256
2257 cp.code() = std::string("//CADD\n");
2258
2259// -----------------------------------------------------------------------------
2260cp.code() += "etiss_coverage_count(1, 67);\n";
2261{ // block
2262cp.code() += "etiss_coverage_count(1, 1189);\n";
2263cp.code() += "{ // block\n";
2264cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
2265cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2266cp.code() += "} // block\n";
2267} // block
2268cp.code() += "etiss_coverage_count(1, 2677);\n";
2269if ((rd % 32ULL) != 0LL) { // conditional
2270cp.code() += "etiss_coverage_count(5, 2683, 2680, 2678, 2681, 2682);\n";
2271cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] + *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) + "ULL];\n";
2272cp.code() += "etiss_coverage_count(11, 2700, 2688, 2687, 2685, 2699, 2693, 2692, 2690, 2698, 2697, 2695);\n";
2273} // conditional
2274cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2275cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2276// -----------------------------------------------------------------------------
2277 cp.getAffectedRegisters().add("instructionPointer", 32);
2278 }
2279
2280 return true;
2281 },
2282 0,
2283 [] (BitArray & ba, Instruction & instr)
2284 {
2285// -----------------------------------------------------------------------------
2286etiss_uint8 rs2 = 0;
2287static BitArrayRange R_rs2_0(6, 2);
2288rs2 += R_rs2_0.read(ba) << 0;
2289etiss_uint8 rd = 0;
2290static BitArrayRange R_rd_0(11, 7);
2291rd += R_rd_0.read(ba) << 0;
2292
2293// -----------------------------------------------------------------------------
2294
2295 std::stringstream ss;
2296// -----------------------------------------------------------------------------
2297ss << "cadd" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
2298// -----------------------------------------------------------------------------
2299 return ss.str();
2300 }
2301);
2302
2303// CJALR -----------------------------------------------------------------------
2306 "cjalr",
2307 (uint64_t) 0x9002,
2308 (uint64_t) 0xf07f,
2309 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2310 {
2311
2312// -----------------------------------------------------------------------------
2313
2314// -----------------------------------------------------------------------------
2315
2316// -----------------------------------------------------------------------------
2317// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2318etiss_uint8 rs1 = 0;
2319static BitArrayRange R_rs1_0(11, 7);
2320rs1 += R_rs1_0.read(ba) << 0;
2321
2322// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2323// -----------------------------------------------------------------------------
2324
2325 {
2327
2328 cp.code() = std::string("//CJALR\n");
2329
2330// -----------------------------------------------------------------------------
2331cp.code() += "etiss_coverage_count(1, 68);\n";
2332{ // block
2333cp.code() += "etiss_coverage_count(1, 1189);\n";
2334cp.code() += "{ // block\n";
2335cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
2336cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2337cp.code() += "} // block\n";
2338} // block
2339{ // block
2340cp.code() += "etiss_coverage_count(1, 2721);\n";
2341cp.code() += "{ // block\n";
2342cp.code() += "etiss_uint32 new_pc = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL];\n";
2343cp.code() += "etiss_coverage_count(4, 2707, 2706, 2705, 2703);\n";
2344cp.code() += "*((RV32IMACFD*)cpu)->X[1ULL] = " + std::to_string(ic.current_address_ + 2ULL) + "ULL;\n";
2345cp.code() += "etiss_coverage_count(6, 2714, 2710, 2709, 2713, 2711, 2712);\n";
2346cp.code() += "cpu->nextPc = new_pc & -2LL;\n";
2347cp.code() += "etiss_coverage_count(4, 2720, 2715, 2719, 2716);\n";
2348cp.code() += "} // block\n";
2349} // block
2350cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2351cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2352// -----------------------------------------------------------------------------
2353 cp.getAffectedRegisters().add("instructionPointer", 32);
2354 }
2355 {
2357
2358 cp.code() = std::string("//CJALR\n");
2359
2360// -----------------------------------------------------------------------------
2361cp.code() += "return cpu->exception;\n";
2362// -----------------------------------------------------------------------------
2363 }
2364
2365 return true;
2366 },
2367 0,
2368 [] (BitArray & ba, Instruction & instr)
2369 {
2370// -----------------------------------------------------------------------------
2371etiss_uint8 rs1 = 0;
2372static BitArrayRange R_rs1_0(11, 7);
2373rs1 += R_rs1_0.read(ba) << 0;
2374
2375// -----------------------------------------------------------------------------
2376
2377 std::stringstream ss;
2378// -----------------------------------------------------------------------------
2379ss << "cjalr" << " # " << ba << (" [rs1=" + std::to_string(rs1) + "]");
2380// -----------------------------------------------------------------------------
2381 return ss.str();
2382 }
2383);
2384
2385// CEBREAK ---------------------------------------------------------------------
2388 "cebreak",
2389 (uint64_t) 0x9002,
2390 (uint64_t) 0xffff,
2391 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2392 {
2393
2394// -----------------------------------------------------------------------------
2395
2396// -----------------------------------------------------------------------------
2397
2398// -----------------------------------------------------------------------------
2399// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2400
2401// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2402// -----------------------------------------------------------------------------
2403
2404 {
2406
2407 cp.code() = std::string("//CEBREAK\n");
2408
2409// -----------------------------------------------------------------------------
2410cp.code() += "etiss_coverage_count(1, 69);\n";
2411{ // block
2412cp.code() += "etiss_coverage_count(1, 1189);\n";
2413cp.code() += "{ // block\n";
2414cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
2415cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2416cp.code() += "} // block\n";
2417} // block
2418{ // procedure
2419cp.code() += "{ // procedure\n";
2420cp.code() += "RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 3LL);\n";
2421cp.code() += "etiss_coverage_count(2, 2724, 2722);\n";
2422cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
2423cp.code() += "} // procedure\n";
2424} // procedure
2425cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2426cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2427// -----------------------------------------------------------------------------
2428 cp.getAffectedRegisters().add("instructionPointer", 32);
2429 }
2430 {
2432
2433 cp.code() = std::string("//CEBREAK\n");
2434
2435// -----------------------------------------------------------------------------
2436cp.code() += "return cpu->exception;\n";
2437// -----------------------------------------------------------------------------
2438 }
2439
2440 return true;
2441 },
2442 0,
2443 [] (BitArray & ba, Instruction & instr)
2444 {
2445// -----------------------------------------------------------------------------
2446
2447// -----------------------------------------------------------------------------
2448
2449 std::stringstream ss;
2450// -----------------------------------------------------------------------------
2451ss << "cebreak" << " # " << ba << (" []");
2452// -----------------------------------------------------------------------------
2453 return ss.str();
2454 }
2455);
2456
2457// CSWSP -----------------------------------------------------------------------
2460 "cswsp",
2461 (uint64_t) 0xc002,
2462 (uint64_t) 0xe003,
2463 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2464 {
2465
2466// -----------------------------------------------------------------------------
2467
2468// -----------------------------------------------------------------------------
2469
2470// -----------------------------------------------------------------------------
2471// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2472etiss_uint8 rs2 = 0;
2473static BitArrayRange R_rs2_0(6, 2);
2474rs2 += R_rs2_0.read(ba) << 0;
2475etiss_uint8 uimm = 0;
2476static BitArrayRange R_uimm_6(8, 7);
2477uimm += R_uimm_6.read(ba) << 6;
2478static BitArrayRange R_uimm_2(12, 9);
2479uimm += R_uimm_2.read(ba) << 2;
2480
2481// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2482// -----------------------------------------------------------------------------
2483
2484 {
2486
2487 cp.code() = std::string("//CSWSP\n");
2488
2489// -----------------------------------------------------------------------------
2490cp.code() += "etiss_coverage_count(1, 70);\n";
2491{ // block
2492cp.code() += "etiss_coverage_count(1, 1189);\n";
2493cp.code() += "{ // block\n";
2494cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
2495cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2496cp.code() += "} // block\n";
2497} // block
2498{ // block
2499cp.code() += "etiss_coverage_count(1, 2746);\n";
2500cp.code() += "{ // block\n";
2501cp.code() += "etiss_uint32 offs = *((RV32IMACFD*)cpu)->X[2ULL] + " + std::to_string(uimm) + "ULL;\n";
2502cp.code() += "etiss_coverage_count(5, 2731, 2730, 2728, 2727, 2729);\n";
2503cp.code() += "etiss_uint32 mem_val_0;\n";
2504cp.code() += "mem_val_0 = (etiss_uint32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) + "ULL]);\n";
2505cp.code() += "etiss_coverage_count(9, 2745, 2737, 2735, 2733, 2734, 2744, 2742, 2741, 2739);\n";
2506cp.code() += "cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";
2507cp.code() += "if (cpu->exception) { // conditional\n";
2508{ // procedure
2509cp.code() += "{ // procedure\n";
2510cp.code() += "RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
2511cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
2512cp.code() += "} // procedure\n";
2513} // procedure
2514cp.code() += "} // conditional\n";
2515cp.code() += "} // block\n";
2516} // block
2517cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2518cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2519// -----------------------------------------------------------------------------
2520 cp.getAffectedRegisters().add("instructionPointer", 32);
2521 }
2522 {
2524
2525 cp.code() = std::string("//CSWSP\n");
2526
2527// -----------------------------------------------------------------------------
2528cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
2529// -----------------------------------------------------------------------------
2530 }
2531
2532 return true;
2533 },
2534 0,
2535 [] (BitArray & ba, Instruction & instr)
2536 {
2537// -----------------------------------------------------------------------------
2538etiss_uint8 rs2 = 0;
2539static BitArrayRange R_rs2_0(6, 2);
2540rs2 += R_rs2_0.read(ba) << 0;
2541etiss_uint8 uimm = 0;
2542static BitArrayRange R_uimm_6(8, 7);
2543uimm += R_uimm_6.read(ba) << 6;
2544static BitArrayRange R_uimm_2(12, 9);
2545uimm += R_uimm_2.read(ba) << 2;
2546
2547// -----------------------------------------------------------------------------
2548
2549 std::stringstream ss;
2550// -----------------------------------------------------------------------------
2551ss << "cswsp" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | uimm=" + std::to_string(uimm) + "]");
2552// -----------------------------------------------------------------------------
2553 return ss.str();
2554 }
2555);
2556
2557// DII -------------------------------------------------------------------------
2560 "dii",
2561 (uint64_t) 0x00,
2562 (uint64_t) 0xffff,
2563 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2564 {
2565
2566// -----------------------------------------------------------------------------
2567
2568// -----------------------------------------------------------------------------
2569
2570// -----------------------------------------------------------------------------
2571// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2572
2573// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2574// -----------------------------------------------------------------------------
2575
2576 {
2578
2579 cp.code() = std::string("//DII\n");
2580
2581// -----------------------------------------------------------------------------
2582cp.code() += "etiss_coverage_count(1, 71);\n";
2583{ // block
2584cp.code() += "etiss_coverage_count(1, 1189);\n";
2585cp.code() += "{ // block\n";
2586cp.code() += "cpu->nextPc = " + std::to_string((etiss_uint32)((ic.current_address_ + 2))) + "ULL;\n";
2587cp.code() += "etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2588cp.code() += "} // block\n";
2589} // block
2590{ // procedure
2591cp.code() += "{ // procedure\n";
2592cp.code() += "RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
2593cp.code() += "etiss_coverage_count(2, 2749, 2747);\n";
2594cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
2595cp.code() += "} // procedure\n";
2596} // procedure
2597cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2598cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2599// -----------------------------------------------------------------------------
2600 cp.getAffectedRegisters().add("instructionPointer", 32);
2601 }
2602 {
2604
2605 cp.code() = std::string("//DII\n");
2606
2607// -----------------------------------------------------------------------------
2608cp.code() += "return cpu->exception;\n";
2609// -----------------------------------------------------------------------------
2610 }
2611
2612 return true;
2613 },
2614 0,
2615 [] (BitArray & ba, Instruction & instr)
2616 {
2617// -----------------------------------------------------------------------------
2618
2619// -----------------------------------------------------------------------------
2620
2621 std::stringstream ss;
2622// -----------------------------------------------------------------------------
2623ss << "dii" << " # " << ba << (" []");
2624// -----------------------------------------------------------------------------
2625 return ss.str();
2626 }
2627);
2628// clang-format on
etiss::instr::InstructionGroup ISA16_RV32IMACFD("ISA16_RV32IMACFD", 16)
static InstructionDefinition clui_imm_rd(ISA16_RV32IMACFD, "clui",(uint64_t) 0x6001,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint32 imm=0;static BitArrayRange R_imm_12(6, 2);imm+=R_imm_12.read(ba)<< 12;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;static BitArrayRange R_imm_17(12, 12);imm+=R_imm_17.read(ba)<< 17;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CLUI\n");cp.code()+="etiss_coverage_count(1, 49);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2382);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 2359);\n";if(imm==0LL) { cp.code()+="etiss_coverage_count(3, 2362, 2360, 2361);\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";cp.code()+="etiss_coverage_count(2, 2365, 2363);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} } cp.code()+="etiss_coverage_count(1, 2366);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2372, 2369, 2367, 2370, 2371);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = "+std::to_string(((etiss_int32)(((etiss_int32) imm)<<(14)) > >(14)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 2381, 2377, 2376, 2374, 2380, 2378);\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("//CLUI\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint32 imm=0;static BitArrayRange R_imm_12(6, 2);imm+=R_imm_12.read(ba)<< 12;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;static BitArrayRange R_imm_17(12, 12);imm+=R_imm_17.read(ba)<< 17;std::stringstream ss;ss<< "clui"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition caddi_imm_rs1(ISA16_RV32IMACFD, "caddi",(uint64_t) 0x01,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 imm=0;static BitArrayRange R_imm_0(6, 2);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_5(12, 12);imm+=R_imm_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CADDI\n");cp.code()+="etiss_coverage_count(1, 45);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2304);\n";if((rs1 % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2310, 2307, 2305, 2308, 2309);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + "+std::to_string(((etiss_int8)(((etiss_int8) imm)<<(2)) > >(2)))+"LL;\n";cp.code()+="etiss_coverage_count(10, 2325, 2315, 2314, 2312, 2324, 2320, 2319, 2317, 2323, 2321);\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 imm=0;static BitArrayRange R_imm_0(6, 2);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_5(12, 12);imm+=R_imm_5.read(ba)<< 5;std::stringstream ss;ss<< "caddi"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition __reserved_clui_rd(ISA16_RV32IMACFD, "__reserved_clui",(uint64_t) 0x6001,(uint64_t) 0xf07f, [](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;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//__reserved_clui\n");cp.code()+="etiss_coverage_count(1, 51);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";cp.code()+="etiss_coverage_count(2, 2401, 2399);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\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("//__reserved_clui\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;std::stringstream ss;ss<< "__reserved_clui"<< " # "<< ba<<(" [rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition cnop_nzimm(ISA16_RV32IMACFD, "cnop",(uint64_t) 0x01,(uint64_t) 0xef83, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 nzimm=0;static BitArrayRange R_nzimm_0(6, 2);nzimm+=R_nzimm_0.read(ba)<< 0;static BitArrayRange R_nzimm_5(12, 12);nzimm+=R_nzimm_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CNOP\n");cp.code()+="etiss_coverage_count(1, 46);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2326);\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 nzimm=0;static BitArrayRange R_nzimm_0(6, 2);nzimm+=R_nzimm_0.read(ba)<< 0;static BitArrayRange R_nzimm_5(12, 12);nzimm+=R_nzimm_5.read(ba)<< 5;std::stringstream ss;ss<< "cnop"<< " # "<< ba<<(" [nzimm="+std::to_string(nzimm)+"]");return ss.str();})
static InstructionDefinition candi_imm_rs1(ISA16_RV32IMACFD, "candi",(uint64_t) 0x8801,(uint64_t) 0xec03, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 imm=0;static BitArrayRange R_imm_0(6, 2);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_5(12, 12);imm+=R_imm_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CANDI\n");cp.code()+="etiss_coverage_count(1, 54);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2477);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] & "+std::to_string(((etiss_int8)(((etiss_int8) imm)<<(2)) > >(2)))+"LL;\n";cp.code()+="etiss_coverage_count(12, 2476, 2466, 2465, 2463, 2464, 2475, 2471, 2470, 2468, 2469, 2474, 2472);\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 imm=0;static BitArrayRange R_imm_0(6, 2);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_5(12, 12);imm+=R_imm_5.read(ba)<< 5;std::stringstream ss;ss<< "candi"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition clw_rd_uimm_rs1(ISA16_RV32IMACFD, "clw",(uint64_t) 0x4000,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(4, 2);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(5, 5);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(6, 6);uimm+=R_uimm_2.read(ba)<< 2;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_uimm_3(12, 10);uimm+=R_uimm_3.read(ba)<< 3;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CLW\n");cp.code()+="etiss_coverage_count(1, 43);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2279);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 load_address = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] + "+std::to_string(uimm)+"ULL;\n";cp.code()+="etiss_coverage_count(7, 2264, 2263, 2261, 2260, 2258, 2259, 2262);\n";cp.code()+="etiss_uint32 mem_val_0;\n";cp.code()+="cpu->exception |= (*(system->dread))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 4);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_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()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = (etiss_int32)(mem_val_0);\n";cp.code()+="etiss_coverage_count(10, 2278, 2269, 2268, 2266, 2267, 2277, 2275, 2273, 2271, 2272);\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("//CLW\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(4, 2);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(5, 5);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(6, 6);uimm+=R_uimm_2.read(ba)<< 2;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_uimm_3(12, 10);uimm+=R_uimm_3.read(ba)<< 3;std::stringstream ss;ss<< "clw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | uimm="+std::to_string(uimm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition csrai_shamt_rs1(ISA16_RV32IMACFD, "csrai",(uint64_t) 0x8401,(uint64_t) 0xfc03, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(6, 2);shamt+=R_shamt_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSRAI\n");cp.code()+="etiss_coverage_count(1, 53);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2461);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 2422);\n";if(shamt) { cp.code()+="etiss_coverage_count(1, 2423);\n";{ cp.code()+="etiss_coverage_count(1, 2443);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] = ((etiss_int32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL])) >> "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(13, 2442, 2431, 2430, 2428, 2429, 2441, 2438, 2436, 2435, 2433, 2434, 2439, 2440);\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 shamt=0;static BitArrayRange R_shamt_0(6, 2);shamt+=R_shamt_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "csrai"<< " # "<< ba<<(" [shamt="+std::to_string(shamt)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition cjr_rs1(ISA16_RV32IMACFD, "cjr",(uint64_t) 0x8002,(uint64_t) 0xf07f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CJR\n");cp.code()+="etiss_coverage_count(1, 65);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2659);\n";if(rs1) { cp.code()+="etiss_coverage_count(1, 2660);\n";cp.code()+="cpu->nextPc = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] & -2LL;\n";cp.code()+="etiss_coverage_count(6, 2670, 2661, 2669, 2666, 2665, 2663);\n";} else { { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";cp.code()+="etiss_coverage_count(3, 2673, 2671, 2672);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\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("//CJR\n");cp.code()+="return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "cjr"<< " # "<< ba<<(" [rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition dii_(ISA16_RV32IMACFD, "dii",(uint64_t) 0x00,(uint64_t) 0xffff, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { { CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//DII\n");cp.code()+="etiss_coverage_count(1, 71);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";cp.code()+="etiss_coverage_count(2, 2749, 2747);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\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("//DII\n");cp.code()+="return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { std::stringstream ss;ss<< "dii"<< " # "<< ba<<(" []");return ss.str();})
static InstructionDefinition cmv_rs2_rd(ISA16_RV32IMACFD, "cmv",(uint64_t) 0x8002,(uint64_t) 0xf003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(6, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CMV\n");cp.code()+="etiss_coverage_count(1, 64);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2641);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2647, 2644, 2642, 2645, 2646);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(7, 2658, 2652, 2651, 2649, 2657, 2656, 2654);\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 rs2=0;static BitArrayRange R_rs2_0(6, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;std::stringstream ss;ss<< "cmv"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition cand_rs2_rd(ISA16_RV32IMACFD, "cand",(uint64_t) 0x8c61,(uint64_t) 0xfc63, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CAND\n");cp.code()+="etiss_coverage_count(1, 58);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2549);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] & *((RV32IMACFD*)cpu)->X["+std::to_string(rs2+8ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(14, 2548, 2536, 2535, 2533, 2534, 2547, 2541, 2540, 2538, 2539, 2546, 2545, 2543, 2544);\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 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;std::stringstream ss;ss<< "cand"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition cxor_rs2_rd(ISA16_RV32IMACFD, "cxor",(uint64_t) 0x8c21,(uint64_t) 0xfc63, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CXOR\n");cp.code()+="etiss_coverage_count(1, 56);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2513);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] ^ *((RV32IMACFD*)cpu)->X["+std::to_string(rs2+8ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(14, 2512, 2500, 2499, 2497, 2498, 2511, 2505, 2504, 2502, 2503, 2510, 2509, 2507, 2508);\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 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;std::stringstream ss;ss<< "cxor"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition cjal_imm(ISA16_RV32IMACFD, "cjal",(uint64_t) 0x2001,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(5, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_7(6, 6);imm+=R_imm_7.read(ba)<< 7;static BitArrayRange R_imm_6(7, 7);imm+=R_imm_6.read(ba)<< 6;static BitArrayRange R_imm_10(8, 8);imm+=R_imm_10.read(ba)<< 10;static BitArrayRange R_imm_8(10, 9);imm+=R_imm_8.read(ba)<< 8;static BitArrayRange R_imm_4(11, 11);imm+=R_imm_4.read(ba)<< 4;static BitArrayRange R_imm_11(12, 12);imm+=R_imm_11.read(ba)<< 11;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CJAL\n");cp.code()+="etiss_coverage_count(1, 47);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2341);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X[1ULL] = "+std::to_string(ic.current_address_+2ULL)+"ULL;\n";cp.code()+="etiss_coverage_count(6, 2333, 2329, 2328, 2332, 2330, 2331);\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 2340, 2334, 2339, 2335, 2338, 2336);\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("//CJAL\n");cp.code()+="return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(5, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_7(6, 6);imm+=R_imm_7.read(ba)<< 7;static BitArrayRange R_imm_6(7, 7);imm+=R_imm_6.read(ba)<< 6;static BitArrayRange R_imm_10(8, 8);imm+=R_imm_10.read(ba)<< 10;static BitArrayRange R_imm_8(10, 9);imm+=R_imm_8.read(ba)<< 8;static BitArrayRange R_imm_4(11, 11);imm+=R_imm_4.read(ba)<< 4;static BitArrayRange R_imm_11(12, 12);imm+=R_imm_11.read(ba)<< 11;std::stringstream ss;ss<< "cjal"<< " # "<< ba<<(" [imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition csub_rs2_rd(ISA16_RV32IMACFD, "csub",(uint64_t) 0x8c01,(uint64_t) 0xfc63, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSUB\n");cp.code()+="etiss_coverage_count(1, 55);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2495);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] - *((RV32IMACFD*)cpu)->X["+std::to_string(rs2+8ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(14, 2494, 2482, 2481, 2479, 2480, 2493, 2487, 2486, 2484, 2485, 2492, 2491, 2489, 2490);\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 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;std::stringstream ss;ss<< "csub"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition csw_rs2_uimm_rs1(ISA16_RV32IMACFD, "csw",(uint64_t) 0xc000,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(5, 5);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(6, 6);uimm+=R_uimm_2.read(ba)<< 2;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_uimm_3(12, 10);uimm+=R_uimm_3.read(ba)<< 3;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSW\n");cp.code()+="etiss_coverage_count(1, 44);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2303);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 load_address = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] + "+std::to_string(uimm)+"ULL;\n";cp.code()+="etiss_coverage_count(7, 2288, 2287, 2285, 2284, 2282, 2283, 2286);\n";cp.code()+="etiss_uint32 mem_val_0;\n";cp.code()+="mem_val_0 = (etiss_int32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs2+8ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(10, 2302, 2294, 2292, 2290, 2291, 2301, 2299, 2298, 2296, 2297);\n";cp.code()+="cpu->exception |= (*(system->dwrite))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 4);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_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("//CSW\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(5, 5);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(6, 6);uimm+=R_uimm_2.read(ba)<< 2;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_uimm_3(12, 10);uimm+=R_uimm_3.read(ba)<< 3;std::stringstream ss;ss<< "csw"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | uimm="+std::to_string(uimm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition cslli_nzuimm_rs1(ISA16_RV32IMACFD, "cslli",(uint64_t) 0x02,(uint64_t) 0xf003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 nzuimm=0;static BitArrayRange R_nzuimm_0(6, 2);nzuimm+=R_nzuimm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSLLI\n");cp.code()+="etiss_coverage_count(1, 62);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2590);\n";if(nzuimm) { cp.code()+="etiss_coverage_count(1, 2591);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] << "+std::to_string(nzuimm)+"ULL;\n";cp.code()+="etiss_coverage_count(9, 2604, 2596, 2595, 2593, 2603, 2601, 2600, 2598, 2602);\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 nzuimm=0;static BitArrayRange R_nzuimm_0(6, 2);nzuimm+=R_nzuimm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "cslli"<< " # "<< ba<<(" [nzuimm="+std::to_string(nzuimm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition cebreak_(ISA16_RV32IMACFD, "cebreak",(uint64_t) 0x9002,(uint64_t) 0xffff, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { { CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CEBREAK\n");cp.code()+="etiss_coverage_count(1, 69);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 3LL);\n";cp.code()+="etiss_coverage_count(2, 2724, 2722);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\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("//CEBREAK\n");cp.code()+="return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { std::stringstream ss;ss<< "cebreak"<< " # "<< ba<<(" []");return ss.str();})
static InstructionDefinition cadd_rs2_rd(ISA16_RV32IMACFD, "cadd",(uint64_t) 0x9002,(uint64_t) 0xf003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(6, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CADD\n");cp.code()+="etiss_coverage_count(1, 67);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2677);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2683, 2680, 2678, 2681, 2682);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] + *((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(11, 2700, 2688, 2687, 2685, 2699, 2693, 2692, 2690, 2698, 2697, 2695);\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 rs2=0;static BitArrayRange R_rs2_0(6, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;std::stringstream ss;ss<< "cadd"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition cbeqz_imm_rs1(ISA16_RV32IMACFD, "cbeqz",(uint64_t) 0xc001,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(4, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_6(6, 5);imm+=R_imm_6.read(ba)<< 6;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_3(11, 10);imm+=R_imm_3.read(ba)<< 3;static BitArrayRange R_imm_8(12, 12);imm+=R_imm_8.read(ba)<< 8;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CBEQZ\n");cp.code()+="etiss_coverage_count(1, 60);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2557);\n";cp.code()+="if (*((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] == 0LL) { // conditional\n";cp.code()+="etiss_coverage_count(6, 2564, 2562, 2561, 2559, 2560, 2563);\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+((etiss_int16)(((etiss_int16) imm)<<(7)) > >(7)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 2571, 2565, 2570, 2566, 2569, 2567);\n";cp.code()+="} // conditional\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("//CBEQZ\n");cp.code()+="if (cpu->nextPc != "+std::to_string(ic.current_address_+2)+"ULL) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(4, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_6(6, 5);imm+=R_imm_6.read(ba)<< 6;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_3(11, 10);imm+=R_imm_3.read(ba)<< 3;static BitArrayRange R_imm_8(12, 12);imm+=R_imm_8.read(ba)<< 8;std::stringstream ss;ss<< "cbeqz"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition caddi4spn_rd_imm(ISA16_RV32IMACFD, "caddi4spn",(uint64_t) 0x00,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(4, 2);rd+=R_rd_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_3(5, 5);imm+=R_imm_3.read(ba)<< 3;static BitArrayRange R_imm_2(6, 6);imm+=R_imm_2.read(ba)<< 2;static BitArrayRange R_imm_6(10, 7);imm+=R_imm_6.read(ba)<< 6;static BitArrayRange R_imm_4(12, 11);imm+=R_imm_4.read(ba)<< 4;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CADDI4SPN\n");cp.code()+="etiss_coverage_count(1, 42);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2240);\n";if(imm) { cp.code()+="etiss_coverage_count(1, 2241);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = *((RV32IMACFD*)cpu)->X[2ULL] + "+std::to_string(imm)+"ULL;\n";cp.code()+="etiss_coverage_count(9, 2252, 2246, 2245, 2243, 2244, 2251, 2249, 2248, 2250);\n";} else { { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";cp.code()+="etiss_coverage_count(2, 2255, 2253);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\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("//CADDI4SPN\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(4, 2);rd+=R_rd_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_3(5, 5);imm+=R_imm_3.read(ba)<< 3;static BitArrayRange R_imm_2(6, 6);imm+=R_imm_2.read(ba)<< 2;static BitArrayRange R_imm_6(10, 7);imm+=R_imm_6.read(ba)<< 6;static BitArrayRange R_imm_4(12, 11);imm+=R_imm_4.read(ba)<< 4;std::stringstream ss;ss<< "caddi4spn"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition __reserved_cmv_(ISA16_RV32IMACFD, "__reserved_cmv",(uint64_t) 0x8002,(uint64_t) 0xffff, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { { CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//__reserved_cmv\n");cp.code()+="etiss_coverage_count(1, 66);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";cp.code()+="etiss_coverage_count(3, 2676, 2674, 2675);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\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("//__reserved_cmv\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { std::stringstream ss;ss<< "__reserved_cmv"<< " # "<< ba<<(" []");return ss.str();})
static InstructionDefinition cj_imm(ISA16_RV32IMACFD, "cj",(uint64_t) 0xa001,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(5, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_7(6, 6);imm+=R_imm_7.read(ba)<< 7;static BitArrayRange R_imm_6(7, 7);imm+=R_imm_6.read(ba)<< 6;static BitArrayRange R_imm_10(8, 8);imm+=R_imm_10.read(ba)<< 10;static BitArrayRange R_imm_8(10, 9);imm+=R_imm_8.read(ba)<< 8;static BitArrayRange R_imm_4(11, 11);imm+=R_imm_4.read(ba)<< 4;static BitArrayRange R_imm_11(12, 12);imm+=R_imm_11.read(ba)<< 11;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CJ\n");cp.code()+="etiss_coverage_count(1, 59);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 2556, 2550, 2555, 2551, 2554, 2552);\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("//CJ\n");cp.code()+="return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(5, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_7(6, 6);imm+=R_imm_7.read(ba)<< 7;static BitArrayRange R_imm_6(7, 7);imm+=R_imm_6.read(ba)<< 6;static BitArrayRange R_imm_10(8, 8);imm+=R_imm_10.read(ba)<< 10;static BitArrayRange R_imm_8(10, 9);imm+=R_imm_8.read(ba)<< 8;static BitArrayRange R_imm_4(11, 11);imm+=R_imm_4.read(ba)<< 4;static BitArrayRange R_imm_11(12, 12);imm+=R_imm_11.read(ba)<< 11;std::stringstream ss;ss<< "cj"<< " # "<< ba<<(" [imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition cor_rs2_rd(ISA16_RV32IMACFD, "cor",(uint64_t) 0x8c41,(uint64_t) 0xfc63, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//COR\n");cp.code()+="etiss_coverage_count(1, 57);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2531);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] | *((RV32IMACFD*)cpu)->X["+std::to_string(rs2+8ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(14, 2530, 2518, 2517, 2515, 2516, 2529, 2523, 2522, 2520, 2521, 2528, 2527, 2525, 2526);\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 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;std::stringstream ss;ss<< "cor"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition caddi16sp_nzimm(ISA16_RV32IMACFD, "caddi16sp",(uint64_t) 0x6101,(uint64_t) 0xef83, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 nzimm=0;static BitArrayRange R_nzimm_5(2, 2);nzimm+=R_nzimm_5.read(ba)<< 5;static BitArrayRange R_nzimm_7(4, 3);nzimm+=R_nzimm_7.read(ba)<< 7;static BitArrayRange R_nzimm_6(5, 5);nzimm+=R_nzimm_6.read(ba)<< 6;static BitArrayRange R_nzimm_4(6, 6);nzimm+=R_nzimm_4.read(ba)<< 4;static BitArrayRange R_nzimm_9(12, 12);nzimm+=R_nzimm_9.read(ba)<< 9;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CADDI16SP\n");cp.code()+="etiss_coverage_count(1, 50);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2383);\n";if(nzimm) { cp.code()+="etiss_coverage_count(1, 2384);\n";cp.code()+="*((RV32IMACFD*)cpu)->X[2ULL] = *((RV32IMACFD*)cpu)->X[2ULL] + "+std::to_string(((etiss_int16)(((etiss_int16) nzimm)<<(6)) > >(6)))+"LL;\n";cp.code()+="etiss_coverage_count(8, 2395, 2387, 2386, 2394, 2390, 2389, 2393, 2391);\n";} else { { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";cp.code()+="etiss_coverage_count(2, 2398, 2396);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\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("//CADDI16SP\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 nzimm=0;static BitArrayRange R_nzimm_5(2, 2);nzimm+=R_nzimm_5.read(ba)<< 5;static BitArrayRange R_nzimm_7(4, 3);nzimm+=R_nzimm_7.read(ba)<< 7;static BitArrayRange R_nzimm_6(5, 5);nzimm+=R_nzimm_6.read(ba)<< 6;static BitArrayRange R_nzimm_4(6, 6);nzimm+=R_nzimm_4.read(ba)<< 4;static BitArrayRange R_nzimm_9(12, 12);nzimm+=R_nzimm_9.read(ba)<< 9;std::stringstream ss;ss<< "caddi16sp"<< " # "<< ba<<(" [nzimm="+std::to_string(nzimm)+"]");return ss.str();})
static InstructionDefinition cli_imm_rd(ISA16_RV32IMACFD, "cli",(uint64_t) 0x4001,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 imm=0;static BitArrayRange R_imm_0(6, 2);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;static BitArrayRange R_imm_5(12, 12);imm+=R_imm_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CLI\n");cp.code()+="etiss_coverage_count(1, 48);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2358);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 2342);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2348, 2345, 2343, 2346, 2347);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = "+std::to_string(((etiss_int8)(((etiss_int8) imm)<<(2)) > >(2)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 2357, 2353, 2352, 2350, 2356, 2354);\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 imm=0;static BitArrayRange R_imm_0(6, 2);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;static BitArrayRange R_imm_5(12, 12);imm+=R_imm_5.read(ba)<< 5;std::stringstream ss;ss<< "cli"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition cjalr_rs1(ISA16_RV32IMACFD, "cjalr",(uint64_t) 0x9002,(uint64_t) 0xf07f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CJALR\n");cp.code()+="etiss_coverage_count(1, 68);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2721);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 new_pc = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(4, 2707, 2706, 2705, 2703);\n";cp.code()+="*((RV32IMACFD*)cpu)->X[1ULL] = "+std::to_string(ic.current_address_+2ULL)+"ULL;\n";cp.code()+="etiss_coverage_count(6, 2714, 2710, 2709, 2713, 2711, 2712);\n";cp.code()+="cpu->nextPc = new_pc & -2LL;\n";cp.code()+="etiss_coverage_count(4, 2720, 2715, 2719, 2716);\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("//CJALR\n");cp.code()+="return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "cjalr"<< " # "<< ba<<(" [rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition csrli_shamt_rs1(ISA16_RV32IMACFD, "csrli",(uint64_t) 0x8001,(uint64_t) 0xfc03, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(6, 2);shamt+=R_shamt_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSRLI\n");cp.code()+="etiss_coverage_count(1, 52);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2418);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] >> "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(11, 2417, 2409, 2408, 2406, 2407, 2416, 2414, 2413, 2411, 2412, 2415);\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 shamt=0;static BitArrayRange R_shamt_0(6, 2);shamt+=R_shamt_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "csrli"<< " # "<< ba<<(" [shamt="+std::to_string(shamt)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition clwsp_uimm_rd(ISA16_RV32IMACFD, "clwsp",(uint64_t) 0x4002,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(3, 2);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(6, 4);uimm+=R_uimm_2.read(ba)<< 2;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;static BitArrayRange R_uimm_5(12, 12);uimm+=R_uimm_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CLWSP\n");cp.code()+="etiss_coverage_count(1, 63);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2640);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 2605);\n";if(rd % 32ULL) { cp.code()+="etiss_coverage_count(2, 2608, 2606);\n";{ cp.code()+="etiss_coverage_count(1, 2636);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 offs = (etiss_uint32)((*((RV32IMACFD*)cpu)->X[2ULL] + "+std::to_string(uimm)+"ULL));\n";cp.code()+="etiss_coverage_count(7, 2618, 2617, 2614, 2612, 2611, 2613, 2615);\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()+="RV32IMACFD_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_int32 res = mem_val_0;\n";cp.code()+="etiss_coverage_count(5, 2626, 2625, 2623, 2621, 2622);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_int32)(res);\n";cp.code()+="etiss_coverage_count(6, 2635, 2631, 2630, 2628, 2634, 2632);\n";cp.code()+="} // block\n";} } else { { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";cp.code()+="etiss_coverage_count(3, 2639, 2637, 2638);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\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("//CLWSP\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(3, 2);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(6, 4);uimm+=R_uimm_2.read(ba)<< 2;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;static BitArrayRange R_uimm_5(12, 12);uimm+=R_uimm_5.read(ba)<< 5;std::stringstream ss;ss<< "clwsp"<< " # "<< ba<<(" [uimm="+std::to_string(uimm)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition cswsp_rs2_uimm(ISA16_RV32IMACFD, "cswsp",(uint64_t) 0xc002,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(6, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(8, 7);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(12, 9);uimm+=R_uimm_2.read(ba)<< 2;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSWSP\n");cp.code()+="etiss_coverage_count(1, 70);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2746);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 offs = *((RV32IMACFD*)cpu)->X[2ULL] + "+std::to_string(uimm)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 2731, 2730, 2728, 2727, 2729);\n";cp.code()+="etiss_uint32 mem_val_0;\n";cp.code()+="mem_val_0 = (etiss_uint32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(9, 2745, 2737, 2735, 2733, 2734, 2744, 2742, 2741, 2739);\n";cp.code()+="cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_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("//CSWSP\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(6, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(8, 7);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(12, 9);uimm+=R_uimm_2.read(ba)<< 2;std::stringstream ss;ss<< "cswsp"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | uimm="+std::to_string(uimm)+"]");return ss.str();})
static InstructionDefinition cbnez_imm_rs1(ISA16_RV32IMACFD, "cbnez",(uint64_t) 0xe001,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(4, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_6(6, 5);imm+=R_imm_6.read(ba)<< 6;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_3(11, 10);imm+=R_imm_3.read(ba)<< 3;static BitArrayRange R_imm_8(12, 12);imm+=R_imm_8.read(ba)<< 8;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CBNEZ\n");cp.code()+="etiss_coverage_count(1, 61);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"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, 2572);\n";cp.code()+="if (*((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] != 0LL) { // conditional\n";cp.code()+="etiss_coverage_count(6, 2579, 2577, 2576, 2574, 2575, 2578);\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+((etiss_int16)(((etiss_int16) imm)<<(7)) > >(7)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 2586, 2580, 2585, 2581, 2584, 2582);\n";cp.code()+="} // conditional\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("//CBNEZ\n");cp.code()+="if (cpu->nextPc != "+std::to_string(ic.current_address_+2)+"ULL) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(4, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_6(6, 5);imm+=R_imm_6.read(ba)<< 6;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_3(11, 10);imm+=R_imm_3.read(ba)<< 3;static BitArrayRange R_imm_8(12, 12);imm+=R_imm_8.read(ba)<< 8;std::stringstream ss;ss<< "cbnez"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
int16_t etiss_int16
Definition types.h:51
uint32_t etiss_uint32
Definition types.h:55
int8_t etiss_int8
Definition types.h:48
uint8_t etiss_uint8
Definition types.h:49
int32_t etiss_int32
Definition types.h:54
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