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