ETISS 0.11.2
ExtendableTranslatingInstructionSetSimulator(version0.11.2)
Loading...
Searching...
No Matches
RV32IMACFD_tum_csrInstr.cpp
Go to the documentation of this file.
1// clang-format off
9#include "RV32IMACFDArch.h"
10#include "RV32IMACFDFuncs.h"
11
12using namespace etiss;
13using namespace etiss::instr;
14
15// CSRRW -----------------------------------------------------------------------
18 "csrrw",
19 (uint32_t) 0x001073,
20 (uint32_t) 0x00707f,
22 {
23
24// -----------------------------------------------------------------------------
25
26// -----------------------------------------------------------------------------
27
28// -----------------------------------------------------------------------------
29// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
30etiss_uint8 rd = 0;
31static BitArrayRange R_rd_0(11, 7);
32rd += R_rd_0.read(ba) << 0;
33etiss_uint8 rs1 = 0;
34static BitArrayRange R_rs1_0(19, 15);
35rs1 += R_rs1_0.read(ba) << 0;
36etiss_uint16 csr = 0;
37static BitArrayRange R_csr_0(31, 20);
38csr += R_csr_0.read(ba) << 0;
39
40// NOLINTEND(clang-diagnostic-unused-but-set-variable)
41// -----------------------------------------------------------------------------
42
43 {
45
46 cp.code() = std::string("//CSRRW\n");
47
48// -----------------------------------------------------------------------------
49cp.code() += "etiss_coverage_count(1, 153);\n";
50{ // block
51cp.code() += "etiss_coverage_count(1, 1169);\n";
52cp.code() += "{ // block\n";
53cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
54cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
55cp.code() += "} // block\n";
56} // block
57{ // block
58cp.code() += "etiss_coverage_count(1, 3249);\n";
59cp.code() += "{ // block\n";
60cp.code() += "etiss_uint32 xrs1 = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL];\n";
61cp.code() += "etiss_coverage_count(4, 3222, 3221, 3220, 3218);\n";
62cp.code() += "etiss_coverage_count(1, 3223);\n";
63if ((rd % 32ULL) != 0LL) { // conditional
64cp.code() += "etiss_coverage_count(5, 3229, 3226, 3224, 3227, 3228);\n";
65{ // block
66cp.code() += "etiss_coverage_count(1, 3244);\n";
67cp.code() += "{ // block\n";
68cp.code() += "etiss_uint32 xrd = RV32IMACFD_csr_read(cpu, system, plugin_pointers, " + std::to_string(csr) + "ULL);\n";
69cp.code() += "etiss_coverage_count(3, 3233, 3232, 3231);\n";
70cp.code() += "RV32IMACFD_csr_write(cpu, system, plugin_pointers, " + std::to_string(csr) + "ULL, xrs1);\n";
71cp.code() += "etiss_coverage_count(3, 3236, 3234, 3235);\n";
72cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = xrd;\n";
73cp.code() += "etiss_coverage_count(5, 3243, 3241, 3240, 3238, 3242);\n";
74cp.code() += "} // block\n";
75} // block
76} // conditional
77else { // conditional
78{ // block
79cp.code() += "etiss_coverage_count(1, 3248);\n";
80cp.code() += "{ // block\n";
81cp.code() += "RV32IMACFD_csr_write(cpu, system, plugin_pointers, " + std::to_string(csr) + "ULL, xrs1);\n";
82cp.code() += "etiss_coverage_count(3, 3247, 3245, 3246);\n";
83cp.code() += "} // block\n";
84} // block
85} // conditional
86cp.code() += "} // block\n";
87} // block
88cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
89cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
90// -----------------------------------------------------------------------------
91 cp.getAffectedRegisters().add("instructionPointer", 32);
92 }
93
94 return true;
95 },
96 0,
97 [] (BitArray & ba, Instruction & instr)
98 {
99// -----------------------------------------------------------------------------
100etiss_uint8 rd = 0;
101static BitArrayRange R_rd_0(11, 7);
102rd += R_rd_0.read(ba) << 0;
103etiss_uint8 rs1 = 0;
104static BitArrayRange R_rs1_0(19, 15);
105rs1 += R_rs1_0.read(ba) << 0;
106etiss_uint16 csr = 0;
107static BitArrayRange R_csr_0(31, 20);
108csr += R_csr_0.read(ba) << 0;
109
110// -----------------------------------------------------------------------------
111
112 std::stringstream ss;
113// -----------------------------------------------------------------------------
114ss << "csrrw" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | csr=" + std::to_string(csr) + "]");
115// -----------------------------------------------------------------------------
116 return ss.str();
117 }
118);
119
120// CSRRS -----------------------------------------------------------------------
123 "csrrs",
124 (uint32_t) 0x002073,
125 (uint32_t) 0x00707f,
126 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
127 {
128
129// -----------------------------------------------------------------------------
130
131// -----------------------------------------------------------------------------
132
133// -----------------------------------------------------------------------------
134// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
135etiss_uint8 rd = 0;
136static BitArrayRange R_rd_0(11, 7);
137rd += R_rd_0.read(ba) << 0;
138etiss_uint8 rs1 = 0;
139static BitArrayRange R_rs1_0(19, 15);
140rs1 += R_rs1_0.read(ba) << 0;
141etiss_uint16 csr = 0;
142static BitArrayRange R_csr_0(31, 20);
143csr += R_csr_0.read(ba) << 0;
144
145// NOLINTEND(clang-diagnostic-unused-but-set-variable)
146// -----------------------------------------------------------------------------
147
148 {
150
151 cp.code() = std::string("//CSRRS\n");
152
153// -----------------------------------------------------------------------------
154cp.code() += "etiss_coverage_count(1, 154);\n";
155{ // block
156cp.code() += "etiss_coverage_count(1, 1169);\n";
157cp.code() += "{ // block\n";
158cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
159cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
160cp.code() += "} // block\n";
161} // block
162{ // block
163cp.code() += "etiss_coverage_count(1, 3284);\n";
164cp.code() += "{ // block\n";
165cp.code() += "etiss_uint32 xrd = RV32IMACFD_csr_read(cpu, system, plugin_pointers, " + std::to_string(csr) + "ULL);\n";
166cp.code() += "etiss_coverage_count(3, 3253, 3252, 3251);\n";
167cp.code() += "etiss_uint32 xrs1 = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL];\n";
168cp.code() += "etiss_coverage_count(4, 3260, 3259, 3258, 3256);\n";
169cp.code() += "etiss_coverage_count(1, 3261);\n";
170if (rs1 != 0LL) { // conditional
171cp.code() += "etiss_coverage_count(3, 3264, 3262, 3263);\n";
172cp.code() += "RV32IMACFD_csr_write(cpu, system, plugin_pointers, " + std::to_string(csr) + "ULL, xrd | xrs1);\n";
173cp.code() += "etiss_coverage_count(5, 3269, 3265, 3268, 3266, 3267);\n";
174} // conditional
175cp.code() += "etiss_coverage_count(1, 3270);\n";
176if ((rd % 32ULL) != 0LL) { // conditional
177cp.code() += "etiss_coverage_count(5, 3276, 3273, 3271, 3274, 3275);\n";
178cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = xrd;\n";
179cp.code() += "etiss_coverage_count(5, 3283, 3281, 3280, 3278, 3282);\n";
180} // conditional
181cp.code() += "} // block\n";
182} // block
183cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
184cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
185// -----------------------------------------------------------------------------
186 cp.getAffectedRegisters().add("instructionPointer", 32);
187 }
188
189 return true;
190 },
191 0,
192 [] (BitArray & ba, Instruction & instr)
193 {
194// -----------------------------------------------------------------------------
195etiss_uint8 rd = 0;
196static BitArrayRange R_rd_0(11, 7);
197rd += R_rd_0.read(ba) << 0;
198etiss_uint8 rs1 = 0;
199static BitArrayRange R_rs1_0(19, 15);
200rs1 += R_rs1_0.read(ba) << 0;
201etiss_uint16 csr = 0;
202static BitArrayRange R_csr_0(31, 20);
203csr += R_csr_0.read(ba) << 0;
204
205// -----------------------------------------------------------------------------
206
207 std::stringstream ss;
208// -----------------------------------------------------------------------------
209ss << "csrrs" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | csr=" + std::to_string(csr) + "]");
210// -----------------------------------------------------------------------------
211 return ss.str();
212 }
213);
214
215// CSRRC -----------------------------------------------------------------------
218 "csrrc",
219 (uint32_t) 0x003073,
220 (uint32_t) 0x00707f,
221 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
222 {
223
224// -----------------------------------------------------------------------------
225
226// -----------------------------------------------------------------------------
227
228// -----------------------------------------------------------------------------
229// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
230etiss_uint8 rd = 0;
231static BitArrayRange R_rd_0(11, 7);
232rd += R_rd_0.read(ba) << 0;
233etiss_uint8 rs1 = 0;
234static BitArrayRange R_rs1_0(19, 15);
235rs1 += R_rs1_0.read(ba) << 0;
236etiss_uint16 csr = 0;
237static BitArrayRange R_csr_0(31, 20);
238csr += R_csr_0.read(ba) << 0;
239
240// NOLINTEND(clang-diagnostic-unused-but-set-variable)
241// -----------------------------------------------------------------------------
242
243 {
245
246 cp.code() = std::string("//CSRRC\n");
247
248// -----------------------------------------------------------------------------
249cp.code() += "etiss_coverage_count(1, 155);\n";
250{ // block
251cp.code() += "etiss_coverage_count(1, 1169);\n";
252cp.code() += "{ // block\n";
253cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
254cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
255cp.code() += "} // block\n";
256} // block
257{ // block
258cp.code() += "etiss_coverage_count(1, 3320);\n";
259cp.code() += "{ // block\n";
260cp.code() += "etiss_uint32 xrd = RV32IMACFD_csr_read(cpu, system, plugin_pointers, " + std::to_string(csr) + "ULL);\n";
261cp.code() += "etiss_coverage_count(3, 3288, 3287, 3286);\n";
262cp.code() += "etiss_uint32 xrs1 = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL];\n";
263cp.code() += "etiss_coverage_count(4, 3295, 3294, 3293, 3291);\n";
264cp.code() += "etiss_coverage_count(1, 3296);\n";
265if (rs1 != 0LL) { // conditional
266cp.code() += "etiss_coverage_count(3, 3299, 3297, 3298);\n";
267cp.code() += "RV32IMACFD_csr_write(cpu, system, plugin_pointers, " + std::to_string(csr) + "ULL, xrd & ~(xrs1));\n";
268cp.code() += "etiss_coverage_count(6, 3305, 3300, 3304, 3301, 3303, 3302);\n";
269} // conditional
270cp.code() += "etiss_coverage_count(1, 3306);\n";
271if ((rd % 32ULL) != 0LL) { // conditional
272cp.code() += "etiss_coverage_count(5, 3312, 3309, 3307, 3310, 3311);\n";
273cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = xrd;\n";
274cp.code() += "etiss_coverage_count(5, 3319, 3317, 3316, 3314, 3318);\n";
275} // conditional
276cp.code() += "} // block\n";
277} // block
278cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
279cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
280// -----------------------------------------------------------------------------
281 cp.getAffectedRegisters().add("instructionPointer", 32);
282 }
283
284 return true;
285 },
286 0,
287 [] (BitArray & ba, Instruction & instr)
288 {
289// -----------------------------------------------------------------------------
290etiss_uint8 rd = 0;
291static BitArrayRange R_rd_0(11, 7);
292rd += R_rd_0.read(ba) << 0;
293etiss_uint8 rs1 = 0;
294static BitArrayRange R_rs1_0(19, 15);
295rs1 += R_rs1_0.read(ba) << 0;
296etiss_uint16 csr = 0;
297static BitArrayRange R_csr_0(31, 20);
298csr += R_csr_0.read(ba) << 0;
299
300// -----------------------------------------------------------------------------
301
302 std::stringstream ss;
303// -----------------------------------------------------------------------------
304ss << "csrrc" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | csr=" + std::to_string(csr) + "]");
305// -----------------------------------------------------------------------------
306 return ss.str();
307 }
308);
309
310// CSRRWI ----------------------------------------------------------------------
313 "csrrwi",
314 (uint32_t) 0x005073,
315 (uint32_t) 0x00707f,
316 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
317 {
318
319// -----------------------------------------------------------------------------
320
321// -----------------------------------------------------------------------------
322
323// -----------------------------------------------------------------------------
324// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
325etiss_uint8 rd = 0;
326static BitArrayRange R_rd_0(11, 7);
327rd += R_rd_0.read(ba) << 0;
328etiss_uint8 zimm = 0;
329static BitArrayRange R_zimm_0(19, 15);
330zimm += R_zimm_0.read(ba) << 0;
331etiss_uint16 csr = 0;
332static BitArrayRange R_csr_0(31, 20);
333csr += R_csr_0.read(ba) << 0;
334
335// NOLINTEND(clang-diagnostic-unused-but-set-variable)
336// -----------------------------------------------------------------------------
337
338 {
340
341 cp.code() = std::string("//CSRRWI\n");
342
343// -----------------------------------------------------------------------------
344cp.code() += "etiss_coverage_count(1, 156);\n";
345{ // block
346cp.code() += "etiss_coverage_count(1, 1169);\n";
347cp.code() += "{ // block\n";
348cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
349cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
350cp.code() += "} // block\n";
351} // block
352{ // block
353cp.code() += "etiss_coverage_count(1, 3344);\n";
354cp.code() += "{ // block\n";
355cp.code() += "etiss_uint32 xrd = RV32IMACFD_csr_read(cpu, system, plugin_pointers, " + std::to_string(csr) + "ULL);\n";
356cp.code() += "etiss_coverage_count(3, 3324, 3323, 3322);\n";
357cp.code() += "RV32IMACFD_csr_write(cpu, system, plugin_pointers, " + std::to_string(csr) + "ULL, " + std::to_string((etiss_uint32)(zimm)) + "ULL);\n";
358cp.code() += "etiss_coverage_count(4, 3329, 3325, 3328, 3326);\n";
359cp.code() += "etiss_coverage_count(1, 3330);\n";
360if ((rd % 32ULL) != 0LL) { // conditional
361cp.code() += "etiss_coverage_count(5, 3336, 3333, 3331, 3334, 3335);\n";
362cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = xrd;\n";
363cp.code() += "etiss_coverage_count(5, 3343, 3341, 3340, 3338, 3342);\n";
364} // conditional
365cp.code() += "} // block\n";
366} // block
367cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
368cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
369// -----------------------------------------------------------------------------
370 cp.getAffectedRegisters().add("instructionPointer", 32);
371 }
372
373 return true;
374 },
375 0,
376 [] (BitArray & ba, Instruction & instr)
377 {
378// -----------------------------------------------------------------------------
379etiss_uint8 rd = 0;
380static BitArrayRange R_rd_0(11, 7);
381rd += R_rd_0.read(ba) << 0;
382etiss_uint8 zimm = 0;
383static BitArrayRange R_zimm_0(19, 15);
384zimm += R_zimm_0.read(ba) << 0;
385etiss_uint16 csr = 0;
386static BitArrayRange R_csr_0(31, 20);
387csr += R_csr_0.read(ba) << 0;
388
389// -----------------------------------------------------------------------------
390
391 std::stringstream ss;
392// -----------------------------------------------------------------------------
393ss << "csrrwi" << " # " << ba << (" [rd=" + std::to_string(rd) + " | zimm=" + std::to_string(zimm) + " | csr=" + std::to_string(csr) + "]");
394// -----------------------------------------------------------------------------
395 return ss.str();
396 }
397);
398
399// CSRRSI ----------------------------------------------------------------------
402 "csrrsi",
403 (uint32_t) 0x006073,
404 (uint32_t) 0x00707f,
405 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
406 {
407
408// -----------------------------------------------------------------------------
409
410// -----------------------------------------------------------------------------
411
412// -----------------------------------------------------------------------------
413// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
414etiss_uint8 rd = 0;
415static BitArrayRange R_rd_0(11, 7);
416rd += R_rd_0.read(ba) << 0;
417etiss_uint8 zimm = 0;
418static BitArrayRange R_zimm_0(19, 15);
419zimm += R_zimm_0.read(ba) << 0;
420etiss_uint16 csr = 0;
421static BitArrayRange R_csr_0(31, 20);
422csr += R_csr_0.read(ba) << 0;
423
424// NOLINTEND(clang-diagnostic-unused-but-set-variable)
425// -----------------------------------------------------------------------------
426
427 {
429
430 cp.code() = std::string("//CSRRSI\n");
431
432// -----------------------------------------------------------------------------
433cp.code() += "etiss_coverage_count(1, 157);\n";
434{ // block
435cp.code() += "etiss_coverage_count(1, 1169);\n";
436cp.code() += "{ // block\n";
437cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
438cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
439cp.code() += "} // block\n";
440} // block
441{ // block
442cp.code() += "etiss_coverage_count(1, 3374);\n";
443cp.code() += "{ // block\n";
444cp.code() += "etiss_uint32 xrd = RV32IMACFD_csr_read(cpu, system, plugin_pointers, " + std::to_string(csr) + "ULL);\n";
445cp.code() += "etiss_coverage_count(3, 3348, 3347, 3346);\n";
446cp.code() += "etiss_coverage_count(1, 3349);\n";
447if (zimm != 0LL) { // conditional
448cp.code() += "etiss_coverage_count(3, 3352, 3350, 3351);\n";
449cp.code() += "RV32IMACFD_csr_write(cpu, system, plugin_pointers, " + std::to_string(csr) + "ULL, xrd | " + std::to_string((etiss_uint32)(zimm)) + "ULL);\n";
450cp.code() += "etiss_coverage_count(6, 3359, 3353, 3358, 3354, 3357, 3355);\n";
451} // conditional
452cp.code() += "etiss_coverage_count(1, 3360);\n";
453if ((rd % 32ULL) != 0LL) { // conditional
454cp.code() += "etiss_coverage_count(5, 3366, 3363, 3361, 3364, 3365);\n";
455cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = xrd;\n";
456cp.code() += "etiss_coverage_count(5, 3373, 3371, 3370, 3368, 3372);\n";
457} // conditional
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 rd = 0;
473static BitArrayRange R_rd_0(11, 7);
474rd += R_rd_0.read(ba) << 0;
475etiss_uint8 zimm = 0;
476static BitArrayRange R_zimm_0(19, 15);
477zimm += R_zimm_0.read(ba) << 0;
478etiss_uint16 csr = 0;
479static BitArrayRange R_csr_0(31, 20);
480csr += R_csr_0.read(ba) << 0;
481
482// -----------------------------------------------------------------------------
483
484 std::stringstream ss;
485// -----------------------------------------------------------------------------
486ss << "csrrsi" << " # " << ba << (" [rd=" + std::to_string(rd) + " | zimm=" + std::to_string(zimm) + " | csr=" + std::to_string(csr) + "]");
487// -----------------------------------------------------------------------------
488 return ss.str();
489 }
490);
491
492// CSRRCI ----------------------------------------------------------------------
495 "csrrci",
496 (uint32_t) 0x007073,
497 (uint32_t) 0x00707f,
498 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
499 {
500
501// -----------------------------------------------------------------------------
502
503// -----------------------------------------------------------------------------
504
505// -----------------------------------------------------------------------------
506// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
507etiss_uint8 rd = 0;
508static BitArrayRange R_rd_0(11, 7);
509rd += R_rd_0.read(ba) << 0;
510etiss_uint8 zimm = 0;
511static BitArrayRange R_zimm_0(19, 15);
512zimm += R_zimm_0.read(ba) << 0;
513etiss_uint16 csr = 0;
514static BitArrayRange R_csr_0(31, 20);
515csr += R_csr_0.read(ba) << 0;
516
517// NOLINTEND(clang-diagnostic-unused-but-set-variable)
518// -----------------------------------------------------------------------------
519
520 {
522
523 cp.code() = std::string("//CSRRCI\n");
524
525// -----------------------------------------------------------------------------
526cp.code() += "etiss_coverage_count(1, 158);\n";
527{ // block
528cp.code() += "etiss_coverage_count(1, 1169);\n";
529cp.code() += "{ // block\n";
530cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
531cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
532cp.code() += "} // block\n";
533} // block
534{ // block
535cp.code() += "etiss_coverage_count(1, 3406);\n";
536cp.code() += "{ // block\n";
537cp.code() += "etiss_uint32 xrd = RV32IMACFD_csr_read(cpu, system, plugin_pointers, " + std::to_string(csr) + "ULL);\n";
538cp.code() += "etiss_coverage_count(3, 3378, 3377, 3376);\n";
539cp.code() += "etiss_coverage_count(1, 3379);\n";
540if (zimm != 0LL) { // conditional
541cp.code() += "etiss_coverage_count(3, 3382, 3380, 3381);\n";
542cp.code() += "RV32IMACFD_csr_write(cpu, system, plugin_pointers, " + std::to_string(csr) + "ULL, xrd & " + std::to_string(~(((etiss_uint32)(zimm)))) + "ULL);\n";
543cp.code() += "etiss_coverage_count(8, 3391, 3383, 3390, 3384, 3389, 3387, 3385, 3388);\n";
544} // conditional
545cp.code() += "etiss_coverage_count(1, 3392);\n";
546if ((rd % 32ULL) != 0LL) { // conditional
547cp.code() += "etiss_coverage_count(5, 3398, 3395, 3393, 3396, 3397);\n";
548cp.code() += "*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = xrd;\n";
549cp.code() += "etiss_coverage_count(5, 3405, 3403, 3402, 3400, 3404);\n";
550} // conditional
551cp.code() += "} // block\n";
552} // block
553cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
554cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
555// -----------------------------------------------------------------------------
556 cp.getAffectedRegisters().add("instructionPointer", 32);
557 }
558
559 return true;
560 },
561 0,
562 [] (BitArray & ba, Instruction & instr)
563 {
564// -----------------------------------------------------------------------------
565etiss_uint8 rd = 0;
566static BitArrayRange R_rd_0(11, 7);
567rd += R_rd_0.read(ba) << 0;
568etiss_uint8 zimm = 0;
569static BitArrayRange R_zimm_0(19, 15);
570zimm += R_zimm_0.read(ba) << 0;
571etiss_uint16 csr = 0;
572static BitArrayRange R_csr_0(31, 20);
573csr += R_csr_0.read(ba) << 0;
574
575// -----------------------------------------------------------------------------
576
577 std::stringstream ss;
578// -----------------------------------------------------------------------------
579ss << "csrrci" << " # " << ba << (" [rd=" + std::to_string(rd) + " | zimm=" + std::to_string(zimm) + " | csr=" + std::to_string(csr) + "]");
580// -----------------------------------------------------------------------------
581 return ss.str();
582 }
583);
584// clang-format on
etiss::instr::InstructionGroup ISA32_RV32IMACFD("ISA32_RV32IMACFD", 32)
static InstructionDefinition csrrci_rd_zimm_csr(ISA32_RV32IMACFD, "csrrci",(uint32_t) 0x007073,(uint32_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 zimm=0;static BitArrayRange R_zimm_0(19, 15);zimm+=R_zimm_0.read(ba)<< 0;etiss_uint16 csr=0;static BitArrayRange R_csr_0(31, 20);csr+=R_csr_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSRRCI\n");cp.code()+="etiss_coverage_count(1, 158);\n";{ cp.code()+="etiss_coverage_count(1, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 3406);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 xrd = RV32IMACFD_csr_read(cpu, system, plugin_pointers, "+std::to_string(csr)+"ULL);\n";cp.code()+="etiss_coverage_count(3, 3378, 3377, 3376);\n";cp.code()+="etiss_coverage_count(1, 3379);\n";if(zimm !=0LL) { cp.code()+="etiss_coverage_count(3, 3382, 3380, 3381);\n";cp.code()+="RV32IMACFD_csr_write(cpu, system, plugin_pointers, "+std::to_string(csr)+"ULL, xrd & "+std::to_string(~(((etiss_uint32)(zimm))))+"ULL);\n";cp.code()+="etiss_coverage_count(8, 3391, 3383, 3390, 3384, 3389, 3387, 3385, 3388);\n";} cp.code()+="etiss_coverage_count(1, 3392);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 3398, 3395, 3393, 3396, 3397);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = xrd;\n";cp.code()+="etiss_coverage_count(5, 3405, 3403, 3402, 3400, 3404);\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 zimm=0;static BitArrayRange R_zimm_0(19, 15);zimm+=R_zimm_0.read(ba)<< 0;etiss_uint16 csr=0;static BitArrayRange R_csr_0(31, 20);csr+=R_csr_0.read(ba)<< 0;std::stringstream ss;ss<< "csrrci"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | zimm="+std::to_string(zimm)+" | csr="+std::to_string(csr)+"]");return ss.str();})
static InstructionDefinition csrrwi_rd_zimm_csr(ISA32_RV32IMACFD, "csrrwi",(uint32_t) 0x005073,(uint32_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 zimm=0;static BitArrayRange R_zimm_0(19, 15);zimm+=R_zimm_0.read(ba)<< 0;etiss_uint16 csr=0;static BitArrayRange R_csr_0(31, 20);csr+=R_csr_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSRRWI\n");cp.code()+="etiss_coverage_count(1, 156);\n";{ cp.code()+="etiss_coverage_count(1, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 3344);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 xrd = RV32IMACFD_csr_read(cpu, system, plugin_pointers, "+std::to_string(csr)+"ULL);\n";cp.code()+="etiss_coverage_count(3, 3324, 3323, 3322);\n";cp.code()+="RV32IMACFD_csr_write(cpu, system, plugin_pointers, "+std::to_string(csr)+"ULL, "+std::to_string((etiss_uint32)(zimm))+"ULL);\n";cp.code()+="etiss_coverage_count(4, 3329, 3325, 3328, 3326);\n";cp.code()+="etiss_coverage_count(1, 3330);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 3336, 3333, 3331, 3334, 3335);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = xrd;\n";cp.code()+="etiss_coverage_count(5, 3343, 3341, 3340, 3338, 3342);\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 zimm=0;static BitArrayRange R_zimm_0(19, 15);zimm+=R_zimm_0.read(ba)<< 0;etiss_uint16 csr=0;static BitArrayRange R_csr_0(31, 20);csr+=R_csr_0.read(ba)<< 0;std::stringstream ss;ss<< "csrrwi"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | zimm="+std::to_string(zimm)+" | csr="+std::to_string(csr)+"]");return ss.str();})
static InstructionDefinition csrrsi_rd_zimm_csr(ISA32_RV32IMACFD, "csrrsi",(uint32_t) 0x006073,(uint32_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 zimm=0;static BitArrayRange R_zimm_0(19, 15);zimm+=R_zimm_0.read(ba)<< 0;etiss_uint16 csr=0;static BitArrayRange R_csr_0(31, 20);csr+=R_csr_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSRRSI\n");cp.code()+="etiss_coverage_count(1, 157);\n";{ cp.code()+="etiss_coverage_count(1, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 3374);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 xrd = RV32IMACFD_csr_read(cpu, system, plugin_pointers, "+std::to_string(csr)+"ULL);\n";cp.code()+="etiss_coverage_count(3, 3348, 3347, 3346);\n";cp.code()+="etiss_coverage_count(1, 3349);\n";if(zimm !=0LL) { cp.code()+="etiss_coverage_count(3, 3352, 3350, 3351);\n";cp.code()+="RV32IMACFD_csr_write(cpu, system, plugin_pointers, "+std::to_string(csr)+"ULL, xrd | "+std::to_string((etiss_uint32)(zimm))+"ULL);\n";cp.code()+="etiss_coverage_count(6, 3359, 3353, 3358, 3354, 3357, 3355);\n";} cp.code()+="etiss_coverage_count(1, 3360);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 3366, 3363, 3361, 3364, 3365);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = xrd;\n";cp.code()+="etiss_coverage_count(5, 3373, 3371, 3370, 3368, 3372);\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 zimm=0;static BitArrayRange R_zimm_0(19, 15);zimm+=R_zimm_0.read(ba)<< 0;etiss_uint16 csr=0;static BitArrayRange R_csr_0(31, 20);csr+=R_csr_0.read(ba)<< 0;std::stringstream ss;ss<< "csrrsi"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | zimm="+std::to_string(zimm)+" | csr="+std::to_string(csr)+"]");return ss.str();})
static InstructionDefinition csrrc_rd_rs1_csr(ISA32_RV32IMACFD, "csrrc",(uint32_t) 0x003073,(uint32_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 csr=0;static BitArrayRange R_csr_0(31, 20);csr+=R_csr_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSRRC\n");cp.code()+="etiss_coverage_count(1, 155);\n";{ cp.code()+="etiss_coverage_count(1, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 3320);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 xrd = RV32IMACFD_csr_read(cpu, system, plugin_pointers, "+std::to_string(csr)+"ULL);\n";cp.code()+="etiss_coverage_count(3, 3288, 3287, 3286);\n";cp.code()+="etiss_uint32 xrs1 = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(4, 3295, 3294, 3293, 3291);\n";cp.code()+="etiss_coverage_count(1, 3296);\n";if(rs1 !=0LL) { cp.code()+="etiss_coverage_count(3, 3299, 3297, 3298);\n";cp.code()+="RV32IMACFD_csr_write(cpu, system, plugin_pointers, "+std::to_string(csr)+"ULL, xrd & ~(xrs1));\n";cp.code()+="etiss_coverage_count(6, 3305, 3300, 3304, 3301, 3303, 3302);\n";} cp.code()+="etiss_coverage_count(1, 3306);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 3312, 3309, 3307, 3310, 3311);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = xrd;\n";cp.code()+="etiss_coverage_count(5, 3319, 3317, 3316, 3314, 3318);\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 csr=0;static BitArrayRange R_csr_0(31, 20);csr+=R_csr_0.read(ba)<< 0;std::stringstream ss;ss<< "csrrc"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | csr="+std::to_string(csr)+"]");return ss.str();})
static InstructionDefinition csrrw_rd_rs1_csr(ISA32_RV32IMACFD, "csrrw",(uint32_t) 0x001073,(uint32_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 csr=0;static BitArrayRange R_csr_0(31, 20);csr+=R_csr_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSRRW\n");cp.code()+="etiss_coverage_count(1, 153);\n";{ cp.code()+="etiss_coverage_count(1, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 3249);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 xrs1 = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(4, 3222, 3221, 3220, 3218);\n";cp.code()+="etiss_coverage_count(1, 3223);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 3229, 3226, 3224, 3227, 3228);\n";{ cp.code()+="etiss_coverage_count(1, 3244);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 xrd = RV32IMACFD_csr_read(cpu, system, plugin_pointers, "+std::to_string(csr)+"ULL);\n";cp.code()+="etiss_coverage_count(3, 3233, 3232, 3231);\n";cp.code()+="RV32IMACFD_csr_write(cpu, system, plugin_pointers, "+std::to_string(csr)+"ULL, xrs1);\n";cp.code()+="etiss_coverage_count(3, 3236, 3234, 3235);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = xrd;\n";cp.code()+="etiss_coverage_count(5, 3243, 3241, 3240, 3238, 3242);\n";cp.code()+="} // block\n";} } else { { cp.code()+="etiss_coverage_count(1, 3248);\n";cp.code()+="{ // block\n";cp.code()+="RV32IMACFD_csr_write(cpu, system, plugin_pointers, "+std::to_string(csr)+"ULL, xrs1);\n";cp.code()+="etiss_coverage_count(3, 3247, 3245, 3246);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 csr=0;static BitArrayRange R_csr_0(31, 20);csr+=R_csr_0.read(ba)<< 0;std::stringstream ss;ss<< "csrrw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | csr="+std::to_string(csr)+"]");return ss.str();})
static InstructionDefinition csrrs_rd_rs1_csr(ISA32_RV32IMACFD, "csrrs",(uint32_t) 0x002073,(uint32_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 csr=0;static BitArrayRange R_csr_0(31, 20);csr+=R_csr_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSRRS\n");cp.code()+="etiss_coverage_count(1, 154);\n";{ cp.code()+="etiss_coverage_count(1, 1169);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 3284);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 xrd = RV32IMACFD_csr_read(cpu, system, plugin_pointers, "+std::to_string(csr)+"ULL);\n";cp.code()+="etiss_coverage_count(3, 3253, 3252, 3251);\n";cp.code()+="etiss_uint32 xrs1 = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(4, 3260, 3259, 3258, 3256);\n";cp.code()+="etiss_coverage_count(1, 3261);\n";if(rs1 !=0LL) { cp.code()+="etiss_coverage_count(3, 3264, 3262, 3263);\n";cp.code()+="RV32IMACFD_csr_write(cpu, system, plugin_pointers, "+std::to_string(csr)+"ULL, xrd | xrs1);\n";cp.code()+="etiss_coverage_count(5, 3269, 3265, 3268, 3266, 3267);\n";} cp.code()+="etiss_coverage_count(1, 3270);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 3276, 3273, 3271, 3274, 3275);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = xrd;\n";cp.code()+="etiss_coverage_count(5, 3283, 3281, 3280, 3278, 3282);\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 csr=0;static BitArrayRange R_csr_0(31, 20);csr+=R_csr_0.read(ba)<< 0;std::stringstream ss;ss<< "csrrs"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | csr="+std::to_string(csr)+"]");return ss.str();})
uint32_t etiss_uint32
Definition types.h:55
uint8_t etiss_uint8
Definition types.h:49
uint16_t etiss_uint16
Definition types.h:52
Contains a small code snipped.
Definition CodePart.h:348
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