ETISS 0.11.2
ExtendableTranslatingInstructionSetSimulator(version0.11.2)
Loading...
Searching...
No Matches
RV64IMACFD_RV64ICInstr.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// CADDIW ----------------------------------------------------------------------
18 "caddiw",
19 (uint16_t) 0x2001,
20 (uint16_t) 0xe003,
22 {
23
24// -----------------------------------------------------------------------------
25
26// -----------------------------------------------------------------------------
27
28// -----------------------------------------------------------------------------
29// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
30etiss_uint8 imm = 0;
31static BitArrayRange R_imm_0(6, 2);
32imm += R_imm_0.read(ba) << 0;
33etiss_uint8 rs1 = 0;
34static BitArrayRange R_rs1_0(11, 7);
35rs1 += R_rs1_0.read(ba) << 0;
36static BitArrayRange R_imm_5(12, 12);
37imm += R_imm_5.read(ba) << 5;
38
39// NOLINTEND(clang-diagnostic-unused-but-set-variable)
40// -----------------------------------------------------------------------------
41
42 {
44
45 cp.code() = std::string("//CADDIW\n");
46
47// -----------------------------------------------------------------------------
48cp.code() += "etiss_coverage_count(1, 206);\n";
49{ // block
50cp.code() += "etiss_coverage_count(1, 1169);\n";
51cp.code() += "{ // block\n";
52cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
53cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
54cp.code() += "} // block\n";
55} // block
56cp.code() += "etiss_coverage_count(1, 7407);\n";
57if ((rs1 % 32ULL) != 0LL) { // conditional
58cp.code() += "etiss_coverage_count(5, 7413, 7410, 7408, 7411, 7412);\n";
59cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] = (etiss_int32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL]) + " + std::to_string(((etiss_int8)(((etiss_int8)imm) << (2)) >> (2))) + "LL;\n";
60cp.code() += "etiss_coverage_count(11, 7430, 7418, 7417, 7415, 7429, 7425, 7423, 7422, 7420, 7428, 7426);\n";
61} // conditional
62cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
63cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
64// -----------------------------------------------------------------------------
65 cp.getAffectedRegisters().add("instructionPointer", 32);
66 }
67
68 return true;
69 },
70 0,
71 [] (BitArray & ba, Instruction & instr)
72 {
73// -----------------------------------------------------------------------------
74etiss_uint8 imm = 0;
75static BitArrayRange R_imm_0(6, 2);
76imm += R_imm_0.read(ba) << 0;
77etiss_uint8 rs1 = 0;
78static BitArrayRange R_rs1_0(11, 7);
79rs1 += R_rs1_0.read(ba) << 0;
80static BitArrayRange R_imm_5(12, 12);
81imm += R_imm_5.read(ba) << 5;
82
83// -----------------------------------------------------------------------------
84
85 std::stringstream ss;
86// -----------------------------------------------------------------------------
87ss << "caddiw" << " # " << ba << (" [imm=" + std::to_string(imm) + " | rs1=" + std::to_string(rs1) + "]");
88// -----------------------------------------------------------------------------
89 return ss.str();
90 }
91);
92
93// CSRLI -----------------------------------------------------------------------
96 "csrli",
97 (uint16_t) 0x8001,
98 (uint16_t) 0xec03,
100 {
101
102// -----------------------------------------------------------------------------
103
104// -----------------------------------------------------------------------------
105
106// -----------------------------------------------------------------------------
107// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
108etiss_uint8 nzuimm = 0;
109static BitArrayRange R_nzuimm_0(6, 2);
110nzuimm += R_nzuimm_0.read(ba) << 0;
111etiss_uint8 rs1 = 0;
112static BitArrayRange R_rs1_0(9, 7);
113rs1 += R_rs1_0.read(ba) << 0;
114static BitArrayRange R_nzuimm_5(12, 12);
115nzuimm += R_nzuimm_5.read(ba) << 5;
116
117// NOLINTEND(clang-diagnostic-unused-but-set-variable)
118// -----------------------------------------------------------------------------
119
120 {
122
123 cp.code() = std::string("//CSRLI\n");
124
125// -----------------------------------------------------------------------------
126cp.code() += "etiss_coverage_count(1, 199);\n";
127{ // block
128cp.code() += "etiss_coverage_count(1, 1169);\n";
129cp.code() += "{ // block\n";
130cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
131cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
132cp.code() += "} // block\n";
133} // block
134{ // block
135cp.code() += "etiss_coverage_count(1, 7444);\n";
136cp.code() += "{ // block\n";
137cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] >> " + std::to_string(nzuimm) + "ULL;\n";
138cp.code() += "etiss_coverage_count(11, 7443, 7435, 7434, 7432, 7433, 7442, 7440, 7439, 7437, 7438, 7441);\n";
139cp.code() += "} // block\n";
140} // block
141cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
142cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
143// -----------------------------------------------------------------------------
144 cp.getAffectedRegisters().add("instructionPointer", 32);
145 }
146
147 return true;
148 },
149 0,
150 [] (BitArray & ba, Instruction & instr)
151 {
152// -----------------------------------------------------------------------------
153etiss_uint8 nzuimm = 0;
154static BitArrayRange R_nzuimm_0(6, 2);
155nzuimm += R_nzuimm_0.read(ba) << 0;
156etiss_uint8 rs1 = 0;
157static BitArrayRange R_rs1_0(9, 7);
158rs1 += R_rs1_0.read(ba) << 0;
159static BitArrayRange R_nzuimm_5(12, 12);
160nzuimm += R_nzuimm_5.read(ba) << 5;
161
162// -----------------------------------------------------------------------------
163
164 std::stringstream ss;
165// -----------------------------------------------------------------------------
166ss << "csrli" << " # " << ba << (" [nzuimm=" + std::to_string(nzuimm) + " | rs1=" + std::to_string(rs1) + "]");
167// -----------------------------------------------------------------------------
168 return ss.str();
169 }
170);
171
172// CSRAI -----------------------------------------------------------------------
175 "csrai",
176 (uint16_t) 0x8401,
177 (uint16_t) 0xec03,
178 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
179 {
180
181// -----------------------------------------------------------------------------
182
183// -----------------------------------------------------------------------------
184
185// -----------------------------------------------------------------------------
186// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
187etiss_uint8 shamt = 0;
188static BitArrayRange R_shamt_0(6, 2);
189shamt += R_shamt_0.read(ba) << 0;
190etiss_uint8 rs1 = 0;
191static BitArrayRange R_rs1_0(9, 7);
192rs1 += R_rs1_0.read(ba) << 0;
193static BitArrayRange R_shamt_5(12, 12);
194shamt += R_shamt_5.read(ba) << 5;
195
196// NOLINTEND(clang-diagnostic-unused-but-set-variable)
197// -----------------------------------------------------------------------------
198
199 {
201
202 cp.code() = std::string("//CSRAI\n");
203
204// -----------------------------------------------------------------------------
205cp.code() += "etiss_coverage_count(1, 200);\n";
206{ // block
207cp.code() += "etiss_coverage_count(1, 1169);\n";
208cp.code() += "{ // block\n";
209cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
210cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
211cp.code() += "} // block\n";
212} // block
213{ // block
214cp.code() += "etiss_coverage_count(1, 7461);\n";
215cp.code() += "{ // block\n";
216cp.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";
217cp.code() += "etiss_coverage_count(13, 7460, 7449, 7448, 7446, 7447, 7459, 7456, 7454, 7453, 7451, 7452, 7457, 7458);\n";
218cp.code() += "} // block\n";
219} // block
220cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
221cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
222// -----------------------------------------------------------------------------
223 cp.getAffectedRegisters().add("instructionPointer", 32);
224 }
225
226 return true;
227 },
228 0,
229 [] (BitArray & ba, Instruction & instr)
230 {
231// -----------------------------------------------------------------------------
232etiss_uint8 shamt = 0;
233static BitArrayRange R_shamt_0(6, 2);
234shamt += R_shamt_0.read(ba) << 0;
235etiss_uint8 rs1 = 0;
236static BitArrayRange R_rs1_0(9, 7);
237rs1 += R_rs1_0.read(ba) << 0;
238static BitArrayRange R_shamt_5(12, 12);
239shamt += R_shamt_5.read(ba) << 5;
240
241// -----------------------------------------------------------------------------
242
243 std::stringstream ss;
244// -----------------------------------------------------------------------------
245ss << "csrai" << " # " << ba << (" [shamt=" + std::to_string(shamt) + " | rs1=" + std::to_string(rs1) + "]");
246// -----------------------------------------------------------------------------
247 return ss.str();
248 }
249);
250
251// CSLLI -----------------------------------------------------------------------
254 "cslli",
255 (uint16_t) 0x02,
256 (uint16_t) 0xe003,
257 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
258 {
259
260// -----------------------------------------------------------------------------
261
262// -----------------------------------------------------------------------------
263
264// -----------------------------------------------------------------------------
265// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
266etiss_uint8 shamt = 0;
267static BitArrayRange R_shamt_0(6, 2);
268shamt += R_shamt_0.read(ba) << 0;
269etiss_uint8 rs1 = 0;
270static BitArrayRange R_rs1_0(11, 7);
271rs1 += R_rs1_0.read(ba) << 0;
272static BitArrayRange R_shamt_5(12, 12);
273shamt += R_shamt_5.read(ba) << 5;
274
275// NOLINTEND(clang-diagnostic-unused-but-set-variable)
276// -----------------------------------------------------------------------------
277
278 {
280
281 cp.code() = std::string("//CSLLI\n");
282
283// -----------------------------------------------------------------------------
284cp.code() += "etiss_coverage_count(1, 201);\n";
285{ // block
286cp.code() += "etiss_coverage_count(1, 1169);\n";
287cp.code() += "{ // block\n";
288cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
289cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
290cp.code() += "} // block\n";
291} // block
292{ // block
293cp.code() += "etiss_coverage_count(1, 7478);\n";
294cp.code() += "{ // block\n";
295cp.code() += "etiss_coverage_count(1, 7462);\n";
296if (rs1 == 0LL) { // conditional
297cp.code() += "etiss_coverage_count(3, 7465, 7463, 7464);\n";
298{ // procedure
299cp.code() += "{ // procedure\n";
300cp.code() += "RV64IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
301cp.code() += "etiss_coverage_count(2, 7468, 7466);\n";
302cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
303cp.code() += "} // procedure\n";
304} // procedure
305} // conditional
306cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1) + "ULL] = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1) + "ULL] << " + std::to_string(shamt) + "ULL;\n";
307cp.code() += "etiss_coverage_count(7, 7477, 7471, 7470, 7476, 7474, 7473, 7475);\n";
308cp.code() += "} // block\n";
309} // block
310cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
311cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
312// -----------------------------------------------------------------------------
313 cp.getAffectedRegisters().add("instructionPointer", 32);
314 }
315 {
317
318 cp.code() = std::string("//CSLLI\n");
319
320// -----------------------------------------------------------------------------
321cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
322// -----------------------------------------------------------------------------
323 }
324
325 return true;
326 },
327 0,
328 [] (BitArray & ba, Instruction & instr)
329 {
330// -----------------------------------------------------------------------------
331etiss_uint8 shamt = 0;
332static BitArrayRange R_shamt_0(6, 2);
333shamt += R_shamt_0.read(ba) << 0;
334etiss_uint8 rs1 = 0;
335static BitArrayRange R_rs1_0(11, 7);
336rs1 += R_rs1_0.read(ba) << 0;
337static BitArrayRange R_shamt_5(12, 12);
338shamt += R_shamt_5.read(ba) << 5;
339
340// -----------------------------------------------------------------------------
341
342 std::stringstream ss;
343// -----------------------------------------------------------------------------
344ss << "cslli" << " # " << ba << (" [shamt=" + std::to_string(shamt) + " | rs1=" + std::to_string(rs1) + "]");
345// -----------------------------------------------------------------------------
346 return ss.str();
347 }
348);
349
350// CLD -------------------------------------------------------------------------
353 "cld",
354 (uint16_t) 0x6000,
355 (uint16_t) 0xe003,
356 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
357 {
358
359// -----------------------------------------------------------------------------
360
361// -----------------------------------------------------------------------------
362
363// -----------------------------------------------------------------------------
364// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
365etiss_uint8 rd = 0;
366static BitArrayRange R_rd_0(4, 2);
367rd += R_rd_0.read(ba) << 0;
368etiss_uint8 uimm = 0;
369static BitArrayRange R_uimm_6(6, 5);
370uimm += R_uimm_6.read(ba) << 6;
371etiss_uint8 rs1 = 0;
372static BitArrayRange R_rs1_0(9, 7);
373rs1 += R_rs1_0.read(ba) << 0;
374static BitArrayRange R_uimm_3(12, 10);
375uimm += R_uimm_3.read(ba) << 3;
376
377// NOLINTEND(clang-diagnostic-unused-but-set-variable)
378// -----------------------------------------------------------------------------
379
380 {
382
383 cp.code() = std::string("//CLD\n");
384
385// -----------------------------------------------------------------------------
386cp.code() += "etiss_coverage_count(1, 202);\n";
387{ // block
388cp.code() += "etiss_coverage_count(1, 1169);\n";
389cp.code() += "{ // block\n";
390cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
391cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
392cp.code() += "} // block\n";
393} // block
394{ // block
395cp.code() += "etiss_coverage_count(1, 7499);\n";
396cp.code() += "{ // block\n";
397cp.code() += "etiss_uint64 offs = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] + " + std::to_string(uimm) + "ULL;\n";
398cp.code() += "etiss_coverage_count(7, 7487, 7486, 7484, 7483, 7481, 7482, 7485);\n";
399cp.code() += "etiss_uint64 mem_val_0;\n";
400cp.code() += "cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\n";
401cp.code() += "if (cpu->exception) { // conditional\n";
402{ // procedure
403cp.code() += "{ // procedure\n";
404cp.code() += "RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
405cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
406cp.code() += "} // procedure\n";
407} // procedure
408cp.code() += "} // conditional\n";
409cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] = (etiss_int64)(mem_val_0);\n";
410cp.code() += "etiss_coverage_count(8, 7498, 7492, 7491, 7489, 7490, 7497, 7495, 7494);\n";
411cp.code() += "} // block\n";
412} // block
413cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
414cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
415// -----------------------------------------------------------------------------
416 cp.getAffectedRegisters().add("instructionPointer", 32);
417 }
418 {
420
421 cp.code() = std::string("//CLD\n");
422
423// -----------------------------------------------------------------------------
424cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
425// -----------------------------------------------------------------------------
426 }
427
428 return true;
429 },
430 0,
431 [] (BitArray & ba, Instruction & instr)
432 {
433// -----------------------------------------------------------------------------
434etiss_uint8 rd = 0;
435static BitArrayRange R_rd_0(4, 2);
436rd += R_rd_0.read(ba) << 0;
437etiss_uint8 uimm = 0;
438static BitArrayRange R_uimm_6(6, 5);
439uimm += R_uimm_6.read(ba) << 6;
440etiss_uint8 rs1 = 0;
441static BitArrayRange R_rs1_0(9, 7);
442rs1 += R_rs1_0.read(ba) << 0;
443static BitArrayRange R_uimm_3(12, 10);
444uimm += R_uimm_3.read(ba) << 3;
445
446// -----------------------------------------------------------------------------
447
448 std::stringstream ss;
449// -----------------------------------------------------------------------------
450ss << "cld" << " # " << ba << (" [rd=" + std::to_string(rd) + " | uimm=" + std::to_string(uimm) + " | rs1=" + std::to_string(rs1) + "]");
451// -----------------------------------------------------------------------------
452 return ss.str();
453 }
454);
455
456// CSD -------------------------------------------------------------------------
459 "csd",
460 (uint16_t) 0xe000,
461 (uint16_t) 0xe003,
462 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
463 {
464
465// -----------------------------------------------------------------------------
466
467// -----------------------------------------------------------------------------
468
469// -----------------------------------------------------------------------------
470// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
471etiss_uint8 rs2 = 0;
472static BitArrayRange R_rs2_0(4, 2);
473rs2 += R_rs2_0.read(ba) << 0;
474etiss_uint8 uimm = 0;
475static BitArrayRange R_uimm_6(6, 5);
476uimm += R_uimm_6.read(ba) << 6;
477etiss_uint8 rs1 = 0;
478static BitArrayRange R_rs1_0(9, 7);
479rs1 += R_rs1_0.read(ba) << 0;
480static BitArrayRange R_uimm_3(12, 10);
481uimm += R_uimm_3.read(ba) << 3;
482
483// NOLINTEND(clang-diagnostic-unused-but-set-variable)
484// -----------------------------------------------------------------------------
485
486 {
488
489 cp.code() = std::string("//CSD\n");
490
491// -----------------------------------------------------------------------------
492cp.code() += "etiss_coverage_count(1, 203);\n";
493{ // block
494cp.code() += "etiss_coverage_count(1, 1169);\n";
495cp.code() += "{ // block\n";
496cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
497cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
498cp.code() += "} // block\n";
499} // block
500{ // block
501cp.code() += "etiss_coverage_count(1, 7520);\n";
502cp.code() += "{ // block\n";
503cp.code() += "etiss_uint64 offs = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) + "ULL] + " + std::to_string(uimm) + "ULL;\n";
504cp.code() += "etiss_coverage_count(7, 7508, 7507, 7505, 7504, 7502, 7503, 7506);\n";
505cp.code() += "etiss_uint64 mem_val_0;\n";
506cp.code() += "mem_val_0 = (etiss_uint64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) + "ULL]);\n";
507cp.code() += "etiss_coverage_count(8, 7519, 7511, 7510, 7518, 7516, 7515, 7513, 7514);\n";
508cp.code() += "cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\n";
509cp.code() += "if (cpu->exception) { // conditional\n";
510{ // procedure
511cp.code() += "{ // procedure\n";
512cp.code() += "RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
513cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
514cp.code() += "} // procedure\n";
515} // procedure
516cp.code() += "} // conditional\n";
517cp.code() += "} // block\n";
518} // block
519cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
520cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
521// -----------------------------------------------------------------------------
522 cp.getAffectedRegisters().add("instructionPointer", 32);
523 }
524 {
526
527 cp.code() = std::string("//CSD\n");
528
529// -----------------------------------------------------------------------------
530cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
531// -----------------------------------------------------------------------------
532 }
533
534 return true;
535 },
536 0,
537 [] (BitArray & ba, Instruction & instr)
538 {
539// -----------------------------------------------------------------------------
540etiss_uint8 rs2 = 0;
541static BitArrayRange R_rs2_0(4, 2);
542rs2 += R_rs2_0.read(ba) << 0;
543etiss_uint8 uimm = 0;
544static BitArrayRange R_uimm_6(6, 5);
545uimm += R_uimm_6.read(ba) << 6;
546etiss_uint8 rs1 = 0;
547static BitArrayRange R_rs1_0(9, 7);
548rs1 += R_rs1_0.read(ba) << 0;
549static BitArrayRange R_uimm_3(12, 10);
550uimm += R_uimm_3.read(ba) << 3;
551
552// -----------------------------------------------------------------------------
553
554 std::stringstream ss;
555// -----------------------------------------------------------------------------
556ss << "csd" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | uimm=" + std::to_string(uimm) + " | rs1=" + std::to_string(rs1) + "]");
557// -----------------------------------------------------------------------------
558 return ss.str();
559 }
560);
561
562// CSUBW -----------------------------------------------------------------------
565 "csubw",
566 (uint16_t) 0x9c01,
567 (uint16_t) 0xfc63,
568 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
569 {
570
571// -----------------------------------------------------------------------------
572
573// -----------------------------------------------------------------------------
574
575// -----------------------------------------------------------------------------
576// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
577etiss_uint8 rs2 = 0;
578static BitArrayRange R_rs2_0(4, 2);
579rs2 += R_rs2_0.read(ba) << 0;
580etiss_uint8 rd = 0;
581static BitArrayRange R_rd_0(9, 7);
582rd += R_rd_0.read(ba) << 0;
583
584// NOLINTEND(clang-diagnostic-unused-but-set-variable)
585// -----------------------------------------------------------------------------
586
587 {
589
590 cp.code() = std::string("//CSUBW\n");
591
592// -----------------------------------------------------------------------------
593cp.code() += "etiss_coverage_count(1, 204);\n";
594{ // block
595cp.code() += "etiss_coverage_count(1, 1169);\n";
596cp.code() += "{ // block\n";
597cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
598cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
599cp.code() += "} // block\n";
600} // block
601{ // block
602cp.code() += "etiss_coverage_count(1, 7548);\n";
603cp.code() += "{ // block\n";
604cp.code() += "etiss_uint32 res = (etiss_uint32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL]) - (etiss_uint32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) + "ULL]);\n";
605cp.code() += "etiss_coverage_count(12, 7537, 7536, 7528, 7526, 7525, 7523, 7524, 7535, 7533, 7532, 7530, 7531);\n";
606cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] = (etiss_uint64)((etiss_int32)(res));\n";
607cp.code() += "etiss_coverage_count(8, 7547, 7542, 7541, 7539, 7540, 7546, 7544, 7543);\n";
608cp.code() += "} // block\n";
609} // block
610cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
611cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
612// -----------------------------------------------------------------------------
613 cp.getAffectedRegisters().add("instructionPointer", 32);
614 }
615
616 return true;
617 },
618 0,
619 [] (BitArray & ba, Instruction & instr)
620 {
621// -----------------------------------------------------------------------------
622etiss_uint8 rs2 = 0;
623static BitArrayRange R_rs2_0(4, 2);
624rs2 += R_rs2_0.read(ba) << 0;
625etiss_uint8 rd = 0;
626static BitArrayRange R_rd_0(9, 7);
627rd += R_rd_0.read(ba) << 0;
628
629// -----------------------------------------------------------------------------
630
631 std::stringstream ss;
632// -----------------------------------------------------------------------------
633ss << "csubw" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
634// -----------------------------------------------------------------------------
635 return ss.str();
636 }
637);
638
639// CADDW -----------------------------------------------------------------------
642 "caddw",
643 (uint16_t) 0x9c21,
644 (uint16_t) 0xfc63,
645 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
646 {
647
648// -----------------------------------------------------------------------------
649
650// -----------------------------------------------------------------------------
651
652// -----------------------------------------------------------------------------
653// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
654etiss_uint8 rs2 = 0;
655static BitArrayRange R_rs2_0(4, 2);
656rs2 += R_rs2_0.read(ba) << 0;
657etiss_uint8 rd = 0;
658static BitArrayRange R_rd_0(9, 7);
659rd += R_rd_0.read(ba) << 0;
660
661// NOLINTEND(clang-diagnostic-unused-but-set-variable)
662// -----------------------------------------------------------------------------
663
664 {
666
667 cp.code() = std::string("//CADDW\n");
668
669// -----------------------------------------------------------------------------
670cp.code() += "etiss_coverage_count(1, 205);\n";
671{ // block
672cp.code() += "etiss_coverage_count(1, 1169);\n";
673cp.code() += "{ // block\n";
674cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
675cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
676cp.code() += "} // block\n";
677} // block
678{ // block
679cp.code() += "etiss_coverage_count(1, 7576);\n";
680cp.code() += "{ // block\n";
681cp.code() += "etiss_uint32 res = (etiss_uint32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL]) + (etiss_uint32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) + "ULL]);\n";
682cp.code() += "etiss_coverage_count(12, 7565, 7564, 7556, 7554, 7553, 7551, 7552, 7563, 7561, 7560, 7558, 7559);\n";
683cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) + "ULL] = (etiss_uint64)((etiss_int32)(res));\n";
684cp.code() += "etiss_coverage_count(8, 7575, 7570, 7569, 7567, 7568, 7574, 7572, 7571);\n";
685cp.code() += "} // block\n";
686} // block
687cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
688cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
689// -----------------------------------------------------------------------------
690 cp.getAffectedRegisters().add("instructionPointer", 32);
691 }
692
693 return true;
694 },
695 0,
696 [] (BitArray & ba, Instruction & instr)
697 {
698// -----------------------------------------------------------------------------
699etiss_uint8 rs2 = 0;
700static BitArrayRange R_rs2_0(4, 2);
701rs2 += R_rs2_0.read(ba) << 0;
702etiss_uint8 rd = 0;
703static BitArrayRange R_rd_0(9, 7);
704rd += R_rd_0.read(ba) << 0;
705
706// -----------------------------------------------------------------------------
707
708 std::stringstream ss;
709// -----------------------------------------------------------------------------
710ss << "caddw" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | rd=" + std::to_string(rd) + "]");
711// -----------------------------------------------------------------------------
712 return ss.str();
713 }
714);
715
716// CLDSP -----------------------------------------------------------------------
719 "cldsp",
720 (uint16_t) 0x6002,
721 (uint16_t) 0xe003,
722 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
723 {
724
725// -----------------------------------------------------------------------------
726
727// -----------------------------------------------------------------------------
728
729// -----------------------------------------------------------------------------
730// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
731etiss_uint16 uimm = 0;
732static BitArrayRange R_uimm_6(4, 2);
733uimm += R_uimm_6.read(ba) << 6;
734static BitArrayRange R_uimm_3(6, 5);
735uimm += R_uimm_3.read(ba) << 3;
736etiss_uint8 rd = 0;
737static BitArrayRange R_rd_0(11, 7);
738rd += R_rd_0.read(ba) << 0;
739static BitArrayRange R_uimm_5(12, 12);
740uimm += R_uimm_5.read(ba) << 5;
741
742// NOLINTEND(clang-diagnostic-unused-but-set-variable)
743// -----------------------------------------------------------------------------
744
745 {
747
748 cp.code() = std::string("//CLDSP\n");
749
750// -----------------------------------------------------------------------------
751cp.code() += "etiss_coverage_count(1, 207);\n";
752{ // block
753cp.code() += "etiss_coverage_count(1, 1169);\n";
754cp.code() += "{ // block\n";
755cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
756cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
757cp.code() += "} // block\n";
758} // block
759{ // block
760cp.code() += "etiss_coverage_count(1, 7603);\n";
761cp.code() += "{ // block\n";
762cp.code() += "etiss_uint64 offs = *((RV64IMACFD*)cpu)->X[2ULL] + " + std::to_string(uimm) + "ULL;\n";
763cp.code() += "etiss_coverage_count(5, 7583, 7582, 7580, 7579, 7581);\n";
764cp.code() += "etiss_uint64 mem_val_0;\n";
765cp.code() += "cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\n";
766cp.code() += "if (cpu->exception) { // conditional\n";
767{ // procedure
768cp.code() += "{ // procedure\n";
769cp.code() += "RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
770cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
771cp.code() += "} // procedure\n";
772} // procedure
773cp.code() += "} // conditional\n";
774cp.code() += "etiss_int64 res = mem_val_0;\n";
775cp.code() += "etiss_coverage_count(3, 7588, 7587, 7586);\n";
776cp.code() += "etiss_coverage_count(1, 7589);\n";
777if (rd % 32ULL) { // conditional
778cp.code() += "etiss_coverage_count(2, 7592, 7590);\n";
779cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = res;\n";
780cp.code() += "etiss_coverage_count(5, 7599, 7597, 7596, 7594, 7598);\n";
781} // conditional
782else { // conditional
783{ // procedure
784cp.code() += "{ // procedure\n";
785cp.code() += "RV64IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";
786cp.code() += "etiss_coverage_count(3, 7602, 7600, 7601);\n";
787cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
788cp.code() += "} // procedure\n";
789} // procedure
790} // conditional
791cp.code() += "} // block\n";
792} // block
793cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
794cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
795// -----------------------------------------------------------------------------
796 cp.getAffectedRegisters().add("instructionPointer", 32);
797 }
798 {
800
801 cp.code() = std::string("//CLDSP\n");
802
803// -----------------------------------------------------------------------------
804cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
805// -----------------------------------------------------------------------------
806 }
807
808 return true;
809 },
810 0,
811 [] (BitArray & ba, Instruction & instr)
812 {
813// -----------------------------------------------------------------------------
814etiss_uint16 uimm = 0;
815static BitArrayRange R_uimm_6(4, 2);
816uimm += R_uimm_6.read(ba) << 6;
817static BitArrayRange R_uimm_3(6, 5);
818uimm += R_uimm_3.read(ba) << 3;
819etiss_uint8 rd = 0;
820static BitArrayRange R_rd_0(11, 7);
821rd += R_rd_0.read(ba) << 0;
822static BitArrayRange R_uimm_5(12, 12);
823uimm += R_uimm_5.read(ba) << 5;
824
825// -----------------------------------------------------------------------------
826
827 std::stringstream ss;
828// -----------------------------------------------------------------------------
829ss << "cldsp" << " # " << ba << (" [uimm=" + std::to_string(uimm) + " | rd=" + std::to_string(rd) + "]");
830// -----------------------------------------------------------------------------
831 return ss.str();
832 }
833);
834
835// CSDSP -----------------------------------------------------------------------
838 "csdsp",
839 (uint16_t) 0xe002,
840 (uint16_t) 0xe003,
841 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
842 {
843
844// -----------------------------------------------------------------------------
845
846// -----------------------------------------------------------------------------
847
848// -----------------------------------------------------------------------------
849// NOLINTBEGIN(clang-diagnostic-unused-but-set-variable)
850etiss_uint8 rs2 = 0;
851static BitArrayRange R_rs2_0(6, 2);
852rs2 += R_rs2_0.read(ba) << 0;
853etiss_uint16 uimm = 0;
854static BitArrayRange R_uimm_6(9, 7);
855uimm += R_uimm_6.read(ba) << 6;
856static BitArrayRange R_uimm_3(12, 10);
857uimm += R_uimm_3.read(ba) << 3;
858
859// NOLINTEND(clang-diagnostic-unused-but-set-variable)
860// -----------------------------------------------------------------------------
861
862 {
864
865 cp.code() = std::string("//CSDSP\n");
866
867// -----------------------------------------------------------------------------
868cp.code() += "etiss_coverage_count(1, 208);\n";
869{ // block
870cp.code() += "etiss_coverage_count(1, 1169);\n";
871cp.code() += "{ // block\n";
872cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 2) + "ULL;\n";
873cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
874cp.code() += "} // block\n";
875} // block
876{ // block
877cp.code() += "etiss_coverage_count(1, 7622);\n";
878cp.code() += "{ // block\n";
879cp.code() += "etiss_uint64 offs = *((RV64IMACFD*)cpu)->X[2ULL] + " + std::to_string(uimm) + "ULL;\n";
880cp.code() += "etiss_coverage_count(5, 7610, 7609, 7607, 7606, 7608);\n";
881cp.code() += "etiss_uint64 mem_val_0;\n";
882cp.code() += "mem_val_0 = (etiss_uint64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) + "ULL]);\n";
883cp.code() += "etiss_coverage_count(7, 7621, 7613, 7612, 7620, 7618, 7617, 7615);\n";
884cp.code() += "cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\n";
885cp.code() += "if (cpu->exception) { // conditional\n";
886{ // procedure
887cp.code() += "{ // procedure\n";
888cp.code() += "RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
889cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
890cp.code() += "} // procedure\n";
891} // procedure
892cp.code() += "} // conditional\n";
893cp.code() += "} // block\n";
894} // block
895cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
896cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
897// -----------------------------------------------------------------------------
898 cp.getAffectedRegisters().add("instructionPointer", 32);
899 }
900 {
902
903 cp.code() = std::string("//CSDSP\n");
904
905// -----------------------------------------------------------------------------
906cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
907// -----------------------------------------------------------------------------
908 }
909
910 return true;
911 },
912 0,
913 [] (BitArray & ba, Instruction & instr)
914 {
915// -----------------------------------------------------------------------------
916etiss_uint8 rs2 = 0;
917static BitArrayRange R_rs2_0(6, 2);
918rs2 += R_rs2_0.read(ba) << 0;
919etiss_uint16 uimm = 0;
920static BitArrayRange R_uimm_6(9, 7);
921uimm += R_uimm_6.read(ba) << 6;
922static BitArrayRange R_uimm_3(12, 10);
923uimm += R_uimm_3.read(ba) << 3;
924
925// -----------------------------------------------------------------------------
926
927 std::stringstream ss;
928// -----------------------------------------------------------------------------
929ss << "csdsp" << " # " << ba << (" [rs2=" + std::to_string(rs2) + " | uimm=" + std::to_string(uimm) + "]");
930// -----------------------------------------------------------------------------
931 return ss.str();
932 }
933);
934// clang-format on
etiss::instr::InstructionGroup ISA16_RV64IMACFD("ISA16_RV64IMACFD", 16)
static InstructionDefinition csrai_shamt_rs1(ISA16_RV64IMACFD, "csrai",(uint16_t) 0x8401,(uint16_t) 0xec03, [](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;static BitArrayRange R_shamt_5(12, 12);shamt+=R_shamt_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSRAI\n");cp.code()+="etiss_coverage_count(1, 200);\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, 7461);\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, 7460, 7449, 7448, 7446, 7447, 7459, 7456, 7454, 7453, 7451, 7452, 7457, 7458);\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;static BitArrayRange R_shamt_5(12, 12);shamt+=R_shamt_5.read(ba)<< 5;std::stringstream ss;ss<< "csrai"<< " # "<< ba<<(" [shamt="+std::to_string(shamt)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition csubw_rs2_rd(ISA16_RV64IMACFD, "csubw",(uint16_t) 0x9c01,(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("//CSUBW\n");cp.code()+="etiss_coverage_count(1, 204);\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, 7548);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = (etiss_uint32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL]) - (etiss_uint32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2+8ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(12, 7537, 7536, 7528, 7526, 7525, 7523, 7524, 7535, 7533, 7532, 7530, 7531);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = (etiss_uint64)((etiss_int32)(res));\n";cp.code()+="etiss_coverage_count(8, 7547, 7542, 7541, 7539, 7540, 7546, 7544, 7543);\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<< "csubw"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition csdsp_rs2_uimm(ISA16_RV64IMACFD, "csdsp",(uint16_t) 0xe002,(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_uint16 uimm=0;static BitArrayRange R_uimm_6(9, 7);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_3(12, 10);uimm+=R_uimm_3.read(ba)<< 3;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSDSP\n");cp.code()+="etiss_coverage_count(1, 208);\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, 7622);\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, 7610, 7609, 7607, 7606, 7608);\n";cp.code()+="etiss_uint64 mem_val_0;\n";cp.code()+="mem_val_0 = (etiss_uint64)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(7, 7621, 7613, 7612, 7620, 7618, 7617, 7615);\n";cp.code()+="cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\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("//CSDSP\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_uint16 uimm=0;static BitArrayRange R_uimm_6(9, 7);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_3(12, 10);uimm+=R_uimm_3.read(ba)<< 3;std::stringstream ss;ss<< "csdsp"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | uimm="+std::to_string(uimm)+"]");return ss.str();})
static InstructionDefinition caddiw_imm_rs1(ISA16_RV64IMACFD, "caddiw",(uint16_t) 0x2001,(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("//CADDIW\n");cp.code()+="etiss_coverage_count(1, 206);\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, 7407);\n";if((rs1 % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7413, 7410, 7408, 7411, 7412);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] = (etiss_int32)(*((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(11, 7430, 7418, 7417, 7415, 7429, 7425, 7423, 7422, 7420, 7428, 7426);\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<< "caddiw"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition caddw_rs2_rd(ISA16_RV64IMACFD, "caddw",(uint16_t) 0x9c21,(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("//CADDW\n");cp.code()+="etiss_coverage_count(1, 205);\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, 7576);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = (etiss_uint32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL]) + (etiss_uint32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2+8ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(12, 7565, 7564, 7556, 7554, 7553, 7551, 7552, 7563, 7561, 7560, 7558, 7559);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = (etiss_uint64)((etiss_int32)(res));\n";cp.code()+="etiss_coverage_count(8, 7575, 7570, 7569, 7567, 7568, 7574, 7572, 7571);\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<< "caddw"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition cldsp_uimm_rd(ISA16_RV64IMACFD, "cldsp",(uint16_t) 0x6002,(uint16_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 uimm=0;static BitArrayRange R_uimm_6(4, 2);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_3(6, 5);uimm+=R_uimm_3.read(ba)<< 3;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("//CLDSP\n");cp.code()+="etiss_coverage_count(1, 207);\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, 7603);\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, 7583, 7582, 7580, 7579, 7581);\n";cp.code()+="etiss_uint64 mem_val_0;\n";cp.code()+="cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\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_int64 res = mem_val_0;\n";cp.code()+="etiss_coverage_count(3, 7588, 7587, 7586);\n";cp.code()+="etiss_coverage_count(1, 7589);\n";if(rd % 32ULL) { cp.code()+="etiss_coverage_count(2, 7592, 7590);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = res;\n";cp.code()+="etiss_coverage_count(5, 7599, 7597, 7596, 7594, 7598);\n";} else { { cp.code()+="{ // procedure\n";cp.code()+="RV64IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";cp.code()+="etiss_coverage_count(3, 7602, 7600, 7601);\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("//CLDSP\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 uimm=0;static BitArrayRange R_uimm_6(4, 2);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_3(6, 5);uimm+=R_uimm_3.read(ba)<< 3;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<< "cldsp"<< " # "<< ba<<(" [uimm="+std::to_string(uimm)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition csrli_nzuimm_rs1(ISA16_RV64IMACFD, "csrli",(uint16_t) 0x8001,(uint16_t) 0xec03, [](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(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_nzuimm_5(12, 12);nzuimm+=R_nzuimm_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSRLI\n");cp.code()+="etiss_coverage_count(1, 199);\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, 7444);\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(nzuimm)+"ULL;\n";cp.code()+="etiss_coverage_count(11, 7443, 7435, 7434, 7432, 7433, 7442, 7440, 7439, 7437, 7438, 7441);\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 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(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_nzuimm_5(12, 12);nzuimm+=R_nzuimm_5.read(ba)<< 5;std::stringstream ss;ss<< "csrli"<< " # "<< ba<<(" [nzuimm="+std::to_string(nzuimm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition cslli_shamt_rs1(ISA16_RV64IMACFD, "cslli",(uint16_t) 0x02,(uint16_t) 0xe003, [](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(11, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_shamt_5(12, 12);shamt+=R_shamt_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSLLI\n");cp.code()+="etiss_coverage_count(1, 201);\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, 7478);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7462);\n";if(rs1==0LL) { cp.code()+="etiss_coverage_count(3, 7465, 7463, 7464);\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV64IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";cp.code()+="etiss_coverage_count(2, 7468, 7466);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} } cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rs1)+"ULL] = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1)+"ULL] << "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(7, 7477, 7471, 7470, 7476, 7474, 7473, 7475);\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("//CSLLI\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} 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(11, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_shamt_5(12, 12);shamt+=R_shamt_5.read(ba)<< 5;std::stringstream ss;ss<< "cslli"<< " # "<< ba<<(" [shamt="+std::to_string(shamt)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition csd_rs2_uimm_rs1(ISA16_RV64IMACFD, "csd",(uint16_t) 0xe000,(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(6, 5);uimm+=R_uimm_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_uimm_3(12, 10);uimm+=R_uimm_3.read(ba)<< 3;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSD\n");cp.code()+="etiss_coverage_count(1, 203);\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, 7520);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint64 offs = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] + "+std::to_string(uimm)+"ULL;\n";cp.code()+="etiss_coverage_count(7, 7508, 7507, 7505, 7504, 7502, 7503, 7506);\n";cp.code()+="etiss_uint64 mem_val_0;\n";cp.code()+="mem_val_0 = (etiss_uint64)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2+8ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(8, 7519, 7511, 7510, 7518, 7516, 7515, 7513, 7514);\n";cp.code()+="cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\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("//CSD\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(6, 5);uimm+=R_uimm_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_uimm_3(12, 10);uimm+=R_uimm_3.read(ba)<< 3;std::stringstream ss;ss<< "csd"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | uimm="+std::to_string(uimm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition cld_rd_uimm_rs1(ISA16_RV64IMACFD, "cld",(uint16_t) 0x6000,(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(6, 5);uimm+=R_uimm_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_uimm_3(12, 10);uimm+=R_uimm_3.read(ba)<< 3;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CLD\n");cp.code()+="etiss_coverage_count(1, 202);\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, 7499);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint64 offs = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] + "+std::to_string(uimm)+"ULL;\n";cp.code()+="etiss_coverage_count(7, 7487, 7486, 7484, 7483, 7481, 7482, 7485);\n";cp.code()+="etiss_uint64 mem_val_0;\n";cp.code()+="cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\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_int64)(mem_val_0);\n";cp.code()+="etiss_coverage_count(8, 7498, 7492, 7491, 7489, 7490, 7497, 7495, 7494);\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("//CLD\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(6, 5);uimm+=R_uimm_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_uimm_3(12, 10);uimm+=R_uimm_3.read(ba)<< 3;std::stringstream ss;ss<< "cld"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | uimm="+std::to_string(uimm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
int8_t etiss_int8
Definition types.h:48
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
@ 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