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
RV64IMACFD_RV32FInstr.cpp
Go to the documentation of this file.
1
8#include "RV64IMACFDArch.h"
9#include "RV64IMACFDFuncs.h"
10
11using namespace etiss;
12using namespace etiss::instr;
13
14
15// FLW -------------------------------------------------------------------------
18 "flw",
19 (uint32_t) 0x002007,
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 imm = 0;
36static BitArrayRange R_imm_0(31, 20);
37imm += R_imm_0.read(ba) << 0;
38
39// -----------------------------------------------------------------------------
40
41 {
43
44 cp.code() = std::string("//FLW\n");
45
46// -----------------------------------------------------------------------------
47cp.code() += "etiss_coverage_count(1, 88);\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, 3450);\n";
57cp.code() += "{ // block\n";
58cp.code() += "etiss_uint64 offs = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] + " + std::to_string(((etiss_int16)(((etiss_int16)imm) << (4)) >> (4))) + "LL;\n";
59cp.code() += "etiss_coverage_count(7, 3417, 3416, 3412, 3411, 3409, 3415, 3413);\n";
60cp.code() += "etiss_uint32 mem_val_0;\n";
61cp.code() += "cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";
62cp.code() += "if (cpu->exception) { // conditional\n";
63{ // procedure
64cp.code() += "{ // procedure\n";
65cp.code() += "RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
66cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
67cp.code() += "} // procedure\n";
68} // procedure
69cp.code() += "} // conditional\n";
70cp.code() += "etiss_uint32 res = (etiss_uint32)(mem_val_0);\n";
71cp.code() += "etiss_coverage_count(4, 3424, 3423, 3421, 3420);\n";
72{ // block
73cp.code() += "etiss_coverage_count(1, 3449);\n";
74cp.code() += "{ // block\n";
75cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
76cp.code() += "etiss_coverage_count(6, 3448, 3436, 3435, 3447, 3446, 3444);\n";
77cp.code() += "} // block\n";
78} // block
79cp.code() += "} // block\n";
80} // block
81cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
82cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
83// -----------------------------------------------------------------------------
84 cp.getAffectedRegisters().add("instructionPointer", 32);
85 }
86 {
88
89 cp.code() = std::string("//FLW\n");
90
91// -----------------------------------------------------------------------------
92cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
93// -----------------------------------------------------------------------------
94 }
95
96 return true;
97 },
98 0,
99 [] (BitArray & ba, Instruction & instr)
100 {
101// -----------------------------------------------------------------------------
102etiss_uint8 rd = 0;
103static BitArrayRange R_rd_0(11, 7);
104rd += R_rd_0.read(ba) << 0;
105etiss_uint8 rs1 = 0;
106static BitArrayRange R_rs1_0(19, 15);
107rs1 += R_rs1_0.read(ba) << 0;
108etiss_uint16 imm = 0;
109static BitArrayRange R_imm_0(31, 20);
110imm += R_imm_0.read(ba) << 0;
111
112// -----------------------------------------------------------------------------
113
114 std::stringstream ss;
115// -----------------------------------------------------------------------------
116ss << "flw" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | imm=" + std::to_string(imm) + "]");
117// -----------------------------------------------------------------------------
118 return ss.str();
119 }
120);
121
122// FSW -------------------------------------------------------------------------
125 "fsw",
126 (uint32_t) 0x002027,
127 (uint32_t) 0x00707f,
128 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
129 {
130
131// -----------------------------------------------------------------------------
132
133// -----------------------------------------------------------------------------
134
135// -----------------------------------------------------------------------------
136etiss_uint16 imm = 0;
137static BitArrayRange R_imm_0(11, 7);
138imm += R_imm_0.read(ba) << 0;
139etiss_uint8 rs1 = 0;
140static BitArrayRange R_rs1_0(19, 15);
141rs1 += R_rs1_0.read(ba) << 0;
142etiss_uint8 rs2 = 0;
143static BitArrayRange R_rs2_0(24, 20);
144rs2 += R_rs2_0.read(ba) << 0;
145static BitArrayRange R_imm_5(31, 25);
146imm += R_imm_5.read(ba) << 5;
147
148// -----------------------------------------------------------------------------
149
150 {
152
153 cp.code() = std::string("//FSW\n");
154
155// -----------------------------------------------------------------------------
156cp.code() += "etiss_coverage_count(1, 89);\n";
157{ // block
158cp.code() += "etiss_coverage_count(1, 1169);\n";
159cp.code() += "{ // block\n";
160cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
161cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
162cp.code() += "} // block\n";
163} // block
164{ // block
165cp.code() += "etiss_coverage_count(1, 3471);\n";
166cp.code() += "{ // block\n";
167cp.code() += "etiss_uint64 offs = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL] + " + std::to_string(((etiss_int16)(((etiss_int16)imm) << (4)) >> (4))) + "LL;\n";
168cp.code() += "etiss_coverage_count(7, 3461, 3460, 3456, 3455, 3453, 3459, 3457);\n";
169cp.code() += "etiss_uint32 mem_val_0;\n";
170cp.code() += "mem_val_0 = (etiss_uint32)(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]);\n";
171cp.code() += "etiss_coverage_count(6, 3470, 3464, 3463, 3469, 3467, 3466);\n";
172cp.code() += "cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";
173cp.code() += "if (cpu->exception) { // conditional\n";
174{ // procedure
175cp.code() += "{ // procedure\n";
176cp.code() += "RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
177cp.code() += "goto instr_exit_" + std::to_string(ic.current_address_) + ";\n";
178cp.code() += "} // procedure\n";
179} // procedure
180cp.code() += "} // conditional\n";
181cp.code() += "} // block\n";
182} // block
183cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
184cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
185// -----------------------------------------------------------------------------
186 cp.getAffectedRegisters().add("instructionPointer", 32);
187 }
188 {
190
191 cp.code() = std::string("//FSW\n");
192
193// -----------------------------------------------------------------------------
194cp.code() += "if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
195// -----------------------------------------------------------------------------
196 }
197
198 return true;
199 },
200 0,
201 [] (BitArray & ba, Instruction & instr)
202 {
203// -----------------------------------------------------------------------------
204etiss_uint16 imm = 0;
205static BitArrayRange R_imm_0(11, 7);
206imm += R_imm_0.read(ba) << 0;
207etiss_uint8 rs1 = 0;
208static BitArrayRange R_rs1_0(19, 15);
209rs1 += R_rs1_0.read(ba) << 0;
210etiss_uint8 rs2 = 0;
211static BitArrayRange R_rs2_0(24, 20);
212rs2 += R_rs2_0.read(ba) << 0;
213static BitArrayRange R_imm_5(31, 25);
214imm += R_imm_5.read(ba) << 5;
215
216// -----------------------------------------------------------------------------
217
218 std::stringstream ss;
219// -----------------------------------------------------------------------------
220ss << "fsw" << " # " << ba << (" [imm=" + std::to_string(imm) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
221// -----------------------------------------------------------------------------
222 return ss.str();
223 }
224);
225
226// FMADD_S ---------------------------------------------------------------------
229 "fmadd_s",
230 (uint32_t) 0x000043,
231 (uint32_t) 0x600007f,
232 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
233 {
234
235// -----------------------------------------------------------------------------
236
237// -----------------------------------------------------------------------------
238
239// -----------------------------------------------------------------------------
240etiss_uint8 rd = 0;
241static BitArrayRange R_rd_0(11, 7);
242rd += R_rd_0.read(ba) << 0;
243etiss_uint8 rm = 0;
244static BitArrayRange R_rm_0(14, 12);
245rm += R_rm_0.read(ba) << 0;
246etiss_uint8 rs1 = 0;
247static BitArrayRange R_rs1_0(19, 15);
248rs1 += R_rs1_0.read(ba) << 0;
249etiss_uint8 rs2 = 0;
250static BitArrayRange R_rs2_0(24, 20);
251rs2 += R_rs2_0.read(ba) << 0;
252etiss_uint8 rs3 = 0;
253static BitArrayRange R_rs3_0(31, 27);
254rs3 += R_rs3_0.read(ba) << 0;
255
256// -----------------------------------------------------------------------------
257
258 {
260
261 cp.code() = std::string("//FMADD_S\n");
262
263// -----------------------------------------------------------------------------
264cp.code() += "etiss_coverage_count(1, 90);\n";
265{ // block
266cp.code() += "etiss_coverage_count(1, 1169);\n";
267cp.code() += "{ // block\n";
268cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
269cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
270cp.code() += "} // block\n";
271} // block
272{ // block
273cp.code() += "etiss_coverage_count(1, 3542);\n";
274cp.code() += "{ // block\n";
275{ // block
276cp.code() += "etiss_coverage_count(1, 3526);\n";
277cp.code() += "{ // block\n";
278cp.code() += "etiss_uint32 res = fmadd_s(unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]), unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]), unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs3) + "ULL]), 0LL, RV64IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) + "ULL));\n";
279cp.code() += "etiss_coverage_count(14, 3510, 3509, 3497, 3496, 3495, 3501, 3500, 3499, 3505, 3504, 3503, 3506, 3508, 3507);\n";
280cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
281cp.code() += "etiss_coverage_count(6, 3525, 3513, 3512, 3524, 3523, 3521);\n";
282cp.code() += "} // block\n";
283} // block
284cp.code() += "etiss_uint32 flags = fget_flags();\n";
285cp.code() += "etiss_coverage_count(2, 3529, 3528);\n";
286cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
287cp.code() += "etiss_coverage_count(9, 3541, 3530, 3540, 3534, 3531, 3535, 3538, 3536, 3539);\n";
288cp.code() += "} // block\n";
289} // block
290cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
291cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
292// -----------------------------------------------------------------------------
293 cp.getAffectedRegisters().add("instructionPointer", 32);
294 }
295
296 return true;
297 },
298 0,
299 [] (BitArray & ba, Instruction & instr)
300 {
301// -----------------------------------------------------------------------------
302etiss_uint8 rd = 0;
303static BitArrayRange R_rd_0(11, 7);
304rd += R_rd_0.read(ba) << 0;
305etiss_uint8 rm = 0;
306static BitArrayRange R_rm_0(14, 12);
307rm += R_rm_0.read(ba) << 0;
308etiss_uint8 rs1 = 0;
309static BitArrayRange R_rs1_0(19, 15);
310rs1 += R_rs1_0.read(ba) << 0;
311etiss_uint8 rs2 = 0;
312static BitArrayRange R_rs2_0(24, 20);
313rs2 += R_rs2_0.read(ba) << 0;
314etiss_uint8 rs3 = 0;
315static BitArrayRange R_rs3_0(31, 27);
316rs3 += R_rs3_0.read(ba) << 0;
317
318// -----------------------------------------------------------------------------
319
320 std::stringstream ss;
321// -----------------------------------------------------------------------------
322ss << "fmadd_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rm=" + std::to_string(rm) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + " | rs3=" + std::to_string(rs3) + "]");
323// -----------------------------------------------------------------------------
324 return ss.str();
325 }
326);
327
328// FMSUB_S ---------------------------------------------------------------------
331 "fmsub_s",
332 (uint32_t) 0x000047,
333 (uint32_t) 0x600007f,
334 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
335 {
336
337// -----------------------------------------------------------------------------
338
339// -----------------------------------------------------------------------------
340
341// -----------------------------------------------------------------------------
342etiss_uint8 rd = 0;
343static BitArrayRange R_rd_0(11, 7);
344rd += R_rd_0.read(ba) << 0;
345etiss_uint8 rm = 0;
346static BitArrayRange R_rm_0(14, 12);
347rm += R_rm_0.read(ba) << 0;
348etiss_uint8 rs1 = 0;
349static BitArrayRange R_rs1_0(19, 15);
350rs1 += R_rs1_0.read(ba) << 0;
351etiss_uint8 rs2 = 0;
352static BitArrayRange R_rs2_0(24, 20);
353rs2 += R_rs2_0.read(ba) << 0;
354etiss_uint8 rs3 = 0;
355static BitArrayRange R_rs3_0(31, 27);
356rs3 += R_rs3_0.read(ba) << 0;
357
358// -----------------------------------------------------------------------------
359
360 {
362
363 cp.code() = std::string("//FMSUB_S\n");
364
365// -----------------------------------------------------------------------------
366cp.code() += "etiss_coverage_count(1, 91);\n";
367{ // block
368cp.code() += "etiss_coverage_count(1, 1169);\n";
369cp.code() += "{ // block\n";
370cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
371cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
372cp.code() += "} // block\n";
373} // block
374{ // block
375cp.code() += "etiss_coverage_count(1, 3613);\n";
376cp.code() += "{ // block\n";
377{ // block
378cp.code() += "etiss_coverage_count(1, 3597);\n";
379cp.code() += "{ // block\n";
380cp.code() += "etiss_uint32 res = fmadd_s(unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]), unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]), unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs3) + "ULL]), 1ULL, RV64IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) + "ULL));\n";
381cp.code() += "etiss_coverage_count(14, 3581, 3580, 3568, 3567, 3566, 3572, 3571, 3570, 3576, 3575, 3574, 3577, 3579, 3578);\n";
382cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
383cp.code() += "etiss_coverage_count(6, 3596, 3584, 3583, 3595, 3594, 3592);\n";
384cp.code() += "} // block\n";
385} // block
386cp.code() += "etiss_uint32 flags = fget_flags();\n";
387cp.code() += "etiss_coverage_count(2, 3600, 3599);\n";
388cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
389cp.code() += "etiss_coverage_count(9, 3612, 3601, 3611, 3605, 3602, 3606, 3609, 3607, 3610);\n";
390cp.code() += "} // block\n";
391} // block
392cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
393cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
394// -----------------------------------------------------------------------------
395 cp.getAffectedRegisters().add("instructionPointer", 32);
396 }
397
398 return true;
399 },
400 0,
401 [] (BitArray & ba, Instruction & instr)
402 {
403// -----------------------------------------------------------------------------
404etiss_uint8 rd = 0;
405static BitArrayRange R_rd_0(11, 7);
406rd += R_rd_0.read(ba) << 0;
407etiss_uint8 rm = 0;
408static BitArrayRange R_rm_0(14, 12);
409rm += R_rm_0.read(ba) << 0;
410etiss_uint8 rs1 = 0;
411static BitArrayRange R_rs1_0(19, 15);
412rs1 += R_rs1_0.read(ba) << 0;
413etiss_uint8 rs2 = 0;
414static BitArrayRange R_rs2_0(24, 20);
415rs2 += R_rs2_0.read(ba) << 0;
416etiss_uint8 rs3 = 0;
417static BitArrayRange R_rs3_0(31, 27);
418rs3 += R_rs3_0.read(ba) << 0;
419
420// -----------------------------------------------------------------------------
421
422 std::stringstream ss;
423// -----------------------------------------------------------------------------
424ss << "fmsub_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rm=" + std::to_string(rm) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + " | rs3=" + std::to_string(rs3) + "]");
425// -----------------------------------------------------------------------------
426 return ss.str();
427 }
428);
429
430// FNMADD_S --------------------------------------------------------------------
433 "fnmadd_s",
434 (uint32_t) 0x00004f,
435 (uint32_t) 0x600007f,
436 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
437 {
438
439// -----------------------------------------------------------------------------
440
441// -----------------------------------------------------------------------------
442
443// -----------------------------------------------------------------------------
444etiss_uint8 rd = 0;
445static BitArrayRange R_rd_0(11, 7);
446rd += R_rd_0.read(ba) << 0;
447etiss_uint8 rm = 0;
448static BitArrayRange R_rm_0(14, 12);
449rm += R_rm_0.read(ba) << 0;
450etiss_uint8 rs1 = 0;
451static BitArrayRange R_rs1_0(19, 15);
452rs1 += R_rs1_0.read(ba) << 0;
453etiss_uint8 rs2 = 0;
454static BitArrayRange R_rs2_0(24, 20);
455rs2 += R_rs2_0.read(ba) << 0;
456etiss_uint8 rs3 = 0;
457static BitArrayRange R_rs3_0(31, 27);
458rs3 += R_rs3_0.read(ba) << 0;
459
460// -----------------------------------------------------------------------------
461
462 {
464
465 cp.code() = std::string("//FNMADD_S\n");
466
467// -----------------------------------------------------------------------------
468cp.code() += "etiss_coverage_count(1, 92);\n";
469{ // block
470cp.code() += "etiss_coverage_count(1, 1169);\n";
471cp.code() += "{ // block\n";
472cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
473cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
474cp.code() += "} // block\n";
475} // block
476{ // block
477cp.code() += "etiss_coverage_count(1, 3693);\n";
478cp.code() += "{ // block\n";
479{ // block
480cp.code() += "etiss_coverage_count(1, 3677);\n";
481cp.code() += "{ // block\n";
482cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
483cp.code() += "etiss_coverage_count(4, 3640, 3639, 3638, 3637);\n";
484cp.code() += "etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]);\n";
485cp.code() += "etiss_coverage_count(4, 3646, 3645, 3644, 3643);\n";
486cp.code() += "etiss_uint32 frs3 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs3) + "ULL]);\n";
487cp.code() += "etiss_coverage_count(4, 3652, 3651, 3650, 3649);\n";
488cp.code() += "etiss_uint32 res = fmadd_s(frs1, frs2, frs3, 2ULL, RV64IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) + "ULL));\n";
489cp.code() += "etiss_coverage_count(8, 3661, 3660, 3654, 3655, 3656, 3657, 3659, 3658);\n";
490cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
491cp.code() += "etiss_coverage_count(6, 3676, 3664, 3663, 3675, 3674, 3672);\n";
492cp.code() += "} // block\n";
493} // block
494cp.code() += "etiss_uint32 flags = fget_flags();\n";
495cp.code() += "etiss_coverage_count(2, 3680, 3679);\n";
496cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
497cp.code() += "etiss_coverage_count(9, 3692, 3681, 3691, 3685, 3682, 3686, 3689, 3687, 3690);\n";
498cp.code() += "} // block\n";
499} // block
500cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
501cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
502// -----------------------------------------------------------------------------
503 cp.getAffectedRegisters().add("instructionPointer", 32);
504 }
505
506 return true;
507 },
508 0,
509 [] (BitArray & ba, Instruction & instr)
510 {
511// -----------------------------------------------------------------------------
512etiss_uint8 rd = 0;
513static BitArrayRange R_rd_0(11, 7);
514rd += R_rd_0.read(ba) << 0;
515etiss_uint8 rm = 0;
516static BitArrayRange R_rm_0(14, 12);
517rm += R_rm_0.read(ba) << 0;
518etiss_uint8 rs1 = 0;
519static BitArrayRange R_rs1_0(19, 15);
520rs1 += R_rs1_0.read(ba) << 0;
521etiss_uint8 rs2 = 0;
522static BitArrayRange R_rs2_0(24, 20);
523rs2 += R_rs2_0.read(ba) << 0;
524etiss_uint8 rs3 = 0;
525static BitArrayRange R_rs3_0(31, 27);
526rs3 += R_rs3_0.read(ba) << 0;
527
528// -----------------------------------------------------------------------------
529
530 std::stringstream ss;
531// -----------------------------------------------------------------------------
532ss << "fnmadd_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rm=" + std::to_string(rm) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + " | rs3=" + std::to_string(rs3) + "]");
533// -----------------------------------------------------------------------------
534 return ss.str();
535 }
536);
537
538// FNMSUB_S --------------------------------------------------------------------
541 "fnmsub_s",
542 (uint32_t) 0x00004b,
543 (uint32_t) 0x600007f,
544 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
545 {
546
547// -----------------------------------------------------------------------------
548
549// -----------------------------------------------------------------------------
550
551// -----------------------------------------------------------------------------
552etiss_uint8 rd = 0;
553static BitArrayRange R_rd_0(11, 7);
554rd += R_rd_0.read(ba) << 0;
555etiss_uint8 rm = 0;
556static BitArrayRange R_rm_0(14, 12);
557rm += R_rm_0.read(ba) << 0;
558etiss_uint8 rs1 = 0;
559static BitArrayRange R_rs1_0(19, 15);
560rs1 += R_rs1_0.read(ba) << 0;
561etiss_uint8 rs2 = 0;
562static BitArrayRange R_rs2_0(24, 20);
563rs2 += R_rs2_0.read(ba) << 0;
564etiss_uint8 rs3 = 0;
565static BitArrayRange R_rs3_0(31, 27);
566rs3 += R_rs3_0.read(ba) << 0;
567
568// -----------------------------------------------------------------------------
569
570 {
572
573 cp.code() = std::string("//FNMSUB_S\n");
574
575// -----------------------------------------------------------------------------
576cp.code() += "etiss_coverage_count(1, 93);\n";
577{ // block
578cp.code() += "etiss_coverage_count(1, 1169);\n";
579cp.code() += "{ // block\n";
580cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
581cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
582cp.code() += "} // block\n";
583} // block
584{ // block
585cp.code() += "etiss_coverage_count(1, 3773);\n";
586cp.code() += "{ // block\n";
587{ // block
588cp.code() += "etiss_coverage_count(1, 3757);\n";
589cp.code() += "{ // block\n";
590cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
591cp.code() += "etiss_coverage_count(4, 3720, 3719, 3718, 3717);\n";
592cp.code() += "etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]);\n";
593cp.code() += "etiss_coverage_count(4, 3726, 3725, 3724, 3723);\n";
594cp.code() += "etiss_uint32 frs3 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs3) + "ULL]);\n";
595cp.code() += "etiss_coverage_count(4, 3732, 3731, 3730, 3729);\n";
596cp.code() += "etiss_uint32 res = fmadd_s(frs1, frs2, frs3, 3ULL, RV64IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) + "ULL));\n";
597cp.code() += "etiss_coverage_count(8, 3741, 3740, 3734, 3735, 3736, 3737, 3739, 3738);\n";
598cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
599cp.code() += "etiss_coverage_count(6, 3756, 3744, 3743, 3755, 3754, 3752);\n";
600cp.code() += "} // block\n";
601} // block
602cp.code() += "etiss_uint32 flags = fget_flags();\n";
603cp.code() += "etiss_coverage_count(2, 3760, 3759);\n";
604cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
605cp.code() += "etiss_coverage_count(9, 3772, 3761, 3771, 3765, 3762, 3766, 3769, 3767, 3770);\n";
606cp.code() += "} // block\n";
607} // block
608cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
609cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
610// -----------------------------------------------------------------------------
611 cp.getAffectedRegisters().add("instructionPointer", 32);
612 }
613
614 return true;
615 },
616 0,
617 [] (BitArray & ba, Instruction & instr)
618 {
619// -----------------------------------------------------------------------------
620etiss_uint8 rd = 0;
621static BitArrayRange R_rd_0(11, 7);
622rd += R_rd_0.read(ba) << 0;
623etiss_uint8 rm = 0;
624static BitArrayRange R_rm_0(14, 12);
625rm += R_rm_0.read(ba) << 0;
626etiss_uint8 rs1 = 0;
627static BitArrayRange R_rs1_0(19, 15);
628rs1 += R_rs1_0.read(ba) << 0;
629etiss_uint8 rs2 = 0;
630static BitArrayRange R_rs2_0(24, 20);
631rs2 += R_rs2_0.read(ba) << 0;
632etiss_uint8 rs3 = 0;
633static BitArrayRange R_rs3_0(31, 27);
634rs3 += R_rs3_0.read(ba) << 0;
635
636// -----------------------------------------------------------------------------
637
638 std::stringstream ss;
639// -----------------------------------------------------------------------------
640ss << "fnmsub_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rm=" + std::to_string(rm) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + " | rs3=" + std::to_string(rs3) + "]");
641// -----------------------------------------------------------------------------
642 return ss.str();
643 }
644);
645
646// FADD_S ----------------------------------------------------------------------
649 "fadd_s",
650 (uint32_t) 0x000053,
651 (uint32_t) 0xfe00007f,
652 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
653 {
654
655// -----------------------------------------------------------------------------
656
657// -----------------------------------------------------------------------------
658
659// -----------------------------------------------------------------------------
660etiss_uint8 rd = 0;
661static BitArrayRange R_rd_0(11, 7);
662rd += R_rd_0.read(ba) << 0;
663etiss_uint8 rm = 0;
664static BitArrayRange R_rm_0(14, 12);
665rm += R_rm_0.read(ba) << 0;
666etiss_uint8 rs1 = 0;
667static BitArrayRange R_rs1_0(19, 15);
668rs1 += R_rs1_0.read(ba) << 0;
669etiss_uint8 rs2 = 0;
670static BitArrayRange R_rs2_0(24, 20);
671rs2 += R_rs2_0.read(ba) << 0;
672
673// -----------------------------------------------------------------------------
674
675 {
677
678 cp.code() = std::string("//FADD_S\n");
679
680// -----------------------------------------------------------------------------
681cp.code() += "etiss_coverage_count(1, 94);\n";
682{ // block
683cp.code() += "etiss_coverage_count(1, 1169);\n";
684cp.code() += "{ // block\n";
685cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
686cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
687cp.code() += "} // block\n";
688} // block
689{ // block
690cp.code() += "etiss_coverage_count(1, 3841);\n";
691cp.code() += "{ // block\n";
692{ // block
693cp.code() += "etiss_coverage_count(1, 3825);\n";
694cp.code() += "{ // block\n";
695cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
696cp.code() += "etiss_coverage_count(4, 3796, 3795, 3794, 3793);\n";
697cp.code() += "etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]);\n";
698cp.code() += "etiss_coverage_count(4, 3802, 3801, 3800, 3799);\n";
699cp.code() += "etiss_uint32 res = fadd_s(frs1, frs2, RV64IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) + "ULL));\n";
700cp.code() += "etiss_coverage_count(6, 3809, 3808, 3804, 3805, 3807, 3806);\n";
701cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
702cp.code() += "etiss_coverage_count(6, 3824, 3812, 3811, 3823, 3822, 3820);\n";
703cp.code() += "} // block\n";
704} // block
705cp.code() += "etiss_uint32 flags = fget_flags();\n";
706cp.code() += "etiss_coverage_count(2, 3828, 3827);\n";
707cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
708cp.code() += "etiss_coverage_count(9, 3840, 3829, 3839, 3833, 3830, 3834, 3837, 3835, 3838);\n";
709cp.code() += "} // block\n";
710} // block
711cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
712cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
713// -----------------------------------------------------------------------------
714 cp.getAffectedRegisters().add("instructionPointer", 32);
715 }
716
717 return true;
718 },
719 0,
720 [] (BitArray & ba, Instruction & instr)
721 {
722// -----------------------------------------------------------------------------
723etiss_uint8 rd = 0;
724static BitArrayRange R_rd_0(11, 7);
725rd += R_rd_0.read(ba) << 0;
726etiss_uint8 rm = 0;
727static BitArrayRange R_rm_0(14, 12);
728rm += R_rm_0.read(ba) << 0;
729etiss_uint8 rs1 = 0;
730static BitArrayRange R_rs1_0(19, 15);
731rs1 += R_rs1_0.read(ba) << 0;
732etiss_uint8 rs2 = 0;
733static BitArrayRange R_rs2_0(24, 20);
734rs2 += R_rs2_0.read(ba) << 0;
735
736// -----------------------------------------------------------------------------
737
738 std::stringstream ss;
739// -----------------------------------------------------------------------------
740ss << "fadd_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rm=" + std::to_string(rm) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
741// -----------------------------------------------------------------------------
742 return ss.str();
743 }
744);
745
746// FSUB_S ----------------------------------------------------------------------
749 "fsub_s",
750 (uint32_t) 0x8000053,
751 (uint32_t) 0xfe00007f,
752 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
753 {
754
755// -----------------------------------------------------------------------------
756
757// -----------------------------------------------------------------------------
758
759// -----------------------------------------------------------------------------
760etiss_uint8 rd = 0;
761static BitArrayRange R_rd_0(11, 7);
762rd += R_rd_0.read(ba) << 0;
763etiss_uint8 rm = 0;
764static BitArrayRange R_rm_0(14, 12);
765rm += R_rm_0.read(ba) << 0;
766etiss_uint8 rs1 = 0;
767static BitArrayRange R_rs1_0(19, 15);
768rs1 += R_rs1_0.read(ba) << 0;
769etiss_uint8 rs2 = 0;
770static BitArrayRange R_rs2_0(24, 20);
771rs2 += R_rs2_0.read(ba) << 0;
772
773// -----------------------------------------------------------------------------
774
775 {
777
778 cp.code() = std::string("//FSUB_S\n");
779
780// -----------------------------------------------------------------------------
781cp.code() += "etiss_coverage_count(1, 95);\n";
782{ // block
783cp.code() += "etiss_coverage_count(1, 1169);\n";
784cp.code() += "{ // block\n";
785cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
786cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
787cp.code() += "} // block\n";
788} // block
789{ // block
790cp.code() += "etiss_coverage_count(1, 3909);\n";
791cp.code() += "{ // block\n";
792{ // block
793cp.code() += "etiss_coverage_count(1, 3893);\n";
794cp.code() += "{ // block\n";
795cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
796cp.code() += "etiss_coverage_count(4, 3864, 3863, 3862, 3861);\n";
797cp.code() += "etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]);\n";
798cp.code() += "etiss_coverage_count(4, 3870, 3869, 3868, 3867);\n";
799cp.code() += "etiss_uint32 res = fsub_s(frs1, frs2, RV64IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) + "ULL));\n";
800cp.code() += "etiss_coverage_count(6, 3877, 3876, 3872, 3873, 3875, 3874);\n";
801cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
802cp.code() += "etiss_coverage_count(6, 3892, 3880, 3879, 3891, 3890, 3888);\n";
803cp.code() += "} // block\n";
804} // block
805cp.code() += "etiss_uint32 flags = fget_flags();\n";
806cp.code() += "etiss_coverage_count(2, 3896, 3895);\n";
807cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
808cp.code() += "etiss_coverage_count(9, 3908, 3897, 3907, 3901, 3898, 3902, 3905, 3903, 3906);\n";
809cp.code() += "} // block\n";
810} // block
811cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
812cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
813// -----------------------------------------------------------------------------
814 cp.getAffectedRegisters().add("instructionPointer", 32);
815 }
816
817 return true;
818 },
819 0,
820 [] (BitArray & ba, Instruction & instr)
821 {
822// -----------------------------------------------------------------------------
823etiss_uint8 rd = 0;
824static BitArrayRange R_rd_0(11, 7);
825rd += R_rd_0.read(ba) << 0;
826etiss_uint8 rm = 0;
827static BitArrayRange R_rm_0(14, 12);
828rm += R_rm_0.read(ba) << 0;
829etiss_uint8 rs1 = 0;
830static BitArrayRange R_rs1_0(19, 15);
831rs1 += R_rs1_0.read(ba) << 0;
832etiss_uint8 rs2 = 0;
833static BitArrayRange R_rs2_0(24, 20);
834rs2 += R_rs2_0.read(ba) << 0;
835
836// -----------------------------------------------------------------------------
837
838 std::stringstream ss;
839// -----------------------------------------------------------------------------
840ss << "fsub_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rm=" + std::to_string(rm) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
841// -----------------------------------------------------------------------------
842 return ss.str();
843 }
844);
845
846// FMUL_S ----------------------------------------------------------------------
849 "fmul_s",
850 (uint32_t) 0x10000053,
851 (uint32_t) 0xfe00007f,
852 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
853 {
854
855// -----------------------------------------------------------------------------
856
857// -----------------------------------------------------------------------------
858
859// -----------------------------------------------------------------------------
860etiss_uint8 rd = 0;
861static BitArrayRange R_rd_0(11, 7);
862rd += R_rd_0.read(ba) << 0;
863etiss_uint8 rm = 0;
864static BitArrayRange R_rm_0(14, 12);
865rm += R_rm_0.read(ba) << 0;
866etiss_uint8 rs1 = 0;
867static BitArrayRange R_rs1_0(19, 15);
868rs1 += R_rs1_0.read(ba) << 0;
869etiss_uint8 rs2 = 0;
870static BitArrayRange R_rs2_0(24, 20);
871rs2 += R_rs2_0.read(ba) << 0;
872
873// -----------------------------------------------------------------------------
874
875 {
877
878 cp.code() = std::string("//FMUL_S\n");
879
880// -----------------------------------------------------------------------------
881cp.code() += "etiss_coverage_count(1, 96);\n";
882{ // block
883cp.code() += "etiss_coverage_count(1, 1169);\n";
884cp.code() += "{ // block\n";
885cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
886cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
887cp.code() += "} // block\n";
888} // block
889{ // block
890cp.code() += "etiss_coverage_count(1, 3977);\n";
891cp.code() += "{ // block\n";
892{ // block
893cp.code() += "etiss_coverage_count(1, 3961);\n";
894cp.code() += "{ // block\n";
895cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
896cp.code() += "etiss_coverage_count(4, 3932, 3931, 3930, 3929);\n";
897cp.code() += "etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]);\n";
898cp.code() += "etiss_coverage_count(4, 3938, 3937, 3936, 3935);\n";
899cp.code() += "etiss_uint32 res = fmul_s(frs1, frs2, RV64IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) + "ULL));\n";
900cp.code() += "etiss_coverage_count(6, 3945, 3944, 3940, 3941, 3943, 3942);\n";
901cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
902cp.code() += "etiss_coverage_count(6, 3960, 3948, 3947, 3959, 3958, 3956);\n";
903cp.code() += "} // block\n";
904} // block
905cp.code() += "etiss_uint32 flags = fget_flags();\n";
906cp.code() += "etiss_coverage_count(2, 3964, 3963);\n";
907cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
908cp.code() += "etiss_coverage_count(9, 3976, 3965, 3975, 3969, 3966, 3970, 3973, 3971, 3974);\n";
909cp.code() += "} // block\n";
910} // block
911cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
912cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
913// -----------------------------------------------------------------------------
914 cp.getAffectedRegisters().add("instructionPointer", 32);
915 }
916
917 return true;
918 },
919 0,
920 [] (BitArray & ba, Instruction & instr)
921 {
922// -----------------------------------------------------------------------------
923etiss_uint8 rd = 0;
924static BitArrayRange R_rd_0(11, 7);
925rd += R_rd_0.read(ba) << 0;
926etiss_uint8 rm = 0;
927static BitArrayRange R_rm_0(14, 12);
928rm += R_rm_0.read(ba) << 0;
929etiss_uint8 rs1 = 0;
930static BitArrayRange R_rs1_0(19, 15);
931rs1 += R_rs1_0.read(ba) << 0;
932etiss_uint8 rs2 = 0;
933static BitArrayRange R_rs2_0(24, 20);
934rs2 += R_rs2_0.read(ba) << 0;
935
936// -----------------------------------------------------------------------------
937
938 std::stringstream ss;
939// -----------------------------------------------------------------------------
940ss << "fmul_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rm=" + std::to_string(rm) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
941// -----------------------------------------------------------------------------
942 return ss.str();
943 }
944);
945
946// FDIV_S ----------------------------------------------------------------------
949 "fdiv_s",
950 (uint32_t) 0x18000053,
951 (uint32_t) 0xfe00007f,
952 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
953 {
954
955// -----------------------------------------------------------------------------
956
957// -----------------------------------------------------------------------------
958
959// -----------------------------------------------------------------------------
960etiss_uint8 rd = 0;
961static BitArrayRange R_rd_0(11, 7);
962rd += R_rd_0.read(ba) << 0;
963etiss_uint8 rm = 0;
964static BitArrayRange R_rm_0(14, 12);
965rm += R_rm_0.read(ba) << 0;
966etiss_uint8 rs1 = 0;
967static BitArrayRange R_rs1_0(19, 15);
968rs1 += R_rs1_0.read(ba) << 0;
969etiss_uint8 rs2 = 0;
970static BitArrayRange R_rs2_0(24, 20);
971rs2 += R_rs2_0.read(ba) << 0;
972
973// -----------------------------------------------------------------------------
974
975 {
977
978 cp.code() = std::string("//FDIV_S\n");
979
980// -----------------------------------------------------------------------------
981cp.code() += "etiss_coverage_count(1, 97);\n";
982{ // block
983cp.code() += "etiss_coverage_count(1, 1169);\n";
984cp.code() += "{ // block\n";
985cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
986cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
987cp.code() += "} // block\n";
988} // block
989{ // block
990cp.code() += "etiss_coverage_count(1, 4045);\n";
991cp.code() += "{ // block\n";
992{ // block
993cp.code() += "etiss_coverage_count(1, 4029);\n";
994cp.code() += "{ // block\n";
995cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
996cp.code() += "etiss_coverage_count(4, 4000, 3999, 3998, 3997);\n";
997cp.code() += "etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]);\n";
998cp.code() += "etiss_coverage_count(4, 4006, 4005, 4004, 4003);\n";
999cp.code() += "etiss_uint32 res = fdiv_s(frs1, frs2, RV64IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) + "ULL));\n";
1000cp.code() += "etiss_coverage_count(6, 4013, 4012, 4008, 4009, 4011, 4010);\n";
1001cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
1002cp.code() += "etiss_coverage_count(6, 4028, 4016, 4015, 4027, 4026, 4024);\n";
1003cp.code() += "} // block\n";
1004} // block
1005cp.code() += "etiss_uint32 flags = fget_flags();\n";
1006cp.code() += "etiss_coverage_count(2, 4032, 4031);\n";
1007cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
1008cp.code() += "etiss_coverage_count(9, 4044, 4033, 4043, 4037, 4034, 4038, 4041, 4039, 4042);\n";
1009cp.code() += "} // block\n";
1010} // block
1011cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1012cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1013// -----------------------------------------------------------------------------
1014 cp.getAffectedRegisters().add("instructionPointer", 32);
1015 }
1016
1017 return true;
1018 },
1019 0,
1020 [] (BitArray & ba, Instruction & instr)
1021 {
1022// -----------------------------------------------------------------------------
1023etiss_uint8 rd = 0;
1024static BitArrayRange R_rd_0(11, 7);
1025rd += R_rd_0.read(ba) << 0;
1026etiss_uint8 rm = 0;
1027static BitArrayRange R_rm_0(14, 12);
1028rm += R_rm_0.read(ba) << 0;
1029etiss_uint8 rs1 = 0;
1030static BitArrayRange R_rs1_0(19, 15);
1031rs1 += R_rs1_0.read(ba) << 0;
1032etiss_uint8 rs2 = 0;
1033static BitArrayRange R_rs2_0(24, 20);
1034rs2 += R_rs2_0.read(ba) << 0;
1035
1036// -----------------------------------------------------------------------------
1037
1038 std::stringstream ss;
1039// -----------------------------------------------------------------------------
1040ss << "fdiv_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rm=" + std::to_string(rm) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
1041// -----------------------------------------------------------------------------
1042 return ss.str();
1043 }
1044);
1045
1046// FSQRT_S ---------------------------------------------------------------------
1049 "fsqrt_s",
1050 (uint32_t) 0x58000053,
1051 (uint32_t) 0xfff0007f,
1052 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1053 {
1054
1055// -----------------------------------------------------------------------------
1056
1057// -----------------------------------------------------------------------------
1058
1059// -----------------------------------------------------------------------------
1060etiss_uint8 rd = 0;
1061static BitArrayRange R_rd_0(11, 7);
1062rd += R_rd_0.read(ba) << 0;
1063etiss_uint8 rm = 0;
1064static BitArrayRange R_rm_0(14, 12);
1065rm += R_rm_0.read(ba) << 0;
1066etiss_uint8 rs1 = 0;
1067static BitArrayRange R_rs1_0(19, 15);
1068rs1 += R_rs1_0.read(ba) << 0;
1069
1070// -----------------------------------------------------------------------------
1071
1072 {
1074
1075 cp.code() = std::string("//FSQRT_S\n");
1076
1077// -----------------------------------------------------------------------------
1078cp.code() += "etiss_coverage_count(1, 98);\n";
1079{ // block
1080cp.code() += "etiss_coverage_count(1, 1169);\n";
1081cp.code() += "{ // block\n";
1082cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
1083cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1084cp.code() += "} // block\n";
1085} // block
1086{ // block
1087cp.code() += "etiss_coverage_count(1, 4103);\n";
1088cp.code() += "{ // block\n";
1089{ // block
1090cp.code() += "etiss_coverage_count(1, 4087);\n";
1091cp.code() += "{ // block\n";
1092cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
1093cp.code() += "etiss_coverage_count(4, 4065, 4064, 4063, 4062);\n";
1094cp.code() += "etiss_uint32 res = fsqrt_s(frs1, RV64IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) + "ULL));\n";
1095cp.code() += "etiss_coverage_count(5, 4071, 4070, 4067, 4069, 4068);\n";
1096cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
1097cp.code() += "etiss_coverage_count(6, 4086, 4074, 4073, 4085, 4084, 4082);\n";
1098cp.code() += "} // block\n";
1099} // block
1100cp.code() += "etiss_uint32 flags = fget_flags();\n";
1101cp.code() += "etiss_coverage_count(2, 4090, 4089);\n";
1102cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
1103cp.code() += "etiss_coverage_count(9, 4102, 4091, 4101, 4095, 4092, 4096, 4099, 4097, 4100);\n";
1104cp.code() += "} // block\n";
1105} // block
1106cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1107cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1108// -----------------------------------------------------------------------------
1109 cp.getAffectedRegisters().add("instructionPointer", 32);
1110 }
1111
1112 return true;
1113 },
1114 0,
1115 [] (BitArray & ba, Instruction & instr)
1116 {
1117// -----------------------------------------------------------------------------
1118etiss_uint8 rd = 0;
1119static BitArrayRange R_rd_0(11, 7);
1120rd += R_rd_0.read(ba) << 0;
1121etiss_uint8 rm = 0;
1122static BitArrayRange R_rm_0(14, 12);
1123rm += R_rm_0.read(ba) << 0;
1124etiss_uint8 rs1 = 0;
1125static BitArrayRange R_rs1_0(19, 15);
1126rs1 += R_rs1_0.read(ba) << 0;
1127
1128// -----------------------------------------------------------------------------
1129
1130 std::stringstream ss;
1131// -----------------------------------------------------------------------------
1132ss << "fsqrt_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rm=" + std::to_string(rm) + " | rs1=" + std::to_string(rs1) + "]");
1133// -----------------------------------------------------------------------------
1134 return ss.str();
1135 }
1136);
1137
1138// FSGNJ_S ---------------------------------------------------------------------
1141 "fsgnj_s",
1142 (uint32_t) 0x20000053,
1143 (uint32_t) 0xfe00707f,
1144 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1145 {
1146
1147// -----------------------------------------------------------------------------
1148
1149// -----------------------------------------------------------------------------
1150
1151// -----------------------------------------------------------------------------
1152etiss_uint8 rd = 0;
1153static BitArrayRange R_rd_0(11, 7);
1154rd += R_rd_0.read(ba) << 0;
1155etiss_uint8 rs1 = 0;
1156static BitArrayRange R_rs1_0(19, 15);
1157rs1 += R_rs1_0.read(ba) << 0;
1158etiss_uint8 rs2 = 0;
1159static BitArrayRange R_rs2_0(24, 20);
1160rs2 += R_rs2_0.read(ba) << 0;
1161
1162// -----------------------------------------------------------------------------
1163
1164 {
1166
1167 cp.code() = std::string("//FSGNJ_S\n");
1168
1169// -----------------------------------------------------------------------------
1170cp.code() += "etiss_coverage_count(1, 99);\n";
1171{ // block
1172cp.code() += "etiss_coverage_count(1, 1169);\n";
1173cp.code() += "{ // block\n";
1174cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
1175cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1176cp.code() += "} // block\n";
1177} // block
1178{ // block
1179cp.code() += "etiss_coverage_count(1, 4162);\n";
1180cp.code() += "{ // block\n";
1181{ // block
1182cp.code() += "etiss_coverage_count(1, 4161);\n";
1183cp.code() += "{ // block\n";
1184cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
1185cp.code() += "etiss_coverage_count(4, 4130, 4129, 4128, 4127);\n";
1186cp.code() += "etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]);\n";
1187cp.code() += "etiss_coverage_count(4, 4136, 4135, 4134, 4133);\n";
1188cp.code() += "etiss_uint32 res = ((((((frs2) >> (31ULL)) & 1ULL)) << 31) | ((((frs1) >> (0LL)) & 2147483647ULL)));\n";
1189cp.code() += "etiss_coverage_count(10, 4147, 4146, 4141, 4138, 4139, 4140, 4145, 4142, 4143, 4144);\n";
1190cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
1191cp.code() += "etiss_coverage_count(6, 4160, 4150, 4149, 4159, 4158, 4156);\n";
1192cp.code() += "} // block\n";
1193} // block
1194cp.code() += "} // block\n";
1195} // block
1196cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1197cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1198// -----------------------------------------------------------------------------
1199 cp.getAffectedRegisters().add("instructionPointer", 32);
1200 }
1201
1202 return true;
1203 },
1204 0,
1205 [] (BitArray & ba, Instruction & instr)
1206 {
1207// -----------------------------------------------------------------------------
1208etiss_uint8 rd = 0;
1209static BitArrayRange R_rd_0(11, 7);
1210rd += R_rd_0.read(ba) << 0;
1211etiss_uint8 rs1 = 0;
1212static BitArrayRange R_rs1_0(19, 15);
1213rs1 += R_rs1_0.read(ba) << 0;
1214etiss_uint8 rs2 = 0;
1215static BitArrayRange R_rs2_0(24, 20);
1216rs2 += R_rs2_0.read(ba) << 0;
1217
1218// -----------------------------------------------------------------------------
1219
1220 std::stringstream ss;
1221// -----------------------------------------------------------------------------
1222ss << "fsgnj_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
1223// -----------------------------------------------------------------------------
1224 return ss.str();
1225 }
1226);
1227
1228// FSGNJN_S --------------------------------------------------------------------
1231 "fsgnjn_s",
1232 (uint32_t) 0x20001053,
1233 (uint32_t) 0xfe00707f,
1234 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1235 {
1236
1237// -----------------------------------------------------------------------------
1238
1239// -----------------------------------------------------------------------------
1240
1241// -----------------------------------------------------------------------------
1242etiss_uint8 rd = 0;
1243static BitArrayRange R_rd_0(11, 7);
1244rd += R_rd_0.read(ba) << 0;
1245etiss_uint8 rs1 = 0;
1246static BitArrayRange R_rs1_0(19, 15);
1247rs1 += R_rs1_0.read(ba) << 0;
1248etiss_uint8 rs2 = 0;
1249static BitArrayRange R_rs2_0(24, 20);
1250rs2 += R_rs2_0.read(ba) << 0;
1251
1252// -----------------------------------------------------------------------------
1253
1254 {
1256
1257 cp.code() = std::string("//FSGNJN_S\n");
1258
1259// -----------------------------------------------------------------------------
1260cp.code() += "etiss_coverage_count(1, 100);\n";
1261{ // block
1262cp.code() += "etiss_coverage_count(1, 1169);\n";
1263cp.code() += "{ // block\n";
1264cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
1265cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1266cp.code() += "} // block\n";
1267} // block
1268{ // block
1269cp.code() += "etiss_coverage_count(1, 4223);\n";
1270cp.code() += "{ // block\n";
1271{ // block
1272cp.code() += "etiss_coverage_count(1, 4222);\n";
1273cp.code() += "{ // block\n";
1274cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
1275cp.code() += "etiss_coverage_count(4, 4190, 4189, 4188, 4187);\n";
1276cp.code() += "etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]);\n";
1277cp.code() += "etiss_coverage_count(4, 4196, 4195, 4194, 4193);\n";
1278cp.code() += "etiss_uint32 res = (((~((((frs2) >> (31ULL)) & 1ULL))) << 31) | ((((frs1) >> (0LL)) & 2147483647ULL)));\n";
1279cp.code() += "etiss_coverage_count(11, 4208, 4207, 4202, 4201, 4198, 4199, 4200, 4206, 4203, 4204, 4205);\n";
1280cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
1281cp.code() += "etiss_coverage_count(6, 4221, 4211, 4210, 4220, 4219, 4217);\n";
1282cp.code() += "} // block\n";
1283} // block
1284cp.code() += "} // block\n";
1285} // block
1286cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1287cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1288// -----------------------------------------------------------------------------
1289 cp.getAffectedRegisters().add("instructionPointer", 32);
1290 }
1291
1292 return true;
1293 },
1294 0,
1295 [] (BitArray & ba, Instruction & instr)
1296 {
1297// -----------------------------------------------------------------------------
1298etiss_uint8 rd = 0;
1299static BitArrayRange R_rd_0(11, 7);
1300rd += R_rd_0.read(ba) << 0;
1301etiss_uint8 rs1 = 0;
1302static BitArrayRange R_rs1_0(19, 15);
1303rs1 += R_rs1_0.read(ba) << 0;
1304etiss_uint8 rs2 = 0;
1305static BitArrayRange R_rs2_0(24, 20);
1306rs2 += R_rs2_0.read(ba) << 0;
1307
1308// -----------------------------------------------------------------------------
1309
1310 std::stringstream ss;
1311// -----------------------------------------------------------------------------
1312ss << "fsgnjn_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
1313// -----------------------------------------------------------------------------
1314 return ss.str();
1315 }
1316);
1317
1318// FSGNJX_S --------------------------------------------------------------------
1321 "fsgnjx_s",
1322 (uint32_t) 0x20002053,
1323 (uint32_t) 0xfe00707f,
1324 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1325 {
1326
1327// -----------------------------------------------------------------------------
1328
1329// -----------------------------------------------------------------------------
1330
1331// -----------------------------------------------------------------------------
1332etiss_uint8 rd = 0;
1333static BitArrayRange R_rd_0(11, 7);
1334rd += R_rd_0.read(ba) << 0;
1335etiss_uint8 rs1 = 0;
1336static BitArrayRange R_rs1_0(19, 15);
1337rs1 += R_rs1_0.read(ba) << 0;
1338etiss_uint8 rs2 = 0;
1339static BitArrayRange R_rs2_0(24, 20);
1340rs2 += R_rs2_0.read(ba) << 0;
1341
1342// -----------------------------------------------------------------------------
1343
1344 {
1346
1347 cp.code() = std::string("//FSGNJX_S\n");
1348
1349// -----------------------------------------------------------------------------
1350cp.code() += "etiss_coverage_count(1, 101);\n";
1351{ // block
1352cp.code() += "etiss_coverage_count(1, 1169);\n";
1353cp.code() += "{ // block\n";
1354cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
1355cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1356cp.code() += "} // block\n";
1357} // block
1358{ // block
1359cp.code() += "etiss_coverage_count(1, 4278);\n";
1360cp.code() += "{ // block\n";
1361{ // block
1362cp.code() += "etiss_coverage_count(1, 4277);\n";
1363cp.code() += "{ // block\n";
1364cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
1365cp.code() += "etiss_coverage_count(4, 4247, 4246, 4245, 4244);\n";
1366cp.code() += "etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]);\n";
1367cp.code() += "etiss_coverage_count(4, 4253, 4252, 4251, 4250);\n";
1368cp.code() += "etiss_uint32 res = frs1 ^ (frs2 & 2147483648ULL);\n";
1369cp.code() += "etiss_coverage_count(7, 4261, 4260, 4255, 4258, 4256, 4257, 4259);\n";
1370cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
1371cp.code() += "etiss_coverage_count(6, 4276, 4264, 4263, 4275, 4274, 4272);\n";
1372cp.code() += "} // block\n";
1373} // block
1374cp.code() += "} // block\n";
1375} // block
1376cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1377cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1378// -----------------------------------------------------------------------------
1379 cp.getAffectedRegisters().add("instructionPointer", 32);
1380 }
1381
1382 return true;
1383 },
1384 0,
1385 [] (BitArray & ba, Instruction & instr)
1386 {
1387// -----------------------------------------------------------------------------
1388etiss_uint8 rd = 0;
1389static BitArrayRange R_rd_0(11, 7);
1390rd += R_rd_0.read(ba) << 0;
1391etiss_uint8 rs1 = 0;
1392static BitArrayRange R_rs1_0(19, 15);
1393rs1 += R_rs1_0.read(ba) << 0;
1394etiss_uint8 rs2 = 0;
1395static BitArrayRange R_rs2_0(24, 20);
1396rs2 += R_rs2_0.read(ba) << 0;
1397
1398// -----------------------------------------------------------------------------
1399
1400 std::stringstream ss;
1401// -----------------------------------------------------------------------------
1402ss << "fsgnjx_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
1403// -----------------------------------------------------------------------------
1404 return ss.str();
1405 }
1406);
1407
1408// FMIN_S ----------------------------------------------------------------------
1411 "fmin_s",
1412 (uint32_t) 0x28000053,
1413 (uint32_t) 0xfe00707f,
1414 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1415 {
1416
1417// -----------------------------------------------------------------------------
1418
1419// -----------------------------------------------------------------------------
1420
1421// -----------------------------------------------------------------------------
1422etiss_uint8 rd = 0;
1423static BitArrayRange R_rd_0(11, 7);
1424rd += R_rd_0.read(ba) << 0;
1425etiss_uint8 rs1 = 0;
1426static BitArrayRange R_rs1_0(19, 15);
1427rs1 += R_rs1_0.read(ba) << 0;
1428etiss_uint8 rs2 = 0;
1429static BitArrayRange R_rs2_0(24, 20);
1430rs2 += R_rs2_0.read(ba) << 0;
1431
1432// -----------------------------------------------------------------------------
1433
1434 {
1436
1437 cp.code() = std::string("//FMIN_S\n");
1438
1439// -----------------------------------------------------------------------------
1440cp.code() += "etiss_coverage_count(1, 102);\n";
1441{ // block
1442cp.code() += "etiss_coverage_count(1, 1169);\n";
1443cp.code() += "{ // block\n";
1444cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
1445cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1446cp.code() += "} // block\n";
1447} // block
1448{ // block
1449cp.code() += "etiss_coverage_count(1, 4344);\n";
1450cp.code() += "{ // block\n";
1451{ // block
1452cp.code() += "etiss_coverage_count(1, 4328);\n";
1453cp.code() += "{ // block\n";
1454cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
1455cp.code() += "etiss_coverage_count(4, 4300, 4299, 4298, 4297);\n";
1456cp.code() += "etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]);\n";
1457cp.code() += "etiss_coverage_count(4, 4306, 4305, 4304, 4303);\n";
1458cp.code() += "etiss_uint32 res = fsel_s(frs1, frs2, 0LL);\n";
1459cp.code() += "etiss_coverage_count(5, 4312, 4311, 4308, 4309, 4310);\n";
1460cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
1461cp.code() += "etiss_coverage_count(6, 4327, 4315, 4314, 4326, 4325, 4323);\n";
1462cp.code() += "} // block\n";
1463} // block
1464cp.code() += "etiss_uint32 flags = fget_flags();\n";
1465cp.code() += "etiss_coverage_count(2, 4331, 4330);\n";
1466cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
1467cp.code() += "etiss_coverage_count(9, 4343, 4332, 4342, 4336, 4333, 4337, 4340, 4338, 4341);\n";
1468cp.code() += "} // block\n";
1469} // block
1470cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1471cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1472// -----------------------------------------------------------------------------
1473 cp.getAffectedRegisters().add("instructionPointer", 32);
1474 }
1475
1476 return true;
1477 },
1478 0,
1479 [] (BitArray & ba, Instruction & instr)
1480 {
1481// -----------------------------------------------------------------------------
1482etiss_uint8 rd = 0;
1483static BitArrayRange R_rd_0(11, 7);
1484rd += R_rd_0.read(ba) << 0;
1485etiss_uint8 rs1 = 0;
1486static BitArrayRange R_rs1_0(19, 15);
1487rs1 += R_rs1_0.read(ba) << 0;
1488etiss_uint8 rs2 = 0;
1489static BitArrayRange R_rs2_0(24, 20);
1490rs2 += R_rs2_0.read(ba) << 0;
1491
1492// -----------------------------------------------------------------------------
1493
1494 std::stringstream ss;
1495// -----------------------------------------------------------------------------
1496ss << "fmin_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
1497// -----------------------------------------------------------------------------
1498 return ss.str();
1499 }
1500);
1501
1502// FMAX_S ----------------------------------------------------------------------
1505 "fmax_s",
1506 (uint32_t) 0x28001053,
1507 (uint32_t) 0xfe00707f,
1508 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1509 {
1510
1511// -----------------------------------------------------------------------------
1512
1513// -----------------------------------------------------------------------------
1514
1515// -----------------------------------------------------------------------------
1516etiss_uint8 rd = 0;
1517static BitArrayRange R_rd_0(11, 7);
1518rd += R_rd_0.read(ba) << 0;
1519etiss_uint8 rs1 = 0;
1520static BitArrayRange R_rs1_0(19, 15);
1521rs1 += R_rs1_0.read(ba) << 0;
1522etiss_uint8 rs2 = 0;
1523static BitArrayRange R_rs2_0(24, 20);
1524rs2 += R_rs2_0.read(ba) << 0;
1525
1526// -----------------------------------------------------------------------------
1527
1528 {
1530
1531 cp.code() = std::string("//FMAX_S\n");
1532
1533// -----------------------------------------------------------------------------
1534cp.code() += "etiss_coverage_count(1, 103);\n";
1535{ // block
1536cp.code() += "etiss_coverage_count(1, 1169);\n";
1537cp.code() += "{ // block\n";
1538cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
1539cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1540cp.code() += "} // block\n";
1541} // block
1542{ // block
1543cp.code() += "etiss_coverage_count(1, 4410);\n";
1544cp.code() += "{ // block\n";
1545{ // block
1546cp.code() += "etiss_coverage_count(1, 4394);\n";
1547cp.code() += "{ // block\n";
1548cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
1549cp.code() += "etiss_coverage_count(4, 4366, 4365, 4364, 4363);\n";
1550cp.code() += "etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]);\n";
1551cp.code() += "etiss_coverage_count(4, 4372, 4371, 4370, 4369);\n";
1552cp.code() += "etiss_uint32 res = fsel_s(frs1, frs2, 1ULL);\n";
1553cp.code() += "etiss_coverage_count(5, 4378, 4377, 4374, 4375, 4376);\n";
1554cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
1555cp.code() += "etiss_coverage_count(6, 4393, 4381, 4380, 4392, 4391, 4389);\n";
1556cp.code() += "} // block\n";
1557} // block
1558cp.code() += "etiss_uint32 flags = fget_flags();\n";
1559cp.code() += "etiss_coverage_count(2, 4397, 4396);\n";
1560cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
1561cp.code() += "etiss_coverage_count(9, 4409, 4398, 4408, 4402, 4399, 4403, 4406, 4404, 4407);\n";
1562cp.code() += "} // block\n";
1563} // block
1564cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1565cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1566// -----------------------------------------------------------------------------
1567 cp.getAffectedRegisters().add("instructionPointer", 32);
1568 }
1569
1570 return true;
1571 },
1572 0,
1573 [] (BitArray & ba, Instruction & instr)
1574 {
1575// -----------------------------------------------------------------------------
1576etiss_uint8 rd = 0;
1577static BitArrayRange R_rd_0(11, 7);
1578rd += R_rd_0.read(ba) << 0;
1579etiss_uint8 rs1 = 0;
1580static BitArrayRange R_rs1_0(19, 15);
1581rs1 += R_rs1_0.read(ba) << 0;
1582etiss_uint8 rs2 = 0;
1583static BitArrayRange R_rs2_0(24, 20);
1584rs2 += R_rs2_0.read(ba) << 0;
1585
1586// -----------------------------------------------------------------------------
1587
1588 std::stringstream ss;
1589// -----------------------------------------------------------------------------
1590ss << "fmax_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
1591// -----------------------------------------------------------------------------
1592 return ss.str();
1593 }
1594);
1595
1596// FCVT_W_S --------------------------------------------------------------------
1599 "fcvt_w_s",
1600 (uint32_t) 0xc0000053,
1601 (uint32_t) 0xfff0007f,
1602 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1603 {
1604
1605// -----------------------------------------------------------------------------
1606
1607// -----------------------------------------------------------------------------
1608
1609// -----------------------------------------------------------------------------
1610etiss_uint8 rd = 0;
1611static BitArrayRange R_rd_0(11, 7);
1612rd += R_rd_0.read(ba) << 0;
1613etiss_uint8 rm = 0;
1614static BitArrayRange R_rm_0(14, 12);
1615rm += R_rm_0.read(ba) << 0;
1616etiss_uint8 rs1 = 0;
1617static BitArrayRange R_rs1_0(19, 15);
1618rs1 += R_rs1_0.read(ba) << 0;
1619
1620// -----------------------------------------------------------------------------
1621
1622 {
1624
1625 cp.code() = std::string("//FCVT_W_S\n");
1626
1627// -----------------------------------------------------------------------------
1628cp.code() += "etiss_coverage_count(1, 104);\n";
1629{ // block
1630cp.code() += "etiss_coverage_count(1, 1169);\n";
1631cp.code() += "{ // block\n";
1632cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
1633cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1634cp.code() += "} // block\n";
1635} // block
1636{ // block
1637cp.code() += "etiss_coverage_count(1, 4468);\n";
1638cp.code() += "{ // block\n";
1639cp.code() += "etiss_int32 res = 0LL;\n";
1640cp.code() += "etiss_coverage_count(2, 4413, 4412);\n";
1641{ // block
1642cp.code() += "etiss_coverage_count(1, 4438);\n";
1643cp.code() += "{ // block\n";
1644cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
1645cp.code() += "etiss_coverage_count(4, 4431, 4430, 4429, 4428);\n";
1646cp.code() += "res = fcvt_s(frs1, 0LL, " + std::to_string(rm) + "ULL);\n";
1647cp.code() += "etiss_coverage_count(6, 4437, 4432, 4436, 4433, 4434, 4435);\n";
1648cp.code() += "} // block\n";
1649} // block
1650cp.code() += "etiss_coverage_count(1, 4439);\n";
1651if ((rd % 32ULL) != 0LL) { // conditional
1652cp.code() += "etiss_coverage_count(5, 4445, 4442, 4440, 4443, 4444);\n";
1653cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = res;\n";
1654cp.code() += "etiss_coverage_count(5, 4452, 4450, 4449, 4447, 4451);\n";
1655} // conditional
1656cp.code() += "etiss_uint32 flags = fget_flags();\n";
1657cp.code() += "etiss_coverage_count(2, 4455, 4454);\n";
1658cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
1659cp.code() += "etiss_coverage_count(9, 4467, 4456, 4466, 4460, 4457, 4461, 4464, 4462, 4465);\n";
1660cp.code() += "} // block\n";
1661} // block
1662cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1663cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1664// -----------------------------------------------------------------------------
1665 cp.getAffectedRegisters().add("instructionPointer", 32);
1666 }
1667
1668 return true;
1669 },
1670 0,
1671 [] (BitArray & ba, Instruction & instr)
1672 {
1673// -----------------------------------------------------------------------------
1674etiss_uint8 rd = 0;
1675static BitArrayRange R_rd_0(11, 7);
1676rd += R_rd_0.read(ba) << 0;
1677etiss_uint8 rm = 0;
1678static BitArrayRange R_rm_0(14, 12);
1679rm += R_rm_0.read(ba) << 0;
1680etiss_uint8 rs1 = 0;
1681static BitArrayRange R_rs1_0(19, 15);
1682rs1 += R_rs1_0.read(ba) << 0;
1683
1684// -----------------------------------------------------------------------------
1685
1686 std::stringstream ss;
1687// -----------------------------------------------------------------------------
1688ss << "fcvt_w_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rm=" + std::to_string(rm) + " | rs1=" + std::to_string(rs1) + "]");
1689// -----------------------------------------------------------------------------
1690 return ss.str();
1691 }
1692);
1693
1694// FCVT_WU_S -------------------------------------------------------------------
1697 "fcvt_wu_s",
1698 (uint32_t) 0xc0100053,
1699 (uint32_t) 0xfff0007f,
1700 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1701 {
1702
1703// -----------------------------------------------------------------------------
1704
1705// -----------------------------------------------------------------------------
1706
1707// -----------------------------------------------------------------------------
1708etiss_uint8 rd = 0;
1709static BitArrayRange R_rd_0(11, 7);
1710rd += R_rd_0.read(ba) << 0;
1711etiss_uint8 rm = 0;
1712static BitArrayRange R_rm_0(14, 12);
1713rm += R_rm_0.read(ba) << 0;
1714etiss_uint8 rs1 = 0;
1715static BitArrayRange R_rs1_0(19, 15);
1716rs1 += R_rs1_0.read(ba) << 0;
1717
1718// -----------------------------------------------------------------------------
1719
1720 {
1722
1723 cp.code() = std::string("//FCVT_WU_S\n");
1724
1725// -----------------------------------------------------------------------------
1726cp.code() += "etiss_coverage_count(1, 105);\n";
1727{ // block
1728cp.code() += "etiss_coverage_count(1, 1169);\n";
1729cp.code() += "{ // block\n";
1730cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
1731cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1732cp.code() += "} // block\n";
1733} // block
1734{ // block
1735cp.code() += "etiss_coverage_count(1, 4529);\n";
1736cp.code() += "{ // block\n";
1737cp.code() += "etiss_uint32 res = 0LL;\n";
1738cp.code() += "etiss_coverage_count(2, 4471, 4470);\n";
1739{ // block
1740cp.code() += "etiss_coverage_count(1, 4496);\n";
1741cp.code() += "{ // block\n";
1742cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
1743cp.code() += "etiss_coverage_count(4, 4489, 4488, 4487, 4486);\n";
1744cp.code() += "res = fcvt_s(frs1, 1ULL, " + std::to_string(rm) + "ULL);\n";
1745cp.code() += "etiss_coverage_count(6, 4495, 4490, 4494, 4491, 4492, 4493);\n";
1746cp.code() += "} // block\n";
1747} // block
1748cp.code() += "etiss_coverage_count(1, 4497);\n";
1749if ((rd % 32ULL) != 0LL) { // conditional
1750cp.code() += "etiss_coverage_count(5, 4503, 4500, 4498, 4501, 4502);\n";
1751cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_uint64)((etiss_int32)(res));\n";
1752cp.code() += "etiss_coverage_count(7, 4513, 4508, 4507, 4505, 4512, 4510, 4509);\n";
1753} // conditional
1754cp.code() += "etiss_uint32 flags = fget_flags();\n";
1755cp.code() += "etiss_coverage_count(2, 4516, 4515);\n";
1756cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
1757cp.code() += "etiss_coverage_count(9, 4528, 4517, 4527, 4521, 4518, 4522, 4525, 4523, 4526);\n";
1758cp.code() += "} // block\n";
1759} // block
1760cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1761cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1762// -----------------------------------------------------------------------------
1763 cp.getAffectedRegisters().add("instructionPointer", 32);
1764 }
1765
1766 return true;
1767 },
1768 0,
1769 [] (BitArray & ba, Instruction & instr)
1770 {
1771// -----------------------------------------------------------------------------
1772etiss_uint8 rd = 0;
1773static BitArrayRange R_rd_0(11, 7);
1774rd += R_rd_0.read(ba) << 0;
1775etiss_uint8 rm = 0;
1776static BitArrayRange R_rm_0(14, 12);
1777rm += R_rm_0.read(ba) << 0;
1778etiss_uint8 rs1 = 0;
1779static BitArrayRange R_rs1_0(19, 15);
1780rs1 += R_rs1_0.read(ba) << 0;
1781
1782// -----------------------------------------------------------------------------
1783
1784 std::stringstream ss;
1785// -----------------------------------------------------------------------------
1786ss << "fcvt_wu_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rm=" + std::to_string(rm) + " | rs1=" + std::to_string(rs1) + "]");
1787// -----------------------------------------------------------------------------
1788 return ss.str();
1789 }
1790);
1791
1792// FEQ_S -----------------------------------------------------------------------
1795 "feq_s",
1796 (uint32_t) 0xa0002053,
1797 (uint32_t) 0xfe00707f,
1798 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1799 {
1800
1801// -----------------------------------------------------------------------------
1802
1803// -----------------------------------------------------------------------------
1804
1805// -----------------------------------------------------------------------------
1806etiss_uint8 rd = 0;
1807static BitArrayRange R_rd_0(11, 7);
1808rd += R_rd_0.read(ba) << 0;
1809etiss_uint8 rs1 = 0;
1810static BitArrayRange R_rs1_0(19, 15);
1811rs1 += R_rs1_0.read(ba) << 0;
1812etiss_uint8 rs2 = 0;
1813static BitArrayRange R_rs2_0(24, 20);
1814rs2 += R_rs2_0.read(ba) << 0;
1815
1816// -----------------------------------------------------------------------------
1817
1818 {
1820
1821 cp.code() = std::string("//FEQ_S\n");
1822
1823// -----------------------------------------------------------------------------
1824cp.code() += "etiss_coverage_count(1, 106);\n";
1825{ // block
1826cp.code() += "etiss_coverage_count(1, 1169);\n";
1827cp.code() += "{ // block\n";
1828cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
1829cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1830cp.code() += "} // block\n";
1831} // block
1832{ // block
1833cp.code() += "etiss_coverage_count(1, 4595);\n";
1834cp.code() += "{ // block\n";
1835cp.code() += "etiss_uint32 res = 0LL;\n";
1836cp.code() += "etiss_coverage_count(2, 4532, 4531);\n";
1837{ // block
1838cp.code() += "etiss_coverage_count(1, 4565);\n";
1839cp.code() += "{ // block\n";
1840cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
1841cp.code() += "etiss_coverage_count(4, 4552, 4551, 4550, 4549);\n";
1842cp.code() += "etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]);\n";
1843cp.code() += "etiss_coverage_count(4, 4558, 4557, 4556, 4555);\n";
1844cp.code() += "res = fcmp_s(frs1, frs2, 0LL);\n";
1845cp.code() += "etiss_coverage_count(6, 4564, 4559, 4563, 4560, 4561, 4562);\n";
1846cp.code() += "} // block\n";
1847} // block
1848cp.code() += "etiss_coverage_count(1, 4566);\n";
1849if ((rd % 32ULL) != 0LL) { // conditional
1850cp.code() += "etiss_coverage_count(5, 4572, 4569, 4567, 4570, 4571);\n";
1851cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = res;\n";
1852cp.code() += "etiss_coverage_count(5, 4579, 4577, 4576, 4574, 4578);\n";
1853} // conditional
1854cp.code() += "etiss_uint32 flags = fget_flags();\n";
1855cp.code() += "etiss_coverage_count(2, 4582, 4581);\n";
1856cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
1857cp.code() += "etiss_coverage_count(9, 4594, 4583, 4593, 4587, 4584, 4588, 4591, 4589, 4592);\n";
1858cp.code() += "} // block\n";
1859} // block
1860cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1861cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1862// -----------------------------------------------------------------------------
1863 cp.getAffectedRegisters().add("instructionPointer", 32);
1864 }
1865
1866 return true;
1867 },
1868 0,
1869 [] (BitArray & ba, Instruction & instr)
1870 {
1871// -----------------------------------------------------------------------------
1872etiss_uint8 rd = 0;
1873static BitArrayRange R_rd_0(11, 7);
1874rd += R_rd_0.read(ba) << 0;
1875etiss_uint8 rs1 = 0;
1876static BitArrayRange R_rs1_0(19, 15);
1877rs1 += R_rs1_0.read(ba) << 0;
1878etiss_uint8 rs2 = 0;
1879static BitArrayRange R_rs2_0(24, 20);
1880rs2 += R_rs2_0.read(ba) << 0;
1881
1882// -----------------------------------------------------------------------------
1883
1884 std::stringstream ss;
1885// -----------------------------------------------------------------------------
1886ss << "feq_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
1887// -----------------------------------------------------------------------------
1888 return ss.str();
1889 }
1890);
1891
1892// FLT_S -----------------------------------------------------------------------
1895 "flt_s",
1896 (uint32_t) 0xa0001053,
1897 (uint32_t) 0xfe00707f,
1898 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1899 {
1900
1901// -----------------------------------------------------------------------------
1902
1903// -----------------------------------------------------------------------------
1904
1905// -----------------------------------------------------------------------------
1906etiss_uint8 rd = 0;
1907static BitArrayRange R_rd_0(11, 7);
1908rd += R_rd_0.read(ba) << 0;
1909etiss_uint8 rs1 = 0;
1910static BitArrayRange R_rs1_0(19, 15);
1911rs1 += R_rs1_0.read(ba) << 0;
1912etiss_uint8 rs2 = 0;
1913static BitArrayRange R_rs2_0(24, 20);
1914rs2 += R_rs2_0.read(ba) << 0;
1915
1916// -----------------------------------------------------------------------------
1917
1918 {
1920
1921 cp.code() = std::string("//FLT_S\n");
1922
1923// -----------------------------------------------------------------------------
1924cp.code() += "etiss_coverage_count(1, 107);\n";
1925{ // block
1926cp.code() += "etiss_coverage_count(1, 1169);\n";
1927cp.code() += "{ // block\n";
1928cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
1929cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1930cp.code() += "} // block\n";
1931} // block
1932{ // block
1933cp.code() += "etiss_coverage_count(1, 4661);\n";
1934cp.code() += "{ // block\n";
1935cp.code() += "etiss_uint32 res = 0LL;\n";
1936cp.code() += "etiss_coverage_count(2, 4598, 4597);\n";
1937{ // block
1938cp.code() += "etiss_coverage_count(1, 4631);\n";
1939cp.code() += "{ // block\n";
1940cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
1941cp.code() += "etiss_coverage_count(4, 4618, 4617, 4616, 4615);\n";
1942cp.code() += "etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]);\n";
1943cp.code() += "etiss_coverage_count(4, 4624, 4623, 4622, 4621);\n";
1944cp.code() += "res = fcmp_s(frs1, frs2, 2ULL);\n";
1945cp.code() += "etiss_coverage_count(6, 4630, 4625, 4629, 4626, 4627, 4628);\n";
1946cp.code() += "} // block\n";
1947} // block
1948cp.code() += "etiss_coverage_count(1, 4632);\n";
1949if ((rd % 32ULL) != 0LL) { // conditional
1950cp.code() += "etiss_coverage_count(5, 4638, 4635, 4633, 4636, 4637);\n";
1951cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = res;\n";
1952cp.code() += "etiss_coverage_count(5, 4645, 4643, 4642, 4640, 4644);\n";
1953} // conditional
1954cp.code() += "etiss_uint32 flags = fget_flags();\n";
1955cp.code() += "etiss_coverage_count(2, 4648, 4647);\n";
1956cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
1957cp.code() += "etiss_coverage_count(9, 4660, 4649, 4659, 4653, 4650, 4654, 4657, 4655, 4658);\n";
1958cp.code() += "} // block\n";
1959} // block
1960cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
1961cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
1962// -----------------------------------------------------------------------------
1963 cp.getAffectedRegisters().add("instructionPointer", 32);
1964 }
1965
1966 return true;
1967 },
1968 0,
1969 [] (BitArray & ba, Instruction & instr)
1970 {
1971// -----------------------------------------------------------------------------
1972etiss_uint8 rd = 0;
1973static BitArrayRange R_rd_0(11, 7);
1974rd += R_rd_0.read(ba) << 0;
1975etiss_uint8 rs1 = 0;
1976static BitArrayRange R_rs1_0(19, 15);
1977rs1 += R_rs1_0.read(ba) << 0;
1978etiss_uint8 rs2 = 0;
1979static BitArrayRange R_rs2_0(24, 20);
1980rs2 += R_rs2_0.read(ba) << 0;
1981
1982// -----------------------------------------------------------------------------
1983
1984 std::stringstream ss;
1985// -----------------------------------------------------------------------------
1986ss << "flt_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
1987// -----------------------------------------------------------------------------
1988 return ss.str();
1989 }
1990);
1991
1992// FLE_S -----------------------------------------------------------------------
1995 "fle_s",
1996 (uint32_t) 0xa0000053,
1997 (uint32_t) 0xfe00707f,
1998 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
1999 {
2000
2001// -----------------------------------------------------------------------------
2002
2003// -----------------------------------------------------------------------------
2004
2005// -----------------------------------------------------------------------------
2006etiss_uint8 rd = 0;
2007static BitArrayRange R_rd_0(11, 7);
2008rd += R_rd_0.read(ba) << 0;
2009etiss_uint8 rs1 = 0;
2010static BitArrayRange R_rs1_0(19, 15);
2011rs1 += R_rs1_0.read(ba) << 0;
2012etiss_uint8 rs2 = 0;
2013static BitArrayRange R_rs2_0(24, 20);
2014rs2 += R_rs2_0.read(ba) << 0;
2015
2016// -----------------------------------------------------------------------------
2017
2018 {
2020
2021 cp.code() = std::string("//FLE_S\n");
2022
2023// -----------------------------------------------------------------------------
2024cp.code() += "etiss_coverage_count(1, 108);\n";
2025{ // block
2026cp.code() += "etiss_coverage_count(1, 1169);\n";
2027cp.code() += "{ // block\n";
2028cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
2029cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2030cp.code() += "} // block\n";
2031} // block
2032{ // block
2033cp.code() += "etiss_coverage_count(1, 4727);\n";
2034cp.code() += "{ // block\n";
2035cp.code() += "etiss_uint32 res = 0LL;\n";
2036cp.code() += "etiss_coverage_count(2, 4664, 4663);\n";
2037{ // block
2038cp.code() += "etiss_coverage_count(1, 4697);\n";
2039cp.code() += "{ // block\n";
2040cp.code() += "etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]);\n";
2041cp.code() += "etiss_coverage_count(4, 4684, 4683, 4682, 4681);\n";
2042cp.code() += "etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs2) + "ULL]);\n";
2043cp.code() += "etiss_coverage_count(4, 4690, 4689, 4688, 4687);\n";
2044cp.code() += "res = fcmp_s(frs1, frs2, 1ULL);\n";
2045cp.code() += "etiss_coverage_count(6, 4696, 4691, 4695, 4692, 4693, 4694);\n";
2046cp.code() += "} // block\n";
2047} // block
2048cp.code() += "etiss_coverage_count(1, 4698);\n";
2049if ((rd % 32ULL) != 0LL) { // conditional
2050cp.code() += "etiss_coverage_count(5, 4704, 4701, 4699, 4702, 4703);\n";
2051cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = res;\n";
2052cp.code() += "etiss_coverage_count(5, 4711, 4709, 4708, 4706, 4710);\n";
2053} // conditional
2054cp.code() += "etiss_uint32 flags = fget_flags();\n";
2055cp.code() += "etiss_coverage_count(2, 4714, 4713);\n";
2056cp.code() += "((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
2057cp.code() += "etiss_coverage_count(9, 4726, 4715, 4725, 4719, 4716, 4720, 4723, 4721, 4724);\n";
2058cp.code() += "} // block\n";
2059} // block
2060cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2061cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2062// -----------------------------------------------------------------------------
2063 cp.getAffectedRegisters().add("instructionPointer", 32);
2064 }
2065
2066 return true;
2067 },
2068 0,
2069 [] (BitArray & ba, Instruction & instr)
2070 {
2071// -----------------------------------------------------------------------------
2072etiss_uint8 rd = 0;
2073static BitArrayRange R_rd_0(11, 7);
2074rd += R_rd_0.read(ba) << 0;
2075etiss_uint8 rs1 = 0;
2076static BitArrayRange R_rs1_0(19, 15);
2077rs1 += R_rs1_0.read(ba) << 0;
2078etiss_uint8 rs2 = 0;
2079static BitArrayRange R_rs2_0(24, 20);
2080rs2 += R_rs2_0.read(ba) << 0;
2081
2082// -----------------------------------------------------------------------------
2083
2084 std::stringstream ss;
2085// -----------------------------------------------------------------------------
2086ss << "fle_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + " | rs2=" + std::to_string(rs2) + "]");
2087// -----------------------------------------------------------------------------
2088 return ss.str();
2089 }
2090);
2091
2092// FCLASS_S --------------------------------------------------------------------
2095 "fclass_s",
2096 (uint32_t) 0xe0001053,
2097 (uint32_t) 0xfff0707f,
2098 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2099 {
2100
2101// -----------------------------------------------------------------------------
2102
2103// -----------------------------------------------------------------------------
2104
2105// -----------------------------------------------------------------------------
2106etiss_uint8 rd = 0;
2107static BitArrayRange R_rd_0(11, 7);
2108rd += R_rd_0.read(ba) << 0;
2109etiss_uint8 rs1 = 0;
2110static BitArrayRange R_rs1_0(19, 15);
2111rs1 += R_rs1_0.read(ba) << 0;
2112
2113// -----------------------------------------------------------------------------
2114
2115 {
2117
2118 cp.code() = std::string("//FCLASS_S\n");
2119
2120// -----------------------------------------------------------------------------
2121cp.code() += "etiss_coverage_count(1, 109);\n";
2122{ // block
2123cp.code() += "etiss_coverage_count(1, 1169);\n";
2124cp.code() += "{ // block\n";
2125cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
2126cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2127cp.code() += "} // block\n";
2128} // block
2129{ // block
2130cp.code() += "etiss_coverage_count(1, 4762);\n";
2131cp.code() += "{ // block\n";
2132cp.code() += "etiss_uint32 res = 0LL;\n";
2133cp.code() += "etiss_coverage_count(2, 4730, 4729);\n";
2134cp.code() += "res = fclass_s(unbox_s(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]));\n";
2135cp.code() += "etiss_coverage_count(6, 4747, 4741, 4746, 4745, 4744, 4743);\n";
2136cp.code() += "etiss_coverage_count(1, 4748);\n";
2137if ((rd % 32ULL) != 0LL) { // conditional
2138cp.code() += "etiss_coverage_count(5, 4754, 4751, 4749, 4752, 4753);\n";
2139cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = res;\n";
2140cp.code() += "etiss_coverage_count(5, 4761, 4759, 4758, 4756, 4760);\n";
2141} // conditional
2142cp.code() += "} // block\n";
2143} // block
2144cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2145cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2146// -----------------------------------------------------------------------------
2147 cp.getAffectedRegisters().add("instructionPointer", 32);
2148 }
2149
2150 return true;
2151 },
2152 0,
2153 [] (BitArray & ba, Instruction & instr)
2154 {
2155// -----------------------------------------------------------------------------
2156etiss_uint8 rd = 0;
2157static BitArrayRange R_rd_0(11, 7);
2158rd += R_rd_0.read(ba) << 0;
2159etiss_uint8 rs1 = 0;
2160static BitArrayRange R_rs1_0(19, 15);
2161rs1 += R_rs1_0.read(ba) << 0;
2162
2163// -----------------------------------------------------------------------------
2164
2165 std::stringstream ss;
2166// -----------------------------------------------------------------------------
2167ss << "fclass_s" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + "]");
2168// -----------------------------------------------------------------------------
2169 return ss.str();
2170 }
2171);
2172
2173// FCVT_S_W --------------------------------------------------------------------
2176 "fcvt_s_w",
2177 (uint32_t) 0xd0000053,
2178 (uint32_t) 0xfff0007f,
2179 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2180 {
2181
2182// -----------------------------------------------------------------------------
2183
2184// -----------------------------------------------------------------------------
2185
2186// -----------------------------------------------------------------------------
2187etiss_uint8 rd = 0;
2188static BitArrayRange R_rd_0(11, 7);
2189rd += R_rd_0.read(ba) << 0;
2190etiss_uint8 rm = 0;
2191static BitArrayRange R_rm_0(14, 12);
2192rm += R_rm_0.read(ba) << 0;
2193etiss_uint8 rs1 = 0;
2194static BitArrayRange R_rs1_0(19, 15);
2195rs1 += R_rs1_0.read(ba) << 0;
2196
2197// -----------------------------------------------------------------------------
2198
2199 {
2201
2202 cp.code() = std::string("//FCVT_S_W\n");
2203
2204// -----------------------------------------------------------------------------
2205cp.code() += "etiss_coverage_count(1, 110);\n";
2206{ // block
2207cp.code() += "etiss_coverage_count(1, 1169);\n";
2208cp.code() += "{ // block\n";
2209cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
2210cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2211cp.code() += "} // block\n";
2212} // block
2213{ // block
2214cp.code() += "etiss_coverage_count(1, 4807);\n";
2215cp.code() += "{ // block\n";
2216{ // block
2217cp.code() += "etiss_coverage_count(1, 4806);\n";
2218cp.code() += "{ // block\n";
2219cp.code() += "etiss_uint32 res = fcvt_s((etiss_uint64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL]), 2ULL, " + std::to_string(rm) + "ULL);\n";
2220cp.code() += "etiss_coverage_count(8, 4790, 4789, 4786, 4785, 4784, 4782, 4787, 4788);\n";
2221cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
2222cp.code() += "etiss_coverage_count(6, 4805, 4793, 4792, 4804, 4803, 4801);\n";
2223cp.code() += "} // block\n";
2224} // block
2225cp.code() += "} // block\n";
2226} // block
2227cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2228cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2229// -----------------------------------------------------------------------------
2230 cp.getAffectedRegisters().add("instructionPointer", 32);
2231 }
2232
2233 return true;
2234 },
2235 0,
2236 [] (BitArray & ba, Instruction & instr)
2237 {
2238// -----------------------------------------------------------------------------
2239etiss_uint8 rd = 0;
2240static BitArrayRange R_rd_0(11, 7);
2241rd += R_rd_0.read(ba) << 0;
2242etiss_uint8 rm = 0;
2243static BitArrayRange R_rm_0(14, 12);
2244rm += R_rm_0.read(ba) << 0;
2245etiss_uint8 rs1 = 0;
2246static BitArrayRange R_rs1_0(19, 15);
2247rs1 += R_rs1_0.read(ba) << 0;
2248
2249// -----------------------------------------------------------------------------
2250
2251 std::stringstream ss;
2252// -----------------------------------------------------------------------------
2253ss << "fcvt_s_w" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rm=" + std::to_string(rm) + " | rs1=" + std::to_string(rs1) + "]");
2254// -----------------------------------------------------------------------------
2255 return ss.str();
2256 }
2257);
2258
2259// FCVT_S_WU -------------------------------------------------------------------
2262 "fcvt_s_wu",
2263 (uint32_t) 0xd0100053,
2264 (uint32_t) 0xfff0007f,
2265 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2266 {
2267
2268// -----------------------------------------------------------------------------
2269
2270// -----------------------------------------------------------------------------
2271
2272// -----------------------------------------------------------------------------
2273etiss_uint8 rd = 0;
2274static BitArrayRange R_rd_0(11, 7);
2275rd += R_rd_0.read(ba) << 0;
2276etiss_uint8 rm = 0;
2277static BitArrayRange R_rm_0(14, 12);
2278rm += R_rm_0.read(ba) << 0;
2279etiss_uint8 rs1 = 0;
2280static BitArrayRange R_rs1_0(19, 15);
2281rs1 += R_rs1_0.read(ba) << 0;
2282
2283// -----------------------------------------------------------------------------
2284
2285 {
2287
2288 cp.code() = std::string("//FCVT_S_WU\n");
2289
2290// -----------------------------------------------------------------------------
2291cp.code() += "etiss_coverage_count(1, 111);\n";
2292{ // block
2293cp.code() += "etiss_coverage_count(1, 1169);\n";
2294cp.code() += "{ // block\n";
2295cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
2296cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2297cp.code() += "} // block\n";
2298} // block
2299{ // block
2300cp.code() += "etiss_coverage_count(1, 4852);\n";
2301cp.code() += "{ // block\n";
2302{ // block
2303cp.code() += "etiss_coverage_count(1, 4851);\n";
2304cp.code() += "{ // block\n";
2305cp.code() += "etiss_uint32 res = fcvt_s((etiss_uint64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL]), 3ULL, " + std::to_string(rm) + "ULL);\n";
2306cp.code() += "etiss_coverage_count(8, 4835, 4834, 4831, 4830, 4829, 4827, 4832, 4833);\n";
2307cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(res);\n";
2308cp.code() += "etiss_coverage_count(6, 4850, 4838, 4837, 4849, 4848, 4846);\n";
2309cp.code() += "} // block\n";
2310} // block
2311cp.code() += "} // block\n";
2312} // block
2313cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2314cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2315// -----------------------------------------------------------------------------
2316 cp.getAffectedRegisters().add("instructionPointer", 32);
2317 }
2318
2319 return true;
2320 },
2321 0,
2322 [] (BitArray & ba, Instruction & instr)
2323 {
2324// -----------------------------------------------------------------------------
2325etiss_uint8 rd = 0;
2326static BitArrayRange R_rd_0(11, 7);
2327rd += R_rd_0.read(ba) << 0;
2328etiss_uint8 rm = 0;
2329static BitArrayRange R_rm_0(14, 12);
2330rm += R_rm_0.read(ba) << 0;
2331etiss_uint8 rs1 = 0;
2332static BitArrayRange R_rs1_0(19, 15);
2333rs1 += R_rs1_0.read(ba) << 0;
2334
2335// -----------------------------------------------------------------------------
2336
2337 std::stringstream ss;
2338// -----------------------------------------------------------------------------
2339ss << "fcvt_s_wu" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rm=" + std::to_string(rm) + " | rs1=" + std::to_string(rs1) + "]");
2340// -----------------------------------------------------------------------------
2341 return ss.str();
2342 }
2343);
2344
2345// FMV_X_W ---------------------------------------------------------------------
2348 "fmv_x_w",
2349 (uint32_t) 0xe0000053,
2350 (uint32_t) 0xfff0707f,
2351 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2352 {
2353
2354// -----------------------------------------------------------------------------
2355
2356// -----------------------------------------------------------------------------
2357
2358// -----------------------------------------------------------------------------
2359etiss_uint8 rd = 0;
2360static BitArrayRange R_rd_0(11, 7);
2361rd += R_rd_0.read(ba) << 0;
2362etiss_uint8 rs1 = 0;
2363static BitArrayRange R_rs1_0(19, 15);
2364rs1 += R_rs1_0.read(ba) << 0;
2365
2366// -----------------------------------------------------------------------------
2367
2368 {
2370
2371 cp.code() = std::string("//FMV_X_W\n");
2372
2373// -----------------------------------------------------------------------------
2374cp.code() += "etiss_coverage_count(1, 112);\n";
2375{ // block
2376cp.code() += "etiss_coverage_count(1, 1169);\n";
2377cp.code() += "{ // block\n";
2378cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
2379cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2380cp.code() += "} // block\n";
2381} // block
2382{ // block
2383cp.code() += "etiss_coverage_count(1, 4873);\n";
2384cp.code() += "{ // block\n";
2385cp.code() += "etiss_coverage_count(1, 4853);\n";
2386if ((rd % 32ULL) != 0LL) { // conditional
2387cp.code() += "etiss_coverage_count(5, 4859, 4856, 4854, 4857, 4858);\n";
2388cp.code() += "*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) + "ULL] = (etiss_uint64)((etiss_int32)(((RV64IMACFD*)cpu)->F[" + std::to_string(rs1) + "ULL]));\n";
2389cp.code() += "etiss_coverage_count(8, 4872, 4864, 4863, 4861, 4871, 4869, 4867, 4866);\n";
2390} // conditional
2391cp.code() += "} // block\n";
2392} // block
2393cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2394cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2395// -----------------------------------------------------------------------------
2396 cp.getAffectedRegisters().add("instructionPointer", 32);
2397 }
2398
2399 return true;
2400 },
2401 0,
2402 [] (BitArray & ba, Instruction & instr)
2403 {
2404// -----------------------------------------------------------------------------
2405etiss_uint8 rd = 0;
2406static BitArrayRange R_rd_0(11, 7);
2407rd += R_rd_0.read(ba) << 0;
2408etiss_uint8 rs1 = 0;
2409static BitArrayRange R_rs1_0(19, 15);
2410rs1 += R_rs1_0.read(ba) << 0;
2411
2412// -----------------------------------------------------------------------------
2413
2414 std::stringstream ss;
2415// -----------------------------------------------------------------------------
2416ss << "fmv_x_w" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + "]");
2417// -----------------------------------------------------------------------------
2418 return ss.str();
2419 }
2420);
2421
2422// FMV_W_X ---------------------------------------------------------------------
2425 "fmv_w_x",
2426 (uint32_t) 0xf0000053,
2427 (uint32_t) 0xfff0707f,
2428 [] (BitArray & ba,etiss::CodeSet & cs,InstructionContext & ic)
2429 {
2430
2431// -----------------------------------------------------------------------------
2432
2433// -----------------------------------------------------------------------------
2434
2435// -----------------------------------------------------------------------------
2436etiss_uint8 rd = 0;
2437static BitArrayRange R_rd_0(11, 7);
2438rd += R_rd_0.read(ba) << 0;
2439etiss_uint8 rs1 = 0;
2440static BitArrayRange R_rs1_0(19, 15);
2441rs1 += R_rs1_0.read(ba) << 0;
2442
2443// -----------------------------------------------------------------------------
2444
2445 {
2447
2448 cp.code() = std::string("//FMV_W_X\n");
2449
2450// -----------------------------------------------------------------------------
2451cp.code() += "etiss_coverage_count(1, 113);\n";
2452{ // block
2453cp.code() += "etiss_coverage_count(1, 1169);\n";
2454cp.code() += "{ // block\n";
2455cp.code() += "cpu->nextPc = " + std::to_string(ic.current_address_ + 4) + "ULL;\n";
2456cp.code() += "etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2457cp.code() += "} // block\n";
2458} // block
2459{ // block
2460cp.code() += "etiss_coverage_count(1, 4907);\n";
2461cp.code() += "{ // block\n";
2462{ // block
2463cp.code() += "etiss_coverage_count(1, 4906);\n";
2464cp.code() += "{ // block\n";
2465cp.code() += "((RV64IMACFD*)cpu)->F[" + std::to_string(rd) + "ULL] = -4294967296LL | (etiss_uint64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) + "ULL]);\n";
2466cp.code() += "etiss_coverage_count(8, 4905, 4889, 4888, 4904, 4903, 4901, 4900, 4898);\n";
2467cp.code() += "} // block\n";
2468} // block
2469cp.code() += "} // block\n";
2470} // block
2471cp.code() += "instr_exit_" + std::to_string(ic.current_address_) + ":\n";
2472cp.code() += "cpu->instructionPointer = cpu->nextPc;\n";
2473// -----------------------------------------------------------------------------
2474 cp.getAffectedRegisters().add("instructionPointer", 32);
2475 }
2476
2477 return true;
2478 },
2479 0,
2480 [] (BitArray & ba, Instruction & instr)
2481 {
2482// -----------------------------------------------------------------------------
2483etiss_uint8 rd = 0;
2484static BitArrayRange R_rd_0(11, 7);
2485rd += R_rd_0.read(ba) << 0;
2486etiss_uint8 rs1 = 0;
2487static BitArrayRange R_rs1_0(19, 15);
2488rs1 += R_rs1_0.read(ba) << 0;
2489
2490// -----------------------------------------------------------------------------
2491
2492 std::stringstream ss;
2493// -----------------------------------------------------------------------------
2494ss << "fmv_w_x" << " # " << ba << (" [rd=" + std::to_string(rd) + " | rs1=" + std::to_string(rs1) + "]");
2495// -----------------------------------------------------------------------------
2496 return ss.str();
2497 }
2498);
etiss::instr::InstructionGroup ISA32_RV64IMACFD("ISA32_RV64IMACFD", 32)
static InstructionDefinition fcvt_s_wu_rd_rm_rs1(ISA32_RV64IMACFD, "fcvt_s_wu",(uint32_t) 0xd0100053,(uint32_t) 0xfff0007f, [](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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FCVT_S_WU\n");cp.code()+="etiss_coverage_count(1, 111);\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, 4852);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 4851);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = fcvt_s((etiss_uint64)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]), 3ULL, "+std::to_string(rm)+"ULL);\n";cp.code()+="etiss_coverage_count(8, 4835, 4834, 4831, 4830, 4829, 4827, 4832, 4833);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 4850, 4838, 4837, 4849, 4848, 4846);\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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "fcvt_s_wu"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition fmin_s_rd_rs1_rs2(ISA32_RV64IMACFD, "fmin_s",(uint32_t) 0x28000053,(uint32_t) 0xfe00707f, [](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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FMIN_S\n");cp.code()+="etiss_coverage_count(1, 102);\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, 4344);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 4328);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4300, 4299, 4298, 4297);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4306, 4305, 4304, 4303);\n";cp.code()+="etiss_uint32 res = fsel_s(frs1, frs2, 0LL);\n";cp.code()+="etiss_coverage_count(5, 4312, 4311, 4308, 4309, 4310);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 4327, 4315, 4314, 4326, 4325, 4323);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 4331, 4330);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 4343, 4332, 4342, 4336, 4333, 4337, 4340, 4338, 4341);\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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fmin_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fadd_s_rd_rm_rs1_rs2(ISA32_RV64IMACFD, "fadd_s",(uint32_t) 0x000053,(uint32_t) 0xfe00007f, [](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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FADD_S\n");cp.code()+="etiss_coverage_count(1, 94);\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, 3841);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 3825);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 3796, 3795, 3794, 3793);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 3802, 3801, 3800, 3799);\n";cp.code()+="etiss_uint32 res = fadd_s(frs1, frs2, RV64IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="etiss_coverage_count(6, 3809, 3808, 3804, 3805, 3807, 3806);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 3824, 3812, 3811, 3823, 3822, 3820);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 3828, 3827);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 3840, 3829, 3839, 3833, 3830, 3834, 3837, 3835, 3838);\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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fadd_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition flt_s_rd_rs1_rs2(ISA32_RV64IMACFD, "flt_s",(uint32_t) 0xa0001053,(uint32_t) 0xfe00707f, [](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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FLT_S\n");cp.code()+="etiss_coverage_count(1, 107);\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, 4661);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = 0LL;\n";cp.code()+="etiss_coverage_count(2, 4598, 4597);\n";{ cp.code()+="etiss_coverage_count(1, 4631);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4618, 4617, 4616, 4615);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4624, 4623, 4622, 4621);\n";cp.code()+="res = fcmp_s(frs1, frs2, 2ULL);\n";cp.code()+="etiss_coverage_count(6, 4630, 4625, 4629, 4626, 4627, 4628);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 4632);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 4638, 4635, 4633, 4636, 4637);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = res;\n";cp.code()+="etiss_coverage_count(5, 4645, 4643, 4642, 4640, 4644);\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 4648, 4647);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 4660, 4649, 4659, 4653, 4650, 4654, 4657, 4655, 4658);\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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "flt_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fclass_s_rd_rs1(ISA32_RV64IMACFD, "fclass_s",(uint32_t) 0xe0001053,(uint32_t) 0xfff0707f, [](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;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FCLASS_S\n");cp.code()+="etiss_coverage_count(1, 109);\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, 4762);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = 0LL;\n";cp.code()+="etiss_coverage_count(2, 4730, 4729);\n";cp.code()+="res = fclass_s(unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]));\n";cp.code()+="etiss_coverage_count(6, 4747, 4741, 4746, 4745, 4744, 4743);\n";cp.code()+="etiss_coverage_count(1, 4748);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 4754, 4751, 4749, 4752, 4753);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = res;\n";cp.code()+="etiss_coverage_count(5, 4761, 4759, 4758, 4756, 4760);\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;std::stringstream ss;ss<< "fclass_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition fmsub_s_rd_rm_rs1_rs2_rs3(ISA32_RV64IMACFD, "fmsub_s",(uint32_t) 0x000047,(uint32_t) 0x600007f, [](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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FMSUB_S\n");cp.code()+="etiss_coverage_count(1, 91);\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, 3613);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 3597);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = fmadd_s(unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]), unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]), unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs3)+"ULL]), 1ULL, RV64IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="etiss_coverage_count(14, 3581, 3580, 3568, 3567, 3566, 3572, 3571, 3570, 3576, 3575, 3574, 3577, 3579, 3578);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 3596, 3584, 3583, 3595, 3594, 3592);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 3600, 3599);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 3612, 3601, 3611, 3605, 3602, 3606, 3609, 3607, 3610);\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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;std::stringstream ss;ss<< "fmsub_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+" | rs3="+std::to_string(rs3)+"]");return ss.str();})
static InstructionDefinition fcvt_wu_s_rd_rm_rs1(ISA32_RV64IMACFD, "fcvt_wu_s",(uint32_t) 0xc0100053,(uint32_t) 0xfff0007f, [](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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FCVT_WU_S\n");cp.code()+="etiss_coverage_count(1, 105);\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, 4529);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = 0LL;\n";cp.code()+="etiss_coverage_count(2, 4471, 4470);\n";{ cp.code()+="etiss_coverage_count(1, 4496);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4489, 4488, 4487, 4486);\n";cp.code()+="res = fcvt_s(frs1, 1ULL, "+std::to_string(rm)+"ULL);\n";cp.code()+="etiss_coverage_count(6, 4495, 4490, 4494, 4491, 4492, 4493);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 4497);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 4503, 4500, 4498, 4501, 4502);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)((etiss_int32)(res));\n";cp.code()+="etiss_coverage_count(7, 4513, 4508, 4507, 4505, 4512, 4510, 4509);\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 4516, 4515);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 4528, 4517, 4527, 4521, 4518, 4522, 4525, 4523, 4526);\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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "fcvt_wu_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition fsgnjn_s_rd_rs1_rs2(ISA32_RV64IMACFD, "fsgnjn_s",(uint32_t) 0x20001053,(uint32_t) 0xfe00707f, [](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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FSGNJN_S\n");cp.code()+="etiss_coverage_count(1, 100);\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, 4223);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 4222);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4190, 4189, 4188, 4187);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4196, 4195, 4194, 4193);\n";cp.code()+="etiss_uint32 res = (((~((((frs2) >> (31ULL)) & 1ULL))) << 31) | ((((frs1) >> (0LL)) & 2147483647ULL)));\n";cp.code()+="etiss_coverage_count(11, 4208, 4207, 4202, 4201, 4198, 4199, 4200, 4206, 4203, 4204, 4205);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 4221, 4211, 4210, 4220, 4219, 4217);\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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fsgnjn_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fsw_imm_rs1_rs2(ISA32_RV64IMACFD, "fsw",(uint32_t) 0x002027,(uint32_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_0(11, 7);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;static BitArrayRange R_imm_5(31, 25);imm+=R_imm_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FSW\n");cp.code()+="etiss_coverage_count(1, 89);\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, 3471);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint64 offs = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + "+std::to_string(((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL;\n";cp.code()+="etiss_coverage_count(7, 3461, 3460, 3456, 3455, 3453, 3459, 3457);\n";cp.code()+="etiss_uint32 mem_val_0;\n";cp.code()+="mem_val_0 = (etiss_uint32)(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_coverage_count(6, 3470, 3464, 3463, 3469, 3467, 3466);\n";cp.code()+="cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // conditional\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} { CodePart &cp=cs.append(CodePart::APPENDEDRETURNINGREQUIRED);cp.code()=std::string("//FSW\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_0(11, 7);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;static BitArrayRange R_imm_5(31, 25);imm+=R_imm_5.read(ba)<< 5;std::stringstream ss;ss<< "fsw"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fcvt_w_s_rd_rm_rs1(ISA32_RV64IMACFD, "fcvt_w_s",(uint32_t) 0xc0000053,(uint32_t) 0xfff0007f, [](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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FCVT_W_S\n");cp.code()+="etiss_coverage_count(1, 104);\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, 4468);\n";cp.code()+="{ // block\n";cp.code()+="etiss_int32 res = 0LL;\n";cp.code()+="etiss_coverage_count(2, 4413, 4412);\n";{ cp.code()+="etiss_coverage_count(1, 4438);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4431, 4430, 4429, 4428);\n";cp.code()+="res = fcvt_s(frs1, 0LL, "+std::to_string(rm)+"ULL);\n";cp.code()+="etiss_coverage_count(6, 4437, 4432, 4436, 4433, 4434, 4435);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 4439);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 4445, 4442, 4440, 4443, 4444);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = res;\n";cp.code()+="etiss_coverage_count(5, 4452, 4450, 4449, 4447, 4451);\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 4455, 4454);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 4467, 4456, 4466, 4460, 4457, 4461, 4464, 4462, 4465);\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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "fcvt_w_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition fnmsub_s_rd_rm_rs1_rs2_rs3(ISA32_RV64IMACFD, "fnmsub_s",(uint32_t) 0x00004b,(uint32_t) 0x600007f, [](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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FNMSUB_S\n");cp.code()+="etiss_coverage_count(1, 93);\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, 3773);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 3757);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 3720, 3719, 3718, 3717);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 3726, 3725, 3724, 3723);\n";cp.code()+="etiss_uint32 frs3 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs3)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 3732, 3731, 3730, 3729);\n";cp.code()+="etiss_uint32 res = fmadd_s(frs1, frs2, frs3, 3ULL, RV64IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="etiss_coverage_count(8, 3741, 3740, 3734, 3735, 3736, 3737, 3739, 3738);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 3756, 3744, 3743, 3755, 3754, 3752);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 3760, 3759);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 3772, 3761, 3771, 3765, 3762, 3766, 3769, 3767, 3770);\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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;std::stringstream ss;ss<< "fnmsub_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+" | rs3="+std::to_string(rs3)+"]");return ss.str();})
static InstructionDefinition fnmadd_s_rd_rm_rs1_rs2_rs3(ISA32_RV64IMACFD, "fnmadd_s",(uint32_t) 0x00004f,(uint32_t) 0x600007f, [](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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FNMADD_S\n");cp.code()+="etiss_coverage_count(1, 92);\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, 3693);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 3677);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 3640, 3639, 3638, 3637);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 3646, 3645, 3644, 3643);\n";cp.code()+="etiss_uint32 frs3 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs3)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 3652, 3651, 3650, 3649);\n";cp.code()+="etiss_uint32 res = fmadd_s(frs1, frs2, frs3, 2ULL, RV64IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="etiss_coverage_count(8, 3661, 3660, 3654, 3655, 3656, 3657, 3659, 3658);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 3676, 3664, 3663, 3675, 3674, 3672);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 3680, 3679);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 3692, 3681, 3691, 3685, 3682, 3686, 3689, 3687, 3690);\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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;std::stringstream ss;ss<< "fnmadd_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+" | rs3="+std::to_string(rs3)+"]");return ss.str();})
static InstructionDefinition fsub_s_rd_rm_rs1_rs2(ISA32_RV64IMACFD, "fsub_s",(uint32_t) 0x8000053,(uint32_t) 0xfe00007f, [](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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FSUB_S\n");cp.code()+="etiss_coverage_count(1, 95);\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, 3909);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 3893);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 3864, 3863, 3862, 3861);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 3870, 3869, 3868, 3867);\n";cp.code()+="etiss_uint32 res = fsub_s(frs1, frs2, RV64IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="etiss_coverage_count(6, 3877, 3876, 3872, 3873, 3875, 3874);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 3892, 3880, 3879, 3891, 3890, 3888);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 3896, 3895);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 3908, 3897, 3907, 3901, 3898, 3902, 3905, 3903, 3906);\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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fsub_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fmul_s_rd_rm_rs1_rs2(ISA32_RV64IMACFD, "fmul_s",(uint32_t) 0x10000053,(uint32_t) 0xfe00007f, [](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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FMUL_S\n");cp.code()+="etiss_coverage_count(1, 96);\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, 3977);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 3961);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 3932, 3931, 3930, 3929);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 3938, 3937, 3936, 3935);\n";cp.code()+="etiss_uint32 res = fmul_s(frs1, frs2, RV64IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="etiss_coverage_count(6, 3945, 3944, 3940, 3941, 3943, 3942);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 3960, 3948, 3947, 3959, 3958, 3956);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 3964, 3963);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 3976, 3965, 3975, 3969, 3966, 3970, 3973, 3971, 3974);\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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fmul_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition feq_s_rd_rs1_rs2(ISA32_RV64IMACFD, "feq_s",(uint32_t) 0xa0002053,(uint32_t) 0xfe00707f, [](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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FEQ_S\n");cp.code()+="etiss_coverage_count(1, 106);\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, 4595);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = 0LL;\n";cp.code()+="etiss_coverage_count(2, 4532, 4531);\n";{ cp.code()+="etiss_coverage_count(1, 4565);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4552, 4551, 4550, 4549);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4558, 4557, 4556, 4555);\n";cp.code()+="res = fcmp_s(frs1, frs2, 0LL);\n";cp.code()+="etiss_coverage_count(6, 4564, 4559, 4563, 4560, 4561, 4562);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 4566);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 4572, 4569, 4567, 4570, 4571);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = res;\n";cp.code()+="etiss_coverage_count(5, 4579, 4577, 4576, 4574, 4578);\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 4582, 4581);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 4594, 4583, 4593, 4587, 4584, 4588, 4591, 4589, 4592);\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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "feq_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fsgnj_s_rd_rs1_rs2(ISA32_RV64IMACFD, "fsgnj_s",(uint32_t) 0x20000053,(uint32_t) 0xfe00707f, [](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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FSGNJ_S\n");cp.code()+="etiss_coverage_count(1, 99);\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, 4162);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 4161);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4130, 4129, 4128, 4127);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4136, 4135, 4134, 4133);\n";cp.code()+="etiss_uint32 res = ((((((frs2) >> (31ULL)) & 1ULL)) << 31) | ((((frs1) >> (0LL)) & 2147483647ULL)));\n";cp.code()+="etiss_coverage_count(10, 4147, 4146, 4141, 4138, 4139, 4140, 4145, 4142, 4143, 4144);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 4160, 4150, 4149, 4159, 4158, 4156);\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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fsgnj_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fmv_x_w_rd_rs1(ISA32_RV64IMACFD, "fmv_x_w",(uint32_t) 0xe0000053,(uint32_t) 0xfff0707f, [](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;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FMV_X_W\n");cp.code()+="etiss_coverage_count(1, 112);\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, 4873);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 4853);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 4859, 4856, 4854, 4857, 4858);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)((etiss_int32)(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]));\n";cp.code()+="etiss_coverage_count(8, 4872, 4864, 4863, 4861, 4871, 4869, 4867, 4866);\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;std::stringstream ss;ss<< "fmv_x_w"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition fmadd_s_rd_rm_rs1_rs2_rs3(ISA32_RV64IMACFD, "fmadd_s",(uint32_t) 0x000043,(uint32_t) 0x600007f, [](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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FMADD_S\n");cp.code()+="etiss_coverage_count(1, 90);\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, 3542);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 3526);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = fmadd_s(unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]), unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]), unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs3)+"ULL]), 0LL, RV64IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="etiss_coverage_count(14, 3510, 3509, 3497, 3496, 3495, 3501, 3500, 3499, 3505, 3504, 3503, 3506, 3508, 3507);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 3525, 3513, 3512, 3524, 3523, 3521);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 3529, 3528);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 3541, 3530, 3540, 3534, 3531, 3535, 3538, 3536, 3539);\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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;std::stringstream ss;ss<< "fmadd_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+" | rs3="+std::to_string(rs3)+"]");return ss.str();})
static InstructionDefinition fcvt_s_w_rd_rm_rs1(ISA32_RV64IMACFD, "fcvt_s_w",(uint32_t) 0xd0000053,(uint32_t) 0xfff0007f, [](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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FCVT_S_W\n");cp.code()+="etiss_coverage_count(1, 110);\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, 4807);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 4806);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = fcvt_s((etiss_uint64)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]), 2ULL, "+std::to_string(rm)+"ULL);\n";cp.code()+="etiss_coverage_count(8, 4790, 4789, 4786, 4785, 4784, 4782, 4787, 4788);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 4805, 4793, 4792, 4804, 4803, 4801);\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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "fcvt_s_w"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition fdiv_s_rd_rm_rs1_rs2(ISA32_RV64IMACFD, "fdiv_s",(uint32_t) 0x18000053,(uint32_t) 0xfe00007f, [](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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FDIV_S\n");cp.code()+="etiss_coverage_count(1, 97);\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, 4045);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 4029);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4000, 3999, 3998, 3997);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4006, 4005, 4004, 4003);\n";cp.code()+="etiss_uint32 res = fdiv_s(frs1, frs2, RV64IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="etiss_coverage_count(6, 4013, 4012, 4008, 4009, 4011, 4010);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 4028, 4016, 4015, 4027, 4026, 4024);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 4032, 4031);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 4044, 4033, 4043, 4037, 4034, 4038, 4041, 4039, 4042);\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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fdiv_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fmv_w_x_rd_rs1(ISA32_RV64IMACFD, "fmv_w_x",(uint32_t) 0xf0000053,(uint32_t) 0xfff0707f, [](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;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FMV_W_X\n");cp.code()+="etiss_coverage_count(1, 113);\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, 4907);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 4906);\n";cp.code()+="{ // block\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(8, 4905, 4889, 4888, 4904, 4903, 4901, 4900, 4898);\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;std::stringstream ss;ss<< "fmv_w_x"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition fsqrt_s_rd_rm_rs1(ISA32_RV64IMACFD, "fsqrt_s",(uint32_t) 0x58000053,(uint32_t) 0xfff0007f, [](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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FSQRT_S\n");cp.code()+="etiss_coverage_count(1, 98);\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, 4103);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 4087);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4065, 4064, 4063, 4062);\n";cp.code()+="etiss_uint32 res = fsqrt_s(frs1, RV64IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="etiss_coverage_count(5, 4071, 4070, 4067, 4069, 4068);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 4086, 4074, 4073, 4085, 4084, 4082);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 4090, 4089);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 4102, 4091, 4101, 4095, 4092, 4096, 4099, 4097, 4100);\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 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "fsqrt_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition flw_rd_rs1_imm(ISA32_RV64IMACFD, "flw",(uint32_t) 0x002007,(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 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FLW\n");cp.code()+="etiss_coverage_count(1, 88);\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, 3450);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint64 offs = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + "+std::to_string(((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL;\n";cp.code()+="etiss_coverage_count(7, 3417, 3416, 3412, 3411, 3409, 3415, 3413);\n";cp.code()+="etiss_uint32 mem_val_0;\n";cp.code()+="cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // conditional\n";cp.code()+="etiss_uint32 res = (etiss_uint32)(mem_val_0);\n";cp.code()+="etiss_coverage_count(4, 3424, 3423, 3421, 3420);\n";{ cp.code()+="etiss_coverage_count(1, 3449);\n";cp.code()+="{ // block\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 3448, 3436, 3435, 3447, 3446, 3444);\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);} { CodePart &cp=cs.append(CodePart::APPENDEDRETURNINGREQUIRED);cp.code()=std::string("//FLW\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;std::stringstream ss;ss<< "flw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition fmax_s_rd_rs1_rs2(ISA32_RV64IMACFD, "fmax_s",(uint32_t) 0x28001053,(uint32_t) 0xfe00707f, [](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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FMAX_S\n");cp.code()+="etiss_coverage_count(1, 103);\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, 4410);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 4394);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4366, 4365, 4364, 4363);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4372, 4371, 4370, 4369);\n";cp.code()+="etiss_uint32 res = fsel_s(frs1, frs2, 1ULL);\n";cp.code()+="etiss_coverage_count(5, 4378, 4377, 4374, 4375, 4376);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 4393, 4381, 4380, 4392, 4391, 4389);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 4397, 4396);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 4409, 4398, 4408, 4402, 4399, 4403, 4406, 4404, 4407);\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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fmax_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fsgnjx_s_rd_rs1_rs2(ISA32_RV64IMACFD, "fsgnjx_s",(uint32_t) 0x20002053,(uint32_t) 0xfe00707f, [](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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FSGNJX_S\n");cp.code()+="etiss_coverage_count(1, 101);\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, 4278);\n";cp.code()+="{ // block\n";{ cp.code()+="etiss_coverage_count(1, 4277);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4247, 4246, 4245, 4244);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4253, 4252, 4251, 4250);\n";cp.code()+="etiss_uint32 res = frs1 ^ (frs2 & 2147483648ULL);\n";cp.code()+="etiss_coverage_count(7, 4261, 4260, 4255, 4258, 4256, 4257, 4259);\n";cp.code()+="((RV64IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 4276, 4264, 4263, 4275, 4274, 4272);\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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fsgnjx_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fle_s_rd_rs1_rs2(ISA32_RV64IMACFD, "fle_s",(uint32_t) 0xa0000053,(uint32_t) 0xfe00707f, [](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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FLE_S\n");cp.code()+="etiss_coverage_count(1, 108);\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, 4727);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = 0LL;\n";cp.code()+="etiss_coverage_count(2, 4664, 4663);\n";{ cp.code()+="etiss_coverage_count(1, 4697);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4684, 4683, 4682, 4681);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV64IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_coverage_count(4, 4690, 4689, 4688, 4687);\n";cp.code()+="res = fcmp_s(frs1, frs2, 1ULL);\n";cp.code()+="etiss_coverage_count(6, 4696, 4691, 4695, 4692, 4693, 4694);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 4698);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 4704, 4701, 4699, 4702, 4703);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = res;\n";cp.code()+="etiss_coverage_count(5, 4711, 4709, 4708, 4706, 4710);\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="etiss_coverage_count(2, 4714, 4713);\n";cp.code()+="((RV64IMACFD*)cpu)->FCSR = (((RV64IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="etiss_coverage_count(9, 4726, 4715, 4725, 4719, 4716, 4720, 4723, 4721, 4724);\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_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fle_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
int16_t etiss_int16
Definition types.h:89
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
@ APPENDEDRETURNINGREQUIRED
Definition CodePart.h:402
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