ETISS 0.11.2
ExtendableTranslatingInstructionSetSimulator(version0.11.2)
Loading...
Searching...
No Matches
RV64IMACFD_RV32ICInstr.cpp
Go to the documentation of this file.
1// clang-format off
9#include "RV64IMACFDArch.h"
10#include "RV64IMACFDFuncs.h"
11
12using namespace etiss;
13using namespace etiss::instr;
14
15// 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() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] = *((RV64IMACFD*)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() += "RV64IMACFD_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_uint64 load_address = *((RV64IMACFD*)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() += "RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
176cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
177cp.code() += "} // procedure\n";
178} // procedure
179cp.code() += "} // conditional\n";
180cp.code() += "*((RV64IMACFD*)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_uint64 load_address = *((RV64IMACFD*)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)(*((RV64IMACFD*)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() += "RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
288cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
289cp.code() += "} // procedure\n";
290} // procedure
291cp.code() += "} // conditional\n";
292cp.code() += "} // block\n";
293} // block
294cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
295cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
296// -----------------------------------------------------------------------------
297 cp.getAffectedRegisters().add("instructionPointer", 32);
298 }
299 {
301
302 cp.code() = std::string("//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() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] = *((RV64IMACFD*)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// CLI -------------------------------------------------------------------------
491 "cli",
492 (uint16_t) 0x4001,
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_uint8 imm = 0;
504static BitArrayRange R_imm_0(6, 2);
505imm += R_imm_0.read(ba) << 0;
506etiss_uint8 rd = 0;
507static BitArrayRange R_rd_0(11, 7);
508rd += R_rd_0.read(ba) << 0;
509static BitArrayRange R_imm_5(12, 12);
510imm += R_imm_5.read(ba) << 5;
511
512// NOLINTEND(clang-diagnostic-unused-but-set-variable)
513// -----------------------------------------------------------------------------
514
515 {
517
518 cp.code() = std::string("//CLI\n");
519
520// -----------------------------------------------------------------------------
521cp.code() += "etiss_coverage_count(1, 48);\n";
522{ // block
523cp.code() += "etiss_coverage_count(1, 1169);\n";
524cp.code() += "{ // block\n";
525cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
526cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
527cp.code() += "} // block\n";
528} // block
529{ // block
530cp.code() += "etiss_coverage_count(1, 2439);\n";
531cp.code() += "{ // block\n";
532cp.code() += "etiss_coverage_count(1, 2423);\n";
533if ((rd % 32ULL) != 0LL) { // conditional
534cp.code() += "etiss_coverage_count(5, 2429, 2426, 2424, 2427, 2428);\n";
535cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = " + std::to_string(((etiss_int8)(((etiss_int8)imm) << (2)) >> (2))) + "LL;\n";
536cp.code() += "etiss_coverage_count(6, 2438, 2434, 2433, 2431, 2437, 2435);\n";
537} // conditional
538cp.code() += "} // block\n";
539} // block
540cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
541cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
542// -----------------------------------------------------------------------------
543 cp.getAffectedRegisters().add("instructionPointer", 32);
544 }
545
546 return true;
547 },
548 0,
549 [] (BitArray & ba, Instruction & instr)
550 {
551// -----------------------------------------------------------------------------
552etiss_uint8 imm = 0;
553static BitArrayRange R_imm_0(6, 2);
554imm += R_imm_0.read(ba) << 0;
555etiss_uint8 rd = 0;
556static BitArrayRange R_rd_0(11, 7);
557rd += R_rd_0.read(ba) << 0;
558static BitArrayRange R_imm_5(12, 12);
559imm += R_imm_5.read(ba) << 5;
560
561// -----------------------------------------------------------------------------
562
563 std::stringstream ss;
564// -----------------------------------------------------------------------------
565ss << "cli" << " # " << ba << (" [imm=" + std::to_string(imm) + " | rd=" + std::to_string(rd) + "]");
566// -----------------------------------------------------------------------------
567 return ss.str();
568 }
569);
570
571// CLUI ------------------------------------------------------------------------
574 "clui",
575 (uint16_t) 0x6001,
576 (uint16_t) 0xe003,
577 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
578 {
579
580// -----------------------------------------------------------------------------
581
582// -----------------------------------------------------------------------------
583
584// -----------------------------------------------------------------------------
585// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
586etiss_uint32 imm = 0;
587static BitArrayRange R_imm_12(6, 2);
588imm += R_imm_12.read(ba) << 12;
589etiss_uint8 rd = 0;
590static BitArrayRange R_rd_0(11, 7);
591rd += R_rd_0.read(ba) << 0;
592static BitArrayRange R_imm_17(12, 12);
593imm += R_imm_17.read(ba) << 17;
594
595// NOLINTEND(clang-diagnostic-unused-but-set-variable)
596// -----------------------------------------------------------------------------
597
598 {
600
601 cp.code() = std::string("//CLUI\n");
602
603// -----------------------------------------------------------------------------
604cp.code() += "etiss_coverage_count(1, 49);\n";
605{ // block
606cp.code() += "etiss_coverage_count(1, 1169);\n";
607cp.code() += "{ // block\n";
608cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
609cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
610cp.code() += "} // block\n";
611} // block
612{ // block
613cp.code() += "etiss_coverage_count(1, 2463);\n";
614cp.code() += "{ // block\n";
615cp.code() += "etiss_coverage_count(1, 2440);\n";
616if (imm == 0LL) { // conditional
617cp.code() += "etiss_coverage_count(3, 2443, 2441, 2442);\n";
618{ // procedure
619cp.code() += "{ // procedure\n";
620cp.code() += "RV64IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
621cp.code() += "etiss_coverage_count(2, 2446, 2444);\n";
622cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
623cp.code() += "} // procedure\n";
624} // procedure
625} // conditional
626cp.code() += "etiss_coverage_count(1, 2447);\n";
627if ((rd % 32ULL) != 0LL) { // conditional
628cp.code() += "etiss_coverage_count(5, 2453, 2450, 2448, 2451, 2452);\n";
629cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = " + std::to_string(((etiss_int32)(((etiss_int32)imm) << (14)) >> (14))) + "LL;\n";
630cp.code() += "etiss_coverage_count(6, 2462, 2458, 2457, 2455, 2461, 2459);\n";
631} // conditional
632cp.code() += "} // block\n";
633} // block
634cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
635cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
636// -----------------------------------------------------------------------------
637 cp.getAffectedRegisters().add("instructionPointer", 32);
638 }
639 {
641
642 cp.code() = std::string("//CLUI\n");
643
644// -----------------------------------------------------------------------------
645cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
646// -----------------------------------------------------------------------------
647 }
648
649 return true;
650 },
651 0,
652 [] (BitArray & ba, Instruction & instr)
653 {
654// -----------------------------------------------------------------------------
655etiss_uint32 imm = 0;
656static BitArrayRange R_imm_12(6, 2);
657imm += R_imm_12.read(ba) << 12;
658etiss_uint8 rd = 0;
659static BitArrayRange R_rd_0(11, 7);
660rd += R_rd_0.read(ba) << 0;
661static BitArrayRange R_imm_17(12, 12);
662imm += R_imm_17.read(ba) << 17;
663
664// -----------------------------------------------------------------------------
665
666 std::stringstream ss;
667// -----------------------------------------------------------------------------
668ss << "clui" << " # " << ba << (" [imm=" + std::to_string(imm) + " | rd=" + std::to_string(rd) + "]");
669// -----------------------------------------------------------------------------
670 return ss.str();
671 }
672);
673
674// CADDI16SP -------------------------------------------------------------------
677 "caddi16sp",
678 (uint16_t) 0x6101,
679 (uint16_t) 0xef83,
680 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
681 {
682
683// -----------------------------------------------------------------------------
684
685// -----------------------------------------------------------------------------
686
687// -----------------------------------------------------------------------------
688// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
689etiss_uint16 nzimm = 0;
690static BitArrayRange R_nzimm_5(2, 2);
691nzimm += R_nzimm_5.read(ba) << 5;
692static BitArrayRange R_nzimm_7(4, 3);
693nzimm += R_nzimm_7.read(ba) << 7;
694static BitArrayRange R_nzimm_6(5, 5);
695nzimm += R_nzimm_6.read(ba) << 6;
696static BitArrayRange R_nzimm_4(6, 6);
697nzimm += R_nzimm_4.read(ba) << 4;
698static BitArrayRange R_nzimm_9(12, 12);
699nzimm += R_nzimm_9.read(ba) << 9;
700
701// NOLINTEND(clang-diagnostic-unused-but-set-variable)
702// -----------------------------------------------------------------------------
703
704 {
706
707 cp.code() = std::string("//CADDI16SP\n");
708
709// -----------------------------------------------------------------------------
710cp.code() += "etiss_coverage_count(1, 50);\n";
711{ // block
712cp.code() += "etiss_coverage_count(1, 1169);\n";
713cp.code() += "{ // block\n";
714cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
715cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
716cp.code() += "} // block\n";
717} // block
718cp.code() += "etiss_coverage_count(1, 2464);\n";
719if (nzimm) { // conditional
720cp.code() += "etiss_coverage_count(1, 2465);\n";
721cp.code() += "*((RV64IMACFD*)cpu)->X[2ULL] = *((RV64IMACFD*)cpu)->X[2ULL] + " + std::to_string(((etiss_int16)(((etiss_int16)nzimm) << (6)) >> (6))) + "LL;\n";
722cp.code() += "etiss_coverage_count(8, 2476, 2468, 2467, 2475, 2471, 2470, 2474, 2472);\n";
723} // conditional
724else { // conditional
725{ // procedure
726cp.code() += "{ // procedure\n";
727cp.code() += "RV64IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
728cp.code() += "etiss_coverage_count(2, 2479, 2477);\n";
729cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
730cp.code() += "} // procedure\n";
731} // procedure
732} // conditional
733cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
734cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
735// -----------------------------------------------------------------------------
736 cp.getAffectedRegisters().add("instructionPointer", 32);
737 }
738 {
740
741 cp.code() = std::string("//CADDI16SP\n");
742
743// -----------------------------------------------------------------------------
744cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
745// -----------------------------------------------------------------------------
746 }
747
748 return true;
749 },
750 0,
751 [] (BitArray & ba, Instruction & instr)
752 {
753// -----------------------------------------------------------------------------
754etiss_uint16 nzimm = 0;
755static BitArrayRange R_nzimm_5(2, 2);
756nzimm += R_nzimm_5.read(ba) << 5;
757static BitArrayRange R_nzimm_7(4, 3);
758nzimm += R_nzimm_7.read(ba) << 7;
759static BitArrayRange R_nzimm_6(5, 5);
760nzimm += R_nzimm_6.read(ba) << 6;
761static BitArrayRange R_nzimm_4(6, 6);
762nzimm += R_nzimm_4.read(ba) << 4;
763static BitArrayRange R_nzimm_9(12, 12);
764nzimm += R_nzimm_9.read(ba) << 9;
765
766// -----------------------------------------------------------------------------
767
768 std::stringstream ss;
769// -----------------------------------------------------------------------------
770ss << "caddi16sp" << " # " << ba << (" [nzimm=" + std::to_string(nzimm) + "]");
771// -----------------------------------------------------------------------------
772 return ss.str();
773 }
774);
775
776// __reserved_clui -------------------------------------------------------------
779 "__reserved_clui",
780 (uint16_t) 0x6001,
781 (uint16_t) 0xf07f,
782 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
783 {
784
785// -----------------------------------------------------------------------------
786
787// -----------------------------------------------------------------------------
788
789// -----------------------------------------------------------------------------
790// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
791etiss_uint8 rd = 0;
792static BitArrayRange R_rd_0(11, 7);
793rd += R_rd_0.read(ba) << 0;
794
795// NOLINTEND(clang-diagnostic-unused-but-set-variable)
796// -----------------------------------------------------------------------------
797
798 {
800
801 cp.code() = std::string("//__reserved_clui\n");
802
803// -----------------------------------------------------------------------------
804cp.code() += "etiss_coverage_count(1, 51);\n";
805{ // block
806cp.code() += "etiss_coverage_count(1, 1169);\n";
807cp.code() += "{ // block\n";
808cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
809cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
810cp.code() += "} // block\n";
811} // block
812{ // procedure
813cp.code() += "{ // procedure\n";
814cp.code() += "RV64IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
815cp.code() += "etiss_coverage_count(2, 2482, 2480);\n";
816cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
817cp.code() += "} // procedure\n";
818} // procedure
819cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
820cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
821// -----------------------------------------------------------------------------
822 cp.getAffectedRegisters().add("instructionPointer", 32);
823 }
824 {
826
827 cp.code() = std::string("//__reserved_clui\n");
828
829// -----------------------------------------------------------------------------
830cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
831// -----------------------------------------------------------------------------
832 }
833
834 return true;
835 },
836 0,
837 [] (BitArray & ba, Instruction & instr)
838 {
839// -----------------------------------------------------------------------------
840etiss_uint8 rd = 0;
841static BitArrayRange R_rd_0(11, 7);
842rd += R_rd_0.read(ba) << 0;
843
844// -----------------------------------------------------------------------------
845
846 std::stringstream ss;
847// -----------------------------------------------------------------------------
848ss << "__reserved_clui" << " # " << ba << (" [rd=" + std::to_string(rd) + "]");
849// -----------------------------------------------------------------------------
850 return ss.str();
851 }
852);
853
854// CSRLI -----------------------------------------------------------------------
857 "csrli",
858 (uint16_t) 0x8001,
859 (uint16_t) 0xfc03,
860 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
861 {
862
863// -----------------------------------------------------------------------------
864
865// -----------------------------------------------------------------------------
866
867// -----------------------------------------------------------------------------
868// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
869etiss_uint8 shamt = 0;
870static BitArrayRange R_shamt_0(6, 2);
871shamt += R_shamt_0.read(ba) << 0;
872etiss_uint8 rs1 = 0;
873static BitArrayRange R_rs1_0(9, 7);
874rs1 += R_rs1_0.read(ba) << 0;
875
876// NOLINTEND(clang-diagnostic-unused-but-set-variable)
877// -----------------------------------------------------------------------------
878
879 {
881
882 cp.code() = std::string("//CSRLI\n");
883
884// -----------------------------------------------------------------------------
885cp.code() += "etiss_coverage_count(1, 52);\n";
886{ // block
887cp.code() += "etiss_coverage_count(1, 1169);\n";
888cp.code() += "{ // block\n";
889cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
890cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
891cp.code() += "} // block\n";
892} // block
893{ // block
894cp.code() += "etiss_coverage_count(1, 2496);\n";
895cp.code() += "{ // block\n";
896cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] >> " + std::to_string(shamt) + "ULL;\n";
897cp.code() += "etiss_coverage_count(11, 2495, 2487, 2486, 2484, 2485, 2494, 2492, 2491, 2489, 2490, 2493);\n";
898cp.code() += "} // block\n";
899} // block
900cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
901cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
902// -----------------------------------------------------------------------------
903 cp.getAffectedRegisters().add("instructionPointer", 32);
904 }
905
906 return true;
907 },
908 0,
909 [] (BitArray & ba, Instruction & instr)
910 {
911// -----------------------------------------------------------------------------
912etiss_uint8 shamt = 0;
913static BitArrayRange R_shamt_0(6, 2);
914shamt += R_shamt_0.read(ba) << 0;
915etiss_uint8 rs1 = 0;
916static BitArrayRange R_rs1_0(9, 7);
917rs1 += R_rs1_0.read(ba) << 0;
918
919// -----------------------------------------------------------------------------
920
921 std::stringstream ss;
922// -----------------------------------------------------------------------------
923ss << "csrli" << " # " << ba << (" [shamt=" + std::to_string(shamt) + " | rs1=" + std::to_string(rs1) + "]");
924// -----------------------------------------------------------------------------
925 return ss.str();
926 }
927);
928
929// CSRAI -----------------------------------------------------------------------
932 "csrai",
933 (uint16_t) 0x8401,
934 (uint16_t) 0xfc03,
935 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
936 {
937
938// -----------------------------------------------------------------------------
939
940// -----------------------------------------------------------------------------
941
942// -----------------------------------------------------------------------------
943// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
944etiss_uint8 shamt = 0;
945static BitArrayRange R_shamt_0(6, 2);
946shamt += R_shamt_0.read(ba) << 0;
947etiss_uint8 rs1 = 0;
948static BitArrayRange R_rs1_0(9, 7);
949rs1 += R_rs1_0.read(ba) << 0;
950
951// NOLINTEND(clang-diagnostic-unused-but-set-variable)
952// -----------------------------------------------------------------------------
953
954 {
956
957 cp.code() = std::string("//CSRAI\n");
958
959// -----------------------------------------------------------------------------
960cp.code() += "etiss_coverage_count(1, 53);\n";
961{ // block
962cp.code() += "etiss_coverage_count(1, 1169);\n";
963cp.code() += "{ // block\n";
964cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
965cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
966cp.code() += "} // block\n";
967} // block
968{ // block
969cp.code() += "etiss_coverage_count(1, 2536);\n";
970cp.code() += "{ // block\n";
971cp.code() += "etiss_coverage_count(1, 2497);\n";
972if (shamt) { // conditional
973cp.code() += "etiss_coverage_count(1, 2498);\n";
974{ // block
975cp.code() += "etiss_coverage_count(1, 2518);\n";
976cp.code() += "{ // block\n";
977cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] = ((etiss_int64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL])) >> " + std::to_string(shamt) + "ULL;\n";
978cp.code() += "etiss_coverage_count(13, 2517, 2506, 2505, 2503, 2504, 2516, 2513, 2511, 2510, 2508, 2509, 2514, 2515);\n";
979cp.code() += "} // block\n";
980} // block
981} // conditional
982cp.code() += "} // block\n";
983} // block
984cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
985cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
986// -----------------------------------------------------------------------------
987 cp.getAffectedRegisters().add("instructionPointer", 32);
988 }
989
990 return true;
991 },
992 0,
993 [] (BitArray & ba, Instruction & instr)
994 {
995// -----------------------------------------------------------------------------
996etiss_uint8 shamt = 0;
997static BitArrayRange R_shamt_0(6, 2);
998shamt += R_shamt_0.read(ba) << 0;
999etiss_uint8 rs1 = 0;
1000static BitArrayRange R_rs1_0(9, 7);
1001rs1 += R_rs1_0.read(ba) << 0;
1002
1003// -----------------------------------------------------------------------------
1004
1005 std::stringstream ss;
1006// -----------------------------------------------------------------------------
1007ss << "csrai" << " # " << ba << (" [shamt=" + std::to_string(shamt) + " | rs1=" + std::to_string(rs1) + "]");
1008// -----------------------------------------------------------------------------
1009 return ss.str();
1010 }
1011);
1012
1013// CANDI -----------------------------------------------------------------------
1016 "candi",
1017 (uint16_t) 0x8801,
1018 (uint16_t) 0xec03,
1019 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1020 {
1021
1022// -----------------------------------------------------------------------------
1023
1024// -----------------------------------------------------------------------------
1025
1026// -----------------------------------------------------------------------------
1027// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1028etiss_uint8 imm = 0;
1029static BitArrayRange R_imm_0(6, 2);
1030imm += R_imm_0.read(ba) << 0;
1031etiss_uint8 rs1 = 0;
1032static BitArrayRange R_rs1_0(9, 7);
1033rs1 += R_rs1_0.read(ba) << 0;
1034static BitArrayRange R_imm_5(12, 12);
1035imm += R_imm_5.read(ba) << 5;
1036
1037// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1038// -----------------------------------------------------------------------------
1039
1040 {
1042
1043 cp.code() = std::string("//CANDI\n");
1044
1045// -----------------------------------------------------------------------------
1046cp.code() += "etiss_coverage_count(1, 54);\n";
1047{ // block
1048cp.code() += "etiss_coverage_count(1, 1169);\n";
1049cp.code() += "{ // block\n";
1050cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1051cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1052cp.code() += "} // block\n";
1053} // block
1054{ // block
1055cp.code() += "etiss_coverage_count(1, 2552);\n";
1056cp.code() += "{ // block\n";
1057cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] & " + std::to_string(((etiss_int8)(((etiss_int8)imm) << (2)) >> (2))) + "LL;\n";
1058cp.code() += "etiss_coverage_count(12, 2551, 2541, 2540, 2538, 2539, 2550, 2546, 2545, 2543, 2544, 2549, 2547);\n";
1059cp.code() += "} // block\n";
1060} // block
1061cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1062cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1063// -----------------------------------------------------------------------------
1064 cp.getAffectedRegisters().add("instructionPointer", 32);
1065 }
1066
1067 return true;
1068 },
1069 0,
1070 [] (BitArray & ba, Instruction & instr)
1071 {
1072// -----------------------------------------------------------------------------
1073etiss_uint8 imm = 0;
1074static BitArrayRange R_imm_0(6, 2);
1075imm += R_imm_0.read(ba) << 0;
1076etiss_uint8 rs1 = 0;
1077static BitArrayRange R_rs1_0(9, 7);
1078rs1 += R_rs1_0.read(ba) << 0;
1079static BitArrayRange R_imm_5(12, 12);
1080imm += R_imm_5.read(ba) << 5;
1081
1082// -----------------------------------------------------------------------------
1083
1084 std::stringstream ss;
1085// -----------------------------------------------------------------------------
1086ss << "candi" << " # " << ba << (" [imm=" + std::to_string(imm) + " | rs1=" + std::to_string(rs1) + "]");
1087// -----------------------------------------------------------------------------
1088 return ss.str();
1089 }
1090);
1091
1092// CSUB ------------------------------------------------------------------------
1095 "csub",
1096 (uint16_t) 0x8c01,
1097 (uint16_t) 0xfc63,
1098 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1099 {
1100
1101// -----------------------------------------------------------------------------
1102
1103// -----------------------------------------------------------------------------
1104
1105// -----------------------------------------------------------------------------
1106// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1107etiss_uint8 rs2 = 0;
1108static BitArrayRange R_rs2_0(4, 2);
1109rs2 += R_rs2_0.read(ba) << 0;
1110etiss_uint8 rd = 0;
1111static BitArrayRange R_rd_0(9, 7);
1112rd += R_rd_0.read(ba) << 0;
1113
1114// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1115// -----------------------------------------------------------------------------
1116
1117 {
1119
1120 cp.code() = std::string("//CSUB\n");
1121
1122// -----------------------------------------------------------------------------
1123cp.code() += "etiss_coverage_count(1, 55);\n";
1124{ // block
1125cp.code() += "etiss_coverage_count(1, 1169);\n";
1126cp.code() += "{ // block\n";
1127cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1128cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1129cp.code() += "} // block\n";
1130} // block
1131{ // block
1132cp.code() += "etiss_coverage_count(1, 2570);\n";
1133cp.code() += "{ // block\n";
1134cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] = *((RV64IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] - *((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) + "ULL];\n";
1135cp.code() += "etiss_coverage_count(14, 2569, 2557, 2556, 2554, 2555, 2568, 2562, 2561, 2559, 2560, 2567, 2566, 2564, 2565);\n";
1136cp.code() += "} // block\n";
1137} // block
1138cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1139cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1140// -----------------------------------------------------------------------------
1141 cp.getAffectedRegisters().add("instructionPointer", 32);
1142 }
1143
1144 return true;
1145 },
1146 0,
1147 [] (BitArray & ba, Instruction & instr)
1148 {
1149// -----------------------------------------------------------------------------
1150etiss_uint8 rs2 = 0;
1151static BitArrayRange R_rs2_0(4, 2);
1152rs2 += R_rs2_0.read(ba) << 0;
1153etiss_uint8 rd = 0;
1154static BitArrayRange R_rd_0(9, 7);
1155rd += R_rd_0.read(ba) << 0;
1156
1157// -----------------------------------------------------------------------------
1158
1159 std::stringstream ss;
1160// -----------------------------------------------------------------------------
1161ss << "csub" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
1162// -----------------------------------------------------------------------------
1163 return ss.str();
1164 }
1165);
1166
1167// CXOR ------------------------------------------------------------------------
1170 "cxor",
1171 (uint16_t) 0x8c21,
1172 (uint16_t) 0xfc63,
1173 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1174 {
1175
1176// -----------------------------------------------------------------------------
1177
1178// -----------------------------------------------------------------------------
1179
1180// -----------------------------------------------------------------------------
1181// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1182etiss_uint8 rs2 = 0;
1183static BitArrayRange R_rs2_0(4, 2);
1184rs2 += R_rs2_0.read(ba) << 0;
1185etiss_uint8 rd = 0;
1186static BitArrayRange R_rd_0(9, 7);
1187rd += R_rd_0.read(ba) << 0;
1188
1189// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1190// -----------------------------------------------------------------------------
1191
1192 {
1194
1195 cp.code() = std::string("//CXOR\n");
1196
1197// -----------------------------------------------------------------------------
1198cp.code() += "etiss_coverage_count(1, 56);\n";
1199{ // block
1200cp.code() += "etiss_coverage_count(1, 1169);\n";
1201cp.code() += "{ // block\n";
1202cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1203cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1204cp.code() += "} // block\n";
1205} // block
1206{ // block
1207cp.code() += "etiss_coverage_count(1, 2588);\n";
1208cp.code() += "{ // block\n";
1209cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] = *((RV64IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] ^ *((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) + "ULL];\n";
1210cp.code() += "etiss_coverage_count(14, 2587, 2575, 2574, 2572, 2573, 2586, 2580, 2579, 2577, 2578, 2585, 2584, 2582, 2583);\n";
1211cp.code() += "} // block\n";
1212} // block
1213cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1214cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1215// -----------------------------------------------------------------------------
1216 cp.getAffectedRegisters().add("instructionPointer", 32);
1217 }
1218
1219 return true;
1220 },
1221 0,
1222 [] (BitArray & ba, Instruction & instr)
1223 {
1224// -----------------------------------------------------------------------------
1225etiss_uint8 rs2 = 0;
1226static BitArrayRange R_rs2_0(4, 2);
1227rs2 += R_rs2_0.read(ba) << 0;
1228etiss_uint8 rd = 0;
1229static BitArrayRange R_rd_0(9, 7);
1230rd += R_rd_0.read(ba) << 0;
1231
1232// -----------------------------------------------------------------------------
1233
1234 std::stringstream ss;
1235// -----------------------------------------------------------------------------
1236ss << "cxor" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
1237// -----------------------------------------------------------------------------
1238 return ss.str();
1239 }
1240);
1241
1242// COR -------------------------------------------------------------------------
1245 "cor",
1246 (uint16_t) 0x8c41,
1247 (uint16_t) 0xfc63,
1248 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1249 {
1250
1251// -----------------------------------------------------------------------------
1252
1253// -----------------------------------------------------------------------------
1254
1255// -----------------------------------------------------------------------------
1256// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1257etiss_uint8 rs2 = 0;
1258static BitArrayRange R_rs2_0(4, 2);
1259rs2 += R_rs2_0.read(ba) << 0;
1260etiss_uint8 rd = 0;
1261static BitArrayRange R_rd_0(9, 7);
1262rd += R_rd_0.read(ba) << 0;
1263
1264// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1265// -----------------------------------------------------------------------------
1266
1267 {
1269
1270 cp.code() = std::string("//COR\n");
1271
1272// -----------------------------------------------------------------------------
1273cp.code() += "etiss_coverage_count(1, 57);\n";
1274{ // block
1275cp.code() += "etiss_coverage_count(1, 1169);\n";
1276cp.code() += "{ // block\n";
1277cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1278cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1279cp.code() += "} // block\n";
1280} // block
1281{ // block
1282cp.code() += "etiss_coverage_count(1, 2606);\n";
1283cp.code() += "{ // block\n";
1284cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] = *((RV64IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] | *((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) + "ULL];\n";
1285cp.code() += "etiss_coverage_count(14, 2605, 2593, 2592, 2590, 2591, 2604, 2598, 2597, 2595, 2596, 2603, 2602, 2600, 2601);\n";
1286cp.code() += "} // block\n";
1287} // block
1288cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1289cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1290// -----------------------------------------------------------------------------
1291 cp.getAffectedRegisters().add("instructionPointer", 32);
1292 }
1293
1294 return true;
1295 },
1296 0,
1297 [] (BitArray & ba, Instruction & instr)
1298 {
1299// -----------------------------------------------------------------------------
1300etiss_uint8 rs2 = 0;
1301static BitArrayRange R_rs2_0(4, 2);
1302rs2 += R_rs2_0.read(ba) << 0;
1303etiss_uint8 rd = 0;
1304static BitArrayRange R_rd_0(9, 7);
1305rd += R_rd_0.read(ba) << 0;
1306
1307// -----------------------------------------------------------------------------
1308
1309 std::stringstream ss;
1310// -----------------------------------------------------------------------------
1311ss << "cor" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
1312// -----------------------------------------------------------------------------
1313 return ss.str();
1314 }
1315);
1316
1317// CAND ------------------------------------------------------------------------
1320 "cand",
1321 (uint16_t) 0x8c61,
1322 (uint16_t) 0xfc63,
1323 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1324 {
1325
1326// -----------------------------------------------------------------------------
1327
1328// -----------------------------------------------------------------------------
1329
1330// -----------------------------------------------------------------------------
1331// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1332etiss_uint8 rs2 = 0;
1333static BitArrayRange R_rs2_0(4, 2);
1334rs2 += R_rs2_0.read(ba) << 0;
1335etiss_uint8 rd = 0;
1336static BitArrayRange R_rd_0(9, 7);
1337rd += R_rd_0.read(ba) << 0;
1338
1339// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1340// -----------------------------------------------------------------------------
1341
1342 {
1344
1345 cp.code() = std::string("//CAND\n");
1346
1347// -----------------------------------------------------------------------------
1348cp.code() += "etiss_coverage_count(1, 58);\n";
1349{ // block
1350cp.code() += "etiss_coverage_count(1, 1169);\n";
1351cp.code() += "{ // block\n";
1352cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1353cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1354cp.code() += "} // block\n";
1355} // block
1356{ // block
1357cp.code() += "etiss_coverage_count(1, 2624);\n";
1358cp.code() += "{ // block\n";
1359cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] = *((RV64IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] & *((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) + "ULL];\n";
1360cp.code() += "etiss_coverage_count(14, 2623, 2611, 2610, 2608, 2609, 2622, 2616, 2615, 2613, 2614, 2621, 2620, 2618, 2619);\n";
1361cp.code() += "} // block\n";
1362} // block
1363cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1364cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1365// -----------------------------------------------------------------------------
1366 cp.getAffectedRegisters().add("instructionPointer", 32);
1367 }
1368
1369 return true;
1370 },
1371 0,
1372 [] (BitArray & ba, Instruction & instr)
1373 {
1374// -----------------------------------------------------------------------------
1375etiss_uint8 rs2 = 0;
1376static BitArrayRange R_rs2_0(4, 2);
1377rs2 += R_rs2_0.read(ba) << 0;
1378etiss_uint8 rd = 0;
1379static BitArrayRange R_rd_0(9, 7);
1380rd += R_rd_0.read(ba) << 0;
1381
1382// -----------------------------------------------------------------------------
1383
1384 std::stringstream ss;
1385// -----------------------------------------------------------------------------
1386ss << "cand" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
1387// -----------------------------------------------------------------------------
1388 return ss.str();
1389 }
1390);
1391
1392// CJ --------------------------------------------------------------------------
1395 "cj",
1396 (uint16_t) 0xa001,
1397 (uint16_t) 0xe003,
1398 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1399 {
1400
1401// -----------------------------------------------------------------------------
1402
1403// -----------------------------------------------------------------------------
1404
1405// -----------------------------------------------------------------------------
1406// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1407etiss_uint16 imm = 0;
1408static BitArrayRange R_imm_5(2, 2);
1409imm += R_imm_5.read(ba) << 5;
1410static BitArrayRange R_imm_1(5, 3);
1411imm += R_imm_1.read(ba) << 1;
1412static BitArrayRange R_imm_7(6, 6);
1413imm += R_imm_7.read(ba) << 7;
1414static BitArrayRange R_imm_6(7, 7);
1415imm += R_imm_6.read(ba) << 6;
1416static BitArrayRange R_imm_10(8, 8);
1417imm += R_imm_10.read(ba) << 10;
1418static BitArrayRange R_imm_8(10, 9);
1419imm += R_imm_8.read(ba) << 8;
1420static BitArrayRange R_imm_4(11, 11);
1421imm += R_imm_4.read(ba) << 4;
1422static BitArrayRange R_imm_11(12, 12);
1423imm += R_imm_11.read(ba) << 11;
1424
1425// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1426// -----------------------------------------------------------------------------
1427
1428 {
1430
1431 cp.code() = std::string("//CJ\n");
1432
1433// -----------------------------------------------------------------------------
1434cp.code() += "etiss_coverage_count(1, 59);\n";
1435{ // block
1436cp.code() += "etiss_coverage_count(1, 1169);\n";
1437cp.code() += "{ // block\n";
1438cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1439cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1440cp.code() += "} // block\n";
1441} // block
1442cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + ((etiss_int16)(((etiss_int16)imm) << (4)) >> (4))) + "LL;\n";
1443cp.code() += "etiss_coverage_count(6, 2631, 2625, 2630, 2626, 2629, 2627);\n";
1444cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1445cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1446// -----------------------------------------------------------------------------
1447 cp.getAffectedRegisters().add("instructionPointer", 32);
1448 }
1449 {
1451
1452 cp.code() = std::string("//CJ\n");
1453
1454// -----------------------------------------------------------------------------
1455cp.code() += "return cpu->exception;\n";
1456// -----------------------------------------------------------------------------
1457 }
1458
1459 return true;
1460 },
1461 0,
1462 [] (BitArray & ba, Instruction & instr)
1463 {
1464// -----------------------------------------------------------------------------
1465etiss_uint16 imm = 0;
1466static BitArrayRange R_imm_5(2, 2);
1467imm += R_imm_5.read(ba) << 5;
1468static BitArrayRange R_imm_1(5, 3);
1469imm += R_imm_1.read(ba) << 1;
1470static BitArrayRange R_imm_7(6, 6);
1471imm += R_imm_7.read(ba) << 7;
1472static BitArrayRange R_imm_6(7, 7);
1473imm += R_imm_6.read(ba) << 6;
1474static BitArrayRange R_imm_10(8, 8);
1475imm += R_imm_10.read(ba) << 10;
1476static BitArrayRange R_imm_8(10, 9);
1477imm += R_imm_8.read(ba) << 8;
1478static BitArrayRange R_imm_4(11, 11);
1479imm += R_imm_4.read(ba) << 4;
1480static BitArrayRange R_imm_11(12, 12);
1481imm += R_imm_11.read(ba) << 11;
1482
1483// -----------------------------------------------------------------------------
1484
1485 std::stringstream ss;
1486// -----------------------------------------------------------------------------
1487ss << "cj" << " # " << ba << (" [imm=" + std::to_string(imm) + "]");
1488// -----------------------------------------------------------------------------
1489 return ss.str();
1490 }
1491);
1492
1493// CBEQZ -----------------------------------------------------------------------
1496 "cbeqz",
1497 (uint16_t) 0xc001,
1498 (uint16_t) 0xe003,
1499 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1500 {
1501
1502// -----------------------------------------------------------------------------
1503
1504// -----------------------------------------------------------------------------
1505
1506// -----------------------------------------------------------------------------
1507// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1508etiss_uint16 imm = 0;
1509static BitArrayRange R_imm_5(2, 2);
1510imm += R_imm_5.read(ba) << 5;
1511static BitArrayRange R_imm_1(4, 3);
1512imm += R_imm_1.read(ba) << 1;
1513static BitArrayRange R_imm_6(6, 5);
1514imm += R_imm_6.read(ba) << 6;
1515etiss_uint8 rs1 = 0;
1516static BitArrayRange R_rs1_0(9, 7);
1517rs1 += R_rs1_0.read(ba) << 0;
1518static BitArrayRange R_imm_3(11, 10);
1519imm += R_imm_3.read(ba) << 3;
1520static BitArrayRange R_imm_8(12, 12);
1521imm += R_imm_8.read(ba) << 8;
1522
1523// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1524// -----------------------------------------------------------------------------
1525
1526 {
1528
1529 cp.code() = std::string("//CBEQZ\n");
1530
1531// -----------------------------------------------------------------------------
1532cp.code() += "etiss_coverage_count(1, 60);\n";
1533{ // block
1534cp.code() += "etiss_coverage_count(1, 1169);\n";
1535cp.code() += "{ // block\n";
1536cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1537cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1538cp.code() += "} // block\n";
1539} // block
1540cp.code() += "etiss_coverage_count(1, 2632);\n";
1541cp.code() += "if (*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] == 0LL) { // conditional\n";
1542cp.code() += "etiss_coverage_count(6, 2639, 2637, 2636, 2634, 2635, 2638);\n";
1543cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + ((etiss_int16)(((etiss_int16)imm) << (7)) >> (7))) + "LL;\n";
1544cp.code() += "etiss_coverage_count(6, 2646, 2640, 2645, 2641, 2644, 2642);\n";
1545cp.code() += "} // conditional\n";
1546cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1547cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1548// -----------------------------------------------------------------------------
1549 cp.getAffectedRegisters().add("instructionPointer", 32);
1550 }
1551 {
1553
1554 cp.code() = std::string("//CBEQZ\n");
1555
1556// -----------------------------------------------------------------------------
1557cp.code() += "if (cpu->nextPc != " + std::to_string(ic.current_address_ + 2) + "ULL) return cpu->exception;\n";
1558// -----------------------------------------------------------------------------
1559 }
1560
1561 return true;
1562 },
1563 0,
1564 [] (BitArray & ba, Instruction & instr)
1565 {
1566// -----------------------------------------------------------------------------
1567etiss_uint16 imm = 0;
1568static BitArrayRange R_imm_5(2, 2);
1569imm += R_imm_5.read(ba) << 5;
1570static BitArrayRange R_imm_1(4, 3);
1571imm += R_imm_1.read(ba) << 1;
1572static BitArrayRange R_imm_6(6, 5);
1573imm += R_imm_6.read(ba) << 6;
1574etiss_uint8 rs1 = 0;
1575static BitArrayRange R_rs1_0(9, 7);
1576rs1 += R_rs1_0.read(ba) << 0;
1577static BitArrayRange R_imm_3(11, 10);
1578imm += R_imm_3.read(ba) << 3;
1579static BitArrayRange R_imm_8(12, 12);
1580imm += R_imm_8.read(ba) << 8;
1581
1582// -----------------------------------------------------------------------------
1583
1584 std::stringstream ss;
1585// -----------------------------------------------------------------------------
1586ss << "cbeqz" << " # " << ba << (" [imm=" + std::to_string(imm) + " | rs1=" + std::to_string(rs1) + "]");
1587// -----------------------------------------------------------------------------
1588 return ss.str();
1589 }
1590);
1591
1592// CBNEZ -----------------------------------------------------------------------
1595 "cbnez",
1596 (uint16_t) 0xe001,
1597 (uint16_t) 0xe003,
1598 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1599 {
1600
1601// -----------------------------------------------------------------------------
1602
1603// -----------------------------------------------------------------------------
1604
1605// -----------------------------------------------------------------------------
1606// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1607etiss_uint16 imm = 0;
1608static BitArrayRange R_imm_5(2, 2);
1609imm += R_imm_5.read(ba) << 5;
1610static BitArrayRange R_imm_1(4, 3);
1611imm += R_imm_1.read(ba) << 1;
1612static BitArrayRange R_imm_6(6, 5);
1613imm += R_imm_6.read(ba) << 6;
1614etiss_uint8 rs1 = 0;
1615static BitArrayRange R_rs1_0(9, 7);
1616rs1 += R_rs1_0.read(ba) << 0;
1617static BitArrayRange R_imm_3(11, 10);
1618imm += R_imm_3.read(ba) << 3;
1619static BitArrayRange R_imm_8(12, 12);
1620imm += R_imm_8.read(ba) << 8;
1621
1622// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1623// -----------------------------------------------------------------------------
1624
1625 {
1627
1628 cp.code() = std::string("//CBNEZ\n");
1629
1630// -----------------------------------------------------------------------------
1631cp.code() += "etiss_coverage_count(1, 61);\n";
1632{ // block
1633cp.code() += "etiss_coverage_count(1, 1169);\n";
1634cp.code() += "{ // block\n";
1635cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1636cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1637cp.code() += "} // block\n";
1638} // block
1639cp.code() += "etiss_coverage_count(1, 2647);\n";
1640cp.code() += "if (*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] != 0LL) { // conditional\n";
1641cp.code() += "etiss_coverage_count(6, 2654, 2652, 2651, 2649, 2650, 2653);\n";
1642cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + ((etiss_int16)(((etiss_int16)imm) << (7)) >> (7))) + "LL;\n";
1643cp.code() += "etiss_coverage_count(6, 2661, 2655, 2660, 2656, 2659, 2657);\n";
1644cp.code() += "} // conditional\n";
1645cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1646cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1647// -----------------------------------------------------------------------------
1648 cp.getAffectedRegisters().add("instructionPointer", 32);
1649 }
1650 {
1652
1653 cp.code() = std::string("//CBNEZ\n");
1654
1655// -----------------------------------------------------------------------------
1656cp.code() += "if (cpu->nextPc != " + std::to_string(ic.current_address_ + 2) + "ULL) return cpu->exception;\n";
1657// -----------------------------------------------------------------------------
1658 }
1659
1660 return true;
1661 },
1662 0,
1663 [] (BitArray & ba, Instruction & instr)
1664 {
1665// -----------------------------------------------------------------------------
1666etiss_uint16 imm = 0;
1667static BitArrayRange R_imm_5(2, 2);
1668imm += R_imm_5.read(ba) << 5;
1669static BitArrayRange R_imm_1(4, 3);
1670imm += R_imm_1.read(ba) << 1;
1671static BitArrayRange R_imm_6(6, 5);
1672imm += R_imm_6.read(ba) << 6;
1673etiss_uint8 rs1 = 0;
1674static BitArrayRange R_rs1_0(9, 7);
1675rs1 += R_rs1_0.read(ba) << 0;
1676static BitArrayRange R_imm_3(11, 10);
1677imm += R_imm_3.read(ba) << 3;
1678static BitArrayRange R_imm_8(12, 12);
1679imm += R_imm_8.read(ba) << 8;
1680
1681// -----------------------------------------------------------------------------
1682
1683 std::stringstream ss;
1684// -----------------------------------------------------------------------------
1685ss << "cbnez" << " # " << ba << (" [imm=" + std::to_string(imm) + " | rs1=" + std::to_string(rs1) + "]");
1686// -----------------------------------------------------------------------------
1687 return ss.str();
1688 }
1689);
1690
1691// CSLLI -----------------------------------------------------------------------
1694 "cslli",
1695 (uint16_t) 0x02,
1696 (uint16_t) 0xf003,
1697 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1698 {
1699
1700// -----------------------------------------------------------------------------
1701
1702// -----------------------------------------------------------------------------
1703
1704// -----------------------------------------------------------------------------
1705// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1706etiss_uint8 nzuimm = 0;
1707static BitArrayRange R_nzuimm_0(6, 2);
1708nzuimm += R_nzuimm_0.read(ba) << 0;
1709etiss_uint8 rs1 = 0;
1710static BitArrayRange R_rs1_0(11, 7);
1711rs1 += R_rs1_0.read(ba) << 0;
1712
1713// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1714// -----------------------------------------------------------------------------
1715
1716 {
1718
1719 cp.code() = std::string("//CSLLI\n");
1720
1721// -----------------------------------------------------------------------------
1722cp.code() += "etiss_coverage_count(1, 62);\n";
1723{ // block
1724cp.code() += "etiss_coverage_count(1, 1169);\n";
1725cp.code() += "{ // block\n";
1726cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1727cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1728cp.code() += "} // block\n";
1729} // block
1730cp.code() += "etiss_coverage_count(1, 2662);\n";
1731if (nzuimm) { // conditional
1732cp.code() += "etiss_coverage_count(1, 2663);\n";
1733cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] << " + std::to_string(nzuimm) + "ULL;\n";
1734cp.code() += "etiss_coverage_count(9, 2676, 2668, 2667, 2665, 2675, 2673, 2672, 2670, 2674);\n";
1735} // conditional
1736cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1737cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1738// -----------------------------------------------------------------------------
1739 cp.getAffectedRegisters().add("instructionPointer", 32);
1740 }
1741
1742 return true;
1743 },
1744 0,
1745 [] (BitArray & ba, Instruction & instr)
1746 {
1747// -----------------------------------------------------------------------------
1748etiss_uint8 nzuimm = 0;
1749static BitArrayRange R_nzuimm_0(6, 2);
1750nzuimm += R_nzuimm_0.read(ba) << 0;
1751etiss_uint8 rs1 = 0;
1752static BitArrayRange R_rs1_0(11, 7);
1753rs1 += R_rs1_0.read(ba) << 0;
1754
1755// -----------------------------------------------------------------------------
1756
1757 std::stringstream ss;
1758// -----------------------------------------------------------------------------
1759ss << "cslli" << " # " << ba << (" [nzuimm=" + std::to_string(nzuimm) + " | rs1=" + std::to_string(rs1) + "]");
1760// -----------------------------------------------------------------------------
1761 return ss.str();
1762 }
1763);
1764
1765// CLWSP -----------------------------------------------------------------------
1768 "clwsp",
1769 (uint16_t) 0x4002,
1770 (uint16_t) 0xe003,
1771 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1772 {
1773
1774// -----------------------------------------------------------------------------
1775
1776// -----------------------------------------------------------------------------
1777
1778// -----------------------------------------------------------------------------
1779// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1780etiss_uint8 uimm = 0;
1781static BitArrayRange R_uimm_6(3, 2);
1782uimm += R_uimm_6.read(ba) << 6;
1783static BitArrayRange R_uimm_2(6, 4);
1784uimm += R_uimm_2.read(ba) << 2;
1785etiss_uint8 rd = 0;
1786static BitArrayRange R_rd_0(11, 7);
1787rd += R_rd_0.read(ba) << 0;
1788static BitArrayRange R_uimm_5(12, 12);
1789uimm += R_uimm_5.read(ba) << 5;
1790
1791// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1792// -----------------------------------------------------------------------------
1793
1794 {
1796
1797 cp.code() = std::string("//CLWSP\n");
1798
1799// -----------------------------------------------------------------------------
1800cp.code() += "etiss_coverage_count(1, 63);\n";
1801{ // block
1802cp.code() += "etiss_coverage_count(1, 1169);\n";
1803cp.code() += "{ // block\n";
1804cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1805cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1806cp.code() += "} // block\n";
1807} // block
1808{ // block
1809cp.code() += "etiss_coverage_count(1, 2703);\n";
1810cp.code() += "{ // block\n";
1811cp.code() += "etiss_coverage_count(1, 2677);\n";
1812if (rd % 32ULL) { // conditional
1813cp.code() += "etiss_coverage_count(2, 2680, 2678);\n";
1814{ // block
1815cp.code() += "etiss_coverage_count(1, 2699);\n";
1816cp.code() += "{ // block\n";
1817cp.code() += "etiss_uint32 mem_val_0;\n";
1818cp.code() += "cpu->exception |= (*(system->dread))(system->handle, cpu, *((RV64IMACFD*)cpu)->X[2ULL] + " + std::to_string(uimm) + "ULL, (etiss_uint8*)&mem_val_0, 4);\n";
1819cp.code() += "if (cpu->exception) { // conditional\n";
1820{ // procedure
1821cp.code() += "{ // procedure\n";
1822cp.code() += "RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
1823cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
1824cp.code() += "} // procedure\n";
1825} // procedure
1826cp.code() += "} // conditional\n";
1827cp.code() += "etiss_int32 res = mem_val_0;\n";
1828cp.code() += "etiss_coverage_count(6, 2689, 2688, 2687, 2685, 2684, 2686);\n";
1829cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_int64)(res);\n";
1830cp.code() += "etiss_coverage_count(6, 2698, 2694, 2693, 2691, 2697, 2695);\n";
1831cp.code() += "} // block\n";
1832} // block
1833} // conditional
1834else { // conditional
1835{ // procedure
1836cp.code() += "{ // procedure\n";
1837cp.code() += "RV64IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";
1838cp.code() += "etiss_coverage_count(3, 2702, 2700, 2701);\n";
1839cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
1840cp.code() += "} // procedure\n";
1841} // procedure
1842} // conditional
1843cp.code() += "} // block\n";
1844} // block
1845cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1846cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1847// -----------------------------------------------------------------------------
1848 cp.getAffectedRegisters().add("instructionPointer", 32);
1849 }
1850 {
1852
1853 cp.code() = std::string("//CLWSP\n");
1854
1855// -----------------------------------------------------------------------------
1856cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
1857// -----------------------------------------------------------------------------
1858 }
1859
1860 return true;
1861 },
1862 0,
1863 [] (BitArray & ba, Instruction & instr)
1864 {
1865// -----------------------------------------------------------------------------
1866etiss_uint8 uimm = 0;
1867static BitArrayRange R_uimm_6(3, 2);
1868uimm += R_uimm_6.read(ba) << 6;
1869static BitArrayRange R_uimm_2(6, 4);
1870uimm += R_uimm_2.read(ba) << 2;
1871etiss_uint8 rd = 0;
1872static BitArrayRange R_rd_0(11, 7);
1873rd += R_rd_0.read(ba) << 0;
1874static BitArrayRange R_uimm_5(12, 12);
1875uimm += R_uimm_5.read(ba) << 5;
1876
1877// -----------------------------------------------------------------------------
1878
1879 std::stringstream ss;
1880// -----------------------------------------------------------------------------
1881ss << "clwsp" << " # " << ba << (" [uimm=" + std::to_string(uimm) + " | rd=" + std::to_string(rd) + "]");
1882// -----------------------------------------------------------------------------
1883 return ss.str();
1884 }
1885);
1886
1887// CMV -------------------------------------------------------------------------
1890 "cmv",
1891 (uint16_t) 0x8002,
1892 (uint16_t) 0xf003,
1893 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1894 {
1895
1896// -----------------------------------------------------------------------------
1897
1898// -----------------------------------------------------------------------------
1899
1900// -----------------------------------------------------------------------------
1901// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1902etiss_uint8 rs2 = 0;
1903static BitArrayRange R_rs2_0(6, 2);
1904rs2 += R_rs2_0.read(ba) << 0;
1905etiss_uint8 rd = 0;
1906static BitArrayRange R_rd_0(11, 7);
1907rd += R_rd_0.read(ba) << 0;
1908
1909// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1910// -----------------------------------------------------------------------------
1911
1912 {
1914
1915 cp.code() = std::string("//CMV\n");
1916
1917// -----------------------------------------------------------------------------
1918cp.code() += "etiss_coverage_count(1, 64);\n";
1919{ // block
1920cp.code() += "etiss_coverage_count(1, 1169);\n";
1921cp.code() += "{ // block\n";
1922cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1923cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1924cp.code() += "} // block\n";
1925} // block
1926cp.code() += "etiss_coverage_count(1, 2704);\n";
1927if ((rd % 32ULL) != 0LL) { // conditional
1928cp.code() += "etiss_coverage_count(5, 2710, 2707, 2705, 2708, 2709);\n";
1929cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) + "ULL];\n";
1930cp.code() += "etiss_coverage_count(7, 2721, 2715, 2714, 2712, 2720, 2719, 2717);\n";
1931} // conditional
1932cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1933cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1934// -----------------------------------------------------------------------------
1935 cp.getAffectedRegisters().add("instructionPointer", 32);
1936 }
1937
1938 return true;
1939 },
1940 0,
1941 [] (BitArray & ba, Instruction & instr)
1942 {
1943// -----------------------------------------------------------------------------
1944etiss_uint8 rs2 = 0;
1945static BitArrayRange R_rs2_0(6, 2);
1946rs2 += R_rs2_0.read(ba) << 0;
1947etiss_uint8 rd = 0;
1948static BitArrayRange R_rd_0(11, 7);
1949rd += R_rd_0.read(ba) << 0;
1950
1951// -----------------------------------------------------------------------------
1952
1953 std::stringstream ss;
1954// -----------------------------------------------------------------------------
1955ss << "cmv" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
1956// -----------------------------------------------------------------------------
1957 return ss.str();
1958 }
1959);
1960
1961// CJR -------------------------------------------------------------------------
1964 "cjr",
1965 (uint16_t) 0x8002,
1966 (uint16_t) 0xf07f,
1967 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1968 {
1969
1970// -----------------------------------------------------------------------------
1971
1972// -----------------------------------------------------------------------------
1973
1974// -----------------------------------------------------------------------------
1975// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
1976etiss_uint8 rs1 = 0;
1977static BitArrayRange R_rs1_0(11, 7);
1978rs1 += R_rs1_0.read(ba) << 0;
1979
1980// NOLINTEND(clang-diagnostic-unused-but-set-variable)
1981// -----------------------------------------------------------------------------
1982
1983 {
1985
1986 cp.code() = std::string("//CJR\n");
1987
1988// -----------------------------------------------------------------------------
1989cp.code() += "etiss_coverage_count(1, 65);\n";
1990{ // block
1991cp.code() += "etiss_coverage_count(1, 1169);\n";
1992cp.code() += "{ // block\n";
1993cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
1994cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1995cp.code() += "} // block\n";
1996} // block
1997cp.code() += "etiss_coverage_count(1, 2722);\n";
1998if (rs1) { // conditional
1999cp.code() += "etiss_coverage_count(1, 2723);\n";
2000cp.code() += "cpu->nextPc = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] & -2LL;\n";
2001cp.code() += "etiss_coverage_count(6, 2733, 2724, 2732, 2729, 2728, 2726);\n";
2002} // conditional
2003else { // conditional
2004{ // procedure
2005cp.code() += "{ // procedure\n";
2006cp.code() += "RV64IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";
2007cp.code() += "etiss_coverage_count(3, 2736, 2734, 2735);\n";
2008cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
2009cp.code() += "} // procedure\n";
2010} // procedure
2011} // conditional
2012cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2013cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2014// -----------------------------------------------------------------------------
2015 cp.getAffectedRegisters().add("instructionPointer", 32);
2016 }
2017 {
2019
2020 cp.code() = std::string("//CJR\n");
2021
2022// -----------------------------------------------------------------------------
2023cp.code() += "return cpu->exception;\n";
2024// -----------------------------------------------------------------------------
2025 }
2026
2027 return true;
2028 },
2029 0,
2030 [] (BitArray & ba, Instruction & instr)
2031 {
2032// -----------------------------------------------------------------------------
2033etiss_uint8 rs1 = 0;
2034static BitArrayRange R_rs1_0(11, 7);
2035rs1 += R_rs1_0.read(ba) << 0;
2036
2037// -----------------------------------------------------------------------------
2038
2039 std::stringstream ss;
2040// -----------------------------------------------------------------------------
2041ss << "cjr" << " # " << ba << (" [rs1=" + std::to_string(rs1) + "]");
2042// -----------------------------------------------------------------------------
2043 return ss.str();
2044 }
2045);
2046
2047// __reserved_cmv --------------------------------------------------------------
2050 "__reserved_cmv",
2051 (uint16_t) 0x8002,
2052 (uint16_t) 0xffff,
2053 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2054 {
2055
2056// -----------------------------------------------------------------------------
2057
2058// -----------------------------------------------------------------------------
2059
2060// -----------------------------------------------------------------------------
2061// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2062
2063// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2064// -----------------------------------------------------------------------------
2065
2066 {
2068
2069 cp.code() = std::string("//__reserved_cmv\n");
2070
2071// -----------------------------------------------------------------------------
2072cp.code() += "etiss_coverage_count(1, 66);\n";
2073{ // block
2074cp.code() += "etiss_coverage_count(1, 1169);\n";
2075cp.code() += "{ // block\n";
2076cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
2077cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2078cp.code() += "} // block\n";
2079} // block
2080{ // procedure
2081cp.code() += "{ // procedure\n";
2082cp.code() += "RV64IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";
2083cp.code() += "etiss_coverage_count(3, 2739, 2737, 2738);\n";
2084cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
2085cp.code() += "} // procedure\n";
2086} // procedure
2087cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2088cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2089// -----------------------------------------------------------------------------
2090 cp.getAffectedRegisters().add("instructionPointer", 32);
2091 }
2092 {
2094
2095 cp.code() = std::string("//__reserved_cmv\n");
2096
2097// -----------------------------------------------------------------------------
2098cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
2099// -----------------------------------------------------------------------------
2100 }
2101
2102 return true;
2103 },
2104 0,
2105 [] (BitArray & ba, Instruction & instr)
2106 {
2107// -----------------------------------------------------------------------------
2108
2109// -----------------------------------------------------------------------------
2110
2111 std::stringstream ss;
2112// -----------------------------------------------------------------------------
2113ss << "__reserved_cmv" << " # " << ba << (" []");
2114// -----------------------------------------------------------------------------
2115 return ss.str();
2116 }
2117);
2118
2119// CADD ------------------------------------------------------------------------
2122 "cadd",
2123 (uint16_t) 0x9002,
2124 (uint16_t) 0xf003,
2125 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2126 {
2127
2128// -----------------------------------------------------------------------------
2129
2130// -----------------------------------------------------------------------------
2131
2132// -----------------------------------------------------------------------------
2133// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2134etiss_uint8 rs2 = 0;
2135static BitArrayRange R_rs2_0(6, 2);
2136rs2 += R_rs2_0.read(ba) << 0;
2137etiss_uint8 rd = 0;
2138static BitArrayRange R_rd_0(11, 7);
2139rd += R_rd_0.read(ba) << 0;
2140
2141// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2142// -----------------------------------------------------------------------------
2143
2144 {
2146
2147 cp.code() = std::string("//CADD\n");
2148
2149// -----------------------------------------------------------------------------
2150cp.code() += "etiss_coverage_count(1, 67);\n";
2151{ // block
2152cp.code() += "etiss_coverage_count(1, 1169);\n";
2153cp.code() += "{ // block\n";
2154cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
2155cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2156cp.code() += "} // block\n";
2157} // block
2158cp.code() += "etiss_coverage_count(1, 2740);\n";
2159if ((rd % 32ULL) != 0LL) { // conditional
2160cp.code() += "etiss_coverage_count(5, 2746, 2743, 2741, 2744, 2745);\n";
2161cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = *((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] + *((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) + "ULL];\n";
2162cp.code() += "etiss_coverage_count(11, 2763, 2751, 2750, 2748, 2762, 2756, 2755, 2753, 2761, 2760, 2758);\n";
2163} // conditional
2164cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2165cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2166// -----------------------------------------------------------------------------
2167 cp.getAffectedRegisters().add("instructionPointer", 32);
2168 }
2169
2170 return true;
2171 },
2172 0,
2173 [] (BitArray & ba, Instruction & instr)
2174 {
2175// -----------------------------------------------------------------------------
2176etiss_uint8 rs2 = 0;
2177static BitArrayRange R_rs2_0(6, 2);
2178rs2 += R_rs2_0.read(ba) << 0;
2179etiss_uint8 rd = 0;
2180static BitArrayRange R_rd_0(11, 7);
2181rd += R_rd_0.read(ba) << 0;
2182
2183// -----------------------------------------------------------------------------
2184
2185 std::stringstream ss;
2186// -----------------------------------------------------------------------------
2187ss << "cadd" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
2188// -----------------------------------------------------------------------------
2189 return ss.str();
2190 }
2191);
2192
2193// CJALR -----------------------------------------------------------------------
2196 "cjalr",
2197 (uint16_t) 0x9002,
2198 (uint16_t) 0xf07f,
2199 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2200 {
2201
2202// -----------------------------------------------------------------------------
2203
2204// -----------------------------------------------------------------------------
2205
2206// -----------------------------------------------------------------------------
2207// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2208etiss_uint8 rs1 = 0;
2209static BitArrayRange R_rs1_0(11, 7);
2210rs1 += R_rs1_0.read(ba) << 0;
2211
2212// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2213// -----------------------------------------------------------------------------
2214
2215 {
2217
2218 cp.code() = std::string("//CJALR\n");
2219
2220// -----------------------------------------------------------------------------
2221cp.code() += "etiss_coverage_count(1, 68);\n";
2222{ // block
2223cp.code() += "etiss_coverage_count(1, 1169);\n";
2224cp.code() += "{ // block\n";
2225cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
2226cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2227cp.code() += "} // block\n";
2228} // block
2229{ // block
2230cp.code() += "etiss_coverage_count(1, 2784);\n";
2231cp.code() += "{ // block\n";
2232cp.code() += "etiss_uint64 new_pc = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL];\n";
2233cp.code() += "etiss_coverage_count(4, 2770, 2769, 2768, 2766);\n";
2234cp.code() += "*((RV64IMACFD*)cpu)->X[1ULL] = " + std::to_string(ic.current_address_ + 2ULL) + "ULL;\n";
2235cp.code() += "etiss_coverage_count(6, 2777, 2773, 2772, 2776, 2774, 2775);\n";
2236cp.code() += "cpu->nextPc = new_pc & -2LL;\n";
2237cp.code() += "etiss_coverage_count(4, 2783, 2778, 2782, 2779);\n";
2238cp.code() += "} // block\n";
2239} // block
2240cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2241cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2242// -----------------------------------------------------------------------------
2243 cp.getAffectedRegisters().add("instructionPointer", 32);
2244 }
2245 {
2247
2248 cp.code() = std::string("//CJALR\n");
2249
2250// -----------------------------------------------------------------------------
2251cp.code() += "return cpu->exception;\n";
2252// -----------------------------------------------------------------------------
2253 }
2254
2255 return true;
2256 },
2257 0,
2258 [] (BitArray & ba, Instruction & instr)
2259 {
2260// -----------------------------------------------------------------------------
2261etiss_uint8 rs1 = 0;
2262static BitArrayRange R_rs1_0(11, 7);
2263rs1 += R_rs1_0.read(ba) << 0;
2264
2265// -----------------------------------------------------------------------------
2266
2267 std::stringstream ss;
2268// -----------------------------------------------------------------------------
2269ss << "cjalr" << " # " << ba << (" [rs1=" + std::to_string(rs1) + "]");
2270// -----------------------------------------------------------------------------
2271 return ss.str();
2272 }
2273);
2274
2275// CEBREAK ---------------------------------------------------------------------
2278 "cebreak",
2279 (uint16_t) 0x9002,
2280 (uint16_t) 0xffff,
2281 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2282 {
2283
2284// -----------------------------------------------------------------------------
2285
2286// -----------------------------------------------------------------------------
2287
2288// -----------------------------------------------------------------------------
2289// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2290
2291// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2292// -----------------------------------------------------------------------------
2293
2294 {
2296
2297 cp.code() = std::string("//CEBREAK\n");
2298
2299// -----------------------------------------------------------------------------
2300cp.code() += "etiss_coverage_count(1, 69);\n";
2301{ // block
2302cp.code() += "etiss_coverage_count(1, 1169);\n";
2303cp.code() += "{ // block\n";
2304cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
2305cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2306cp.code() += "} // block\n";
2307} // block
2308{ // procedure
2309cp.code() += "{ // procedure\n";
2310cp.code() += "RV64IMACFD_raise(cpu, system, plugin_pointers, 0LL, 3LL);\n";
2311cp.code() += "etiss_coverage_count(2, 2787, 2785);\n";
2312cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
2313cp.code() += "} // procedure\n";
2314} // procedure
2315cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2316cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2317// -----------------------------------------------------------------------------
2318 cp.getAffectedRegisters().add("instructionPointer", 32);
2319 }
2320 {
2322
2323 cp.code() = std::string("//CEBREAK\n");
2324
2325// -----------------------------------------------------------------------------
2326cp.code() += "return cpu->exception;\n";
2327// -----------------------------------------------------------------------------
2328 }
2329
2330 return true;
2331 },
2332 0,
2333 [] (BitArray & ba, Instruction & instr)
2334 {
2335// -----------------------------------------------------------------------------
2336
2337// -----------------------------------------------------------------------------
2338
2339 std::stringstream ss;
2340// -----------------------------------------------------------------------------
2341ss << "cebreak" << " # " << ba << (" []");
2342// -----------------------------------------------------------------------------
2343 return ss.str();
2344 }
2345);
2346
2347// CSWSP -----------------------------------------------------------------------
2350 "cswsp",
2351 (uint16_t) 0xc002,
2352 (uint16_t) 0xe003,
2353 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2354 {
2355
2356// -----------------------------------------------------------------------------
2357
2358// -----------------------------------------------------------------------------
2359
2360// -----------------------------------------------------------------------------
2361// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2362etiss_uint8 rs2 = 0;
2363static BitArrayRange R_rs2_0(6, 2);
2364rs2 += R_rs2_0.read(ba) << 0;
2365etiss_uint8 uimm = 0;
2366static BitArrayRange R_uimm_6(8, 7);
2367uimm += R_uimm_6.read(ba) << 6;
2368static BitArrayRange R_uimm_2(12, 9);
2369uimm += R_uimm_2.read(ba) << 2;
2370
2371// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2372// -----------------------------------------------------------------------------
2373
2374 {
2376
2377 cp.code() = std::string("//CSWSP\n");
2378
2379// -----------------------------------------------------------------------------
2380cp.code() += "etiss_coverage_count(1, 70);\n";
2381{ // block
2382cp.code() += "etiss_coverage_count(1, 1169);\n";
2383cp.code() += "{ // block\n";
2384cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
2385cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2386cp.code() += "} // block\n";
2387} // block
2388{ // block
2389cp.code() += "etiss_coverage_count(1, 2806);\n";
2390cp.code() += "{ // block\n";
2391cp.code() += "etiss_uint64 offs = *((RV64IMACFD*)cpu)->X[2ULL] + " + std::to_string(uimm) + "ULL;\n";
2392cp.code() += "etiss_coverage_count(5, 2794, 2793, 2791, 2790, 2792);\n";
2393cp.code() += "etiss_uint32 mem_val_0;\n";
2394cp.code() += "mem_val_0 = (etiss_uint32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) + "ULL]);\n";
2395cp.code() += "etiss_coverage_count(7, 2805, 2797, 2796, 2804, 2802, 2801, 2799);\n";
2396cp.code() += "cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";
2397cp.code() += "if (cpu->exception) { // conditional\n";
2398{ // procedure
2399cp.code() += "{ // procedure\n";
2400cp.code() += "RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
2401cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
2402cp.code() += "} // procedure\n";
2403} // procedure
2404cp.code() += "} // conditional\n";
2405cp.code() += "} // block\n";
2406} // block
2407cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2408cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2409// -----------------------------------------------------------------------------
2410 cp.getAffectedRegisters().add("instructionPointer", 32);
2411 }
2412 {
2414
2415 cp.code() = std::string("//CSWSP\n");
2416
2417// -----------------------------------------------------------------------------
2418cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
2419// -----------------------------------------------------------------------------
2420 }
2421
2422 return true;
2423 },
2424 0,
2425 [] (BitArray & ba, Instruction & instr)
2426 {
2427// -----------------------------------------------------------------------------
2428etiss_uint8 rs2 = 0;
2429static BitArrayRange R_rs2_0(6, 2);
2430rs2 += R_rs2_0.read(ba) << 0;
2431etiss_uint8 uimm = 0;
2432static BitArrayRange R_uimm_6(8, 7);
2433uimm += R_uimm_6.read(ba) << 6;
2434static BitArrayRange R_uimm_2(12, 9);
2435uimm += R_uimm_2.read(ba) << 2;
2436
2437// -----------------------------------------------------------------------------
2438
2439 std::stringstream ss;
2440// -----------------------------------------------------------------------------
2441ss << "cswsp" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | uimm=" + std::to_string(uimm) + "]");
2442// -----------------------------------------------------------------------------
2443 return ss.str();
2444 }
2445);
2446
2447// DII -------------------------------------------------------------------------
2450 "dii",
2451 (uint16_t) 0x00,
2452 (uint16_t) 0xffff,
2453 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2454 {
2455
2456// -----------------------------------------------------------------------------
2457
2458// -----------------------------------------------------------------------------
2459
2460// -----------------------------------------------------------------------------
2461// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
2462
2463// NOLINTEND(clang-diagnostic-unused-but-set-variable)
2464// -----------------------------------------------------------------------------
2465
2466 {
2468
2469 cp.code() = std::string("//DII\n");
2470
2471// -----------------------------------------------------------------------------
2472cp.code() += "etiss_coverage_count(1, 71);\n";
2473{ // block
2474cp.code() += "etiss_coverage_count(1, 1169);\n";
2475cp.code() += "{ // block\n";
2476cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
2477cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2478cp.code() += "} // block\n";
2479} // block
2480{ // procedure
2481cp.code() += "{ // procedure\n";
2482cp.code() += "RV64IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
2483cp.code() += "etiss_coverage_count(2, 2809, 2807);\n";
2484cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
2485cp.code() += "} // procedure\n";
2486} // procedure
2487cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2488cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2489// -----------------------------------------------------------------------------
2490 cp.getAffectedRegisters().add("instructionPointer", 32);
2491 }
2492 {
2494
2495 cp.code() = std::string("//DII\n");
2496
2497// -----------------------------------------------------------------------------
2498cp.code() += "return cpu->exception;\n";
2499// -----------------------------------------------------------------------------
2500 }
2501
2502 return true;
2503 },
2504 0,
2505 [] (BitArray & ba, Instruction & instr)
2506 {
2507// -----------------------------------------------------------------------------
2508
2509// -----------------------------------------------------------------------------
2510
2511 std::stringstream ss;
2512// -----------------------------------------------------------------------------
2513ss << "dii" << " # " << ba << (" []");
2514// -----------------------------------------------------------------------------
2515 return ss.str();
2516 }
2517);
2518// clang-format on
etiss::instr::InstructionGroup ISA16_RV64IMACFD("ISA16_RV64IMACFD", 16)
static InstructionDefinition cnop_nzimm(ISA16_RV64IMACFD, "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 cjr_rs1(ISA16_RV64IMACFD, "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 = *((RV64IMACFD*)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()+="RV64IMACFD_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 cj_imm(ISA16_RV64IMACFD, "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 caddi16sp_nzimm(ISA16_RV64IMACFD, "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()+="*((RV64IMACFD*)cpu)->X[2ULL] = *((RV64IMACFD*)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()+="RV64IMACFD_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 clwsp_uimm_rd(ISA16_RV64IMACFD, "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, *((RV64IMACFD*)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()+="RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // conditional\n";cp.code()+="etiss_int32 res = mem_val_0;\n";cp.code()+="etiss_coverage_count(6, 2689, 2688, 2687, 2685, 2684, 2686);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_int64)(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()+="RV64IMACFD_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 caddi_imm_rs1(ISA16_RV64IMACFD, "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()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] = *((RV64IMACFD*)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 cjalr_rs1(ISA16_RV64IMACFD, "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_uint64 new_pc = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(4, 2770, 2769, 2768, 2766);\n";cp.code()+="*((RV64IMACFD*)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 csrai_shamt_rs1(ISA16_RV64IMACFD, "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()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] = ((etiss_int64)(*((RV64IMACFD*)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 cand_rs2_rd(ISA16_RV64IMACFD, "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()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = *((RV64IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] & *((RV64IMACFD*)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 caddi4spn_rd_imm(ISA16_RV64IMACFD, "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()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = *((RV64IMACFD*)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()+="RV64IMACFD_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 cbnez_imm_rs1(ISA16_RV64IMACFD, "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 (*((RV64IMACFD*)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 cebreak_(ISA16_RV64IMACFD, "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()+="RV64IMACFD_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 csw_rs2_uimm_rs1(ISA16_RV64IMACFD, "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_uint64 load_address = *((RV64IMACFD*)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)(*((RV64IMACFD*)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()+="RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // conditional\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} { CodePart &cp=cs.append(CodePart::APPENDEDRETURNINGREQUIRED);cp.code()=std::string("//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 cxor_rs2_rd(ISA16_RV64IMACFD, "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()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = *((RV64IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] ^ *((RV64IMACFD*)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 cor_rs2_rd(ISA16_RV64IMACFD, "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()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = *((RV64IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] | *((RV64IMACFD*)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();})
static InstructionDefinition cslli_nzuimm_rs1(ISA16_RV64IMACFD, "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()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] = *((RV64IMACFD*)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 dii_(ISA16_RV64IMACFD, "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()+="RV64IMACFD_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 cmv_rs2_rd(ISA16_RV64IMACFD, "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()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV64IMACFD*)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 csrli_shamt_rs1(ISA16_RV64IMACFD, "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()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] = *((RV64IMACFD*)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 candi_imm_rs1(ISA16_RV64IMACFD, "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()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] = *((RV64IMACFD*)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 __reserved_cmv_(ISA16_RV64IMACFD, "__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()+="RV64IMACFD_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 cadd_rs2_rd(ISA16_RV64IMACFD, "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()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] + *((RV64IMACFD*)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 __reserved_clui_rd(ISA16_RV64IMACFD, "__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()+="RV64IMACFD_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 clw_rd_uimm_rs1(ISA16_RV64IMACFD, "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_uint64 load_address = *((RV64IMACFD*)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()+="RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // conditional\n";cp.code()+="*((RV64IMACFD*)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 cli_imm_rd(ISA16_RV64IMACFD, "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()+="*((RV64IMACFD*)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 clui_imm_rd(ISA16_RV64IMACFD, "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()+="RV64IMACFD_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()+="*((RV64IMACFD*)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 cswsp_rs2_uimm(ISA16_RV64IMACFD, "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_uint64 offs = *((RV64IMACFD*)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)(*((RV64IMACFD*)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()+="RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // conditional\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} { CodePart &cp=cs.append(CodePart::APPENDEDRETURNINGREQUIRED);cp.code()=std::string("//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 cbeqz_imm_rs1(ISA16_RV64IMACFD, "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 (*((RV64IMACFD*)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 csub_rs2_rd(ISA16_RV64IMACFD, "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()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = *((RV64IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] - *((RV64IMACFD*)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();})
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