31rd += R_rd_0.
read(ba) << 0;
34imm += R_imm_12.
read(ba) << 12;
41 cp.
code() = std::string(
"//LUI\n");
44cp.
code() +=
"etiss_coverage_count(1, 0);\n";
46cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
47cp.
code() +=
"{ // block\n";
49cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
50cp.
code() +=
"} // block\n";
52cp.
code() +=
"etiss_coverage_count(1, 1170);\n";
53if ((rd % 32ULL) != 0LL) {
54cp.
code() +=
"etiss_coverage_count(5, 1176, 1173, 1171, 1174, 1175);\n";
55cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = " + std::to_string((
etiss_uint32)(((
etiss_int32)(imm)))) +
"ULL;\n";
56cp.
code() +=
"etiss_coverage_count(8, 1187, 1181, 1180, 1178, 1186, 1183, 1182, 1184);\n";
59cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
72rd += R_rd_0.read(ba) << 0;
75imm += R_imm_12.read(ba) << 12;
81ss <<
"lui" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | imm=" + std::to_string(imm) +
"]");
103rd += R_rd_0.
read(ba) << 0;
106imm += R_imm_12.
read(ba) << 12;
113 cp.
code() = std::string(
"//AUIPC\n");
116cp.
code() +=
"etiss_coverage_count(1, 1);\n";
118cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
119cp.
code() +=
"{ // block\n";
121cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
122cp.
code() +=
"} // block\n";
124cp.
code() +=
"etiss_coverage_count(1, 1188);\n";
125if ((rd % 32ULL) != 0LL) {
126cp.
code() +=
"etiss_coverage_count(5, 1194, 1191, 1189, 1192, 1193);\n";
128cp.
code() +=
"etiss_coverage_count(8, 1204, 1199, 1198, 1196, 1203, 1200, 1202, 1201);\n";
131cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
144rd += R_rd_0.read(ba) << 0;
147imm += R_imm_12.read(ba) << 12;
151 std::stringstream ss;
153ss <<
"auipc" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | imm=" + std::to_string(imm) +
"]");
175rd += R_rd_0.
read(ba) << 0;
178imm += R_imm_12.
read(ba) << 12;
180imm += R_imm_11.
read(ba) << 11;
182imm += R_imm_1.
read(ba) << 1;
184imm += R_imm_20.
read(ba) << 20;
191 cp.
code() = std::string(
"//JAL\n");
194cp.
code() +=
"etiss_coverage_count(1, 2);\n";
196cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
197cp.
code() +=
"{ // block\n";
199cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
200cp.
code() +=
"} // block\n";
203cp.
code() +=
"etiss_coverage_count(1, 1236);\n";
204cp.
code() +=
"{ // block\n";
205cp.
code() +=
"etiss_coverage_count(1, 1205);\n";
207cp.
code() +=
"etiss_coverage_count(2, 1208, 1206);\n";
209cp.
code() +=
"etiss_coverage_count(1, 1212);\n";
210cp.
code() +=
"{ // block\n";
212cp.
code() +=
"{ // procedure\n";
213cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";
214cp.
code() +=
"etiss_coverage_count(2, 1211, 1209);\n";
216cp.
code() +=
"} // procedure\n";
218cp.
code() +=
"} // block\n";
223cp.
code() +=
"etiss_coverage_count(1, 1235);\n";
224cp.
code() +=
"{ // block\n";
225cp.
code() +=
"etiss_coverage_count(1, 1213);\n";
226if ((rd % 32ULL) != 0LL) {
227cp.
code() +=
"etiss_coverage_count(5, 1219, 1216, 1214, 1217, 1218);\n";
228cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = " + std::to_string(ic.
current_address_ + 4ULL) +
"ULL;\n";
229cp.
code() +=
"etiss_coverage_count(7, 1228, 1224, 1223, 1221, 1227, 1225, 1226);\n";
232cp.
code() +=
"etiss_coverage_count(6, 1234, 1229, 1233, 1230, 1232, 1231);\n";
233cp.
code() +=
"} // block\n";
236cp.
code() +=
"} // block\n";
239cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
246 cp.
code() = std::string(
"//JAL\n");
249cp.
code() +=
"return cpu->exception;\n";
261rd += R_rd_0.read(ba) << 0;
264imm += R_imm_12.read(ba) << 12;
266imm += R_imm_11.read(ba) << 11;
268imm += R_imm_1.read(ba) << 1;
270imm += R_imm_20.read(ba) << 20;
274 std::stringstream ss;
276ss <<
"jal" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | imm=" + std::to_string(imm) +
"]");
298rd += R_rd_0.
read(ba) << 0;
301rs1 += R_rs1_0.
read(ba) << 0;
304imm += R_imm_0.
read(ba) << 0;
311 cp.
code() = std::string(
"//JALR\n");
314cp.
code() +=
"etiss_coverage_count(1, 3);\n";
316cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
317cp.
code() +=
"{ // block\n";
319cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
320cp.
code() +=
"} // block\n";
323cp.
code() +=
"etiss_coverage_count(1, 1282);\n";
324cp.
code() +=
"{ // block\n";
325cp.
code() +=
"etiss_uint32 new_pc = (*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL) & -2LL;\n";
326cp.
code() +=
"etiss_coverage_count(9, 1250, 1249, 1245, 1242, 1241, 1239, 1244, 1243, 1246);\n";
327cp.
code() +=
"etiss_coverage_count(1, 1251);\n";
328cp.
code() +=
"if (new_pc % 2ULL) { // conditional\n";
329cp.
code() +=
"etiss_coverage_count(2, 1254, 1252);\n";
331cp.
code() +=
"etiss_coverage_count(1, 1258);\n";
332cp.
code() +=
"{ // block\n";
334cp.
code() +=
"{ // procedure\n";
335cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";
336cp.
code() +=
"etiss_coverage_count(2, 1257, 1255);\n";
338cp.
code() +=
"} // procedure\n";
340cp.
code() +=
"} // block\n";
342cp.
code() +=
"} // conditional\n";
343cp.
code() +=
"else { // conditional\n";
345cp.
code() +=
"etiss_coverage_count(1, 1281);\n";
346cp.
code() +=
"{ // block\n";
347cp.
code() +=
"etiss_coverage_count(1, 1259);\n";
348if ((rd % 32ULL) != 0LL) {
349cp.
code() +=
"etiss_coverage_count(5, 1265, 1262, 1260, 1263, 1264);\n";
350cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = " + std::to_string(ic.
current_address_ + 4ULL) +
"ULL;\n";
351cp.
code() +=
"etiss_coverage_count(7, 1274, 1270, 1269, 1267, 1273, 1271, 1272);\n";
353cp.
code() +=
"cpu->nextPc = new_pc & -2LL;\n";
354cp.
code() +=
"etiss_coverage_count(4, 1280, 1275, 1279, 1276);\n";
355cp.
code() +=
"} // block\n";
357cp.
code() +=
"} // conditional\n";
358cp.
code() +=
"} // block\n";
361cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
368 cp.
code() = std::string(
"//JALR\n");
371cp.
code() +=
"return cpu->exception;\n";
383rd += R_rd_0.read(ba) << 0;
386rs1 += R_rs1_0.read(ba) << 0;
389imm += R_imm_0.read(ba) << 0;
393 std::stringstream ss;
395ss <<
"jalr" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
417imm += R_imm_11.
read(ba) << 11;
419imm += R_imm_1.
read(ba) << 1;
422rs1 += R_rs1_0.
read(ba) << 0;
425rs2 += R_rs2_0.
read(ba) << 0;
427imm += R_imm_5.
read(ba) << 5;
429imm += R_imm_12.
read(ba) << 12;
436 cp.
code() = std::string(
"//BEQ\n");
439cp.
code() +=
"etiss_coverage_count(1, 4);\n";
441cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
442cp.
code() +=
"{ // block\n";
444cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
445cp.
code() +=
"} // block\n";
448cp.
code() +=
"etiss_coverage_count(1, 1311);\n";
449cp.
code() +=
"{ // block\n";
450cp.
code() +=
"etiss_coverage_count(1, 1283);\n";
451cp.
code() +=
"if (*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] == *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL]) { // conditional\n";
452cp.
code() +=
"etiss_coverage_count(7, 1294, 1288, 1287, 1285, 1293, 1292, 1290);\n";
454cp.
code() +=
"etiss_coverage_count(1, 1310);\n";
455cp.
code() +=
"{ // block\n";
456cp.
code() +=
"etiss_coverage_count(1, 1295);\n";
458cp.
code() +=
"etiss_coverage_count(2, 1298, 1296);\n";
460cp.
code() +=
"etiss_coverage_count(1, 1302);\n";
461cp.
code() +=
"{ // block\n";
463cp.
code() +=
"{ // procedure\n";
464cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";
465cp.
code() +=
"etiss_coverage_count(2, 1301, 1299);\n";
467cp.
code() +=
"} // procedure\n";
469cp.
code() +=
"} // block\n";
474cp.
code() +=
"etiss_coverage_count(1, 1309);\n";
475cp.
code() +=
"{ // block\n";
477cp.
code() +=
"etiss_coverage_count(6, 1308, 1303, 1307, 1304, 1306, 1305);\n";
478cp.
code() +=
"} // block\n";
481cp.
code() +=
"} // block\n";
483cp.
code() +=
"} // conditional\n";
484cp.
code() +=
"} // block\n";
487cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
494 cp.
code() = std::string(
"//BEQ\n");
497cp.
code() +=
"if (cpu->return_pending || cpu->exception || cpu->nextPc != " + std::to_string(ic.
current_address_ + 4) +
"ULL) return cpu->exception;\n";
509imm += R_imm_11.read(ba) << 11;
511imm += R_imm_1.read(ba) << 1;
514rs1 += R_rs1_0.read(ba) << 0;
517rs2 += R_rs2_0.read(ba) << 0;
519imm += R_imm_5.read(ba) << 5;
521imm += R_imm_12.read(ba) << 12;
525 std::stringstream ss;
527ss <<
"beq" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
549imm += R_imm_11.
read(ba) << 11;
551imm += R_imm_1.
read(ba) << 1;
554rs1 += R_rs1_0.
read(ba) << 0;
557rs2 += R_rs2_0.
read(ba) << 0;
559imm += R_imm_5.
read(ba) << 5;
561imm += R_imm_12.
read(ba) << 12;
568 cp.
code() = std::string(
"//BNE\n");
571cp.
code() +=
"etiss_coverage_count(1, 5);\n";
573cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
574cp.
code() +=
"{ // block\n";
576cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
577cp.
code() +=
"} // block\n";
580cp.
code() +=
"etiss_coverage_count(1, 1340);\n";
581cp.
code() +=
"{ // block\n";
582cp.
code() +=
"etiss_coverage_count(1, 1312);\n";
583cp.
code() +=
"if (*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] != *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL]) { // conditional\n";
584cp.
code() +=
"etiss_coverage_count(7, 1323, 1317, 1316, 1314, 1322, 1321, 1319);\n";
586cp.
code() +=
"etiss_coverage_count(1, 1339);\n";
587cp.
code() +=
"{ // block\n";
588cp.
code() +=
"etiss_coverage_count(1, 1324);\n";
590cp.
code() +=
"etiss_coverage_count(2, 1327, 1325);\n";
592cp.
code() +=
"etiss_coverage_count(1, 1331);\n";
593cp.
code() +=
"{ // block\n";
595cp.
code() +=
"{ // procedure\n";
596cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";
597cp.
code() +=
"etiss_coverage_count(2, 1330, 1328);\n";
599cp.
code() +=
"} // procedure\n";
601cp.
code() +=
"} // block\n";
606cp.
code() +=
"etiss_coverage_count(1, 1338);\n";
607cp.
code() +=
"{ // block\n";
609cp.
code() +=
"etiss_coverage_count(6, 1337, 1332, 1336, 1333, 1335, 1334);\n";
610cp.
code() +=
"} // block\n";
613cp.
code() +=
"} // block\n";
615cp.
code() +=
"} // conditional\n";
616cp.
code() +=
"} // block\n";
619cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
626 cp.
code() = std::string(
"//BNE\n");
629cp.
code() +=
"if (cpu->return_pending || cpu->exception || cpu->nextPc != " + std::to_string(ic.
current_address_ + 4) +
"ULL) return cpu->exception;\n";
641imm += R_imm_11.read(ba) << 11;
643imm += R_imm_1.read(ba) << 1;
646rs1 += R_rs1_0.read(ba) << 0;
649rs2 += R_rs2_0.read(ba) << 0;
651imm += R_imm_5.read(ba) << 5;
653imm += R_imm_12.read(ba) << 12;
657 std::stringstream ss;
659ss <<
"bne" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
681imm += R_imm_11.
read(ba) << 11;
683imm += R_imm_1.
read(ba) << 1;
686rs1 += R_rs1_0.
read(ba) << 0;
689rs2 += R_rs2_0.
read(ba) << 0;
691imm += R_imm_5.
read(ba) << 5;
693imm += R_imm_12.
read(ba) << 12;
700 cp.
code() = std::string(
"//BLT\n");
703cp.
code() +=
"etiss_coverage_count(1, 6);\n";
705cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
706cp.
code() +=
"{ // block\n";
708cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
709cp.
code() +=
"} // block\n";
712cp.
code() +=
"etiss_coverage_count(1, 1373);\n";
713cp.
code() +=
"{ // block\n";
714cp.
code() +=
"etiss_coverage_count(1, 1341);\n";
715cp.
code() +=
"if ((etiss_int32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL]) < (etiss_int32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL])) { // conditional\n";
716cp.
code() +=
"etiss_coverage_count(9, 1356, 1348, 1346, 1345, 1343, 1355, 1353, 1352, 1350);\n";
718cp.
code() +=
"etiss_coverage_count(1, 1372);\n";
719cp.
code() +=
"{ // block\n";
720cp.
code() +=
"etiss_coverage_count(1, 1357);\n";
722cp.
code() +=
"etiss_coverage_count(2, 1360, 1358);\n";
724cp.
code() +=
"etiss_coverage_count(1, 1364);\n";
725cp.
code() +=
"{ // block\n";
727cp.
code() +=
"{ // procedure\n";
728cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";
729cp.
code() +=
"etiss_coverage_count(2, 1363, 1361);\n";
731cp.
code() +=
"} // procedure\n";
733cp.
code() +=
"} // block\n";
738cp.
code() +=
"etiss_coverage_count(1, 1371);\n";
739cp.
code() +=
"{ // block\n";
741cp.
code() +=
"etiss_coverage_count(6, 1370, 1365, 1369, 1366, 1368, 1367);\n";
742cp.
code() +=
"} // block\n";
745cp.
code() +=
"} // block\n";
747cp.
code() +=
"} // conditional\n";
748cp.
code() +=
"} // block\n";
751cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
758 cp.
code() = std::string(
"//BLT\n");
761cp.
code() +=
"if (cpu->return_pending || cpu->exception || cpu->nextPc != " + std::to_string(ic.
current_address_ + 4) +
"ULL) return cpu->exception;\n";
773imm += R_imm_11.read(ba) << 11;
775imm += R_imm_1.read(ba) << 1;
778rs1 += R_rs1_0.read(ba) << 0;
781rs2 += R_rs2_0.read(ba) << 0;
783imm += R_imm_5.read(ba) << 5;
785imm += R_imm_12.read(ba) << 12;
789 std::stringstream ss;
791ss <<
"blt" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
813imm += R_imm_11.
read(ba) << 11;
815imm += R_imm_1.
read(ba) << 1;
818rs1 += R_rs1_0.
read(ba) << 0;
821rs2 += R_rs2_0.
read(ba) << 0;
823imm += R_imm_5.
read(ba) << 5;
825imm += R_imm_12.
read(ba) << 12;
832 cp.
code() = std::string(
"//BGE\n");
835cp.
code() +=
"etiss_coverage_count(1, 7);\n";
837cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
838cp.
code() +=
"{ // block\n";
840cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
841cp.
code() +=
"} // block\n";
844cp.
code() +=
"etiss_coverage_count(1, 1406);\n";
845cp.
code() +=
"{ // block\n";
846cp.
code() +=
"etiss_coverage_count(1, 1374);\n";
847cp.
code() +=
"if ((etiss_int32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL]) >= (etiss_int32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL])) { // conditional\n";
848cp.
code() +=
"etiss_coverage_count(9, 1389, 1381, 1379, 1378, 1376, 1388, 1386, 1385, 1383);\n";
850cp.
code() +=
"etiss_coverage_count(1, 1405);\n";
851cp.
code() +=
"{ // block\n";
852cp.
code() +=
"etiss_coverage_count(1, 1390);\n";
854cp.
code() +=
"etiss_coverage_count(2, 1393, 1391);\n";
856cp.
code() +=
"etiss_coverage_count(1, 1397);\n";
857cp.
code() +=
"{ // block\n";
859cp.
code() +=
"{ // procedure\n";
860cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";
861cp.
code() +=
"etiss_coverage_count(2, 1396, 1394);\n";
863cp.
code() +=
"} // procedure\n";
865cp.
code() +=
"} // block\n";
870cp.
code() +=
"etiss_coverage_count(1, 1404);\n";
871cp.
code() +=
"{ // block\n";
873cp.
code() +=
"etiss_coverage_count(6, 1403, 1398, 1402, 1399, 1401, 1400);\n";
874cp.
code() +=
"} // block\n";
877cp.
code() +=
"} // block\n";
879cp.
code() +=
"} // conditional\n";
880cp.
code() +=
"} // block\n";
883cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
890 cp.
code() = std::string(
"//BGE\n");
893cp.
code() +=
"if (cpu->return_pending || cpu->exception || cpu->nextPc != " + std::to_string(ic.
current_address_ + 4) +
"ULL) return cpu->exception;\n";
905imm += R_imm_11.read(ba) << 11;
907imm += R_imm_1.read(ba) << 1;
910rs1 += R_rs1_0.read(ba) << 0;
913rs2 += R_rs2_0.read(ba) << 0;
915imm += R_imm_5.read(ba) << 5;
917imm += R_imm_12.read(ba) << 12;
921 std::stringstream ss;
923ss <<
"bge" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
945imm += R_imm_11.
read(ba) << 11;
947imm += R_imm_1.
read(ba) << 1;
950rs1 += R_rs1_0.
read(ba) << 0;
953rs2 += R_rs2_0.
read(ba) << 0;
955imm += R_imm_5.
read(ba) << 5;
957imm += R_imm_12.
read(ba) << 12;
964 cp.
code() = std::string(
"//BLTU\n");
967cp.
code() +=
"etiss_coverage_count(1, 8);\n";
969cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
970cp.
code() +=
"{ // block\n";
972cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
973cp.
code() +=
"} // block\n";
976cp.
code() +=
"etiss_coverage_count(1, 1435);\n";
977cp.
code() +=
"{ // block\n";
978cp.
code() +=
"etiss_coverage_count(1, 1407);\n";
979cp.
code() +=
"if (*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] < *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL]) { // conditional\n";
980cp.
code() +=
"etiss_coverage_count(7, 1418, 1412, 1411, 1409, 1417, 1416, 1414);\n";
982cp.
code() +=
"etiss_coverage_count(1, 1434);\n";
983cp.
code() +=
"{ // block\n";
984cp.
code() +=
"etiss_coverage_count(1, 1419);\n";
986cp.
code() +=
"etiss_coverage_count(2, 1422, 1420);\n";
988cp.
code() +=
"etiss_coverage_count(1, 1426);\n";
989cp.
code() +=
"{ // block\n";
991cp.
code() +=
"{ // procedure\n";
992cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";
993cp.
code() +=
"etiss_coverage_count(2, 1425, 1423);\n";
995cp.
code() +=
"} // procedure\n";
997cp.
code() +=
"} // block\n";
1002cp.
code() +=
"etiss_coverage_count(1, 1433);\n";
1003cp.
code() +=
"{ // block\n";
1005cp.
code() +=
"etiss_coverage_count(6, 1432, 1427, 1431, 1428, 1430, 1429);\n";
1006cp.
code() +=
"} // block\n";
1009cp.
code() +=
"} // block\n";
1011cp.
code() +=
"} // conditional\n";
1012cp.
code() +=
"} // block\n";
1015cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1022 cp.
code() = std::string(
"//BLTU\n");
1025cp.
code() +=
"if (cpu->return_pending || cpu->exception || cpu->nextPc != " + std::to_string(ic.
current_address_ + 4) +
"ULL) return cpu->exception;\n";
1037imm += R_imm_11.read(ba) << 11;
1039imm += R_imm_1.read(ba) << 1;
1042rs1 += R_rs1_0.read(ba) << 0;
1045rs2 += R_rs2_0.read(ba) << 0;
1047imm += R_imm_5.read(ba) << 5;
1049imm += R_imm_12.read(ba) << 12;
1053 std::stringstream ss;
1055ss <<
"bltu" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1065 (uint32_t) 0x007063,
1066 (uint32_t) 0x00707f,
1077imm += R_imm_11.
read(ba) << 11;
1079imm += R_imm_1.
read(ba) << 1;
1082rs1 += R_rs1_0.
read(ba) << 0;
1085rs2 += R_rs2_0.
read(ba) << 0;
1087imm += R_imm_5.
read(ba) << 5;
1089imm += R_imm_12.
read(ba) << 12;
1096 cp.
code() = std::string(
"//BGEU\n");
1099cp.
code() +=
"etiss_coverage_count(1, 9);\n";
1101cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
1102cp.
code() +=
"{ // block\n";
1104cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1105cp.
code() +=
"} // block\n";
1108cp.
code() +=
"etiss_coverage_count(1, 1464);\n";
1109cp.
code() +=
"{ // block\n";
1110cp.
code() +=
"etiss_coverage_count(1, 1436);\n";
1111cp.
code() +=
"if (*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] >= *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL]) { // conditional\n";
1112cp.
code() +=
"etiss_coverage_count(7, 1447, 1441, 1440, 1438, 1446, 1445, 1443);\n";
1114cp.
code() +=
"etiss_coverage_count(1, 1463);\n";
1115cp.
code() +=
"{ // block\n";
1116cp.
code() +=
"etiss_coverage_count(1, 1448);\n";
1118cp.
code() +=
"etiss_coverage_count(2, 1451, 1449);\n";
1120cp.
code() +=
"etiss_coverage_count(1, 1455);\n";
1121cp.
code() +=
"{ // block\n";
1123cp.
code() +=
"{ // procedure\n";
1124cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";
1125cp.
code() +=
"etiss_coverage_count(2, 1454, 1452);\n";
1127cp.
code() +=
"} // procedure\n";
1129cp.
code() +=
"} // block\n";
1134cp.
code() +=
"etiss_coverage_count(1, 1462);\n";
1135cp.
code() +=
"{ // block\n";
1137cp.
code() +=
"etiss_coverage_count(6, 1461, 1456, 1460, 1457, 1459, 1458);\n";
1138cp.
code() +=
"} // block\n";
1141cp.
code() +=
"} // block\n";
1143cp.
code() +=
"} // conditional\n";
1144cp.
code() +=
"} // block\n";
1147cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1154 cp.
code() = std::string(
"//BGEU\n");
1157cp.
code() +=
"if (cpu->return_pending || cpu->exception || cpu->nextPc != " + std::to_string(ic.
current_address_ + 4) +
"ULL) return cpu->exception;\n";
1169imm += R_imm_11.read(ba) << 11;
1171imm += R_imm_1.read(ba) << 1;
1174rs1 += R_rs1_0.read(ba) << 0;
1177rs2 += R_rs2_0.read(ba) << 0;
1179imm += R_imm_5.read(ba) << 5;
1181imm += R_imm_12.read(ba) << 12;
1185 std::stringstream ss;
1187ss <<
"bgeu" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1197 (uint32_t) 0x000003,
1198 (uint32_t) 0x00707f,
1209rd += R_rd_0.
read(ba) << 0;
1212rs1 += R_rs1_0.
read(ba) << 0;
1215imm += R_imm_0.
read(ba) << 0;
1222 cp.
code() = std::string(
"//LB\n");
1225cp.
code() +=
"etiss_coverage_count(1, 10);\n";
1227cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
1228cp.
code() +=
"{ // block\n";
1230cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1231cp.
code() +=
"} // block\n";
1234cp.
code() +=
"etiss_coverage_count(1, 1498);\n";
1235cp.
code() +=
"{ // block\n";
1236cp.
code() +=
"etiss_uint32 load_address = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL;\n";
1237cp.
code() +=
"etiss_coverage_count(7, 1474, 1473, 1470, 1469, 1467, 1472, 1471);\n";
1238cp.
code() +=
"etiss_uint8 mem_val_0;\n";
1239cp.
code() +=
"cpu->exception |= (*(system->dread))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 1);\n";
1240cp.
code() +=
"if (cpu->exception) { // conditional\n";
1242cp.
code() +=
"{ // procedure\n";
1243cp.
code() +=
"RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
1245cp.
code() +=
"} // procedure\n";
1247cp.
code() +=
"} // conditional\n";
1248cp.
code() +=
"etiss_int8 res = (etiss_int8)(mem_val_0);\n";
1249cp.
code() +=
"etiss_coverage_count(4, 1481, 1480, 1478, 1477);\n";
1250cp.
code() +=
"etiss_coverage_count(1, 1482);\n";
1251if ((rd % 32ULL) != 0LL) {
1252cp.
code() +=
"etiss_coverage_count(5, 1488, 1485, 1483, 1486, 1487);\n";
1253cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_uint32)(res);\n";
1254cp.
code() +=
"etiss_coverage_count(6, 1497, 1493, 1492, 1490, 1496, 1494);\n";
1256cp.
code() +=
"} // block\n";
1259cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1266 cp.
code() = std::string(
"//LB\n");
1269cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
1281rd += R_rd_0.read(ba) << 0;
1284rs1 += R_rs1_0.read(ba) << 0;
1287imm += R_imm_0.read(ba) << 0;
1291 std::stringstream ss;
1293ss <<
"lb" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
1303 (uint32_t) 0x001003,
1304 (uint32_t) 0x00707f,
1315rd += R_rd_0.
read(ba) << 0;
1318rs1 += R_rs1_0.
read(ba) << 0;
1321imm += R_imm_0.
read(ba) << 0;
1328 cp.
code() = std::string(
"//LH\n");
1331cp.
code() +=
"etiss_coverage_count(1, 11);\n";
1333cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
1334cp.
code() +=
"{ // block\n";
1336cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1337cp.
code() +=
"} // block\n";
1340cp.
code() +=
"etiss_coverage_count(1, 1532);\n";
1341cp.
code() +=
"{ // block\n";
1342cp.
code() +=
"etiss_uint32 load_address = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL;\n";
1343cp.
code() +=
"etiss_coverage_count(7, 1508, 1507, 1504, 1503, 1501, 1506, 1505);\n";
1344cp.
code() +=
"etiss_uint16 mem_val_0;\n";
1345cp.
code() +=
"cpu->exception |= (*(system->dread))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 2);\n";
1346cp.
code() +=
"if (cpu->exception) { // conditional\n";
1348cp.
code() +=
"{ // procedure\n";
1349cp.
code() +=
"RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
1351cp.
code() +=
"} // procedure\n";
1353cp.
code() +=
"} // conditional\n";
1354cp.
code() +=
"etiss_int16 res = (etiss_int16)(mem_val_0);\n";
1355cp.
code() +=
"etiss_coverage_count(4, 1515, 1514, 1512, 1511);\n";
1356cp.
code() +=
"etiss_coverage_count(1, 1516);\n";
1357if ((rd % 32ULL) != 0LL) {
1358cp.
code() +=
"etiss_coverage_count(5, 1522, 1519, 1517, 1520, 1521);\n";
1359cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_uint32)(res);\n";
1360cp.
code() +=
"etiss_coverage_count(6, 1531, 1527, 1526, 1524, 1530, 1528);\n";
1362cp.
code() +=
"} // block\n";
1365cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1372 cp.
code() = std::string(
"//LH\n");
1375cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
1387rd += R_rd_0.read(ba) << 0;
1390rs1 += R_rs1_0.read(ba) << 0;
1393imm += R_imm_0.read(ba) << 0;
1397 std::stringstream ss;
1399ss <<
"lh" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
1409 (uint32_t) 0x002003,
1410 (uint32_t) 0x00707f,
1421rd += R_rd_0.
read(ba) << 0;
1424rs1 += R_rs1_0.
read(ba) << 0;
1427imm += R_imm_0.
read(ba) << 0;
1434 cp.
code() = std::string(
"//LW\n");
1437cp.
code() +=
"etiss_coverage_count(1, 12);\n";
1439cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
1440cp.
code() +=
"{ // block\n";
1442cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1443cp.
code() +=
"} // block\n";
1446cp.
code() +=
"etiss_coverage_count(1, 1566);\n";
1447cp.
code() +=
"{ // block\n";
1448cp.
code() +=
"etiss_uint32 load_address = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL;\n";
1449cp.
code() +=
"etiss_coverage_count(7, 1542, 1541, 1538, 1537, 1535, 1540, 1539);\n";
1450cp.
code() +=
"etiss_uint32 mem_val_0;\n";
1451cp.
code() +=
"cpu->exception |= (*(system->dread))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 4);\n";
1452cp.
code() +=
"if (cpu->exception) { // conditional\n";
1454cp.
code() +=
"{ // procedure\n";
1455cp.
code() +=
"RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
1457cp.
code() +=
"} // procedure\n";
1459cp.
code() +=
"} // conditional\n";
1460cp.
code() +=
"etiss_int32 res = (etiss_int32)(mem_val_0);\n";
1461cp.
code() +=
"etiss_coverage_count(4, 1549, 1548, 1546, 1545);\n";
1462cp.
code() +=
"etiss_coverage_count(1, 1550);\n";
1463if ((rd % 32ULL) != 0LL) {
1464cp.
code() +=
"etiss_coverage_count(5, 1556, 1553, 1551, 1554, 1555);\n";
1465cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_uint32)(res);\n";
1466cp.
code() +=
"etiss_coverage_count(6, 1565, 1561, 1560, 1558, 1564, 1562);\n";
1468cp.
code() +=
"} // block\n";
1471cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1478 cp.
code() = std::string(
"//LW\n");
1481cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
1493rd += R_rd_0.read(ba) << 0;
1496rs1 += R_rs1_0.read(ba) << 0;
1499imm += R_imm_0.read(ba) << 0;
1503 std::stringstream ss;
1505ss <<
"lw" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
1515 (uint32_t) 0x004003,
1516 (uint32_t) 0x00707f,
1527rd += R_rd_0.
read(ba) << 0;
1530rs1 += R_rs1_0.
read(ba) << 0;
1533imm += R_imm_0.
read(ba) << 0;
1540 cp.
code() = std::string(
"//LBU\n");
1543cp.
code() +=
"etiss_coverage_count(1, 13);\n";
1545cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
1546cp.
code() +=
"{ // block\n";
1548cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1549cp.
code() +=
"} // block\n";
1552cp.
code() +=
"etiss_coverage_count(1, 1600);\n";
1553cp.
code() +=
"{ // block\n";
1554cp.
code() +=
"etiss_uint32 load_address = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL;\n";
1555cp.
code() +=
"etiss_coverage_count(7, 1576, 1575, 1572, 1571, 1569, 1574, 1573);\n";
1556cp.
code() +=
"etiss_uint8 mem_val_0;\n";
1557cp.
code() +=
"cpu->exception |= (*(system->dread))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 1);\n";
1558cp.
code() +=
"if (cpu->exception) { // conditional\n";
1560cp.
code() +=
"{ // procedure\n";
1561cp.
code() +=
"RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
1563cp.
code() +=
"} // procedure\n";
1565cp.
code() +=
"} // conditional\n";
1566cp.
code() +=
"etiss_uint8 res = (etiss_uint8)(mem_val_0);\n";
1567cp.
code() +=
"etiss_coverage_count(4, 1583, 1582, 1580, 1579);\n";
1568cp.
code() +=
"etiss_coverage_count(1, 1584);\n";
1569if ((rd % 32ULL) != 0LL) {
1570cp.
code() +=
"etiss_coverage_count(5, 1590, 1587, 1585, 1588, 1589);\n";
1571cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_uint32)(res);\n";
1572cp.
code() +=
"etiss_coverage_count(6, 1599, 1595, 1594, 1592, 1598, 1596);\n";
1574cp.
code() +=
"} // block\n";
1577cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1584 cp.
code() = std::string(
"//LBU\n");
1587cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
1599rd += R_rd_0.read(ba) << 0;
1602rs1 += R_rs1_0.read(ba) << 0;
1605imm += R_imm_0.read(ba) << 0;
1609 std::stringstream ss;
1611ss <<
"lbu" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
1621 (uint32_t) 0x005003,
1622 (uint32_t) 0x00707f,
1633rd += R_rd_0.
read(ba) << 0;
1636rs1 += R_rs1_0.
read(ba) << 0;
1639imm += R_imm_0.
read(ba) << 0;
1646 cp.
code() = std::string(
"//LHU\n");
1649cp.
code() +=
"etiss_coverage_count(1, 14);\n";
1651cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
1652cp.
code() +=
"{ // block\n";
1654cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1655cp.
code() +=
"} // block\n";
1658cp.
code() +=
"etiss_coverage_count(1, 1634);\n";
1659cp.
code() +=
"{ // block\n";
1660cp.
code() +=
"etiss_uint32 load_address = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL;\n";
1661cp.
code() +=
"etiss_coverage_count(7, 1610, 1609, 1606, 1605, 1603, 1608, 1607);\n";
1662cp.
code() +=
"etiss_uint16 mem_val_0;\n";
1663cp.
code() +=
"cpu->exception |= (*(system->dread))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 2);\n";
1664cp.
code() +=
"if (cpu->exception) { // conditional\n";
1666cp.
code() +=
"{ // procedure\n";
1667cp.
code() +=
"RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
1669cp.
code() +=
"} // procedure\n";
1671cp.
code() +=
"} // conditional\n";
1672cp.
code() +=
"etiss_uint16 res = (etiss_uint16)(mem_val_0);\n";
1673cp.
code() +=
"etiss_coverage_count(4, 1617, 1616, 1614, 1613);\n";
1674cp.
code() +=
"etiss_coverage_count(1, 1618);\n";
1675if ((rd % 32ULL) != 0LL) {
1676cp.
code() +=
"etiss_coverage_count(5, 1624, 1621, 1619, 1622, 1623);\n";
1677cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_uint32)(res);\n";
1678cp.
code() +=
"etiss_coverage_count(6, 1633, 1629, 1628, 1626, 1632, 1630);\n";
1680cp.
code() +=
"} // block\n";
1683cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1690 cp.
code() = std::string(
"//LHU\n");
1693cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
1705rd += R_rd_0.read(ba) << 0;
1708rs1 += R_rs1_0.read(ba) << 0;
1711imm += R_imm_0.read(ba) << 0;
1715 std::stringstream ss;
1717ss <<
"lhu" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
1727 (uint32_t) 0x000023,
1728 (uint32_t) 0x00707f,
1739imm += R_imm_0.
read(ba) << 0;
1742rs1 += R_rs1_0.
read(ba) << 0;
1745rs2 += R_rs2_0.
read(ba) << 0;
1747imm += R_imm_5.
read(ba) << 5;
1754 cp.
code() = std::string(
"//SB\n");
1757cp.
code() +=
"etiss_coverage_count(1, 15);\n";
1759cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
1760cp.
code() +=
"{ // block\n";
1762cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1763cp.
code() +=
"} // block\n";
1766cp.
code() +=
"etiss_coverage_count(1, 1656);\n";
1767cp.
code() +=
"{ // block\n";
1768cp.
code() +=
"etiss_uint32 store_address = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL;\n";
1769cp.
code() +=
"etiss_coverage_count(7, 1644, 1643, 1640, 1639, 1637, 1642, 1641);\n";
1770cp.
code() +=
"etiss_uint8 mem_val_0;\n";
1771cp.
code() +=
"mem_val_0 = (etiss_int8)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL]);\n";
1772cp.
code() +=
"etiss_coverage_count(7, 1655, 1647, 1646, 1654, 1652, 1651, 1649);\n";
1773cp.
code() +=
"cpu->exception |= (*(system->dwrite))(system->handle, cpu, store_address, (etiss_uint8*)&mem_val_0, 1);\n";
1774cp.
code() +=
"if (cpu->exception) { // conditional\n";
1776cp.
code() +=
"{ // procedure\n";
1777cp.
code() +=
"RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
1779cp.
code() +=
"} // procedure\n";
1781cp.
code() +=
"} // conditional\n";
1782cp.
code() +=
"} // block\n";
1785cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1792 cp.
code() = std::string(
"//SB\n");
1795cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
1807imm += R_imm_0.read(ba) << 0;
1810rs1 += R_rs1_0.read(ba) << 0;
1813rs2 += R_rs2_0.read(ba) << 0;
1815imm += R_imm_5.read(ba) << 5;
1819 std::stringstream ss;
1821ss <<
"sb" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1831 (uint32_t) 0x001023,
1832 (uint32_t) 0x00707f,
1843imm += R_imm_0.
read(ba) << 0;
1846rs1 += R_rs1_0.
read(ba) << 0;
1849rs2 += R_rs2_0.
read(ba) << 0;
1851imm += R_imm_5.
read(ba) << 5;
1858 cp.
code() = std::string(
"//SH\n");
1861cp.
code() +=
"etiss_coverage_count(1, 16);\n";
1863cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
1864cp.
code() +=
"{ // block\n";
1866cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1867cp.
code() +=
"} // block\n";
1870cp.
code() +=
"etiss_coverage_count(1, 1678);\n";
1871cp.
code() +=
"{ // block\n";
1872cp.
code() +=
"etiss_uint32 store_address = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL;\n";
1873cp.
code() +=
"etiss_coverage_count(7, 1666, 1665, 1662, 1661, 1659, 1664, 1663);\n";
1874cp.
code() +=
"etiss_uint16 mem_val_0;\n";
1875cp.
code() +=
"mem_val_0 = (etiss_int16)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL]);\n";
1876cp.
code() +=
"etiss_coverage_count(7, 1677, 1669, 1668, 1676, 1674, 1673, 1671);\n";
1877cp.
code() +=
"cpu->exception |= (*(system->dwrite))(system->handle, cpu, store_address, (etiss_uint8*)&mem_val_0, 2);\n";
1878cp.
code() +=
"if (cpu->exception) { // conditional\n";
1880cp.
code() +=
"{ // procedure\n";
1881cp.
code() +=
"RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
1883cp.
code() +=
"} // procedure\n";
1885cp.
code() +=
"} // conditional\n";
1886cp.
code() +=
"} // block\n";
1889cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1896 cp.
code() = std::string(
"//SH\n");
1899cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
1911imm += R_imm_0.read(ba) << 0;
1914rs1 += R_rs1_0.read(ba) << 0;
1917rs2 += R_rs2_0.read(ba) << 0;
1919imm += R_imm_5.read(ba) << 5;
1923 std::stringstream ss;
1925ss <<
"sh" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1935 (uint32_t) 0x002023,
1936 (uint32_t) 0x00707f,
1947imm += R_imm_0.
read(ba) << 0;
1950rs1 += R_rs1_0.
read(ba) << 0;
1953rs2 += R_rs2_0.
read(ba) << 0;
1955imm += R_imm_5.
read(ba) << 5;
1962 cp.
code() = std::string(
"//SW\n");
1965cp.
code() +=
"etiss_coverage_count(1, 17);\n";
1967cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
1968cp.
code() +=
"{ // block\n";
1970cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
1971cp.
code() +=
"} // block\n";
1974cp.
code() +=
"etiss_coverage_count(1, 1700);\n";
1975cp.
code() +=
"{ // block\n";
1976cp.
code() +=
"etiss_uint32 store_address = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL;\n";
1977cp.
code() +=
"etiss_coverage_count(7, 1688, 1687, 1684, 1683, 1681, 1686, 1685);\n";
1978cp.
code() +=
"etiss_uint32 mem_val_0;\n";
1979cp.
code() +=
"mem_val_0 = (etiss_int32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL]);\n";
1980cp.
code() +=
"etiss_coverage_count(7, 1699, 1691, 1690, 1698, 1696, 1695, 1693);\n";
1981cp.
code() +=
"cpu->exception |= (*(system->dwrite))(system->handle, cpu, store_address, (etiss_uint8*)&mem_val_0, 4);\n";
1982cp.
code() +=
"if (cpu->exception) { // conditional\n";
1984cp.
code() +=
"{ // procedure\n";
1985cp.
code() +=
"RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
1987cp.
code() +=
"} // procedure\n";
1989cp.
code() +=
"} // conditional\n";
1990cp.
code() +=
"} // block\n";
1993cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2000 cp.
code() = std::string(
"//SW\n");
2003cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
2015imm += R_imm_0.read(ba) << 0;
2018rs1 += R_rs1_0.read(ba) << 0;
2021rs2 += R_rs2_0.read(ba) << 0;
2023imm += R_imm_5.read(ba) << 5;
2027 std::stringstream ss;
2029ss <<
"sw" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
2039 (uint32_t) 0x000013,
2040 (uint32_t) 0x00707f,
2051rd += R_rd_0.
read(ba) << 0;
2054rs1 += R_rs1_0.
read(ba) << 0;
2057imm += R_imm_0.
read(ba) << 0;
2064 cp.
code() = std::string(
"//ADDI\n");
2067cp.
code() +=
"etiss_coverage_count(1, 18);\n";
2069cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
2070cp.
code() +=
"{ // block\n";
2072cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2073cp.
code() +=
"} // block\n";
2075cp.
code() +=
"etiss_coverage_count(1, 1701);\n";
2076if ((rd % 32ULL) != 0LL) {
2077cp.
code() +=
"etiss_coverage_count(5, 1707, 1704, 1702, 1705, 1706);\n";
2078cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL;\n";
2079cp.
code() +=
"etiss_coverage_count(10, 1721, 1712, 1711, 1709, 1720, 1717, 1716, 1714, 1719, 1718);\n";
2082cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2095rd += R_rd_0.read(ba) << 0;
2098rs1 += R_rs1_0.read(ba) << 0;
2101imm += R_imm_0.read(ba) << 0;
2105 std::stringstream ss;
2107ss <<
"addi" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
2117 (uint32_t) 0x002013,
2118 (uint32_t) 0x00707f,
2129rd += R_rd_0.
read(ba) << 0;
2132rs1 += R_rs1_0.
read(ba) << 0;
2135imm += R_imm_0.
read(ba) << 0;
2142 cp.
code() = std::string(
"//SLTI\n");
2145cp.
code() +=
"etiss_coverage_count(1, 19);\n";
2147cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
2148cp.
code() +=
"{ // block\n";
2150cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2151cp.
code() +=
"} // block\n";
2153cp.
code() +=
"etiss_coverage_count(1, 1722);\n";
2154if ((rd % 32ULL) != 0LL) {
2155cp.
code() +=
"etiss_coverage_count(5, 1728, 1725, 1723, 1726, 1727);\n";
2156cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (((etiss_int32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL]) < " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL)) ? (1ULL) : (0LL);\n";
2157cp.
code() +=
"etiss_coverage_count(15, 1747, 1733, 1732, 1730, 1746, 1742, 1739, 1738, 1737, 1735, 1741, 1740, 1743, 1744, 1745);\n";
2160cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2173rd += R_rd_0.read(ba) << 0;
2176rs1 += R_rs1_0.read(ba) << 0;
2179imm += R_imm_0.read(ba) << 0;
2183 std::stringstream ss;
2185ss <<
"slti" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
2195 (uint32_t) 0x003013,
2196 (uint32_t) 0x00707f,
2207rd += R_rd_0.
read(ba) << 0;
2210rs1 += R_rs1_0.
read(ba) << 0;
2213imm += R_imm_0.
read(ba) << 0;
2220 cp.
code() = std::string(
"//SLTIU\n");
2223cp.
code() +=
"etiss_coverage_count(1, 20);\n";
2225cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
2226cp.
code() +=
"{ // block\n";
2228cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2229cp.
code() +=
"} // block\n";
2231cp.
code() +=
"etiss_coverage_count(1, 1748);\n";
2232if ((rd % 32ULL) != 0LL) {
2233cp.
code() +=
"etiss_coverage_count(5, 1754, 1751, 1749, 1752, 1753);\n";
2234cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = ((*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] < " + std::to_string((
etiss_uint32)((((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))))) +
"ULL)) ? (1ULL) : (0LL);\n";
2235cp.
code() +=
"etiss_coverage_count(16, 1775, 1759, 1758, 1756, 1774, 1770, 1764, 1763, 1761, 1769, 1766, 1765, 1767, 1771, 1772, 1773);\n";
2238cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2251rd += R_rd_0.read(ba) << 0;
2254rs1 += R_rs1_0.read(ba) << 0;
2257imm += R_imm_0.read(ba) << 0;
2261 std::stringstream ss;
2263ss <<
"sltiu" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
2273 (uint32_t) 0x004013,
2274 (uint32_t) 0x00707f,
2285rd += R_rd_0.
read(ba) << 0;
2288rs1 += R_rs1_0.
read(ba) << 0;
2291imm += R_imm_0.
read(ba) << 0;
2298 cp.
code() = std::string(
"//XORI\n");
2301cp.
code() +=
"etiss_coverage_count(1, 21);\n";
2303cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
2304cp.
code() +=
"{ // block\n";
2306cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2307cp.
code() +=
"} // block\n";
2309cp.
code() +=
"etiss_coverage_count(1, 1776);\n";
2310if ((rd % 32ULL) != 0LL) {
2311cp.
code() +=
"etiss_coverage_count(5, 1782, 1779, 1777, 1780, 1781);\n";
2312cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] ^ " + std::to_string((
etiss_uint32)((((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))))) +
"ULL;\n";
2313cp.
code() +=
"etiss_coverage_count(12, 1799, 1787, 1786, 1784, 1798, 1792, 1791, 1789, 1797, 1794, 1793, 1795);\n";
2316cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2329rd += R_rd_0.read(ba) << 0;
2332rs1 += R_rs1_0.read(ba) << 0;
2335imm += R_imm_0.read(ba) << 0;
2339 std::stringstream ss;
2341ss <<
"xori" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
2351 (uint32_t) 0x006013,
2352 (uint32_t) 0x00707f,
2363rd += R_rd_0.
read(ba) << 0;
2366rs1 += R_rs1_0.
read(ba) << 0;
2369imm += R_imm_0.
read(ba) << 0;
2376 cp.
code() = std::string(
"//ORI\n");
2379cp.
code() +=
"etiss_coverage_count(1, 22);\n";
2381cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
2382cp.
code() +=
"{ // block\n";
2384cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2385cp.
code() +=
"} // block\n";
2387cp.
code() +=
"etiss_coverage_count(1, 1800);\n";
2388if ((rd % 32ULL) != 0LL) {
2389cp.
code() +=
"etiss_coverage_count(5, 1806, 1803, 1801, 1804, 1805);\n";
2390cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] | " + std::to_string((
etiss_uint32)((((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))))) +
"ULL;\n";
2391cp.
code() +=
"etiss_coverage_count(12, 1823, 1811, 1810, 1808, 1822, 1816, 1815, 1813, 1821, 1818, 1817, 1819);\n";
2394cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2407rd += R_rd_0.read(ba) << 0;
2410rs1 += R_rs1_0.read(ba) << 0;
2413imm += R_imm_0.read(ba) << 0;
2417 std::stringstream ss;
2419ss <<
"ori" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
2429 (uint32_t) 0x007013,
2430 (uint32_t) 0x00707f,
2441rd += R_rd_0.
read(ba) << 0;
2444rs1 += R_rs1_0.
read(ba) << 0;
2447imm += R_imm_0.
read(ba) << 0;
2454 cp.
code() = std::string(
"//ANDI\n");
2457cp.
code() +=
"etiss_coverage_count(1, 23);\n";
2459cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
2460cp.
code() +=
"{ // block\n";
2462cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2463cp.
code() +=
"} // block\n";
2465cp.
code() +=
"etiss_coverage_count(1, 1824);\n";
2466if ((rd % 32ULL) != 0LL) {
2467cp.
code() +=
"etiss_coverage_count(5, 1830, 1827, 1825, 1828, 1829);\n";
2468cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] & " + std::to_string((
etiss_uint32)((((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))))) +
"ULL;\n";
2469cp.
code() +=
"etiss_coverage_count(12, 1847, 1835, 1834, 1832, 1846, 1840, 1839, 1837, 1845, 1842, 1841, 1843);\n";
2472cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2485rd += R_rd_0.read(ba) << 0;
2488rs1 += R_rs1_0.read(ba) << 0;
2491imm += R_imm_0.read(ba) << 0;
2495 std::stringstream ss;
2497ss <<
"andi" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
2507 (uint32_t) 0x001013,
2508 (uint32_t) 0xfe00707f,
2519rd += R_rd_0.
read(ba) << 0;
2522rs1 += R_rs1_0.
read(ba) << 0;
2525shamt += R_shamt_0.
read(ba) << 0;
2532 cp.
code() = std::string(
"//SLLI\n");
2535cp.
code() +=
"etiss_coverage_count(1, 24);\n";
2537cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
2538cp.
code() +=
"{ // block\n";
2540cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2541cp.
code() +=
"} // block\n";
2543cp.
code() +=
"etiss_coverage_count(1, 1848);\n";
2544if ((rd % 32ULL) != 0LL) {
2545cp.
code() +=
"etiss_coverage_count(5, 1854, 1851, 1849, 1852, 1853);\n";
2546cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] << " + std::to_string(shamt) +
"ULL;\n";
2547cp.
code() +=
"etiss_coverage_count(9, 1867, 1859, 1858, 1856, 1866, 1864, 1863, 1861, 1865);\n";
2550cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2563rd += R_rd_0.read(ba) << 0;
2566rs1 += R_rs1_0.read(ba) << 0;
2569shamt += R_shamt_0.read(ba) << 0;
2573 std::stringstream ss;
2575ss <<
"slli" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | shamt=" + std::to_string(shamt) +
"]");
2585 (uint32_t) 0x005013,
2586 (uint32_t) 0xfe00707f,
2597rd += R_rd_0.
read(ba) << 0;
2600rs1 += R_rs1_0.
read(ba) << 0;
2603shamt += R_shamt_0.
read(ba) << 0;
2610 cp.
code() = std::string(
"//SRLI\n");
2613cp.
code() +=
"etiss_coverage_count(1, 25);\n";
2615cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
2616cp.
code() +=
"{ // block\n";
2618cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2619cp.
code() +=
"} // block\n";
2621cp.
code() +=
"etiss_coverage_count(1, 1868);\n";
2622if ((rd % 32ULL) != 0LL) {
2623cp.
code() +=
"etiss_coverage_count(5, 1874, 1871, 1869, 1872, 1873);\n";
2624cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] >> " + std::to_string(shamt) +
"ULL;\n";
2625cp.
code() +=
"etiss_coverage_count(9, 1887, 1879, 1878, 1876, 1886, 1884, 1883, 1881, 1885);\n";
2628cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2641rd += R_rd_0.read(ba) << 0;
2644rs1 += R_rs1_0.read(ba) << 0;
2647shamt += R_shamt_0.read(ba) << 0;
2651 std::stringstream ss;
2653ss <<
"srli" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | shamt=" + std::to_string(shamt) +
"]");
2663 (uint32_t) 0x40005013,
2664 (uint32_t) 0xfe00707f,
2675rd += R_rd_0.
read(ba) << 0;
2678rs1 += R_rs1_0.
read(ba) << 0;
2681shamt += R_shamt_0.
read(ba) << 0;
2688 cp.
code() = std::string(
"//SRAI\n");
2691cp.
code() +=
"etiss_coverage_count(1, 26);\n";
2693cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
2694cp.
code() +=
"{ // block\n";
2696cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2697cp.
code() +=
"} // block\n";
2699cp.
code() +=
"etiss_coverage_count(1, 1888);\n";
2700if ((rd % 32ULL) != 0LL) {
2701cp.
code() +=
"etiss_coverage_count(5, 1894, 1891, 1889, 1892, 1893);\n";
2702cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_int32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL]) >> " + std::to_string(shamt) +
"ULL;\n";
2703cp.
code() +=
"etiss_coverage_count(10, 1909, 1899, 1898, 1896, 1908, 1906, 1904, 1903, 1901, 1907);\n";
2706cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2719rd += R_rd_0.read(ba) << 0;
2722rs1 += R_rs1_0.read(ba) << 0;
2725shamt += R_shamt_0.read(ba) << 0;
2729 std::stringstream ss;
2731ss <<
"srai" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | shamt=" + std::to_string(shamt) +
"]");
2741 (uint32_t) 0x000033,
2742 (uint32_t) 0xfe00707f,
2753rd += R_rd_0.
read(ba) << 0;
2756rs1 += R_rs1_0.
read(ba) << 0;
2759rs2 += R_rs2_0.
read(ba) << 0;
2766 cp.
code() = std::string(
"//ADD\n");
2769cp.
code() +=
"etiss_coverage_count(1, 27);\n";
2771cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
2772cp.
code() +=
"{ // block\n";
2774cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2775cp.
code() +=
"} // block\n";
2777cp.
code() +=
"etiss_coverage_count(1, 1910);\n";
2778if ((rd % 32ULL) != 0LL) {
2779cp.
code() +=
"etiss_coverage_count(5, 1916, 1913, 1911, 1914, 1915);\n";
2780cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL];\n";
2781cp.
code() +=
"etiss_coverage_count(11, 1933, 1921, 1920, 1918, 1932, 1926, 1925, 1923, 1931, 1930, 1928);\n";
2784cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2797rd += R_rd_0.read(ba) << 0;
2800rs1 += R_rs1_0.read(ba) << 0;
2803rs2 += R_rs2_0.read(ba) << 0;
2807 std::stringstream ss;
2809ss <<
"add" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
2819 (uint32_t) 0x40000033,
2820 (uint32_t) 0xfe00707f,
2831rd += R_rd_0.
read(ba) << 0;
2834rs1 += R_rs1_0.
read(ba) << 0;
2837rs2 += R_rs2_0.
read(ba) << 0;
2844 cp.
code() = std::string(
"//SUB\n");
2847cp.
code() +=
"etiss_coverage_count(1, 28);\n";
2849cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
2850cp.
code() +=
"{ // block\n";
2852cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2853cp.
code() +=
"} // block\n";
2855cp.
code() +=
"etiss_coverage_count(1, 1934);\n";
2856if ((rd % 32ULL) != 0LL) {
2857cp.
code() +=
"etiss_coverage_count(5, 1940, 1937, 1935, 1938, 1939);\n";
2858cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] - *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL];\n";
2859cp.
code() +=
"etiss_coverage_count(11, 1957, 1945, 1944, 1942, 1956, 1950, 1949, 1947, 1955, 1954, 1952);\n";
2862cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2875rd += R_rd_0.read(ba) << 0;
2878rs1 += R_rs1_0.read(ba) << 0;
2881rs2 += R_rs2_0.read(ba) << 0;
2885 std::stringstream ss;
2887ss <<
"sub" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
2897 (uint32_t) 0x001033,
2898 (uint32_t) 0xfe00707f,
2909rd += R_rd_0.
read(ba) << 0;
2912rs1 += R_rs1_0.
read(ba) << 0;
2915rs2 += R_rs2_0.
read(ba) << 0;
2922 cp.
code() = std::string(
"//SLL\n");
2925cp.
code() +=
"etiss_coverage_count(1, 29);\n";
2927cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
2928cp.
code() +=
"{ // block\n";
2930cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
2931cp.
code() +=
"} // block\n";
2933cp.
code() +=
"etiss_coverage_count(1, 1958);\n";
2934if ((rd % 32ULL) != 0LL) {
2935cp.
code() +=
"etiss_coverage_count(5, 1964, 1961, 1959, 1962, 1963);\n";
2936cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] << (*((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL] & 31ULL);\n";
2937cp.
code() +=
"etiss_coverage_count(13, 1987, 1969, 1968, 1966, 1986, 1974, 1973, 1971, 1984, 1979, 1978, 1976, 1985);\n";
2940cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2953rd += R_rd_0.read(ba) << 0;
2956rs1 += R_rs1_0.read(ba) << 0;
2959rs2 += R_rs2_0.read(ba) << 0;
2963 std::stringstream ss;
2965ss <<
"sll" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
2975 (uint32_t) 0x002033,
2976 (uint32_t) 0xfe00707f,
2987rd += R_rd_0.
read(ba) << 0;
2990rs1 += R_rs1_0.
read(ba) << 0;
2993rs2 += R_rs2_0.
read(ba) << 0;
3000 cp.
code() = std::string(
"//SLT\n");
3003cp.
code() +=
"etiss_coverage_count(1, 30);\n";
3005cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
3006cp.
code() +=
"{ // block\n";
3008cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
3009cp.
code() +=
"} // block\n";
3011cp.
code() +=
"etiss_coverage_count(1, 1988);\n";
3012if ((rd % 32ULL) != 0LL) {
3013cp.
code() +=
"etiss_coverage_count(5, 1994, 1991, 1989, 1992, 1993);\n";
3014cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = ((etiss_int32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL]) < (etiss_int32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL])) ? (1ULL) : (0LL);\n";
3015cp.
code() +=
"etiss_coverage_count(16, 2016, 1999, 1998, 1996, 2015, 2012, 2005, 2004, 2003, 2001, 2011, 2010, 2009, 2007, 2013, 2014);\n";
3018cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
3031rd += R_rd_0.read(ba) << 0;
3034rs1 += R_rs1_0.read(ba) << 0;
3037rs2 += R_rs2_0.read(ba) << 0;
3041 std::stringstream ss;
3043ss <<
"slt" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
3053 (uint32_t) 0x003033,
3054 (uint32_t) 0xfe00707f,
3065rd += R_rd_0.
read(ba) << 0;
3068rs1 += R_rs1_0.
read(ba) << 0;
3071rs2 += R_rs2_0.
read(ba) << 0;
3078 cp.
code() = std::string(
"//SLTU\n");
3081cp.
code() +=
"etiss_coverage_count(1, 31);\n";
3083cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
3084cp.
code() +=
"{ // block\n";
3086cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
3087cp.
code() +=
"} // block\n";
3089cp.
code() +=
"etiss_coverage_count(1, 2017);\n";
3090if ((rd % 32ULL) != 0LL) {
3091cp.
code() +=
"etiss_coverage_count(5, 2023, 2020, 2018, 2021, 2022);\n";
3092cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] < *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL]) ? (1ULL) : (0LL);\n";
3093cp.
code() +=
"etiss_coverage_count(14, 2043, 2028, 2027, 2025, 2042, 2039, 2033, 2032, 2030, 2038, 2037, 2035, 2040, 2041);\n";
3096cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
3109rd += R_rd_0.read(ba) << 0;
3112rs1 += R_rs1_0.read(ba) << 0;
3115rs2 += R_rs2_0.read(ba) << 0;
3119 std::stringstream ss;
3121ss <<
"sltu" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
3131 (uint32_t) 0x004033,
3132 (uint32_t) 0xfe00707f,
3143rd += R_rd_0.
read(ba) << 0;
3146rs1 += R_rs1_0.
read(ba) << 0;
3149rs2 += R_rs2_0.
read(ba) << 0;
3156 cp.
code() = std::string(
"//XOR\n");
3159cp.
code() +=
"etiss_coverage_count(1, 32);\n";
3161cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
3162cp.
code() +=
"{ // block\n";
3164cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
3165cp.
code() +=
"} // block\n";
3167cp.
code() +=
"etiss_coverage_count(1, 2044);\n";
3168if ((rd % 32ULL) != 0LL) {
3169cp.
code() +=
"etiss_coverage_count(5, 2050, 2047, 2045, 2048, 2049);\n";
3170cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] ^ *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL];\n";
3171cp.
code() +=
"etiss_coverage_count(11, 2067, 2055, 2054, 2052, 2066, 2060, 2059, 2057, 2065, 2064, 2062);\n";
3174cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
3187rd += R_rd_0.read(ba) << 0;
3190rs1 += R_rs1_0.read(ba) << 0;
3193rs2 += R_rs2_0.read(ba) << 0;
3197 std::stringstream ss;
3199ss <<
"xor" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
3209 (uint32_t) 0x005033,
3210 (uint32_t) 0xfe00707f,
3221rd += R_rd_0.
read(ba) << 0;
3224rs1 += R_rs1_0.
read(ba) << 0;
3227rs2 += R_rs2_0.
read(ba) << 0;
3234 cp.
code() = std::string(
"//SRL\n");
3237cp.
code() +=
"etiss_coverage_count(1, 33);\n";
3239cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
3240cp.
code() +=
"{ // block\n";
3242cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
3243cp.
code() +=
"} // block\n";
3245cp.
code() +=
"etiss_coverage_count(1, 2068);\n";
3246if ((rd % 32ULL) != 0LL) {
3247cp.
code() +=
"etiss_coverage_count(5, 2074, 2071, 2069, 2072, 2073);\n";
3248cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] >> (*((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL] & 31ULL);\n";
3249cp.
code() +=
"etiss_coverage_count(13, 2097, 2079, 2078, 2076, 2096, 2084, 2083, 2081, 2094, 2089, 2088, 2086, 2095);\n";
3252cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
3265rd += R_rd_0.read(ba) << 0;
3268rs1 += R_rs1_0.read(ba) << 0;
3271rs2 += R_rs2_0.read(ba) << 0;
3275 std::stringstream ss;
3277ss <<
"srl" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
3287 (uint32_t) 0x40005033,
3288 (uint32_t) 0xfe00707f,
3299rd += R_rd_0.
read(ba) << 0;
3302rs1 += R_rs1_0.
read(ba) << 0;
3305rs2 += R_rs2_0.
read(ba) << 0;
3312 cp.
code() = std::string(
"//SRA\n");
3315cp.
code() +=
"etiss_coverage_count(1, 34);\n";
3317cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
3318cp.
code() +=
"{ // block\n";
3320cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
3321cp.
code() +=
"} // block\n";
3323cp.
code() +=
"etiss_coverage_count(1, 2098);\n";
3324if ((rd % 32ULL) != 0LL) {
3325cp.
code() +=
"etiss_coverage_count(5, 2104, 2101, 2099, 2102, 2103);\n";
3326cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_int32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL]) >> (*((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL] & 31ULL);\n";
3327cp.
code() +=
"etiss_coverage_count(14, 2128, 2109, 2108, 2106, 2127, 2115, 2114, 2113, 2111, 2125, 2120, 2119, 2117, 2126);\n";
3330cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
3343rd += R_rd_0.read(ba) << 0;
3346rs1 += R_rs1_0.read(ba) << 0;
3349rs2 += R_rs2_0.read(ba) << 0;
3353 std::stringstream ss;
3355ss <<
"sra" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
3365 (uint32_t) 0x006033,
3366 (uint32_t) 0xfe00707f,
3377rd += R_rd_0.
read(ba) << 0;
3380rs1 += R_rs1_0.
read(ba) << 0;
3383rs2 += R_rs2_0.
read(ba) << 0;
3390 cp.
code() = std::string(
"//OR\n");
3393cp.
code() +=
"etiss_coverage_count(1, 35);\n";
3395cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
3396cp.
code() +=
"{ // block\n";
3398cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
3399cp.
code() +=
"} // block\n";
3401cp.
code() +=
"etiss_coverage_count(1, 2129);\n";
3402if ((rd % 32ULL) != 0LL) {
3403cp.
code() +=
"etiss_coverage_count(5, 2135, 2132, 2130, 2133, 2134);\n";
3404cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] | *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL];\n";
3405cp.
code() +=
"etiss_coverage_count(11, 2152, 2140, 2139, 2137, 2151, 2145, 2144, 2142, 2150, 2149, 2147);\n";
3408cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
3421rd += R_rd_0.read(ba) << 0;
3424rs1 += R_rs1_0.read(ba) << 0;
3427rs2 += R_rs2_0.read(ba) << 0;
3431 std::stringstream ss;
3433ss <<
"or" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
3443 (uint32_t) 0x007033,
3444 (uint32_t) 0xfe00707f,
3455rd += R_rd_0.
read(ba) << 0;
3458rs1 += R_rs1_0.
read(ba) << 0;
3461rs2 += R_rs2_0.
read(ba) << 0;
3468 cp.
code() = std::string(
"//AND\n");
3471cp.
code() +=
"etiss_coverage_count(1, 36);\n";
3473cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
3474cp.
code() +=
"{ // block\n";
3476cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
3477cp.
code() +=
"} // block\n";
3479cp.
code() +=
"etiss_coverage_count(1, 2153);\n";
3480if ((rd % 32ULL) != 0LL) {
3481cp.
code() +=
"etiss_coverage_count(5, 2159, 2156, 2154, 2157, 2158);\n";
3482cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] & *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL];\n";
3483cp.
code() +=
"etiss_coverage_count(11, 2176, 2164, 2163, 2161, 2175, 2169, 2168, 2166, 2174, 2173, 2171);\n";
3486cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
3499rd += R_rd_0.read(ba) << 0;
3502rs1 += R_rs1_0.read(ba) << 0;
3505rs2 += R_rs2_0.read(ba) << 0;
3509 std::stringstream ss;
3511ss <<
"and" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
3521 (uint32_t) 0x00000f,
3522 (uint32_t) 0x00707f,
3533rd += R_rd_0.
read(ba) << 0;
3536rs1 += R_rs1_0.
read(ba) << 0;
3539succ += R_succ_0.
read(ba) << 0;
3542pred += R_pred_0.
read(ba) << 0;
3545fm += R_fm_0.
read(ba) << 0;
3552 cp.
code() = std::string(
"//FENCE\n");
3555cp.
code() +=
"etiss_coverage_count(1, 37);\n";
3557cp.
code() +=
"etiss_coverage_count(1, 1169);\n";
3558cp.
code() +=
"{ // block\n";
3560cp.
code() +=
"etiss_coverage_count(5, 1168, 1164, 1167, 1165, 1166);\n";
3561cp.
code() +=
"} // block\n";
3563cp.
code() +=
"((RV32IMACFD*)cpu)->FENCE[0ULL] = " + std::to_string(pred << 4ULL | succ) +
"ULL;\n";
3564cp.
code() +=
"etiss_coverage_count(7, 2185, 2179, 2184, 2182, 2180, 2181, 2183);\n";
3566cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
3579rd += R_rd_0.read(ba) << 0;
3582rs1 += R_rs1_0.read(ba) << 0;
3585succ += R_succ_0.read(ba) << 0;
3588pred += R_pred_0.read(ba) << 0;
3591fm += R_fm_0.read(ba) << 0;
3595 std::stringstream ss;
3597ss <<
"fence" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | succ=" + std::to_string(succ) +
" | pred=" + std::to_string(pred) +
" | fm=" + std::to_string(fm) +
"]");
etiss::instr::InstructionGroup ISA32_RV32IMACFD("ISA32_RV32IMACFD", 32)
static InstructionDefinition bltu_imm_rs1_rs2(ISA32_RV32IMACFD, "bltu",(uint32_t) 0x006063,(uint32_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_11(7, 7);imm+=R_imm_11.read(ba)<< 11;static BitArrayRange R_imm_1(11, 8);imm+=R_imm_1.read(ba)<< 1;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(30, 25);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_12(31, 31);imm+=R_imm_12.read(ba)<< 12;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//BLTU\n");cp.code()+="etiss_coverage_count(1, 8);\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, 1435);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 1407);\n";cp.code()+="if (*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] < *((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]) { // conditional\n";cp.code()+="etiss_coverage_count(7, 1418, 1412, 1411, 1409, 1417, 1416, 1414);\n";{ cp.code()+="etiss_coverage_count(1, 1434);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 1419);\n";if(imm % 2ULL) { cp.code()+="etiss_coverage_count(2, 1422, 1420);\n";{ cp.code()+="etiss_coverage_count(1, 1426);\n";cp.code()+="{ // block\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";cp.code()+="etiss_coverage_count(2, 1425, 1423);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // block\n";} } else { { cp.code()+="etiss_coverage_count(1, 1433);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+((etiss_int16)(((etiss_int16) imm)<<(3)) > >(3)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 1432, 1427, 1431, 1428, 1430, 1429);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\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("//BLTU\n");cp.code()+="if (cpu->return_pending || cpu->exception || cpu->nextPc != "+std::to_string(ic.current_address_+4)+"ULL) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_11(7, 7);imm+=R_imm_11.read(ba)<< 11;static BitArrayRange R_imm_1(11, 8);imm+=R_imm_1.read(ba)<< 1;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(30, 25);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_12(31, 31);imm+=R_imm_12.read(ba)<< 12;std::stringstream ss;ss<< "bltu"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition bne_imm_rs1_rs2(ISA32_RV32IMACFD, "bne",(uint32_t) 0x001063,(uint32_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_11(7, 7);imm+=R_imm_11.read(ba)<< 11;static BitArrayRange R_imm_1(11, 8);imm+=R_imm_1.read(ba)<< 1;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(30, 25);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_12(31, 31);imm+=R_imm_12.read(ba)<< 12;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//BNE\n");cp.code()+="etiss_coverage_count(1, 5);\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, 1340);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 1312);\n";cp.code()+="if (*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] != *((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]) { // conditional\n";cp.code()+="etiss_coverage_count(7, 1323, 1317, 1316, 1314, 1322, 1321, 1319);\n";{ cp.code()+="etiss_coverage_count(1, 1339);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 1324);\n";if(imm % 2ULL) { cp.code()+="etiss_coverage_count(2, 1327, 1325);\n";{ cp.code()+="etiss_coverage_count(1, 1331);\n";cp.code()+="{ // block\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";cp.code()+="etiss_coverage_count(2, 1330, 1328);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // block\n";} } else { { cp.code()+="etiss_coverage_count(1, 1338);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+((etiss_int16)(((etiss_int16) imm)<<(3)) > >(3)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 1337, 1332, 1336, 1333, 1335, 1334);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\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("//BNE\n");cp.code()+="if (cpu->return_pending || cpu->exception || cpu->nextPc != "+std::to_string(ic.current_address_+4)+"ULL) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_11(7, 7);imm+=R_imm_11.read(ba)<< 11;static BitArrayRange R_imm_1(11, 8);imm+=R_imm_1.read(ba)<< 1;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(30, 25);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_12(31, 31);imm+=R_imm_12.read(ba)<< 12;std::stringstream ss;ss<< "bne"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition srai_rd_rs1_shamt(ISA32_RV32IMACFD, "srai",(uint32_t) 0x40005013,(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 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SRAI\n");cp.code()+="etiss_coverage_count(1, 26);\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, 1888);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1894, 1891, 1889, 1892, 1893);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_int32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]) >> "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(10, 1909, 1899, 1898, 1896, 1908, 1906, 1904, 1903, 1901, 1907);\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 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;std::stringstream ss;ss<< "srai"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | shamt="+std::to_string(shamt)+"]");return ss.str();})
static InstructionDefinition fence_rd_rs1_succ_pred_fm(ISA32_RV32IMACFD, "fence",(uint32_t) 0x00000f,(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_uint8 succ=0;static BitArrayRange R_succ_0(23, 20);succ+=R_succ_0.read(ba)<< 0;etiss_uint8 pred=0;static BitArrayRange R_pred_0(27, 24);pred+=R_pred_0.read(ba)<< 0;etiss_uint8 fm=0;static BitArrayRange R_fm_0(31, 28);fm+=R_fm_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FENCE\n");cp.code()+="etiss_coverage_count(1, 37);\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()+="((RV32IMACFD*)cpu)->FENCE[0ULL] = "+std::to_string(pred<< 4ULL|succ)+"ULL;\n";cp.code()+="etiss_coverage_count(7, 2185, 2179, 2184, 2182, 2180, 2181, 2183);\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 succ=0;static BitArrayRange R_succ_0(23, 20);succ+=R_succ_0.read(ba)<< 0;etiss_uint8 pred=0;static BitArrayRange R_pred_0(27, 24);pred+=R_pred_0.read(ba)<< 0;etiss_uint8 fm=0;static BitArrayRange R_fm_0(31, 28);fm+=R_fm_0.read(ba)<< 0;std::stringstream ss;ss<< "fence"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | succ="+std::to_string(succ)+" | pred="+std::to_string(pred)+" | fm="+std::to_string(fm)+"]");return ss.str();})
static InstructionDefinition auipc_rd_imm(ISA32_RV32IMACFD, "auipc",(uint32_t) 0x000017,(uint32_t) 0x00007f, [](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_uint32 imm=0;static BitArrayRange R_imm_12(31, 12);imm+=R_imm_12.read(ba)<< 12;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//AUIPC\n");cp.code()+="etiss_coverage_count(1, 1);\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, 1188);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1194, 1191, 1189, 1192, 1193);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = "+std::to_string(ic.current_address_+(etiss_int32)(imm))+"LL;\n";cp.code()+="etiss_coverage_count(8, 1204, 1199, 1198, 1196, 1203, 1200, 1202, 1201);\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_uint32 imm=0;static BitArrayRange R_imm_12(31, 12);imm+=R_imm_12.read(ba)<< 12;std::stringstream ss;ss<< "auipc"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition beq_imm_rs1_rs2(ISA32_RV32IMACFD, "beq",(uint32_t) 0x000063,(uint32_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_11(7, 7);imm+=R_imm_11.read(ba)<< 11;static BitArrayRange R_imm_1(11, 8);imm+=R_imm_1.read(ba)<< 1;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(30, 25);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_12(31, 31);imm+=R_imm_12.read(ba)<< 12;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//BEQ\n");cp.code()+="etiss_coverage_count(1, 4);\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, 1311);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 1283);\n";cp.code()+="if (*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] == *((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]) { // conditional\n";cp.code()+="etiss_coverage_count(7, 1294, 1288, 1287, 1285, 1293, 1292, 1290);\n";{ cp.code()+="etiss_coverage_count(1, 1310);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 1295);\n";if(imm % 2ULL) { cp.code()+="etiss_coverage_count(2, 1298, 1296);\n";{ cp.code()+="etiss_coverage_count(1, 1302);\n";cp.code()+="{ // block\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";cp.code()+="etiss_coverage_count(2, 1301, 1299);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // block\n";} } else { { cp.code()+="etiss_coverage_count(1, 1309);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+((etiss_int16)(((etiss_int16) imm)<<(3)) > >(3)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 1308, 1303, 1307, 1304, 1306, 1305);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\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("//BEQ\n");cp.code()+="if (cpu->return_pending || cpu->exception || cpu->nextPc != "+std::to_string(ic.current_address_+4)+"ULL) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_11(7, 7);imm+=R_imm_11.read(ba)<< 11;static BitArrayRange R_imm_1(11, 8);imm+=R_imm_1.read(ba)<< 1;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(30, 25);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_12(31, 31);imm+=R_imm_12.read(ba)<< 12;std::stringstream ss;ss<< "beq"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition ori_rd_rs1_imm(ISA32_RV32IMACFD, "ori",(uint32_t) 0x006013,(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("//ORI\n");cp.code()+="etiss_coverage_count(1, 22);\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, 1800);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1806, 1803, 1801, 1804, 1805);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] | "+std::to_string((etiss_uint32)((((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))))+"ULL;\n";cp.code()+="etiss_coverage_count(12, 1823, 1811, 1810, 1808, 1822, 1816, 1815, 1813, 1821, 1818, 1817, 1819);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;std::stringstream ss;ss<< "ori"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition srl_rd_rs1_rs2(ISA32_RV32IMACFD, "srl",(uint32_t) 0x005033,(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("//SRL\n");cp.code()+="etiss_coverage_count(1, 33);\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, 2068);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2074, 2071, 2069, 2072, 2073);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] >> (*((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL] & 31ULL);\n";cp.code()+="etiss_coverage_count(13, 2097, 2079, 2078, 2076, 2096, 2084, 2083, 2081, 2094, 2089, 2088, 2086, 2095);\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<< "srl"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition addi_rd_rs1_imm(ISA32_RV32IMACFD, "addi",(uint32_t) 0x000013,(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("//ADDI\n");cp.code()+="etiss_coverage_count(1, 18);\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, 1701);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1707, 1704, 1702, 1705, 1706);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)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(10, 1721, 1712, 1711, 1709, 1720, 1717, 1716, 1714, 1719, 1718);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;std::stringstream ss;ss<< "addi"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition and_rd_rs1_rs2(ISA32_RV32IMACFD, "and",(uint32_t) 0x007033,(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("//AND\n");cp.code()+="etiss_coverage_count(1, 36);\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, 2153);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2159, 2156, 2154, 2157, 2158);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] & *((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(11, 2176, 2164, 2163, 2161, 2175, 2169, 2168, 2166, 2174, 2173, 2171);\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<< "and"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition slli_rd_rs1_shamt(ISA32_RV32IMACFD, "slli",(uint32_t) 0x001013,(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 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SLLI\n");cp.code()+="etiss_coverage_count(1, 24);\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, 1848);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1854, 1851, 1849, 1852, 1853);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] << "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(9, 1867, 1859, 1858, 1856, 1866, 1864, 1863, 1861, 1865);\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 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;std::stringstream ss;ss<< "slli"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | shamt="+std::to_string(shamt)+"]");return ss.str();})
static InstructionDefinition lw_rd_rs1_imm(ISA32_RV32IMACFD, "lw",(uint32_t) 0x002003,(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("//LW\n");cp.code()+="etiss_coverage_count(1, 12);\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, 1566);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 load_address = *((RV32IMACFD*)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, 1542, 1541, 1538, 1537, 1535, 1540, 1539);\n";cp.code()+="etiss_uint32 mem_val_0;\n";cp.code()+="cpu->exception |= (*(system->dread))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 4);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // conditional\n";cp.code()+="etiss_int32 res = (etiss_int32)(mem_val_0);\n";cp.code()+="etiss_coverage_count(4, 1549, 1548, 1546, 1545);\n";cp.code()+="etiss_coverage_count(1, 1550);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1556, 1553, 1551, 1554, 1555);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint32)(res);\n";cp.code()+="etiss_coverage_count(6, 1565, 1561, 1560, 1558, 1564, 1562);\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("//LW\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<< "lw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition andi_rd_rs1_imm(ISA32_RV32IMACFD, "andi",(uint32_t) 0x007013,(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("//ANDI\n");cp.code()+="etiss_coverage_count(1, 23);\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, 1824);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1830, 1827, 1825, 1828, 1829);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] & "+std::to_string((etiss_uint32)((((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))))+"ULL;\n";cp.code()+="etiss_coverage_count(12, 1847, 1835, 1834, 1832, 1846, 1840, 1839, 1837, 1845, 1842, 1841, 1843);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;std::stringstream ss;ss<< "andi"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition lh_rd_rs1_imm(ISA32_RV32IMACFD, "lh",(uint32_t) 0x001003,(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("//LH\n");cp.code()+="etiss_coverage_count(1, 11);\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, 1532);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 load_address = *((RV32IMACFD*)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, 1508, 1507, 1504, 1503, 1501, 1506, 1505);\n";cp.code()+="etiss_uint16 mem_val_0;\n";cp.code()+="cpu->exception |= (*(system->dread))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 2);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_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_int16 res = (etiss_int16)(mem_val_0);\n";cp.code()+="etiss_coverage_count(4, 1515, 1514, 1512, 1511);\n";cp.code()+="etiss_coverage_count(1, 1516);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1522, 1519, 1517, 1520, 1521);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint32)(res);\n";cp.code()+="etiss_coverage_count(6, 1531, 1527, 1526, 1524, 1530, 1528);\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("//LH\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<< "lh"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition bge_imm_rs1_rs2(ISA32_RV32IMACFD, "bge",(uint32_t) 0x005063,(uint32_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_11(7, 7);imm+=R_imm_11.read(ba)<< 11;static BitArrayRange R_imm_1(11, 8);imm+=R_imm_1.read(ba)<< 1;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(30, 25);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_12(31, 31);imm+=R_imm_12.read(ba)<< 12;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//BGE\n");cp.code()+="etiss_coverage_count(1, 7);\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, 1406);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 1374);\n";cp.code()+="if ((etiss_int32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]) >= (etiss_int32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL])) { // conditional\n";cp.code()+="etiss_coverage_count(9, 1389, 1381, 1379, 1378, 1376, 1388, 1386, 1385, 1383);\n";{ cp.code()+="etiss_coverage_count(1, 1405);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 1390);\n";if(imm % 2ULL) { cp.code()+="etiss_coverage_count(2, 1393, 1391);\n";{ cp.code()+="etiss_coverage_count(1, 1397);\n";cp.code()+="{ // block\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";cp.code()+="etiss_coverage_count(2, 1396, 1394);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // block\n";} } else { { cp.code()+="etiss_coverage_count(1, 1404);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+((etiss_int16)(((etiss_int16) imm)<<(3)) > >(3)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 1403, 1398, 1402, 1399, 1401, 1400);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\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("//BGE\n");cp.code()+="if (cpu->return_pending || cpu->exception || cpu->nextPc != "+std::to_string(ic.current_address_+4)+"ULL) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_11(7, 7);imm+=R_imm_11.read(ba)<< 11;static BitArrayRange R_imm_1(11, 8);imm+=R_imm_1.read(ba)<< 1;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(30, 25);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_12(31, 31);imm+=R_imm_12.read(ba)<< 12;std::stringstream ss;ss<< "bge"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition xor_rd_rs1_rs2(ISA32_RV32IMACFD, "xor",(uint32_t) 0x004033,(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("//XOR\n");cp.code()+="etiss_coverage_count(1, 32);\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, 2044);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2050, 2047, 2045, 2048, 2049);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] ^ *((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(11, 2067, 2055, 2054, 2052, 2066, 2060, 2059, 2057, 2065, 2064, 2062);\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<< "xor"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition slt_rd_rs1_rs2(ISA32_RV32IMACFD, "slt",(uint32_t) 0x002033,(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("//SLT\n");cp.code()+="etiss_coverage_count(1, 30);\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, 1988);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1994, 1991, 1989, 1992, 1993);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = ((etiss_int32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]) < (etiss_int32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL])) ? (1ULL) : (0LL);\n";cp.code()+="etiss_coverage_count(16, 2016, 1999, 1998, 1996, 2015, 2012, 2005, 2004, 2003, 2001, 2011, 2010, 2009, 2007, 2013, 2014);\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<< "slt"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition slti_rd_rs1_imm(ISA32_RV32IMACFD, "slti",(uint32_t) 0x002013,(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("//SLTI\n");cp.code()+="etiss_coverage_count(1, 19);\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, 1722);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1728, 1725, 1723, 1726, 1727);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (((etiss_int32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]) < "+std::to_string(((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL)) ? (1ULL) : (0LL);\n";cp.code()+="etiss_coverage_count(15, 1747, 1733, 1732, 1730, 1746, 1742, 1739, 1738, 1737, 1735, 1741, 1740, 1743, 1744, 1745);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;std::stringstream ss;ss<< "slti"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition sh_imm_rs1_rs2(ISA32_RV32IMACFD, "sh",(uint32_t) 0x001023,(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("//SH\n");cp.code()+="etiss_coverage_count(1, 16);\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, 1678);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 store_address = *((RV32IMACFD*)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, 1666, 1665, 1662, 1661, 1659, 1664, 1663);\n";cp.code()+="etiss_uint16 mem_val_0;\n";cp.code()+="mem_val_0 = (etiss_int16)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(7, 1677, 1669, 1668, 1676, 1674, 1673, 1671);\n";cp.code()+="cpu->exception |= (*(system->dwrite))(system->handle, cpu, store_address, (etiss_uint8*)&mem_val_0, 2);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_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("//SH\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<< "sh"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition lbu_rd_rs1_imm(ISA32_RV32IMACFD, "lbu",(uint32_t) 0x004003,(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("//LBU\n");cp.code()+="etiss_coverage_count(1, 13);\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, 1600);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 load_address = *((RV32IMACFD*)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, 1576, 1575, 1572, 1571, 1569, 1574, 1573);\n";cp.code()+="etiss_uint8 mem_val_0;\n";cp.code()+="cpu->exception |= (*(system->dread))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 1);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_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_uint8 res = (etiss_uint8)(mem_val_0);\n";cp.code()+="etiss_coverage_count(4, 1583, 1582, 1580, 1579);\n";cp.code()+="etiss_coverage_count(1, 1584);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1590, 1587, 1585, 1588, 1589);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint32)(res);\n";cp.code()+="etiss_coverage_count(6, 1599, 1595, 1594, 1592, 1598, 1596);\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("//LBU\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<< "lbu"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition lhu_rd_rs1_imm(ISA32_RV32IMACFD, "lhu",(uint32_t) 0x005003,(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("//LHU\n");cp.code()+="etiss_coverage_count(1, 14);\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, 1634);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 load_address = *((RV32IMACFD*)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, 1610, 1609, 1606, 1605, 1603, 1608, 1607);\n";cp.code()+="etiss_uint16 mem_val_0;\n";cp.code()+="cpu->exception |= (*(system->dread))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 2);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_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_uint16 res = (etiss_uint16)(mem_val_0);\n";cp.code()+="etiss_coverage_count(4, 1617, 1616, 1614, 1613);\n";cp.code()+="etiss_coverage_count(1, 1618);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1624, 1621, 1619, 1622, 1623);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint32)(res);\n";cp.code()+="etiss_coverage_count(6, 1633, 1629, 1628, 1626, 1632, 1630);\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("//LHU\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<< "lhu"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition sltu_rd_rs1_rs2(ISA32_RV32IMACFD, "sltu",(uint32_t) 0x003033,(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("//SLTU\n");cp.code()+="etiss_coverage_count(1, 31);\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, 2017);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2023, 2020, 2018, 2021, 2022);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] < *((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]) ? (1ULL) : (0LL);\n";cp.code()+="etiss_coverage_count(14, 2043, 2028, 2027, 2025, 2042, 2039, 2033, 2032, 2030, 2038, 2037, 2035, 2040, 2041);\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<< "sltu"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition bgeu_imm_rs1_rs2(ISA32_RV32IMACFD, "bgeu",(uint32_t) 0x007063,(uint32_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_11(7, 7);imm+=R_imm_11.read(ba)<< 11;static BitArrayRange R_imm_1(11, 8);imm+=R_imm_1.read(ba)<< 1;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(30, 25);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_12(31, 31);imm+=R_imm_12.read(ba)<< 12;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//BGEU\n");cp.code()+="etiss_coverage_count(1, 9);\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, 1464);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 1436);\n";cp.code()+="if (*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] >= *((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]) { // conditional\n";cp.code()+="etiss_coverage_count(7, 1447, 1441, 1440, 1438, 1446, 1445, 1443);\n";{ cp.code()+="etiss_coverage_count(1, 1463);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 1448);\n";if(imm % 2ULL) { cp.code()+="etiss_coverage_count(2, 1451, 1449);\n";{ cp.code()+="etiss_coverage_count(1, 1455);\n";cp.code()+="{ // block\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";cp.code()+="etiss_coverage_count(2, 1454, 1452);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // block\n";} } else { { cp.code()+="etiss_coverage_count(1, 1462);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+((etiss_int16)(((etiss_int16) imm)<<(3)) > >(3)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 1461, 1456, 1460, 1457, 1459, 1458);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\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("//BGEU\n");cp.code()+="if (cpu->return_pending || cpu->exception || cpu->nextPc != "+std::to_string(ic.current_address_+4)+"ULL) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_11(7, 7);imm+=R_imm_11.read(ba)<< 11;static BitArrayRange R_imm_1(11, 8);imm+=R_imm_1.read(ba)<< 1;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(30, 25);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_12(31, 31);imm+=R_imm_12.read(ba)<< 12;std::stringstream ss;ss<< "bgeu"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition sw_imm_rs1_rs2(ISA32_RV32IMACFD, "sw",(uint32_t) 0x002023,(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("//SW\n");cp.code()+="etiss_coverage_count(1, 17);\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, 1700);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 store_address = *((RV32IMACFD*)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, 1688, 1687, 1684, 1683, 1681, 1686, 1685);\n";cp.code()+="etiss_uint32 mem_val_0;\n";cp.code()+="mem_val_0 = (etiss_int32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(7, 1699, 1691, 1690, 1698, 1696, 1695, 1693);\n";cp.code()+="cpu->exception |= (*(system->dwrite))(system->handle, cpu, store_address, (etiss_uint8*)&mem_val_0, 4);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_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("//SW\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<< "sw"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition xori_rd_rs1_imm(ISA32_RV32IMACFD, "xori",(uint32_t) 0x004013,(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("//XORI\n");cp.code()+="etiss_coverage_count(1, 21);\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, 1776);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1782, 1779, 1777, 1780, 1781);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] ^ "+std::to_string((etiss_uint32)((((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))))+"ULL;\n";cp.code()+="etiss_coverage_count(12, 1799, 1787, 1786, 1784, 1798, 1792, 1791, 1789, 1797, 1794, 1793, 1795);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;std::stringstream ss;ss<< "xori"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition jal_rd_imm(ISA32_RV32IMACFD, "jal",(uint32_t) 0x00006f,(uint32_t) 0x00007f, [](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_uint32 imm=0;static BitArrayRange R_imm_12(19, 12);imm+=R_imm_12.read(ba)<< 12;static BitArrayRange R_imm_11(20, 20);imm+=R_imm_11.read(ba)<< 11;static BitArrayRange R_imm_1(30, 21);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_20(31, 31);imm+=R_imm_20.read(ba)<< 20;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//JAL\n");cp.code()+="etiss_coverage_count(1, 2);\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, 1236);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 1205);\n";if(imm % 2ULL) { cp.code()+="etiss_coverage_count(2, 1208, 1206);\n";{ cp.code()+="etiss_coverage_count(1, 1212);\n";cp.code()+="{ // block\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";cp.code()+="etiss_coverage_count(2, 1211, 1209);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // block\n";} } else { { cp.code()+="etiss_coverage_count(1, 1235);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 1213);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1219, 1216, 1214, 1217, 1218);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = "+std::to_string(ic.current_address_+4ULL)+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1228, 1224, 1223, 1221, 1227, 1225, 1226);\n";} cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+((etiss_int32)(((etiss_int32) imm)<<(11)) > >(11)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 1234, 1229, 1233, 1230, 1232, 1231);\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("//JAL\n");cp.code()+="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_uint32 imm=0;static BitArrayRange R_imm_12(19, 12);imm+=R_imm_12.read(ba)<< 12;static BitArrayRange R_imm_11(20, 20);imm+=R_imm_11.read(ba)<< 11;static BitArrayRange R_imm_1(30, 21);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_20(31, 31);imm+=R_imm_20.read(ba)<< 20;std::stringstream ss;ss<< "jal"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition add_rd_rs1_rs2(ISA32_RV32IMACFD, "add",(uint32_t) 0x000033,(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("//ADD\n");cp.code()+="etiss_coverage_count(1, 27);\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, 1910);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1916, 1913, 1911, 1914, 1915);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + *((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(11, 1933, 1921, 1920, 1918, 1932, 1926, 1925, 1923, 1931, 1930, 1928);\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<< "add"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition or_rd_rs1_rs2(ISA32_RV32IMACFD, "or",(uint32_t) 0x006033,(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("//OR\n");cp.code()+="etiss_coverage_count(1, 35);\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, 2129);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2135, 2132, 2130, 2133, 2134);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] | *((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(11, 2152, 2140, 2139, 2137, 2151, 2145, 2144, 2142, 2150, 2149, 2147);\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<< "or"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition jalr_rd_rs1_imm(ISA32_RV32IMACFD, "jalr",(uint32_t) 0x000067,(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("//JALR\n");cp.code()+="etiss_coverage_count(1, 3);\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, 1282);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 new_pc = (*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + "+std::to_string(((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL) & -2LL;\n";cp.code()+="etiss_coverage_count(9, 1250, 1249, 1245, 1242, 1241, 1239, 1244, 1243, 1246);\n";cp.code()+="etiss_coverage_count(1, 1251);\n";cp.code()+="if (new_pc % 2ULL) { // conditional\n";cp.code()+="etiss_coverage_count(2, 1254, 1252);\n";{ cp.code()+="etiss_coverage_count(1, 1258);\n";cp.code()+="{ // block\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";cp.code()+="etiss_coverage_count(2, 1257, 1255);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // block\n";} cp.code()+="} // conditional\n";cp.code()+="else { // conditional\n";{ cp.code()+="etiss_coverage_count(1, 1281);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 1259);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1265, 1262, 1260, 1263, 1264);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = "+std::to_string(ic.current_address_+4ULL)+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1274, 1270, 1269, 1267, 1273, 1271, 1272);\n";} cp.code()+="cpu->nextPc = new_pc & -2LL;\n";cp.code()+="etiss_coverage_count(4, 1280, 1275, 1279, 1276);\n";cp.code()+="} // block\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("//JALR\n");cp.code()+="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<< "jalr"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition sb_imm_rs1_rs2(ISA32_RV32IMACFD, "sb",(uint32_t) 0x000023,(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("//SB\n");cp.code()+="etiss_coverage_count(1, 15);\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, 1656);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 store_address = *((RV32IMACFD*)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, 1644, 1643, 1640, 1639, 1637, 1642, 1641);\n";cp.code()+="etiss_uint8 mem_val_0;\n";cp.code()+="mem_val_0 = (etiss_int8)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(7, 1655, 1647, 1646, 1654, 1652, 1651, 1649);\n";cp.code()+="cpu->exception |= (*(system->dwrite))(system->handle, cpu, store_address, (etiss_uint8*)&mem_val_0, 1);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_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("//SB\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<< "sb"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition sra_rd_rs1_rs2(ISA32_RV32IMACFD, "sra",(uint32_t) 0x40005033,(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("//SRA\n");cp.code()+="etiss_coverage_count(1, 34);\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, 2098);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2104, 2101, 2099, 2102, 2103);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_int32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]) >> (*((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL] & 31ULL);\n";cp.code()+="etiss_coverage_count(14, 2128, 2109, 2108, 2106, 2127, 2115, 2114, 2113, 2111, 2125, 2120, 2119, 2117, 2126);\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<< "sra"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition sll_rd_rs1_rs2(ISA32_RV32IMACFD, "sll",(uint32_t) 0x001033,(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("//SLL\n");cp.code()+="etiss_coverage_count(1, 29);\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, 1958);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1964, 1961, 1959, 1962, 1963);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] << (*((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL] & 31ULL);\n";cp.code()+="etiss_coverage_count(13, 1987, 1969, 1968, 1966, 1986, 1974, 1973, 1971, 1984, 1979, 1978, 1976, 1985);\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<< "sll"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition sub_rd_rs1_rs2(ISA32_RV32IMACFD, "sub",(uint32_t) 0x40000033,(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("//SUB\n");cp.code()+="etiss_coverage_count(1, 28);\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, 1934);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1940, 1937, 1935, 1938, 1939);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] - *((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(11, 1957, 1945, 1944, 1942, 1956, 1950, 1949, 1947, 1955, 1954, 1952);\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<< "sub"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition lui_rd_imm(ISA32_RV32IMACFD, "lui",(uint32_t) 0x000037,(uint32_t) 0x00007f, [](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_uint32 imm=0;static BitArrayRange R_imm_12(31, 12);imm+=R_imm_12.read(ba)<< 12;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//LUI\n");cp.code()+="etiss_coverage_count(1, 0);\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, 1170);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1176, 1173, 1171, 1174, 1175);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = "+std::to_string((etiss_uint32)(((etiss_int32)(imm))))+"ULL;\n";cp.code()+="etiss_coverage_count(8, 1187, 1181, 1180, 1178, 1186, 1183, 1182, 1184);\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_uint32 imm=0;static BitArrayRange R_imm_12(31, 12);imm+=R_imm_12.read(ba)<< 12;std::stringstream ss;ss<< "lui"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition blt_imm_rs1_rs2(ISA32_RV32IMACFD, "blt",(uint32_t) 0x004063,(uint32_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_11(7, 7);imm+=R_imm_11.read(ba)<< 11;static BitArrayRange R_imm_1(11, 8);imm+=R_imm_1.read(ba)<< 1;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(30, 25);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_12(31, 31);imm+=R_imm_12.read(ba)<< 12;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//BLT\n");cp.code()+="etiss_coverage_count(1, 6);\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, 1373);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 1341);\n";cp.code()+="if ((etiss_int32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]) < (etiss_int32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL])) { // conditional\n";cp.code()+="etiss_coverage_count(9, 1356, 1348, 1346, 1345, 1343, 1355, 1353, 1352, 1350);\n";{ cp.code()+="etiss_coverage_count(1, 1372);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 1357);\n";if(imm % 2ULL) { cp.code()+="etiss_coverage_count(2, 1360, 1358);\n";{ cp.code()+="etiss_coverage_count(1, 1364);\n";cp.code()+="{ // block\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 0LL);\n";cp.code()+="etiss_coverage_count(2, 1363, 1361);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // block\n";} } else { { cp.code()+="etiss_coverage_count(1, 1371);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+((etiss_int16)(((etiss_int16) imm)<<(3)) > >(3)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 1370, 1365, 1369, 1366, 1368, 1367);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\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("//BLT\n");cp.code()+="if (cpu->return_pending || cpu->exception || cpu->nextPc != "+std::to_string(ic.current_address_+4)+"ULL) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_11(7, 7);imm+=R_imm_11.read(ba)<< 11;static BitArrayRange R_imm_1(11, 8);imm+=R_imm_1.read(ba)<< 1;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(30, 25);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_12(31, 31);imm+=R_imm_12.read(ba)<< 12;std::stringstream ss;ss<< "blt"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition lb_rd_rs1_imm(ISA32_RV32IMACFD, "lb",(uint32_t) 0x000003,(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("//LB\n");cp.code()+="etiss_coverage_count(1, 10);\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, 1498);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 load_address = *((RV32IMACFD*)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, 1474, 1473, 1470, 1469, 1467, 1472, 1471);\n";cp.code()+="etiss_uint8 mem_val_0;\n";cp.code()+="cpu->exception |= (*(system->dread))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 1);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_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_int8 res = (etiss_int8)(mem_val_0);\n";cp.code()+="etiss_coverage_count(4, 1481, 1480, 1478, 1477);\n";cp.code()+="etiss_coverage_count(1, 1482);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1488, 1485, 1483, 1486, 1487);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint32)(res);\n";cp.code()+="etiss_coverage_count(6, 1497, 1493, 1492, 1490, 1496, 1494);\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("//LB\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<< "lb"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition srli_rd_rs1_shamt(ISA32_RV32IMACFD, "srli",(uint32_t) 0x005013,(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 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SRLI\n");cp.code()+="etiss_coverage_count(1, 25);\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, 1868);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1874, 1871, 1869, 1872, 1873);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] >> "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(9, 1887, 1879, 1878, 1876, 1886, 1884, 1883, 1881, 1885);\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 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;std::stringstream ss;ss<< "srli"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | shamt="+std::to_string(shamt)+"]");return ss.str();})
static InstructionDefinition sltiu_rd_rs1_imm(ISA32_RV32IMACFD, "sltiu",(uint32_t) 0x003013,(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("//SLTIU\n");cp.code()+="etiss_coverage_count(1, 20);\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, 1748);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 1754, 1751, 1749, 1752, 1753);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = ((*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] < "+std::to_string((etiss_uint32)((((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))))+"ULL)) ? (1ULL) : (0LL);\n";cp.code()+="etiss_coverage_count(16, 1775, 1759, 1758, 1756, 1774, 1770, 1764, 1763, 1761, 1769, 1766, 1765, 1767, 1771, 1772, 1773);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;std::stringstream ss;ss<< "sltiu"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
Contains a small code snipped.
@ APPENDEDRETURNINGREQUIRED
RegisterSet & getAffectedRegisters()
void append(const CodePart &part, CodePart::TYPE type)
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...
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.
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.