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 (uint16_t) 0x00,
20 (uint16_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, 1169);\n";
55cp.code() += "{ // block\n";
56cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
57cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
58cp.code() += "} // block\n";
59} // block
60cp.code() += "etiss_coverage_count(1, 2327);\n";
61if (imm) { // conditional
62cp.code() += "etiss_coverage_count(1, 2328);\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, 2339, 2333, 2332, 2330, 2331, 2338, 2336, 2335, 2337);\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, 2342, 2340);\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 (uint16_t) 0x4000,
124 (uint16_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, 1169);\n";
160cp.code() += "{ // block\n";
161cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
162cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
163cp.code() += "} // block\n";
164} // block
165{ // block
166cp.code() += "etiss_coverage_count(1, 2363);\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, 2351, 2350, 2348, 2347, 2345, 2346, 2349);\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(8, 2362, 2356, 2355, 2353, 2354, 2361, 2359, 2358);\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 (uint16_t) 0xc000,
234 (uint16_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, 1169);\n";
270cp.code() += "{ // block\n";
271cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
272cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
273cp.code() += "} // block\n";
274} // block
275{ // block
276cp.code() += "etiss_coverage_count(1, 2384);\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, 2372, 2371, 2369, 2368, 2366, 2367, 2370);\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(8, 2383, 2375, 2374, 2382, 2380, 2379, 2377, 2378);\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 (uint16_t) 0x01,
344 (uint16_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, 1169);\n";
375cp.code() += "{ // block\n";
376cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
377cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
378cp.code() += "} // block\n";
379} // block
380cp.code() += "etiss_coverage_count(1, 2385);\n";
381if ((rs1 % 32ULL) != 0LL) { // conditional
382cp.code() += "etiss_coverage_count(5, 2391, 2388, 2386, 2389, 2390);\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, 2406, 2396, 2395, 2393, 2405, 2401, 2400, 2398, 2404, 2402);\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 (uint16_t) 0x01,
422 (uint16_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, 1169);\n";
450cp.code() += "{ // block\n";
451cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
452cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
453cp.code() += "} // block\n";
454} // block
455{ // block
456cp.code() += "etiss_coverage_count(1, 2407);\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 (uint16_t) 0x2001,
493 (uint16_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, 1169);\n";
533cp.code() += "{ // block\n";
534cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
535cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
536cp.code() += "} // block\n";
537} // block
538{ // block
539cp.code() += "etiss_coverage_count(1, 2422);\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, 2414, 2410, 2409, 2413, 2411, 2412);\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, 2421, 2415, 2420, 2416, 2419, 2417);\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 (uint16_t) 0x4001,
601 (uint16_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, 1169);\n";
632cp.code() += "{ // block\n";
633cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
634cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
635cp.code() += "} // block\n";
636} // block
637{ // block
638cp.code() += "etiss_coverage_count(1, 2439);\n";
639cp.code() += "{ // block\n";
640cp.code() += "etiss_coverage_count(1, 2423);\n";
641if ((rd % 32ULL) != 0LL) { // conditional
642cp.code() += "etiss_coverage_count(5, 2429, 2426, 2424, 2427, 2428);\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, 2438, 2434, 2433, 2431, 2437, 2435);\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 (uint16_t) 0x6001,
684 (uint16_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, 1169);\n";
715cp.code() += "{ // block\n";
716cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
717cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
718cp.code() += "} // block\n";
719} // block
720{ // block
721cp.code() += "etiss_coverage_count(1, 2463);\n";
722cp.code() += "{ // block\n";
723cp.code() += "etiss_coverage_count(1, 2440);\n";
724if (imm == 0LL) { // conditional
725cp.code() += "etiss_coverage_count(3, 2443, 2441, 2442);\n";
726{ // procedure
727cp.code() += "{ // procedure\n";
728cp.code() += "RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
729cp.code() += "etiss_coverage_count(2, 2446, 2444);\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, 2447);\n";
735if ((rd % 32ULL) != 0LL) { // conditional
736cp.code() += "etiss_coverage_count(5, 2453, 2450, 2448, 2451, 2452);\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, 2462, 2458, 2457, 2455, 2461, 2459);\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 (uint16_t) 0x6101,
787 (uint16_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, 1169);\n";
821cp.code() += "{ // block\n";
822cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
823cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
824cp.code() += "} // block\n";
825} // block
826cp.code() += "etiss_coverage_count(1, 2464);\n";
827if (nzimm) { // conditional
828cp.code() += "etiss_coverage_count(1, 2465);\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, 2476, 2468, 2467, 2475, 2471, 2470, 2474, 2472);\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, 2479, 2477);\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 (uint16_t) 0x6001,
889 (uint16_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, 1169);\n";
915cp.code() += "{ // block\n";
916cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
917cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\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, 2482, 2480);\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 (uint16_t) 0x8001,
967 (uint16_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, 1169);\n";
996cp.code() += "{ // block\n";
997cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
998cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
999cp.code() += "} // block\n";
1000} // block
1001{ // block
1002cp.code() += "etiss_coverage_count(1, 2496);\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, 2495, 2487, 2486, 2484, 2485, 2494, 2492, 2491, 2489, 2490, 2493);\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 (uint16_t) 0x8401,
1042 (uint16_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, 1169);\n";
1071cp.code() += "{ // block\n";
1072cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1073cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1074cp.code() += "} // block\n";
1075} // block
1076{ // block
1077cp.code() += "etiss_coverage_count(1, 2536);\n";
1078cp.code() += "{ // block\n";
1079cp.code() += "etiss_coverage_count(1, 2497);\n";
1080if (shamt) { // conditional
1081cp.code() += "etiss_coverage_count(1, 2498);\n";
1082{ // block
1083cp.code() += "etiss_coverage_count(1, 2518);\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, 2517, 2506, 2505, 2503, 2504, 2516, 2513, 2511, 2510, 2508, 2509, 2514, 2515);\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 (uint16_t) 0x8801,
1126 (uint16_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, 1169);\n";
1157cp.code() += "{ // block\n";
1158cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1159cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1160cp.code() += "} // block\n";
1161} // block
1162{ // block
1163cp.code() += "etiss_coverage_count(1, 2552);\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, 2551, 2541, 2540, 2538, 2539, 2550, 2546, 2545, 2543, 2544, 2549, 2547);\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 (uint16_t) 0x8c01,
1205 (uint16_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, 1169);\n";
1234cp.code() += "{ // block\n";
1235cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1236cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1237cp.code() += "} // block\n";
1238} // block
1239{ // block
1240cp.code() += "etiss_coverage_count(1, 2570);\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, 2569, 2557, 2556, 2554, 2555, 2568, 2562, 2561, 2559, 2560, 2567, 2566, 2564, 2565);\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 (uint16_t) 0x8c21,
1280 (uint16_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, 1169);\n";
1309cp.code() += "{ // block\n";
1310cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1311cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1312cp.code() += "} // block\n";
1313} // block
1314{ // block
1315cp.code() += "etiss_coverage_count(1, 2588);\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, 2587, 2575, 2574, 2572, 2573, 2586, 2580, 2579, 2577, 2578, 2585, 2584, 2582, 2583);\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 (uint16_t) 0x8c41,
1355 (uint16_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, 1169);\n";
1384cp.code() += "{ // block\n";
1385cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1386cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1387cp.code() += "} // block\n";
1388} // block
1389{ // block
1390cp.code() += "etiss_coverage_count(1, 2606);\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, 2605, 2593, 2592, 2590, 2591, 2604, 2598, 2597, 2595, 2596, 2603, 2602, 2600, 2601);\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 (uint16_t) 0x8c61,
1430 (uint16_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, 1169);\n";
1459cp.code() += "{ // block\n";
1460cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1461cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1462cp.code() += "} // block\n";
1463} // block
1464{ // block
1465cp.code() += "etiss_coverage_count(1, 2624);\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, 2623, 2611, 2610, 2608, 2609, 2622, 2616, 2615, 2613, 2614, 2621, 2620, 2618, 2619);\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 (uint16_t) 0xa001,
1505 (uint16_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, 1169);\n";
1545cp.code() += "{ // block\n";
1546cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1547cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\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, 2631, 2625, 2630, 2626, 2629, 2627);\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 (uint16_t) 0xc001,
1606 (uint16_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, 1169);\n";
1643cp.code() += "{ // block\n";
1644cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1645cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1646cp.code() += "} // block\n";
1647} // block
1648cp.code() += "etiss_coverage_count(1, 2632);\n";
1649cp.code() += "if (*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] == 0LL) { // conditional\n";
1650cp.code() += "etiss_coverage_count(6, 2639, 2637, 2636, 2634, 2635, 2638);\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, 2646, 2640, 2645, 2641, 2644, 2642);\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 (uint16_t) 0xe001,
1705 (uint16_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, 1169);\n";
1742cp.code() += "{ // block\n";
1743cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1744cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1745cp.code() += "} // block\n";
1746} // block
1747cp.code() += "etiss_coverage_count(1, 2647);\n";
1748cp.code() += "if (*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] != 0LL) { // conditional\n";
1749cp.code() += "etiss_coverage_count(6, 2654, 2652, 2651, 2649, 2650, 2653);\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, 2661, 2655, 2660, 2656, 2659, 2657);\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 (uint16_t) 0x02,
1804 (uint16_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, 1169);\n";
1833cp.code() += "{ // block\n";
1834cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1835cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1836cp.code() += "} // block\n";
1837} // block
1838cp.code() += "etiss_coverage_count(1, 2662);\n";
1839if (nzuimm) { // conditional
1840cp.code() += "etiss_coverage_count(1, 2663);\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, 2676, 2668, 2667, 2665, 2675, 2673, 2672, 2670, 2674);\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 (uint16_t) 0x4002,
1878 (uint16_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, 1169);\n";
1911cp.code() += "{ // block\n";
1912cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1913cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1914cp.code() += "} // block\n";
1915} // block
1916{ // block
1917cp.code() += "etiss_coverage_count(1, 2703);\n";
1918cp.code() += "{ // block\n";
1919cp.code() += "etiss_coverage_count(1, 2677);\n";
1920if (rd % 32ULL) { // conditional
1921cp.code() += "etiss_coverage_count(2, 2680, 2678);\n";
1922{ // block
1923cp.code() += "etiss_coverage_count(1, 2699);\n";
1924cp.code() += "{ // block\n";
1925cp.code() += "etiss_uint32 mem_val_0;\n";
1926cp.code() += "cpu->exception |= (*(system->dread))(system->handle, cpu, *((RV32IMACFD*)cpu)->X[2ULL] + " + std::to_string(uimm) + "ULL, (etiss_uint8*)&mem_val_0, 4);\n";
1927cp.code() += "if (cpu->exception) { // conditional\n";
1928{ // procedure
1929cp.code() += "{ // procedure\n";
1930cp.code() += "RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
1931cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
1932cp.code() += "} // procedure\n";
1933} // procedure
1934cp.code() += "} // conditional\n";
1935cp.code() += "etiss_int32 res = mem_val_0;\n";
1936cp.code() += "etiss_coverage_count(6, 2689, 2688, 2687, 2685, 2684, 2686);\n";
1937cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_int32)(res);\n";
1938cp.code() += "etiss_coverage_count(6, 2698, 2694, 2693, 2691, 2697, 2695);\n";
1939cp.code() += "} // block\n";
1940} // block
1941} // conditional
1942else { // conditional
1943{ // procedure
1944cp.code() += "{ // procedure\n";
1945cp.code() += "RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";
1946cp.code() += "etiss_coverage_count(3, 2702, 2700, 2701);\n";
1947cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
1948cp.code() += "} // procedure\n";
1949} // procedure
1950} // conditional
1951cp.code() += "} // block\n";
1952} // block
1953cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1954cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1955// -----------------------------------------------------------------------------
1956 cp.getAffectedRegisters().add("instructionPointer", 32);
1957 }
1958 {
1960
1961 cp.code() = std::string("//CLWSP\n");
1962
1963// -----------------------------------------------------------------------------
1964cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
1965// -----------------------------------------------------------------------------
1966 }
1967
1968 return true;
1969 },
1970 0,
1971 [] (BitArray & ba, Instruction & instr)
1972 {
1973// -----------------------------------------------------------------------------
1974etiss_uint8 uimm = 0;
1975static BitArrayRange R_uimm_6(3, 2);
1976uimm += R_uimm_6.read(ba) << 6;
1977static BitArrayRange R_uimm_2(6, 4);
1978uimm += R_uimm_2.read(ba) << 2;
1979etiss_uint8 rd = 0;
1980static BitArrayRange R_rd_0(11, 7);
1981rd += R_rd_0.read(ba) << 0;
1982static BitArrayRange R_uimm_5(12, 12);
1983uimm += R_uimm_5.read(ba) << 5;
1984
1985// -----------------------------------------------------------------------------
1986
1987 std::stringstream ss;
1988// -----------------------------------------------------------------------------
1989ss << "clwsp" << " # " << ba << (" [uimm=" + std::to_string(uimm) + " | rd=" + std::to_string(rd) + "]");
1990// -----------------------------------------------------------------------------
1991 return ss.str();
1992 }
1993);
1994
1995// CMV -------------------------------------------------------------------------
1998 "cmv",
1999 (uint16_t) 0x8002,
2000 (uint16_t) 0xf003,
2001 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2002 {
2003
2004// -----------------------------------------------------------------------------
2005
2006// -----------------------------------------------------------------------------
2007
2008// -----------------------------------------------------------------------------
2009// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2010etiss_uint8 rs2 = 0;
2011static BitArrayRange R_rs2_0(6, 2);
2012rs2 += R_rs2_0.read(ba) << 0;
2013etiss_uint8 rd = 0;
2014static BitArrayRange R_rd_0(11, 7);
2015rd += R_rd_0.read(ba) << 0;
2016
2017// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2018// -----------------------------------------------------------------------------
2019
2020 {
2022
2023 cp.code() = std::string("//CMV\n");
2024
2025// -----------------------------------------------------------------------------
2026cp.code() += "etiss_coverage_count(1, 64);\n";
2027{ // block
2028cp.code() += "etiss_coverage_count(1, 1169);\n";
2029cp.code() += "{ // block\n";
2030cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
2031cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2032cp.code() += "} // block\n";
2033} // block
2034cp.code() += "etiss_coverage_count(1, 2704);\n";
2035if ((rd % 32ULL) != 0LL) { // conditional
2036cp.code() += "etiss_coverage_count(5, 2710, 2707, 2705, 2708, 2709);\n";
2037cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) + "ULL];\n";
2038cp.code() += "etiss_coverage_count(7, 2721, 2715, 2714, 2712, 2720, 2719, 2717);\n";
2039} // conditional
2040cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2041cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2042// -----------------------------------------------------------------------------
2043 cp.getAffectedRegisters().add("instructionPointer", 32);
2044 }
2045
2046 return true;
2047 },
2048 0,
2049 [] (BitArray & ba, Instruction & instr)
2050 {
2051// -----------------------------------------------------------------------------
2052etiss_uint8 rs2 = 0;
2053static BitArrayRange R_rs2_0(6, 2);
2054rs2 += R_rs2_0.read(ba) << 0;
2055etiss_uint8 rd = 0;
2056static BitArrayRange R_rd_0(11, 7);
2057rd += R_rd_0.read(ba) << 0;
2058
2059// -----------------------------------------------------------------------------
2060
2061 std::stringstream ss;
2062// -----------------------------------------------------------------------------
2063ss << "cmv" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
2064// -----------------------------------------------------------------------------
2065 return ss.str();
2066 }
2067);
2068
2069// CJR -------------------------------------------------------------------------
2072 "cjr",
2073 (uint16_t) 0x8002,
2074 (uint16_t) 0xf07f,
2075 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2076 {
2077
2078// -----------------------------------------------------------------------------
2079
2080// -----------------------------------------------------------------------------
2081
2082// -----------------------------------------------------------------------------
2083// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2084etiss_uint8 rs1 = 0;
2085static BitArrayRange R_rs1_0(11, 7);
2086rs1 += R_rs1_0.read(ba) << 0;
2087
2088// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2089// -----------------------------------------------------------------------------
2090
2091 {
2093
2094 cp.code() = std::string("//CJR\n");
2095
2096// -----------------------------------------------------------------------------
2097cp.code() += "etiss_coverage_count(1, 65);\n";
2098{ // block
2099cp.code() += "etiss_coverage_count(1, 1169);\n";
2100cp.code() += "{ // block\n";
2101cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
2102cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2103cp.code() += "} // block\n";
2104} // block
2105cp.code() += "etiss_coverage_count(1, 2722);\n";
2106if (rs1) { // conditional
2107cp.code() += "etiss_coverage_count(1, 2723);\n";
2108cp.code() += "cpu->nextPc = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] & -2LL;\n";
2109cp.code() += "etiss_coverage_count(6, 2733, 2724, 2732, 2729, 2728, 2726);\n";
2110} // conditional
2111else { // conditional
2112{ // procedure
2113cp.code() += "{ // procedure\n";
2114cp.code() += "RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";
2115cp.code() += "etiss_coverage_count(3, 2736, 2734, 2735);\n";
2116cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
2117cp.code() += "} // procedure\n";
2118} // procedure
2119} // conditional
2120cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2121cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2122// -----------------------------------------------------------------------------
2123 cp.getAffectedRegisters().add("instructionPointer", 32);
2124 }
2125 {
2127
2128 cp.code() = std::string("//CJR\n");
2129
2130// -----------------------------------------------------------------------------
2131cp.code() += "return cpu->exception;\n";
2132// -----------------------------------------------------------------------------
2133 }
2134
2135 return true;
2136 },
2137 0,
2138 [] (BitArray & ba, Instruction & instr)
2139 {
2140// -----------------------------------------------------------------------------
2141etiss_uint8 rs1 = 0;
2142static BitArrayRange R_rs1_0(11, 7);
2143rs1 += R_rs1_0.read(ba) << 0;
2144
2145// -----------------------------------------------------------------------------
2146
2147 std::stringstream ss;
2148// -----------------------------------------------------------------------------
2149ss << "cjr" << " # " << ba << (" [rs1=" + std::to_string(rs1) + "]");
2150// -----------------------------------------------------------------------------
2151 return ss.str();
2152 }
2153);
2154
2155// __reserved_cmv --------------------------------------------------------------
2158 "__reserved_cmv",
2159 (uint16_t) 0x8002,
2160 (uint16_t) 0xffff,
2161 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2162 {
2163
2164// -----------------------------------------------------------------------------
2165
2166// -----------------------------------------------------------------------------
2167
2168// -----------------------------------------------------------------------------
2169// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2170
2171// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2172// -----------------------------------------------------------------------------
2173
2174 {
2176
2177 cp.code() = std::string("//__reserved_cmv\n");
2178
2179// -----------------------------------------------------------------------------
2180cp.code() += "etiss_coverage_count(1, 66);\n";
2181{ // block
2182cp.code() += "etiss_coverage_count(1, 1169);\n";
2183cp.code() += "{ // block\n";
2184cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
2185cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2186cp.code() += "} // block\n";
2187} // block
2188{ // procedure
2189cp.code() += "{ // procedure\n";
2190cp.code() += "RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";
2191cp.code() += "etiss_coverage_count(3, 2739, 2737, 2738);\n";
2192cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
2193cp.code() += "} // procedure\n";
2194} // procedure
2195cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2196cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2197// -----------------------------------------------------------------------------
2198 cp.getAffectedRegisters().add("instructionPointer", 32);
2199 }
2200 {
2202
2203 cp.code() = std::string("//__reserved_cmv\n");
2204
2205// -----------------------------------------------------------------------------
2206cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
2207// -----------------------------------------------------------------------------
2208 }
2209
2210 return true;
2211 },
2212 0,
2213 [] (BitArray & ba, Instruction & instr)
2214 {
2215// -----------------------------------------------------------------------------
2216
2217// -----------------------------------------------------------------------------
2218
2219 std::stringstream ss;
2220// -----------------------------------------------------------------------------
2221ss << "__reserved_cmv" << " # " << ba << (" []");
2222// -----------------------------------------------------------------------------
2223 return ss.str();
2224 }
2225);
2226
2227// CADD ------------------------------------------------------------------------
2230 "cadd",
2231 (uint16_t) 0x9002,
2232 (uint16_t) 0xf003,
2233 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2234 {
2235
2236// -----------------------------------------------------------------------------
2237
2238// -----------------------------------------------------------------------------
2239
2240// -----------------------------------------------------------------------------
2241// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2242etiss_uint8 rs2 = 0;
2243static BitArrayRange R_rs2_0(6, 2);
2244rs2 += R_rs2_0.read(ba) << 0;
2245etiss_uint8 rd = 0;
2246static BitArrayRange R_rd_0(11, 7);
2247rd += R_rd_0.read(ba) << 0;
2248
2249// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2250// -----------------------------------------------------------------------------
2251
2252 {
2254
2255 cp.code() = std::string("//CADD\n");
2256
2257// -----------------------------------------------------------------------------
2258cp.code() += "etiss_coverage_count(1, 67);\n";
2259{ // block
2260cp.code() += "etiss_coverage_count(1, 1169);\n";
2261cp.code() += "{ // block\n";
2262cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
2263cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2264cp.code() += "} // block\n";
2265} // block
2266cp.code() += "etiss_coverage_count(1, 2740);\n";
2267if ((rd % 32ULL) != 0LL) { // conditional
2268cp.code() += "etiss_coverage_count(5, 2746, 2743, 2741, 2744, 2745);\n";
2269cp.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";
2270cp.code() += "etiss_coverage_count(11, 2763, 2751, 2750, 2748, 2762, 2756, 2755, 2753, 2761, 2760, 2758);\n";
2271} // conditional
2272cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2273cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2274// -----------------------------------------------------------------------------
2275 cp.getAffectedRegisters().add("instructionPointer", 32);
2276 }
2277
2278 return true;
2279 },
2280 0,
2281 [] (BitArray & ba, Instruction & instr)
2282 {
2283// -----------------------------------------------------------------------------
2284etiss_uint8 rs2 = 0;
2285static BitArrayRange R_rs2_0(6, 2);
2286rs2 += R_rs2_0.read(ba) << 0;
2287etiss_uint8 rd = 0;
2288static BitArrayRange R_rd_0(11, 7);
2289rd += R_rd_0.read(ba) << 0;
2290
2291// -----------------------------------------------------------------------------
2292
2293 std::stringstream ss;
2294// -----------------------------------------------------------------------------
2295ss << "cadd" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
2296// -----------------------------------------------------------------------------
2297 return ss.str();
2298 }
2299);
2300
2301// CJALR -----------------------------------------------------------------------
2304 "cjalr",
2305 (uint16_t) 0x9002,
2306 (uint16_t) 0xf07f,
2307 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2308 {
2309
2310// -----------------------------------------------------------------------------
2311
2312// -----------------------------------------------------------------------------
2313
2314// -----------------------------------------------------------------------------
2315// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2316etiss_uint8 rs1 = 0;
2317static BitArrayRange R_rs1_0(11, 7);
2318rs1 += R_rs1_0.read(ba) << 0;
2319
2320// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2321// -----------------------------------------------------------------------------
2322
2323 {
2325
2326 cp.code() = std::string("//CJALR\n");
2327
2328// -----------------------------------------------------------------------------
2329cp.code() += "etiss_coverage_count(1, 68);\n";
2330{ // block
2331cp.code() += "etiss_coverage_count(1, 1169);\n";
2332cp.code() += "{ // block\n";
2333cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
2334cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2335cp.code() += "} // block\n";
2336} // block
2337{ // block
2338cp.code() += "etiss_coverage_count(1, 2784);\n";
2339cp.code() += "{ // block\n";
2340cp.code() += "etiss_uint32 new_pc = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL];\n";
2341cp.code() += "etiss_coverage_count(4, 2770, 2769, 2768, 2766);\n";
2342cp.code() += "*((RV32IMACFD*)cpu)->X[1ULL] = " + std::to_string(ic.current_address_ + 2ULL) + "ULL;\n";
2343cp.code() += "etiss_coverage_count(6, 2777, 2773, 2772, 2776, 2774, 2775);\n";
2344cp.code() += "cpu->nextPc = new_pc & -2LL;\n";
2345cp.code() += "etiss_coverage_count(4, 2783, 2778, 2782, 2779);\n";
2346cp.code() += "} // block\n";
2347} // block
2348cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2349cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2350// -----------------------------------------------------------------------------
2351 cp.getAffectedRegisters().add("instructionPointer", 32);
2352 }
2353 {
2355
2356 cp.code() = std::string("//CJALR\n");
2357
2358// -----------------------------------------------------------------------------
2359cp.code() += "return cpu->exception;\n";
2360// -----------------------------------------------------------------------------
2361 }
2362
2363 return true;
2364 },
2365 0,
2366 [] (BitArray & ba, Instruction & instr)
2367 {
2368// -----------------------------------------------------------------------------
2369etiss_uint8 rs1 = 0;
2370static BitArrayRange R_rs1_0(11, 7);
2371rs1 += R_rs1_0.read(ba) << 0;
2372
2373// -----------------------------------------------------------------------------
2374
2375 std::stringstream ss;
2376// -----------------------------------------------------------------------------
2377ss << "cjalr" << " # " << ba << (" [rs1=" + std::to_string(rs1) + "]");
2378// -----------------------------------------------------------------------------
2379 return ss.str();
2380 }
2381);
2382
2383// CEBREAK ---------------------------------------------------------------------
2386 "cebreak",
2387 (uint16_t) 0x9002,
2388 (uint16_t) 0xffff,
2389 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2390 {
2391
2392// -----------------------------------------------------------------------------
2393
2394// -----------------------------------------------------------------------------
2395
2396// -----------------------------------------------------------------------------
2397// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2398
2399// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2400// -----------------------------------------------------------------------------
2401
2402 {
2404
2405 cp.code() = std::string("//CEBREAK\n");
2406
2407// -----------------------------------------------------------------------------
2408cp.code() += "etiss_coverage_count(1, 69);\n";
2409{ // block
2410cp.code() += "etiss_coverage_count(1, 1169);\n";
2411cp.code() += "{ // block\n";
2412cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
2413cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2414cp.code() += "} // block\n";
2415} // block
2416{ // procedure
2417cp.code() += "{ // procedure\n";
2418cp.code() += "RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 3LL);\n";
2419cp.code() += "etiss_coverage_count(2, 2787, 2785);\n";
2420cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
2421cp.code() += "} // procedure\n";
2422} // procedure
2423cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2424cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2425// -----------------------------------------------------------------------------
2426 cp.getAffectedRegisters().add("instructionPointer", 32);
2427 }
2428 {
2430
2431 cp.code() = std::string("//CEBREAK\n");
2432
2433// -----------------------------------------------------------------------------
2434cp.code() += "return cpu->exception;\n";
2435// -----------------------------------------------------------------------------
2436 }
2437
2438 return true;
2439 },
2440 0,
2441 [] (BitArray & ba, Instruction & instr)
2442 {
2443// -----------------------------------------------------------------------------
2444
2445// -----------------------------------------------------------------------------
2446
2447 std::stringstream ss;
2448// -----------------------------------------------------------------------------
2449ss << "cebreak" << " # " << ba << (" []");
2450// -----------------------------------------------------------------------------
2451 return ss.str();
2452 }
2453);
2454
2455// CSWSP -----------------------------------------------------------------------
2458 "cswsp",
2459 (uint16_t) 0xc002,
2460 (uint16_t) 0xe003,
2461 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2462 {
2463
2464// -----------------------------------------------------------------------------
2465
2466// -----------------------------------------------------------------------------
2467
2468// -----------------------------------------------------------------------------
2469// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2470etiss_uint8 rs2 = 0;
2471static BitArrayRange R_rs2_0(6, 2);
2472rs2 += R_rs2_0.read(ba) << 0;
2473etiss_uint8 uimm = 0;
2474static BitArrayRange R_uimm_6(8, 7);
2475uimm += R_uimm_6.read(ba) << 6;
2476static BitArrayRange R_uimm_2(12, 9);
2477uimm += R_uimm_2.read(ba) << 2;
2478
2479// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2480// -----------------------------------------------------------------------------
2481
2482 {
2484
2485 cp.code() = std::string("//CSWSP\n");
2486
2487// -----------------------------------------------------------------------------
2488cp.code() += "etiss_coverage_count(1, 70);\n";
2489{ // block
2490cp.code() += "etiss_coverage_count(1, 1169);\n";
2491cp.code() += "{ // block\n";
2492cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
2493cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2494cp.code() += "} // block\n";
2495} // block
2496{ // block
2497cp.code() += "etiss_coverage_count(1, 2806);\n";
2498cp.code() += "{ // block\n";
2499cp.code() += "etiss_uint32 offs = *((RV32IMACFD*)cpu)->X[2ULL] + " + std::to_string(uimm) + "ULL;\n";
2500cp.code() += "etiss_coverage_count(5, 2794, 2793, 2791, 2790, 2792);\n";
2501cp.code() += "etiss_uint32 mem_val_0;\n";
2502cp.code() += "mem_val_0 = (etiss_uint32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) + "ULL]);\n";
2503cp.code() += "etiss_coverage_count(7, 2805, 2797, 2796, 2804, 2802, 2801, 2799);\n";
2504cp.code() += "cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";
2505cp.code() += "if (cpu->exception) { // conditional\n";
2506{ // procedure
2507cp.code() += "{ // procedure\n";
2508cp.code() += "RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
2509cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
2510cp.code() += "} // procedure\n";
2511} // procedure
2512cp.code() += "} // conditional\n";
2513cp.code() += "} // block\n";
2514} // block
2515cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2516cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2517// -----------------------------------------------------------------------------
2518 cp.getAffectedRegisters().add("instructionPointer", 32);
2519 }
2520 {
2522
2523 cp.code() = std::string("//CSWSP\n");
2524
2525// -----------------------------------------------------------------------------
2526cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
2527// -----------------------------------------------------------------------------
2528 }
2529
2530 return true;
2531 },
2532 0,
2533 [] (BitArray & ba, Instruction & instr)
2534 {
2535// -----------------------------------------------------------------------------
2536etiss_uint8 rs2 = 0;
2537static BitArrayRange R_rs2_0(6, 2);
2538rs2 += R_rs2_0.read(ba) << 0;
2539etiss_uint8 uimm = 0;
2540static BitArrayRange R_uimm_6(8, 7);
2541uimm += R_uimm_6.read(ba) << 6;
2542static BitArrayRange R_uimm_2(12, 9);
2543uimm += R_uimm_2.read(ba) << 2;
2544
2545// -----------------------------------------------------------------------------
2546
2547 std::stringstream ss;
2548// -----------------------------------------------------------------------------
2549ss << "cswsp" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | uimm=" + std::to_string(uimm) + "]");
2550// -----------------------------------------------------------------------------
2551 return ss.str();
2552 }
2553);
2554
2555// DII -------------------------------------------------------------------------
2558 "dii",
2559 (uint16_t) 0x00,
2560 (uint16_t) 0xffff,
2561 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2562 {
2563
2564// -----------------------------------------------------------------------------
2565
2566// -----------------------------------------------------------------------------
2567
2568// -----------------------------------------------------------------------------
2569// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2570
2571// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2572// -----------------------------------------------------------------------------
2573
2574 {
2576
2577 cp.code() = std::string("//DII\n");
2578
2579// -----------------------------------------------------------------------------
2580cp.code() += "etiss_coverage_count(1, 71);\n";
2581{ // block
2582cp.code() += "etiss_coverage_count(1, 1169);\n";
2583cp.code() += "{ // block\n";
2584cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
2585cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2586cp.code() += "} // block\n";
2587} // block
2588{ // procedure
2589cp.code() += "{ // procedure\n";
2590cp.code() += "RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
2591cp.code() += "etiss_coverage_count(2, 2809, 2807);\n";
2592cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
2593cp.code() += "} // procedure\n";
2594} // procedure
2595cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2596cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2597// -----------------------------------------------------------------------------
2598 cp.getAffectedRegisters().add("instructionPointer", 32);
2599 }
2600 {
2602
2603 cp.code() = std::string("//DII\n");
2604
2605// -----------------------------------------------------------------------------
2606cp.code() += "return cpu->exception;\n";
2607// -----------------------------------------------------------------------------
2608 }
2609
2610 return true;
2611 },
2612 0,
2613 [] (BitArray & ba, Instruction & instr)
2614 {
2615// -----------------------------------------------------------------------------
2616
2617// -----------------------------------------------------------------------------
2618
2619 std::stringstream ss;
2620// -----------------------------------------------------------------------------
2621ss << "dii" << " # " << ba << (" []");
2622// -----------------------------------------------------------------------------
2623 return ss.str();
2624 }
2625);
2626// clang-format on
etiss::instr::InstructionGroup ISA16_RV32IMACFD("ISA16_RV32IMACFD", 16)
static InstructionDefinition candi_imm_rs1(ISA16_RV32IMACFD, "candi",(uint16_t) 0x8801,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2552);\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, 2551, 2541, 2540, 2538, 2539, 2550, 2546, 2545, 2543, 2544, 2549, 2547);\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 cswsp_rs2_uimm(ISA16_RV32IMACFD, "cswsp",(uint16_t) 0xc002,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2806);\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, 2794, 2793, 2791, 2790, 2792);\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(7, 2805, 2797, 2796, 2804, 2802, 2801, 2799);\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 dii_(ISA16_RV32IMACFD, "dii",(uint16_t) 0x00,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\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, 2809, 2807);\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 csub_rs2_rd(ISA16_RV32IMACFD, "csub",(uint16_t) 0x8c01,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2570);\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, 2569, 2557, 2556, 2554, 2555, 2568, 2562, 2561, 2559, 2560, 2567, 2566, 2564, 2565);\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 cnop_nzimm(ISA16_RV32IMACFD, "cnop",(uint16_t) 0x01,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2407);\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 caddi16sp_nzimm(ISA16_RV32IMACFD, "caddi16sp",(uint16_t) 0x6101,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2464);\n";if(nzimm) { cp.code()+="etiss_coverage_count(1, 2465);\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, 2476, 2468, 2467, 2475, 2471, 2470, 2474, 2472);\n";} else { { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";cp.code()+="etiss_coverage_count(2, 2479, 2477);\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 caddi4spn_rd_imm(ISA16_RV32IMACFD, "caddi4spn",(uint16_t) 0x00,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2327);\n";if(imm) { cp.code()+="etiss_coverage_count(1, 2328);\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, 2339, 2333, 2332, 2330, 2331, 2338, 2336, 2335, 2337);\n";} else { { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";cp.code()+="etiss_coverage_count(2, 2342, 2340);\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 clw_rd_uimm_rs1(ISA16_RV32IMACFD, "clw",(uint16_t) 0x4000,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2363);\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, 2351, 2350, 2348, 2347, 2345, 2346, 2349);\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(8, 2362, 2356, 2355, 2353, 2354, 2361, 2359, 2358);\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 cjal_imm(ISA16_RV32IMACFD, "cjal",(uint16_t) 0x2001,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2422);\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, 2414, 2410, 2409, 2413, 2411, 2412);\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, 2421, 2415, 2420, 2416, 2419, 2417);\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 cbeqz_imm_rs1(ISA16_RV32IMACFD, "cbeqz",(uint16_t) 0xc001,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2632);\n";cp.code()+="if (*((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] == 0LL) { // conditional\n";cp.code()+="etiss_coverage_count(6, 2639, 2637, 2636, 2634, 2635, 2638);\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, 2646, 2640, 2645, 2641, 2644, 2642);\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 __reserved_clui_rd(ISA16_RV32IMACFD, "__reserved_clui",(uint16_t) 0x6001,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\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, 2482, 2480);\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 cebreak_(ISA16_RV32IMACFD, "cebreak",(uint16_t) 0x9002,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\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, 2787, 2785);\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 clui_imm_rd(ISA16_RV32IMACFD, "clui",(uint16_t) 0x6001,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2463);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 2440);\n";if(imm==0LL) { cp.code()+="etiss_coverage_count(3, 2443, 2441, 2442);\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";cp.code()+="etiss_coverage_count(2, 2446, 2444);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} } cp.code()+="etiss_coverage_count(1, 2447);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2453, 2450, 2448, 2451, 2452);\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, 2462, 2458, 2457, 2455, 2461, 2459);\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 clwsp_uimm_rd(ISA16_RV32IMACFD, "clwsp",(uint16_t) 0x4002,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2703);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 2677);\n";if(rd % 32ULL) { cp.code()+="etiss_coverage_count(2, 2680, 2678);\n";{ cp.code()+="etiss_coverage_count(1, 2699);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 mem_val_0;\n";cp.code()+="cpu->exception |= (*(system->dread))(system->handle, cpu, *((RV32IMACFD*)cpu)->X[2ULL] + "+std::to_string(uimm)+"ULL, (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(6, 2689, 2688, 2687, 2685, 2684, 2686);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_int32)(res);\n";cp.code()+="etiss_coverage_count(6, 2698, 2694, 2693, 2691, 2697, 2695);\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, 2702, 2700, 2701);\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 csrli_shamt_rs1(ISA16_RV32IMACFD, "csrli",(uint16_t) 0x8001,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2496);\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, 2495, 2487, 2486, 2484, 2485, 2494, 2492, 2491, 2489, 2490, 2493);\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 cbnez_imm_rs1(ISA16_RV32IMACFD, "cbnez",(uint16_t) 0xe001,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2647);\n";cp.code()+="if (*((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] != 0LL) { // conditional\n";cp.code()+="etiss_coverage_count(6, 2654, 2652, 2651, 2649, 2650, 2653);\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, 2661, 2655, 2660, 2656, 2659, 2657);\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();})
static InstructionDefinition cmv_rs2_rd(ISA16_RV32IMACFD, "cmv",(uint16_t) 0x8002,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2704);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2710, 2707, 2705, 2708, 2709);\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, 2721, 2715, 2714, 2712, 2720, 2719, 2717);\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 caddi_imm_rs1(ISA16_RV32IMACFD, "caddi",(uint16_t) 0x01,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2385);\n";if((rs1 % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2391, 2388, 2386, 2389, 2390);\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, 2406, 2396, 2395, 2393, 2405, 2401, 2400, 2398, 2404, 2402);\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 cxor_rs2_rd(ISA16_RV32IMACFD, "cxor",(uint16_t) 0x8c21,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2588);\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, 2587, 2575, 2574, 2572, 2573, 2586, 2580, 2579, 2577, 2578, 2585, 2584, 2582, 2583);\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 __reserved_cmv_(ISA16_RV32IMACFD, "__reserved_cmv",(uint16_t) 0x8002,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\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, 2739, 2737, 2738);\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 cslli_nzuimm_rs1(ISA16_RV32IMACFD, "cslli",(uint16_t) 0x02,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2662);\n";if(nzuimm) { cp.code()+="etiss_coverage_count(1, 2663);\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, 2676, 2668, 2667, 2665, 2675, 2673, 2672, 2670, 2674);\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 cjalr_rs1(ISA16_RV32IMACFD, "cjalr",(uint16_t) 0x9002,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2784);\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, 2770, 2769, 2768, 2766);\n";cp.code()+="*((RV32IMACFD*)cpu)->X[1ULL] = "+std::to_string(ic.current_address_+2ULL)+"ULL;\n";cp.code()+="etiss_coverage_count(6, 2777, 2773, 2772, 2776, 2774, 2775);\n";cp.code()+="cpu->nextPc = new_pc & -2LL;\n";cp.code()+="etiss_coverage_count(4, 2783, 2778, 2782, 2779);\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 cand_rs2_rd(ISA16_RV32IMACFD, "cand",(uint16_t) 0x8c61,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2624);\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, 2623, 2611, 2610, 2608, 2609, 2622, 2616, 2615, 2613, 2614, 2621, 2620, 2618, 2619);\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 cjr_rs1(ISA16_RV32IMACFD, "cjr",(uint16_t) 0x8002,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2722);\n";if(rs1) { cp.code()+="etiss_coverage_count(1, 2723);\n";cp.code()+="cpu->nextPc = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] & -2LL;\n";cp.code()+="etiss_coverage_count(6, 2733, 2724, 2732, 2729, 2728, 2726);\n";} else { { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";cp.code()+="etiss_coverage_count(3, 2736, 2734, 2735);\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 cadd_rs2_rd(ISA16_RV32IMACFD, "cadd",(uint16_t) 0x9002,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2740);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2746, 2743, 2741, 2744, 2745);\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, 2763, 2751, 2750, 2748, 2762, 2756, 2755, 2753, 2761, 2760, 2758);\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 cj_imm(ISA16_RV32IMACFD, "cj",(uint16_t) 0xa001,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\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, 2631, 2625, 2630, 2626, 2629, 2627);\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 csrai_shamt_rs1(ISA16_RV32IMACFD, "csrai",(uint16_t) 0x8401,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2536);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 2497);\n";if(shamt) { cp.code()+="etiss_coverage_count(1, 2498);\n";{ cp.code()+="etiss_coverage_count(1, 2518);\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, 2517, 2506, 2505, 2503, 2504, 2516, 2513, 2511, 2510, 2508, 2509, 2514, 2515);\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 cli_imm_rd(ISA16_RV32IMACFD, "cli",(uint16_t) 0x4001,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2439);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 2423);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2429, 2426, 2424, 2427, 2428);\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, 2438, 2434, 2433, 2431, 2437, 2435);\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 csw_rs2_uimm_rs1(ISA16_RV32IMACFD, "csw",(uint16_t) 0xc000,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2384);\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, 2372, 2371, 2369, 2368, 2366, 2367, 2370);\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(8, 2383, 2375, 2374, 2382, 2380, 2379, 2377, 2378);\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 cor_rs2_rd(ISA16_RV32IMACFD, "cor",(uint16_t) 0x8c41,(uint16_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, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+2)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2606);\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, 2605, 2593, 2592, 2590, 2591, 2604, 2598, 2597, 2595, 2596, 2603, 2602, 2600, 2601);\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();})
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