32rd += R_rd_0.
read(ba) << 0;
35imm += R_imm_3.
read(ba) << 3;
37imm += R_imm_2.
read(ba) << 2;
39imm += R_imm_6.
read(ba) << 6;
41imm += R_imm_4.
read(ba) << 4;
49 cp.
code() = std::string(
"//CADDI4SPN\n");
52cp.
code() +=
"etiss_coverage_count(1, 42);\n";
54cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
55cp.
code() +=
"{ // block\n";
57cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
58cp.
code() +=
"} // block\n";
60cp.
code() +=
"etiss_coverage_count(1, 2240);\n";
62cp.
code() +=
"etiss_coverage_count(1, 2241);\n";
63cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[2ULL] + " + std::to_string(imm) +
"ULL;\n";
64cp.
code() +=
"etiss_coverage_count(9, 2252, 2246, 2245, 2243, 2244, 2251, 2249, 2248, 2250);\n";
68cp.
code() +=
"{ // procedure\n";
69cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
70cp.
code() +=
"etiss_coverage_count(2, 2255, 2253);\n";
72cp.
code() +=
"} // procedure\n";
76cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
83 cp.
code() = std::string(
"//CADDI4SPN\n");
86cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
98rd += R_rd_0.read(ba) << 0;
101imm += R_imm_3.read(ba) << 3;
103imm += R_imm_2.read(ba) << 2;
105imm += R_imm_6.read(ba) << 6;
107imm += R_imm_4.read(ba) << 4;
111 std::stringstream ss;
113ss <<
"caddi4spn" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | imm=" + std::to_string(imm) +
"]");
136rd += R_rd_0.
read(ba) << 0;
139uimm += R_uimm_6.
read(ba) << 6;
141uimm += R_uimm_2.
read(ba) << 2;
144rs1 += R_rs1_0.
read(ba) << 0;
146uimm += R_uimm_3.
read(ba) << 3;
154 cp.
code() = std::string(
"//CLW\n");
157cp.
code() +=
"etiss_coverage_count(1, 43);\n";
159cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
160cp.
code() +=
"{ // block\n";
162cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
163cp.
code() +=
"} // block\n";
166cp.
code() +=
"etiss_coverage_count(1, 2279);\n";
167cp.
code() +=
"{ // block\n";
168cp.
code() +=
"etiss_uint32 load_address = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) +
"ULL] + " + std::to_string(uimm) +
"ULL;\n";
169cp.
code() +=
"etiss_coverage_count(7, 2264, 2263, 2261, 2260, 2258, 2259, 2262);\n";
170cp.
code() +=
"etiss_uint32 mem_val_0;\n";
171cp.
code() +=
"cpu->exception |= (*(system->dread))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 4);\n";
172cp.
code() +=
"if (cpu->exception) { // conditional\n";
174cp.
code() +=
"{ // procedure\n";
175cp.
code() +=
"RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
177cp.
code() +=
"} // procedure\n";
179cp.
code() +=
"} // conditional\n";
180cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) +
"ULL] = (etiss_int32)(mem_val_0);\n";
181cp.
code() +=
"etiss_coverage_count(10, 2278, 2269, 2268, 2266, 2267, 2277, 2275, 2273, 2271, 2272);\n";
182cp.
code() +=
"} // block\n";
185cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
192 cp.
code() = std::string(
"//CLW\n");
195cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
207rd += R_rd_0.read(ba) << 0;
210uimm += R_uimm_6.read(ba) << 6;
212uimm += R_uimm_2.read(ba) << 2;
215rs1 += R_rs1_0.read(ba) << 0;
217uimm += R_uimm_3.read(ba) << 3;
221 std::stringstream ss;
223ss <<
"clw" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | uimm=" + std::to_string(uimm) +
" | rs1=" + std::to_string(rs1) +
"]");
246rs2 += R_rs2_0.
read(ba) << 0;
249uimm += R_uimm_6.
read(ba) << 6;
251uimm += R_uimm_2.
read(ba) << 2;
254rs1 += R_rs1_0.
read(ba) << 0;
256uimm += R_uimm_3.
read(ba) << 3;
264 cp.
code() = std::string(
"//CSW\n");
267cp.
code() +=
"etiss_coverage_count(1, 44);\n";
269cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
270cp.
code() +=
"{ // block\n";
272cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
273cp.
code() +=
"} // block\n";
276cp.
code() +=
"etiss_coverage_count(1, 2303);\n";
277cp.
code() +=
"{ // block\n";
278cp.
code() +=
"etiss_uint32 load_address = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) +
"ULL] + " + std::to_string(uimm) +
"ULL;\n";
279cp.
code() +=
"etiss_coverage_count(7, 2288, 2287, 2285, 2284, 2282, 2283, 2286);\n";
280cp.
code() +=
"etiss_uint32 mem_val_0;\n";
281cp.
code() +=
"mem_val_0 = (etiss_int32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) +
"ULL]);\n";
282cp.
code() +=
"etiss_coverage_count(10, 2302, 2294, 2292, 2290, 2291, 2301, 2299, 2298, 2296, 2297);\n";
283cp.
code() +=
"cpu->exception |= (*(system->dwrite))(system->handle, cpu, load_address, (etiss_uint8*)&mem_val_0, 4);\n";
284cp.
code() +=
"if (cpu->exception) { // conditional\n";
286cp.
code() +=
"{ // procedure\n";
287cp.
code() +=
"RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
289cp.
code() +=
"} // procedure\n";
291cp.
code() +=
"} // conditional\n";
292cp.
code() +=
"} // block\n";
295cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
302 cp.
code() = std::string(
"//CSW\n");
305cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
317rs2 += R_rs2_0.read(ba) << 0;
320uimm += R_uimm_6.read(ba) << 6;
322uimm += R_uimm_2.read(ba) << 2;
325rs1 += R_rs1_0.read(ba) << 0;
327uimm += R_uimm_3.read(ba) << 3;
331 std::stringstream ss;
333ss <<
"csw" <<
" # " << ba << (
" [rs2=" + std::to_string(rs2) +
" | uimm=" + std::to_string(uimm) +
" | rs1=" + std::to_string(rs1) +
"]");
356imm += R_imm_0.
read(ba) << 0;
359rs1 += R_rs1_0.
read(ba) << 0;
361imm += R_imm_5.
read(ba) << 5;
369 cp.
code() = std::string(
"//CADDI\n");
372cp.
code() +=
"etiss_coverage_count(1, 45);\n";
374cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
375cp.
code() +=
"{ // block\n";
377cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
378cp.
code() +=
"} // block\n";
380cp.
code() +=
"etiss_coverage_count(1, 2304);\n";
381if ((rs1 % 32ULL) != 0LL) {
382cp.
code() +=
"etiss_coverage_count(5, 2310, 2307, 2305, 2308, 2309);\n";
383cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int8)(((
etiss_int8)imm) << (2)) >> (2))) +
"LL;\n";
384cp.
code() +=
"etiss_coverage_count(10, 2325, 2315, 2314, 2312, 2324, 2320, 2319, 2317, 2323, 2321);\n";
387cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
400imm += R_imm_0.read(ba) << 0;
403rs1 += R_rs1_0.read(ba) << 0;
405imm += R_imm_5.read(ba) << 5;
409 std::stringstream ss;
411ss <<
"caddi" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rs1=" + std::to_string(rs1) +
"]");
434nzimm += R_nzimm_0.
read(ba) << 0;
436nzimm += R_nzimm_5.
read(ba) << 5;
444 cp.
code() = std::string(
"//CNOP\n");
447cp.
code() +=
"etiss_coverage_count(1, 46);\n";
449cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
450cp.
code() +=
"{ // block\n";
452cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
453cp.
code() +=
"} // block\n";
456cp.
code() +=
"etiss_coverage_count(1, 2326);\n";
457cp.
code() +=
"{ // block\n";
458cp.
code() +=
"} // block\n";
461cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
474nzimm += R_nzimm_0.read(ba) << 0;
476nzimm += R_nzimm_5.read(ba) << 5;
480 std::stringstream ss;
482ss <<
"cnop" <<
" # " << ba << (
" [nzimm=" + std::to_string(nzimm) +
"]");
505imm += R_imm_5.
read(ba) << 5;
507imm += R_imm_1.
read(ba) << 1;
509imm += R_imm_7.
read(ba) << 7;
511imm += R_imm_6.
read(ba) << 6;
513imm += R_imm_10.
read(ba) << 10;
515imm += R_imm_8.
read(ba) << 8;
517imm += R_imm_4.
read(ba) << 4;
519imm += R_imm_11.
read(ba) << 11;
527 cp.
code() = std::string(
"//CJAL\n");
530cp.
code() +=
"etiss_coverage_count(1, 47);\n";
532cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
533cp.
code() +=
"{ // block\n";
535cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
536cp.
code() +=
"} // block\n";
539cp.
code() +=
"etiss_coverage_count(1, 2341);\n";
540cp.
code() +=
"{ // block\n";
541cp.
code() +=
"*((RV32IMACFD*)cpu)->X[1ULL] = " + std::to_string(ic.
current_address_ + 2ULL) +
"ULL;\n";
542cp.
code() +=
"etiss_coverage_count(6, 2333, 2329, 2328, 2332, 2330, 2331);\n";
544cp.
code() +=
"etiss_coverage_count(6, 2340, 2334, 2339, 2335, 2338, 2336);\n";
545cp.
code() +=
"} // block\n";
548cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
555 cp.
code() = std::string(
"//CJAL\n");
558cp.
code() +=
"return cpu->exception;\n";
570imm += R_imm_5.read(ba) << 5;
572imm += R_imm_1.read(ba) << 1;
574imm += R_imm_7.read(ba) << 7;
576imm += R_imm_6.read(ba) << 6;
578imm += R_imm_10.read(ba) << 10;
580imm += R_imm_8.read(ba) << 8;
582imm += R_imm_4.read(ba) << 4;
584imm += R_imm_11.read(ba) << 11;
588 std::stringstream ss;
590ss <<
"cjal" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
"]");
613imm += R_imm_0.
read(ba) << 0;
616rd += R_rd_0.
read(ba) << 0;
618imm += R_imm_5.
read(ba) << 5;
626 cp.
code() = std::string(
"//CLI\n");
629cp.
code() +=
"etiss_coverage_count(1, 48);\n";
631cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
632cp.
code() +=
"{ // block\n";
634cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
635cp.
code() +=
"} // block\n";
638cp.
code() +=
"etiss_coverage_count(1, 2358);\n";
639cp.
code() +=
"{ // block\n";
640cp.
code() +=
"etiss_coverage_count(1, 2342);\n";
641if ((rd % 32ULL) != 0LL) {
642cp.
code() +=
"etiss_coverage_count(5, 2348, 2345, 2343, 2346, 2347);\n";
643cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = " + std::to_string(((
etiss_int8)(((
etiss_int8)imm) << (2)) >> (2))) +
"LL;\n";
644cp.
code() +=
"etiss_coverage_count(6, 2357, 2353, 2352, 2350, 2356, 2354);\n";
646cp.
code() +=
"} // block\n";
649cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
662imm += R_imm_0.read(ba) << 0;
665rd += R_rd_0.read(ba) << 0;
667imm += R_imm_5.read(ba) << 5;
671 std::stringstream ss;
673ss <<
"cli" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rd=" + std::to_string(rd) +
"]");
696imm += R_imm_12.
read(ba) << 12;
699rd += R_rd_0.
read(ba) << 0;
701imm += R_imm_17.
read(ba) << 17;
709 cp.
code() = std::string(
"//CLUI\n");
712cp.
code() +=
"etiss_coverage_count(1, 49);\n";
714cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
715cp.
code() +=
"{ // block\n";
717cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
718cp.
code() +=
"} // block\n";
721cp.
code() +=
"etiss_coverage_count(1, 2382);\n";
722cp.
code() +=
"{ // block\n";
723cp.
code() +=
"etiss_coverage_count(1, 2359);\n";
725cp.
code() +=
"etiss_coverage_count(3, 2362, 2360, 2361);\n";
727cp.
code() +=
"{ // procedure\n";
728cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
729cp.
code() +=
"etiss_coverage_count(2, 2365, 2363);\n";
731cp.
code() +=
"} // procedure\n";
734cp.
code() +=
"etiss_coverage_count(1, 2366);\n";
735if ((rd % 32ULL) != 0LL) {
736cp.
code() +=
"etiss_coverage_count(5, 2372, 2369, 2367, 2370, 2371);\n";
737cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = " + std::to_string(((
etiss_int32)(((
etiss_int32)imm) << (14)) >> (14))) +
"LL;\n";
738cp.
code() +=
"etiss_coverage_count(6, 2381, 2377, 2376, 2374, 2380, 2378);\n";
740cp.
code() +=
"} // block\n";
743cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
750 cp.
code() = std::string(
"//CLUI\n");
753cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
765imm += R_imm_12.read(ba) << 12;
768rd += R_rd_0.read(ba) << 0;
770imm += R_imm_17.read(ba) << 17;
774 std::stringstream ss;
776ss <<
"clui" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rd=" + std::to_string(rd) +
"]");
799nzimm += R_nzimm_5.
read(ba) << 5;
801nzimm += R_nzimm_7.
read(ba) << 7;
803nzimm += R_nzimm_6.
read(ba) << 6;
805nzimm += R_nzimm_4.
read(ba) << 4;
807nzimm += R_nzimm_9.
read(ba) << 9;
815 cp.
code() = std::string(
"//CADDI16SP\n");
818cp.
code() +=
"etiss_coverage_count(1, 50);\n";
820cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
821cp.
code() +=
"{ // block\n";
823cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
824cp.
code() +=
"} // block\n";
826cp.
code() +=
"etiss_coverage_count(1, 2383);\n";
828cp.
code() +=
"etiss_coverage_count(1, 2384);\n";
829cp.
code() +=
"*((RV32IMACFD*)cpu)->X[2ULL] = *((RV32IMACFD*)cpu)->X[2ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)nzimm) << (6)) >> (6))) +
"LL;\n";
830cp.
code() +=
"etiss_coverage_count(8, 2395, 2387, 2386, 2394, 2390, 2389, 2393, 2391);\n";
834cp.
code() +=
"{ // procedure\n";
835cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
836cp.
code() +=
"etiss_coverage_count(2, 2398, 2396);\n";
838cp.
code() +=
"} // procedure\n";
842cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
849 cp.
code() = std::string(
"//CADDI16SP\n");
852cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
864nzimm += R_nzimm_5.read(ba) << 5;
866nzimm += R_nzimm_7.read(ba) << 7;
868nzimm += R_nzimm_6.read(ba) << 6;
870nzimm += R_nzimm_4.read(ba) << 4;
872nzimm += R_nzimm_9.read(ba) << 9;
876 std::stringstream ss;
878ss <<
"caddi16sp" <<
" # " << ba << (
" [nzimm=" + std::to_string(nzimm) +
"]");
901rd += R_rd_0.
read(ba) << 0;
909 cp.
code() = std::string(
"//__reserved_clui\n");
912cp.
code() +=
"etiss_coverage_count(1, 51);\n";
914cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
915cp.
code() +=
"{ // block\n";
917cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
918cp.
code() +=
"} // block\n";
921cp.
code() +=
"{ // procedure\n";
922cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
923cp.
code() +=
"etiss_coverage_count(2, 2401, 2399);\n";
925cp.
code() +=
"} // procedure\n";
928cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
935 cp.
code() = std::string(
"//__reserved_clui\n");
938cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
950rd += R_rd_0.read(ba) << 0;
954 std::stringstream ss;
956ss <<
"__reserved_clui" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
"]");
979shamt += R_shamt_0.
read(ba) << 0;
982rs1 += R_rs1_0.
read(ba) << 0;
990 cp.
code() = std::string(
"//CSRLI\n");
993cp.
code() +=
"etiss_coverage_count(1, 52);\n";
995cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
996cp.
code() +=
"{ // block\n";
998cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
999cp.
code() +=
"} // block\n";
1002cp.
code() +=
"etiss_coverage_count(1, 2418);\n";
1003cp.
code() +=
"{ // block\n";
1004cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) +
"ULL] >> " + std::to_string(shamt) +
"ULL;\n";
1005cp.
code() +=
"etiss_coverage_count(11, 2417, 2409, 2408, 2406, 2407, 2416, 2414, 2413, 2411, 2412, 2415);\n";
1006cp.
code() +=
"} // block\n";
1009cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1022shamt += R_shamt_0.read(ba) << 0;
1025rs1 += R_rs1_0.read(ba) << 0;
1029 std::stringstream ss;
1031ss <<
"csrli" <<
" # " << ba << (
" [shamt=" + std::to_string(shamt) +
" | rs1=" + std::to_string(rs1) +
"]");
1054shamt += R_shamt_0.
read(ba) << 0;
1057rs1 += R_rs1_0.
read(ba) << 0;
1065 cp.
code() = std::string(
"//CSRAI\n");
1068cp.
code() +=
"etiss_coverage_count(1, 53);\n";
1070cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
1071cp.
code() +=
"{ // block\n";
1073cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1074cp.
code() +=
"} // block\n";
1077cp.
code() +=
"etiss_coverage_count(1, 2461);\n";
1078cp.
code() +=
"{ // block\n";
1079cp.
code() +=
"etiss_coverage_count(1, 2422);\n";
1081cp.
code() +=
"etiss_coverage_count(1, 2423);\n";
1083cp.
code() +=
"etiss_coverage_count(1, 2443);\n";
1084cp.
code() +=
"{ // block\n";
1085cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) +
"ULL] = ((etiss_int32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) +
"ULL])) >> " + std::to_string(shamt) +
"ULL;\n";
1086cp.
code() +=
"etiss_coverage_count(13, 2442, 2431, 2430, 2428, 2429, 2441, 2438, 2436, 2435, 2433, 2434, 2439, 2440);\n";
1087cp.
code() +=
"} // block\n";
1090cp.
code() +=
"} // block\n";
1093cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1106shamt += R_shamt_0.read(ba) << 0;
1109rs1 += R_rs1_0.read(ba) << 0;
1113 std::stringstream ss;
1115ss <<
"csrai" <<
" # " << ba << (
" [shamt=" + std::to_string(shamt) +
" | rs1=" + std::to_string(rs1) +
"]");
1138imm += R_imm_0.
read(ba) << 0;
1141rs1 += R_rs1_0.
read(ba) << 0;
1143imm += R_imm_5.
read(ba) << 5;
1151 cp.
code() = std::string(
"//CANDI\n");
1154cp.
code() +=
"etiss_coverage_count(1, 54);\n";
1156cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
1157cp.
code() +=
"{ // block\n";
1159cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1160cp.
code() +=
"} // block\n";
1163cp.
code() +=
"etiss_coverage_count(1, 2477);\n";
1164cp.
code() +=
"{ // block\n";
1165cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) +
"ULL] & " + std::to_string(((
etiss_int8)(((
etiss_int8)imm) << (2)) >> (2))) +
"LL;\n";
1166cp.
code() +=
"etiss_coverage_count(12, 2476, 2466, 2465, 2463, 2464, 2475, 2471, 2470, 2468, 2469, 2474, 2472);\n";
1167cp.
code() +=
"} // block\n";
1170cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1183imm += R_imm_0.read(ba) << 0;
1186rs1 += R_rs1_0.read(ba) << 0;
1188imm += R_imm_5.read(ba) << 5;
1192 std::stringstream ss;
1194ss <<
"candi" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rs1=" + std::to_string(rs1) +
"]");
1217rs2 += R_rs2_0.
read(ba) << 0;
1220rd += R_rd_0.
read(ba) << 0;
1228 cp.
code() = std::string(
"//CSUB\n");
1231cp.
code() +=
"etiss_coverage_count(1, 55);\n";
1233cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
1234cp.
code() +=
"{ // block\n";
1236cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1237cp.
code() +=
"} // block\n";
1240cp.
code() +=
"etiss_coverage_count(1, 2495);\n";
1241cp.
code() +=
"{ // block\n";
1242cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) +
"ULL] - *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) +
"ULL];\n";
1243cp.
code() +=
"etiss_coverage_count(14, 2494, 2482, 2481, 2479, 2480, 2493, 2487, 2486, 2484, 2485, 2492, 2491, 2489, 2490);\n";
1244cp.
code() +=
"} // block\n";
1247cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1260rs2 += R_rs2_0.read(ba) << 0;
1263rd += R_rd_0.read(ba) << 0;
1267 std::stringstream ss;
1269ss <<
"csub" <<
" # " << ba << (
" [rs2=" + std::to_string(rs2) +
" | rd=" + std::to_string(rd) +
"]");
1292rs2 += R_rs2_0.
read(ba) << 0;
1295rd += R_rd_0.
read(ba) << 0;
1303 cp.
code() = std::string(
"//CXOR\n");
1306cp.
code() +=
"etiss_coverage_count(1, 56);\n";
1308cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
1309cp.
code() +=
"{ // block\n";
1311cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1312cp.
code() +=
"} // block\n";
1315cp.
code() +=
"etiss_coverage_count(1, 2513);\n";
1316cp.
code() +=
"{ // block\n";
1317cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) +
"ULL] ^ *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) +
"ULL];\n";
1318cp.
code() +=
"etiss_coverage_count(14, 2512, 2500, 2499, 2497, 2498, 2511, 2505, 2504, 2502, 2503, 2510, 2509, 2507, 2508);\n";
1319cp.
code() +=
"} // block\n";
1322cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1335rs2 += R_rs2_0.read(ba) << 0;
1338rd += R_rd_0.read(ba) << 0;
1342 std::stringstream ss;
1344ss <<
"cxor" <<
" # " << ba << (
" [rs2=" + std::to_string(rs2) +
" | rd=" + std::to_string(rd) +
"]");
1367rs2 += R_rs2_0.
read(ba) << 0;
1370rd += R_rd_0.
read(ba) << 0;
1378 cp.
code() = std::string(
"//COR\n");
1381cp.
code() +=
"etiss_coverage_count(1, 57);\n";
1383cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
1384cp.
code() +=
"{ // block\n";
1386cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1387cp.
code() +=
"} // block\n";
1390cp.
code() +=
"etiss_coverage_count(1, 2531);\n";
1391cp.
code() +=
"{ // block\n";
1392cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) +
"ULL] | *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) +
"ULL];\n";
1393cp.
code() +=
"etiss_coverage_count(14, 2530, 2518, 2517, 2515, 2516, 2529, 2523, 2522, 2520, 2521, 2528, 2527, 2525, 2526);\n";
1394cp.
code() +=
"} // block\n";
1397cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1410rs2 += R_rs2_0.read(ba) << 0;
1413rd += R_rd_0.read(ba) << 0;
1417 std::stringstream ss;
1419ss <<
"cor" <<
" # " << ba << (
" [rs2=" + std::to_string(rs2) +
" | rd=" + std::to_string(rd) +
"]");
1442rs2 += R_rs2_0.
read(ba) << 0;
1445rd += R_rd_0.
read(ba) << 0;
1453 cp.
code() = std::string(
"//CAND\n");
1456cp.
code() +=
"etiss_coverage_count(1, 58);\n";
1458cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
1459cp.
code() +=
"{ // block\n";
1461cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1462cp.
code() +=
"} // block\n";
1465cp.
code() +=
"etiss_coverage_count(1, 2549);\n";
1466cp.
code() +=
"{ // block\n";
1467cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rd + 8ULL) +
"ULL] & *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 + 8ULL) +
"ULL];\n";
1468cp.
code() +=
"etiss_coverage_count(14, 2548, 2536, 2535, 2533, 2534, 2547, 2541, 2540, 2538, 2539, 2546, 2545, 2543, 2544);\n";
1469cp.
code() +=
"} // block\n";
1472cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1485rs2 += R_rs2_0.read(ba) << 0;
1488rd += R_rd_0.read(ba) << 0;
1492 std::stringstream ss;
1494ss <<
"cand" <<
" # " << ba << (
" [rs2=" + std::to_string(rs2) +
" | rd=" + std::to_string(rd) +
"]");
1517imm += R_imm_5.
read(ba) << 5;
1519imm += R_imm_1.
read(ba) << 1;
1521imm += R_imm_7.
read(ba) << 7;
1523imm += R_imm_6.
read(ba) << 6;
1525imm += R_imm_10.
read(ba) << 10;
1527imm += R_imm_8.
read(ba) << 8;
1529imm += R_imm_4.
read(ba) << 4;
1531imm += R_imm_11.
read(ba) << 11;
1539 cp.
code() = std::string(
"//CJ\n");
1542cp.
code() +=
"etiss_coverage_count(1, 59);\n";
1544cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
1545cp.
code() +=
"{ // block\n";
1547cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1548cp.
code() +=
"} // block\n";
1551cp.
code() +=
"etiss_coverage_count(6, 2556, 2550, 2555, 2551, 2554, 2552);\n";
1553cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1560 cp.
code() = std::string(
"//CJ\n");
1563cp.
code() +=
"return cpu->exception;\n";
1575imm += R_imm_5.read(ba) << 5;
1577imm += R_imm_1.read(ba) << 1;
1579imm += R_imm_7.read(ba) << 7;
1581imm += R_imm_6.read(ba) << 6;
1583imm += R_imm_10.read(ba) << 10;
1585imm += R_imm_8.read(ba) << 8;
1587imm += R_imm_4.read(ba) << 4;
1589imm += R_imm_11.read(ba) << 11;
1593 std::stringstream ss;
1595ss <<
"cj" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
"]");
1618imm += R_imm_5.
read(ba) << 5;
1620imm += R_imm_1.
read(ba) << 1;
1622imm += R_imm_6.
read(ba) << 6;
1625rs1 += R_rs1_0.
read(ba) << 0;
1627imm += R_imm_3.
read(ba) << 3;
1629imm += R_imm_8.
read(ba) << 8;
1637 cp.
code() = std::string(
"//CBEQZ\n");
1640cp.
code() +=
"etiss_coverage_count(1, 60);\n";
1642cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
1643cp.
code() +=
"{ // block\n";
1645cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1646cp.
code() +=
"} // block\n";
1648cp.
code() +=
"etiss_coverage_count(1, 2557);\n";
1649cp.
code() +=
"if (*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) +
"ULL] == 0LL) { // conditional\n";
1650cp.
code() +=
"etiss_coverage_count(6, 2564, 2562, 2561, 2559, 2560, 2563);\n";
1652cp.
code() +=
"etiss_coverage_count(6, 2571, 2565, 2570, 2566, 2569, 2567);\n";
1653cp.
code() +=
"} // conditional\n";
1655cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1662 cp.
code() = std::string(
"//CBEQZ\n");
1665cp.
code() +=
"if (cpu->nextPc != " + std::to_string(ic.
current_address_ + 2) +
"ULL) return cpu->exception;\n";
1677imm += R_imm_5.read(ba) << 5;
1679imm += R_imm_1.read(ba) << 1;
1681imm += R_imm_6.read(ba) << 6;
1684rs1 += R_rs1_0.read(ba) << 0;
1686imm += R_imm_3.read(ba) << 3;
1688imm += R_imm_8.read(ba) << 8;
1692 std::stringstream ss;
1694ss <<
"cbeqz" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rs1=" + std::to_string(rs1) +
"]");
1717imm += R_imm_5.
read(ba) << 5;
1719imm += R_imm_1.
read(ba) << 1;
1721imm += R_imm_6.
read(ba) << 6;
1724rs1 += R_rs1_0.
read(ba) << 0;
1726imm += R_imm_3.
read(ba) << 3;
1728imm += R_imm_8.
read(ba) << 8;
1736 cp.
code() = std::string(
"//CBNEZ\n");
1739cp.
code() +=
"etiss_coverage_count(1, 61);\n";
1741cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
1742cp.
code() +=
"{ // block\n";
1744cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1745cp.
code() +=
"} // block\n";
1747cp.
code() +=
"etiss_coverage_count(1, 2572);\n";
1748cp.
code() +=
"if (*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 + 8ULL) +
"ULL] != 0LL) { // conditional\n";
1749cp.
code() +=
"etiss_coverage_count(6, 2579, 2577, 2576, 2574, 2575, 2578);\n";
1751cp.
code() +=
"etiss_coverage_count(6, 2586, 2580, 2585, 2581, 2584, 2582);\n";
1752cp.
code() +=
"} // conditional\n";
1754cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1761 cp.
code() = std::string(
"//CBNEZ\n");
1764cp.
code() +=
"if (cpu->nextPc != " + std::to_string(ic.
current_address_ + 2) +
"ULL) return cpu->exception;\n";
1776imm += R_imm_5.read(ba) << 5;
1778imm += R_imm_1.read(ba) << 1;
1780imm += R_imm_6.read(ba) << 6;
1783rs1 += R_rs1_0.read(ba) << 0;
1785imm += R_imm_3.read(ba) << 3;
1787imm += R_imm_8.read(ba) << 8;
1791 std::stringstream ss;
1793ss <<
"cbnez" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rs1=" + std::to_string(rs1) +
"]");
1816nzuimm += R_nzuimm_0.
read(ba) << 0;
1819rs1 += R_rs1_0.
read(ba) << 0;
1827 cp.
code() = std::string(
"//CSLLI\n");
1830cp.
code() +=
"etiss_coverage_count(1, 62);\n";
1832cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
1833cp.
code() +=
"{ // block\n";
1835cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1836cp.
code() +=
"} // block\n";
1838cp.
code() +=
"etiss_coverage_count(1, 2590);\n";
1840cp.
code() +=
"etiss_coverage_count(1, 2591);\n";
1841cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] << " + std::to_string(nzuimm) +
"ULL;\n";
1842cp.
code() +=
"etiss_coverage_count(9, 2604, 2596, 2595, 2593, 2603, 2601, 2600, 2598, 2602);\n";
1845cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1858nzuimm += R_nzuimm_0.read(ba) << 0;
1861rs1 += R_rs1_0.read(ba) << 0;
1865 std::stringstream ss;
1867ss <<
"cslli" <<
" # " << ba << (
" [nzuimm=" + std::to_string(nzuimm) +
" | rs1=" + std::to_string(rs1) +
"]");
1890uimm += R_uimm_6.
read(ba) << 6;
1892uimm += R_uimm_2.
read(ba) << 2;
1895rd += R_rd_0.
read(ba) << 0;
1897uimm += R_uimm_5.
read(ba) << 5;
1905 cp.
code() = std::string(
"//CLWSP\n");
1908cp.
code() +=
"etiss_coverage_count(1, 63);\n";
1910cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
1911cp.
code() +=
"{ // block\n";
1913cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1914cp.
code() +=
"} // block\n";
1917cp.
code() +=
"etiss_coverage_count(1, 2640);\n";
1918cp.
code() +=
"{ // block\n";
1919cp.
code() +=
"etiss_coverage_count(1, 2605);\n";
1921cp.
code() +=
"etiss_coverage_count(2, 2608, 2606);\n";
1923cp.
code() +=
"etiss_coverage_count(1, 2636);\n";
1924cp.
code() +=
"{ // block\n";
1925cp.
code() +=
"etiss_uint32 offs = (etiss_uint32)((*((RV32IMACFD*)cpu)->X[2ULL] + " + std::to_string(uimm) +
"ULL));\n";
1926cp.
code() +=
"etiss_coverage_count(7, 2618, 2617, 2614, 2612, 2611, 2613, 2615);\n";
1927cp.
code() +=
"etiss_uint32 mem_val_0;\n";
1928cp.
code() +=
"cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";
1929cp.
code() +=
"if (cpu->exception) { // conditional\n";
1931cp.
code() +=
"{ // procedure\n";
1932cp.
code() +=
"RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
1934cp.
code() +=
"} // procedure\n";
1936cp.
code() +=
"} // conditional\n";
1937cp.
code() +=
"etiss_int32 res = mem_val_0;\n";
1938cp.
code() +=
"etiss_coverage_count(5, 2626, 2625, 2623, 2621, 2622);\n";
1939cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_int32)(res);\n";
1940cp.
code() +=
"etiss_coverage_count(6, 2635, 2631, 2630, 2628, 2634, 2632);\n";
1941cp.
code() +=
"} // block\n";
1946cp.
code() +=
"{ // procedure\n";
1947cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";
1948cp.
code() +=
"etiss_coverage_count(3, 2639, 2637, 2638);\n";
1950cp.
code() +=
"} // procedure\n";
1953cp.
code() +=
"} // block\n";
1956cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1963 cp.
code() = std::string(
"//CLWSP\n");
1966cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
1978uimm += R_uimm_6.read(ba) << 6;
1980uimm += R_uimm_2.read(ba) << 2;
1983rd += R_rd_0.read(ba) << 0;
1985uimm += R_uimm_5.read(ba) << 5;
1989 std::stringstream ss;
1991ss <<
"clwsp" <<
" # " << ba << (
" [uimm=" + std::to_string(uimm) +
" | rd=" + std::to_string(rd) +
"]");
2014rs2 += R_rs2_0.
read(ba) << 0;
2017rd += R_rd_0.
read(ba) << 0;
2025 cp.
code() = std::string(
"//CMV\n");
2028cp.
code() +=
"etiss_coverage_count(1, 64);\n";
2030cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
2031cp.
code() +=
"{ // block\n";
2033cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2034cp.
code() +=
"} // block\n";
2036cp.
code() +=
"etiss_coverage_count(1, 2641);\n";
2037if ((rd % 32ULL) != 0LL) {
2038cp.
code() +=
"etiss_coverage_count(5, 2647, 2644, 2642, 2645, 2646);\n";
2039cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL];\n";
2040cp.
code() +=
"etiss_coverage_count(7, 2658, 2652, 2651, 2649, 2657, 2656, 2654);\n";
2043cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2056rs2 += R_rs2_0.read(ba) << 0;
2059rd += R_rd_0.read(ba) << 0;
2063 std::stringstream ss;
2065ss <<
"cmv" <<
" # " << ba << (
" [rs2=" + std::to_string(rs2) +
" | rd=" + std::to_string(rd) +
"]");
2088rs1 += R_rs1_0.
read(ba) << 0;
2096 cp.
code() = std::string(
"//CJR\n");
2099cp.
code() +=
"etiss_coverage_count(1, 65);\n";
2101cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
2102cp.
code() +=
"{ // block\n";
2104cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2105cp.
code() +=
"} // block\n";
2107cp.
code() +=
"etiss_coverage_count(1, 2659);\n";
2109cp.
code() +=
"etiss_coverage_count(1, 2660);\n";
2110cp.
code() +=
"cpu->nextPc = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] & -2LL;\n";
2111cp.
code() +=
"etiss_coverage_count(6, 2670, 2661, 2669, 2666, 2665, 2663);\n";
2115cp.
code() +=
"{ // procedure\n";
2116cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";
2117cp.
code() +=
"etiss_coverage_count(3, 2673, 2671, 2672);\n";
2119cp.
code() +=
"} // procedure\n";
2123cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2130 cp.
code() = std::string(
"//CJR\n");
2133cp.
code() +=
"return cpu->exception;\n";
2145rs1 += R_rs1_0.read(ba) << 0;
2149 std::stringstream ss;
2151ss <<
"cjr" <<
" # " << ba << (
" [rs1=" + std::to_string(rs1) +
"]");
2179 cp.
code() = std::string(
"//__reserved_cmv\n");
2182cp.
code() +=
"etiss_coverage_count(1, 66);\n";
2184cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
2185cp.
code() +=
"{ // block\n";
2187cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2188cp.
code() +=
"} // block\n";
2191cp.
code() +=
"{ // procedure\n";
2192cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";
2193cp.
code() +=
"etiss_coverage_count(3, 2676, 2674, 2675);\n";
2195cp.
code() +=
"} // procedure\n";
2198cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2205 cp.
code() = std::string(
"//__reserved_cmv\n");
2208cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
2221 std::stringstream ss;
2223ss <<
"__reserved_cmv" <<
" # " << ba << (
" []");
2246rs2 += R_rs2_0.
read(ba) << 0;
2249rd += R_rd_0.
read(ba) << 0;
2257 cp.
code() = std::string(
"//CADD\n");
2260cp.
code() +=
"etiss_coverage_count(1, 67);\n";
2262cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
2263cp.
code() +=
"{ // block\n";
2265cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2266cp.
code() +=
"} // block\n";
2268cp.
code() +=
"etiss_coverage_count(1, 2677);\n";
2269if ((rd % 32ULL) != 0LL) {
2270cp.
code() +=
"etiss_coverage_count(5, 2683, 2680, 2678, 2681, 2682);\n";
2271cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] + *((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL];\n";
2272cp.
code() +=
"etiss_coverage_count(11, 2700, 2688, 2687, 2685, 2699, 2693, 2692, 2690, 2698, 2697, 2695);\n";
2275cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2288rs2 += R_rs2_0.read(ba) << 0;
2291rd += R_rd_0.read(ba) << 0;
2295 std::stringstream ss;
2297ss <<
"cadd" <<
" # " << ba << (
" [rs2=" + std::to_string(rs2) +
" | rd=" + std::to_string(rd) +
"]");
2320rs1 += R_rs1_0.
read(ba) << 0;
2328 cp.
code() = std::string(
"//CJALR\n");
2331cp.
code() +=
"etiss_coverage_count(1, 68);\n";
2333cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
2334cp.
code() +=
"{ // block\n";
2336cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2337cp.
code() +=
"} // block\n";
2340cp.
code() +=
"etiss_coverage_count(1, 2721);\n";
2341cp.
code() +=
"{ // block\n";
2342cp.
code() +=
"etiss_uint32 new_pc = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL];\n";
2343cp.
code() +=
"etiss_coverage_count(4, 2707, 2706, 2705, 2703);\n";
2344cp.
code() +=
"*((RV32IMACFD*)cpu)->X[1ULL] = " + std::to_string(ic.
current_address_ + 2ULL) +
"ULL;\n";
2345cp.
code() +=
"etiss_coverage_count(6, 2714, 2710, 2709, 2713, 2711, 2712);\n";
2346cp.
code() +=
"cpu->nextPc = new_pc & -2LL;\n";
2347cp.
code() +=
"etiss_coverage_count(4, 2720, 2715, 2719, 2716);\n";
2348cp.
code() +=
"} // block\n";
2351cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2358 cp.
code() = std::string(
"//CJALR\n");
2361cp.
code() +=
"return cpu->exception;\n";
2373rs1 += R_rs1_0.read(ba) << 0;
2377 std::stringstream ss;
2379ss <<
"cjalr" <<
" # " << ba << (
" [rs1=" + std::to_string(rs1) +
"]");
2407 cp.
code() = std::string(
"//CEBREAK\n");
2410cp.
code() +=
"etiss_coverage_count(1, 69);\n";
2412cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
2413cp.
code() +=
"{ // block\n";
2415cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2416cp.
code() +=
"} // block\n";
2419cp.
code() +=
"{ // procedure\n";
2420cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 3LL);\n";
2421cp.
code() +=
"etiss_coverage_count(2, 2724, 2722);\n";
2423cp.
code() +=
"} // procedure\n";
2426cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2433 cp.
code() = std::string(
"//CEBREAK\n");
2436cp.
code() +=
"return cpu->exception;\n";
2449 std::stringstream ss;
2451ss <<
"cebreak" <<
" # " << ba << (
" []");
2474rs2 += R_rs2_0.
read(ba) << 0;
2477uimm += R_uimm_6.
read(ba) << 6;
2479uimm += R_uimm_2.
read(ba) << 2;
2487 cp.
code() = std::string(
"//CSWSP\n");
2490cp.
code() +=
"etiss_coverage_count(1, 70);\n";
2492cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
2493cp.
code() +=
"{ // block\n";
2495cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2496cp.
code() +=
"} // block\n";
2499cp.
code() +=
"etiss_coverage_count(1, 2746);\n";
2500cp.
code() +=
"{ // block\n";
2501cp.
code() +=
"etiss_uint32 offs = *((RV32IMACFD*)cpu)->X[2ULL] + " + std::to_string(uimm) +
"ULL;\n";
2502cp.
code() +=
"etiss_coverage_count(5, 2731, 2730, 2728, 2727, 2729);\n";
2503cp.
code() +=
"etiss_uint32 mem_val_0;\n";
2504cp.
code() +=
"mem_val_0 = (etiss_uint32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL]);\n";
2505cp.
code() +=
"etiss_coverage_count(9, 2745, 2737, 2735, 2733, 2734, 2744, 2742, 2741, 2739);\n";
2506cp.
code() +=
"cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";
2507cp.
code() +=
"if (cpu->exception) { // conditional\n";
2509cp.
code() +=
"{ // procedure\n";
2510cp.
code() +=
"RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
2512cp.
code() +=
"} // procedure\n";
2514cp.
code() +=
"} // conditional\n";
2515cp.
code() +=
"} // block\n";
2518cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2525 cp.
code() = std::string(
"//CSWSP\n");
2528cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
2540rs2 += R_rs2_0.read(ba) << 0;
2543uimm += R_uimm_6.read(ba) << 6;
2545uimm += R_uimm_2.read(ba) << 2;
2549 std::stringstream ss;
2551ss <<
"cswsp" <<
" # " << ba << (
" [rs2=" + std::to_string(rs2) +
" | uimm=" + std::to_string(uimm) +
"]");
2579 cp.
code() = std::string(
"//DII\n");
2582cp.
code() +=
"etiss_coverage_count(1, 71);\n";
2584cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
2585cp.
code() +=
"{ // block\n";
2587cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
2588cp.
code() +=
"} // block\n";
2591cp.
code() +=
"{ // procedure\n";
2592cp.
code() +=
"RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";
2593cp.
code() +=
"etiss_coverage_count(2, 2749, 2747);\n";
2595cp.
code() +=
"} // procedure\n";
2598cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2605 cp.
code() = std::string(
"//DII\n");
2608cp.
code() +=
"return cpu->exception;\n";
2621 std::stringstream ss;
2623ss <<
"dii" <<
" # " << ba << (
" []");
etiss::instr::InstructionGroup ISA16_RV32IMACFD("ISA16_RV32IMACFD", 16)
static InstructionDefinition clui_imm_rd(ISA16_RV32IMACFD, "clui",(uint64_t) 0x6001,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint32 imm=0;static BitArrayRange R_imm_12(6, 2);imm+=R_imm_12.read(ba)<< 12;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;static BitArrayRange R_imm_17(12, 12);imm+=R_imm_17.read(ba)<< 17;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CLUI\n");cp.code()+="etiss_coverage_count(1, 49);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2382);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 2359);\n";if(imm==0LL) { cp.code()+="etiss_coverage_count(3, 2362, 2360, 2361);\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";cp.code()+="etiss_coverage_count(2, 2365, 2363);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} } cp.code()+="etiss_coverage_count(1, 2366);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2372, 2369, 2367, 2370, 2371);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = "+std::to_string(((etiss_int32)(((etiss_int32) imm)<<(14)) > >(14)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 2381, 2377, 2376, 2374, 2380, 2378);\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("//CLUI\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint32 imm=0;static BitArrayRange R_imm_12(6, 2);imm+=R_imm_12.read(ba)<< 12;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;static BitArrayRange R_imm_17(12, 12);imm+=R_imm_17.read(ba)<< 17;std::stringstream ss;ss<< "clui"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition caddi_imm_rs1(ISA16_RV32IMACFD, "caddi",(uint64_t) 0x01,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 imm=0;static BitArrayRange R_imm_0(6, 2);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_5(12, 12);imm+=R_imm_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CADDI\n");cp.code()+="etiss_coverage_count(1, 45);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2304);\n";if((rs1 % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2310, 2307, 2305, 2308, 2309);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + "+std::to_string(((etiss_int8)(((etiss_int8) imm)<<(2)) > >(2)))+"LL;\n";cp.code()+="etiss_coverage_count(10, 2325, 2315, 2314, 2312, 2324, 2320, 2319, 2317, 2323, 2321);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 imm=0;static BitArrayRange R_imm_0(6, 2);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_5(12, 12);imm+=R_imm_5.read(ba)<< 5;std::stringstream ss;ss<< "caddi"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition __reserved_clui_rd(ISA16_RV32IMACFD, "__reserved_clui",(uint64_t) 0x6001,(uint64_t) 0xf07f, [](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;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//__reserved_clui\n");cp.code()+="etiss_coverage_count(1, 51);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";cp.code()+="etiss_coverage_count(2, 2401, 2399);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\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("//__reserved_clui\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;std::stringstream ss;ss<< "__reserved_clui"<< " # "<< ba<<(" [rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition cnop_nzimm(ISA16_RV32IMACFD, "cnop",(uint64_t) 0x01,(uint64_t) 0xef83, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 nzimm=0;static BitArrayRange R_nzimm_0(6, 2);nzimm+=R_nzimm_0.read(ba)<< 0;static BitArrayRange R_nzimm_5(12, 12);nzimm+=R_nzimm_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CNOP\n");cp.code()+="etiss_coverage_count(1, 46);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2326);\n";cp.code()+="{ // block\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 nzimm=0;static BitArrayRange R_nzimm_0(6, 2);nzimm+=R_nzimm_0.read(ba)<< 0;static BitArrayRange R_nzimm_5(12, 12);nzimm+=R_nzimm_5.read(ba)<< 5;std::stringstream ss;ss<< "cnop"<< " # "<< ba<<(" [nzimm="+std::to_string(nzimm)+"]");return ss.str();})
static InstructionDefinition candi_imm_rs1(ISA16_RV32IMACFD, "candi",(uint64_t) 0x8801,(uint64_t) 0xec03, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 imm=0;static BitArrayRange R_imm_0(6, 2);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_5(12, 12);imm+=R_imm_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CANDI\n");cp.code()+="etiss_coverage_count(1, 54);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2477);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] & "+std::to_string(((etiss_int8)(((etiss_int8) imm)<<(2)) > >(2)))+"LL;\n";cp.code()+="etiss_coverage_count(12, 2476, 2466, 2465, 2463, 2464, 2475, 2471, 2470, 2468, 2469, 2474, 2472);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 imm=0;static BitArrayRange R_imm_0(6, 2);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_5(12, 12);imm+=R_imm_5.read(ba)<< 5;std::stringstream ss;ss<< "candi"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition clw_rd_uimm_rs1(ISA16_RV32IMACFD, "clw",(uint64_t) 0x4000,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(4, 2);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(5, 5);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(6, 6);uimm+=R_uimm_2.read(ba)<< 2;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_uimm_3(12, 10);uimm+=R_uimm_3.read(ba)<< 3;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CLW\n");cp.code()+="etiss_coverage_count(1, 43);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2279);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 load_address = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] + "+std::to_string(uimm)+"ULL;\n";cp.code()+="etiss_coverage_count(7, 2264, 2263, 2261, 2260, 2258, 2259, 2262);\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()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = (etiss_int32)(mem_val_0);\n";cp.code()+="etiss_coverage_count(10, 2278, 2269, 2268, 2266, 2267, 2277, 2275, 2273, 2271, 2272);\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("//CLW\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(4, 2);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(5, 5);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(6, 6);uimm+=R_uimm_2.read(ba)<< 2;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_uimm_3(12, 10);uimm+=R_uimm_3.read(ba)<< 3;std::stringstream ss;ss<< "clw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | uimm="+std::to_string(uimm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition csrai_shamt_rs1(ISA16_RV32IMACFD, "csrai",(uint64_t) 0x8401,(uint64_t) 0xfc03, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(6, 2);shamt+=R_shamt_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSRAI\n");cp.code()+="etiss_coverage_count(1, 53);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2461);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 2422);\n";if(shamt) { cp.code()+="etiss_coverage_count(1, 2423);\n";{ cp.code()+="etiss_coverage_count(1, 2443);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] = ((etiss_int32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL])) >> "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(13, 2442, 2431, 2430, 2428, 2429, 2441, 2438, 2436, 2435, 2433, 2434, 2439, 2440);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(6, 2);shamt+=R_shamt_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "csrai"<< " # "<< ba<<(" [shamt="+std::to_string(shamt)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition cjr_rs1(ISA16_RV32IMACFD, "cjr",(uint64_t) 0x8002,(uint64_t) 0xf07f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CJR\n");cp.code()+="etiss_coverage_count(1, 65);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2659);\n";if(rs1) { cp.code()+="etiss_coverage_count(1, 2660);\n";cp.code()+="cpu->nextPc = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] & -2LL;\n";cp.code()+="etiss_coverage_count(6, 2670, 2661, 2669, 2666, 2665, 2663);\n";} else { { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";cp.code()+="etiss_coverage_count(3, 2673, 2671, 2672);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\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("//CJR\n");cp.code()+="return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "cjr"<< " # "<< ba<<(" [rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition dii_(ISA16_RV32IMACFD, "dii",(uint64_t) 0x00,(uint64_t) 0xffff, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { { CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//DII\n");cp.code()+="etiss_coverage_count(1, 71);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";cp.code()+="etiss_coverage_count(2, 2749, 2747);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\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("//DII\n");cp.code()+="return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { std::stringstream ss;ss<< "dii"<< " # "<< ba<<(" []");return ss.str();})
static InstructionDefinition cmv_rs2_rd(ISA16_RV32IMACFD, "cmv",(uint64_t) 0x8002,(uint64_t) 0xf003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(6, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CMV\n");cp.code()+="etiss_coverage_count(1, 64);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2641);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2647, 2644, 2642, 2645, 2646);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(7, 2658, 2652, 2651, 2649, 2657, 2656, 2654);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(6, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;std::stringstream ss;ss<< "cmv"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition cand_rs2_rd(ISA16_RV32IMACFD, "cand",(uint64_t) 0x8c61,(uint64_t) 0xfc63, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CAND\n");cp.code()+="etiss_coverage_count(1, 58);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2549);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] & *((RV32IMACFD*)cpu)->X["+std::to_string(rs2+8ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(14, 2548, 2536, 2535, 2533, 2534, 2547, 2541, 2540, 2538, 2539, 2546, 2545, 2543, 2544);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;std::stringstream ss;ss<< "cand"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition cxor_rs2_rd(ISA16_RV32IMACFD, "cxor",(uint64_t) 0x8c21,(uint64_t) 0xfc63, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CXOR\n");cp.code()+="etiss_coverage_count(1, 56);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2513);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] ^ *((RV32IMACFD*)cpu)->X["+std::to_string(rs2+8ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(14, 2512, 2500, 2499, 2497, 2498, 2511, 2505, 2504, 2502, 2503, 2510, 2509, 2507, 2508);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;std::stringstream ss;ss<< "cxor"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition cjal_imm(ISA16_RV32IMACFD, "cjal",(uint64_t) 0x2001,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(5, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_7(6, 6);imm+=R_imm_7.read(ba)<< 7;static BitArrayRange R_imm_6(7, 7);imm+=R_imm_6.read(ba)<< 6;static BitArrayRange R_imm_10(8, 8);imm+=R_imm_10.read(ba)<< 10;static BitArrayRange R_imm_8(10, 9);imm+=R_imm_8.read(ba)<< 8;static BitArrayRange R_imm_4(11, 11);imm+=R_imm_4.read(ba)<< 4;static BitArrayRange R_imm_11(12, 12);imm+=R_imm_11.read(ba)<< 11;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CJAL\n");cp.code()+="etiss_coverage_count(1, 47);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2341);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X[1ULL] = "+std::to_string(ic.current_address_+2ULL)+"ULL;\n";cp.code()+="etiss_coverage_count(6, 2333, 2329, 2328, 2332, 2330, 2331);\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 2340, 2334, 2339, 2335, 2338, 2336);\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("//CJAL\n");cp.code()+="return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(5, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_7(6, 6);imm+=R_imm_7.read(ba)<< 7;static BitArrayRange R_imm_6(7, 7);imm+=R_imm_6.read(ba)<< 6;static BitArrayRange R_imm_10(8, 8);imm+=R_imm_10.read(ba)<< 10;static BitArrayRange R_imm_8(10, 9);imm+=R_imm_8.read(ba)<< 8;static BitArrayRange R_imm_4(11, 11);imm+=R_imm_4.read(ba)<< 4;static BitArrayRange R_imm_11(12, 12);imm+=R_imm_11.read(ba)<< 11;std::stringstream ss;ss<< "cjal"<< " # "<< ba<<(" [imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition csub_rs2_rd(ISA16_RV32IMACFD, "csub",(uint64_t) 0x8c01,(uint64_t) 0xfc63, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSUB\n");cp.code()+="etiss_coverage_count(1, 55);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2495);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] - *((RV32IMACFD*)cpu)->X["+std::to_string(rs2+8ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(14, 2494, 2482, 2481, 2479, 2480, 2493, 2487, 2486, 2484, 2485, 2492, 2491, 2489, 2490);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;std::stringstream ss;ss<< "csub"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition csw_rs2_uimm_rs1(ISA16_RV32IMACFD, "csw",(uint64_t) 0xc000,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(5, 5);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(6, 6);uimm+=R_uimm_2.read(ba)<< 2;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_uimm_3(12, 10);uimm+=R_uimm_3.read(ba)<< 3;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSW\n");cp.code()+="etiss_coverage_count(1, 44);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2303);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 load_address = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] + "+std::to_string(uimm)+"ULL;\n";cp.code()+="etiss_coverage_count(7, 2288, 2287, 2285, 2284, 2282, 2283, 2286);\n";cp.code()+="etiss_uint32 mem_val_0;\n";cp.code()+="mem_val_0 = (etiss_int32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs2+8ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(10, 2302, 2294, 2292, 2290, 2291, 2301, 2299, 2298, 2296, 2297);\n";cp.code()+="cpu->exception |= (*(system->dwrite))(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()+="} // 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("//CSW\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(5, 5);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(6, 6);uimm+=R_uimm_2.read(ba)<< 2;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_uimm_3(12, 10);uimm+=R_uimm_3.read(ba)<< 3;std::stringstream ss;ss<< "csw"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | uimm="+std::to_string(uimm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition cslli_nzuimm_rs1(ISA16_RV32IMACFD, "cslli",(uint64_t) 0x02,(uint64_t) 0xf003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 nzuimm=0;static BitArrayRange R_nzuimm_0(6, 2);nzuimm+=R_nzuimm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSLLI\n");cp.code()+="etiss_coverage_count(1, 62);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2590);\n";if(nzuimm) { cp.code()+="etiss_coverage_count(1, 2591);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] << "+std::to_string(nzuimm)+"ULL;\n";cp.code()+="etiss_coverage_count(9, 2604, 2596, 2595, 2593, 2603, 2601, 2600, 2598, 2602);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 nzuimm=0;static BitArrayRange R_nzuimm_0(6, 2);nzuimm+=R_nzuimm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "cslli"<< " # "<< ba<<(" [nzuimm="+std::to_string(nzuimm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition cebreak_(ISA16_RV32IMACFD, "cebreak",(uint64_t) 0x9002,(uint64_t) 0xffff, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { { CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CEBREAK\n");cp.code()+="etiss_coverage_count(1, 69);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 3LL);\n";cp.code()+="etiss_coverage_count(2, 2724, 2722);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\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("//CEBREAK\n");cp.code()+="return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { std::stringstream ss;ss<< "cebreak"<< " # "<< ba<<(" []");return ss.str();})
static InstructionDefinition cadd_rs2_rd(ISA16_RV32IMACFD, "cadd",(uint64_t) 0x9002,(uint64_t) 0xf003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(6, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CADD\n");cp.code()+="etiss_coverage_count(1, 67);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2677);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2683, 2680, 2678, 2681, 2682);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] + *((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(11, 2700, 2688, 2687, 2685, 2699, 2693, 2692, 2690, 2698, 2697, 2695);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(6, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;std::stringstream ss;ss<< "cadd"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition cbeqz_imm_rs1(ISA16_RV32IMACFD, "cbeqz",(uint64_t) 0xc001,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(4, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_6(6, 5);imm+=R_imm_6.read(ba)<< 6;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_3(11, 10);imm+=R_imm_3.read(ba)<< 3;static BitArrayRange R_imm_8(12, 12);imm+=R_imm_8.read(ba)<< 8;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CBEQZ\n");cp.code()+="etiss_coverage_count(1, 60);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2557);\n";cp.code()+="if (*((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] == 0LL) { // conditional\n";cp.code()+="etiss_coverage_count(6, 2564, 2562, 2561, 2559, 2560, 2563);\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+((etiss_int16)(((etiss_int16) imm)<<(7)) > >(7)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 2571, 2565, 2570, 2566, 2569, 2567);\n";cp.code()+="} // conditional\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("//CBEQZ\n");cp.code()+="if (cpu->nextPc != "+std::to_string(ic.current_address_+2)+"ULL) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(4, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_6(6, 5);imm+=R_imm_6.read(ba)<< 6;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_3(11, 10);imm+=R_imm_3.read(ba)<< 3;static BitArrayRange R_imm_8(12, 12);imm+=R_imm_8.read(ba)<< 8;std::stringstream ss;ss<< "cbeqz"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition caddi4spn_rd_imm(ISA16_RV32IMACFD, "caddi4spn",(uint64_t) 0x00,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(4, 2);rd+=R_rd_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_3(5, 5);imm+=R_imm_3.read(ba)<< 3;static BitArrayRange R_imm_2(6, 6);imm+=R_imm_2.read(ba)<< 2;static BitArrayRange R_imm_6(10, 7);imm+=R_imm_6.read(ba)<< 6;static BitArrayRange R_imm_4(12, 11);imm+=R_imm_4.read(ba)<< 4;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CADDI4SPN\n");cp.code()+="etiss_coverage_count(1, 42);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2240);\n";if(imm) { cp.code()+="etiss_coverage_count(1, 2241);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = *((RV32IMACFD*)cpu)->X[2ULL] + "+std::to_string(imm)+"ULL;\n";cp.code()+="etiss_coverage_count(9, 2252, 2246, 2245, 2243, 2244, 2251, 2249, 2248, 2250);\n";} else { { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";cp.code()+="etiss_coverage_count(2, 2255, 2253);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\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("//CADDI4SPN\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(4, 2);rd+=R_rd_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_3(5, 5);imm+=R_imm_3.read(ba)<< 3;static BitArrayRange R_imm_2(6, 6);imm+=R_imm_2.read(ba)<< 2;static BitArrayRange R_imm_6(10, 7);imm+=R_imm_6.read(ba)<< 6;static BitArrayRange R_imm_4(12, 11);imm+=R_imm_4.read(ba)<< 4;std::stringstream ss;ss<< "caddi4spn"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition __reserved_cmv_(ISA16_RV32IMACFD, "__reserved_cmv",(uint64_t) 0x8002,(uint64_t) 0xffff, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { { CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//__reserved_cmv\n");cp.code()+="etiss_coverage_count(1, 66);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";cp.code()+="etiss_coverage_count(3, 2676, 2674, 2675);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\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("//__reserved_cmv\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { std::stringstream ss;ss<< "__reserved_cmv"<< " # "<< ba<<(" []");return ss.str();})
static InstructionDefinition cj_imm(ISA16_RV32IMACFD, "cj",(uint64_t) 0xa001,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(5, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_7(6, 6);imm+=R_imm_7.read(ba)<< 7;static BitArrayRange R_imm_6(7, 7);imm+=R_imm_6.read(ba)<< 6;static BitArrayRange R_imm_10(8, 8);imm+=R_imm_10.read(ba)<< 10;static BitArrayRange R_imm_8(10, 9);imm+=R_imm_8.read(ba)<< 8;static BitArrayRange R_imm_4(11, 11);imm+=R_imm_4.read(ba)<< 4;static BitArrayRange R_imm_11(12, 12);imm+=R_imm_11.read(ba)<< 11;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CJ\n");cp.code()+="etiss_coverage_count(1, 59);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 2556, 2550, 2555, 2551, 2554, 2552);\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("//CJ\n");cp.code()+="return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(5, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_7(6, 6);imm+=R_imm_7.read(ba)<< 7;static BitArrayRange R_imm_6(7, 7);imm+=R_imm_6.read(ba)<< 6;static BitArrayRange R_imm_10(8, 8);imm+=R_imm_10.read(ba)<< 10;static BitArrayRange R_imm_8(10, 9);imm+=R_imm_8.read(ba)<< 8;static BitArrayRange R_imm_4(11, 11);imm+=R_imm_4.read(ba)<< 4;static BitArrayRange R_imm_11(12, 12);imm+=R_imm_11.read(ba)<< 11;std::stringstream ss;ss<< "cj"<< " # "<< ba<<(" [imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition cor_rs2_rd(ISA16_RV32IMACFD, "cor",(uint64_t) 0x8c41,(uint64_t) 0xfc63, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//COR\n");cp.code()+="etiss_coverage_count(1, 57);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2531);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rd+8ULL)+"ULL] | *((RV32IMACFD*)cpu)->X["+std::to_string(rs2+8ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(14, 2530, 2518, 2517, 2515, 2516, 2529, 2523, 2522, 2520, 2521, 2528, 2527, 2525, 2526);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(4, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(9, 7);rd+=R_rd_0.read(ba)<< 0;std::stringstream ss;ss<< "cor"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition caddi16sp_nzimm(ISA16_RV32IMACFD, "caddi16sp",(uint64_t) 0x6101,(uint64_t) 0xef83, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 nzimm=0;static BitArrayRange R_nzimm_5(2, 2);nzimm+=R_nzimm_5.read(ba)<< 5;static BitArrayRange R_nzimm_7(4, 3);nzimm+=R_nzimm_7.read(ba)<< 7;static BitArrayRange R_nzimm_6(5, 5);nzimm+=R_nzimm_6.read(ba)<< 6;static BitArrayRange R_nzimm_4(6, 6);nzimm+=R_nzimm_4.read(ba)<< 4;static BitArrayRange R_nzimm_9(12, 12);nzimm+=R_nzimm_9.read(ba)<< 9;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CADDI16SP\n");cp.code()+="etiss_coverage_count(1, 50);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2383);\n";if(nzimm) { cp.code()+="etiss_coverage_count(1, 2384);\n";cp.code()+="*((RV32IMACFD*)cpu)->X[2ULL] = *((RV32IMACFD*)cpu)->X[2ULL] + "+std::to_string(((etiss_int16)(((etiss_int16) nzimm)<<(6)) > >(6)))+"LL;\n";cp.code()+="etiss_coverage_count(8, 2395, 2387, 2386, 2394, 2390, 2389, 2393, 2391);\n";} else { { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2LL);\n";cp.code()+="etiss_coverage_count(2, 2398, 2396);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\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("//CADDI16SP\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 nzimm=0;static BitArrayRange R_nzimm_5(2, 2);nzimm+=R_nzimm_5.read(ba)<< 5;static BitArrayRange R_nzimm_7(4, 3);nzimm+=R_nzimm_7.read(ba)<< 7;static BitArrayRange R_nzimm_6(5, 5);nzimm+=R_nzimm_6.read(ba)<< 6;static BitArrayRange R_nzimm_4(6, 6);nzimm+=R_nzimm_4.read(ba)<< 4;static BitArrayRange R_nzimm_9(12, 12);nzimm+=R_nzimm_9.read(ba)<< 9;std::stringstream ss;ss<< "caddi16sp"<< " # "<< ba<<(" [nzimm="+std::to_string(nzimm)+"]");return ss.str();})
static InstructionDefinition cli_imm_rd(ISA16_RV32IMACFD, "cli",(uint64_t) 0x4001,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 imm=0;static BitArrayRange R_imm_0(6, 2);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;static BitArrayRange R_imm_5(12, 12);imm+=R_imm_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CLI\n");cp.code()+="etiss_coverage_count(1, 48);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2358);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 2342);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 2348, 2345, 2343, 2346, 2347);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = "+std::to_string(((etiss_int8)(((etiss_int8) imm)<<(2)) > >(2)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 2357, 2353, 2352, 2350, 2356, 2354);\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 imm=0;static BitArrayRange R_imm_0(6, 2);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;static BitArrayRange R_imm_5(12, 12);imm+=R_imm_5.read(ba)<< 5;std::stringstream ss;ss<< "cli"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition cjalr_rs1(ISA16_RV32IMACFD, "cjalr",(uint64_t) 0x9002,(uint64_t) 0xf07f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CJALR\n");cp.code()+="etiss_coverage_count(1, 68);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2721);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 new_pc = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL];\n";cp.code()+="etiss_coverage_count(4, 2707, 2706, 2705, 2703);\n";cp.code()+="*((RV32IMACFD*)cpu)->X[1ULL] = "+std::to_string(ic.current_address_+2ULL)+"ULL;\n";cp.code()+="etiss_coverage_count(6, 2714, 2710, 2709, 2713, 2711, 2712);\n";cp.code()+="cpu->nextPc = new_pc & -2LL;\n";cp.code()+="etiss_coverage_count(4, 2720, 2715, 2719, 2716);\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("//CJALR\n");cp.code()+="return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(11, 7);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "cjalr"<< " # "<< ba<<(" [rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition csrli_shamt_rs1(ISA16_RV32IMACFD, "csrli",(uint64_t) 0x8001,(uint64_t) 0xfc03, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(6, 2);shamt+=R_shamt_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSRLI\n");cp.code()+="etiss_coverage_count(1, 52);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2418);\n";cp.code()+="{ // block\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] >> "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(11, 2417, 2409, 2408, 2406, 2407, 2416, 2414, 2413, 2411, 2412, 2415);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(6, 2);shamt+=R_shamt_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "csrli"<< " # "<< ba<<(" [shamt="+std::to_string(shamt)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition clwsp_uimm_rd(ISA16_RV32IMACFD, "clwsp",(uint64_t) 0x4002,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(3, 2);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(6, 4);uimm+=R_uimm_2.read(ba)<< 2;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;static BitArrayRange R_uimm_5(12, 12);uimm+=R_uimm_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CLWSP\n");cp.code()+="etiss_coverage_count(1, 63);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2640);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 2605);\n";if(rd % 32ULL) { cp.code()+="etiss_coverage_count(2, 2608, 2606);\n";{ cp.code()+="etiss_coverage_count(1, 2636);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 offs = (etiss_uint32)((*((RV32IMACFD*)cpu)->X[2ULL] + "+std::to_string(uimm)+"ULL));\n";cp.code()+="etiss_coverage_count(7, 2618, 2617, 2614, 2612, 2611, 2613, 2615);\n";cp.code()+="etiss_uint32 mem_val_0;\n";cp.code()+="cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="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 = mem_val_0;\n";cp.code()+="etiss_coverage_count(5, 2626, 2625, 2623, 2621, 2622);\n";cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_int32)(res);\n";cp.code()+="etiss_coverage_count(6, 2635, 2631, 2630, 2628, 2634, 2632);\n";cp.code()+="} // block\n";} } else { { cp.code()+="{ // procedure\n";cp.code()+="RV32IMACFD_raise(cpu, system, plugin_pointers, 0LL, 2ULL);\n";cp.code()+="etiss_coverage_count(3, 2639, 2637, 2638);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} { CodePart &cp=cs.append(CodePart::APPENDEDRETURNINGREQUIRED);cp.code()=std::string("//CLWSP\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(3, 2);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(6, 4);uimm+=R_uimm_2.read(ba)<< 2;etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;static BitArrayRange R_uimm_5(12, 12);uimm+=R_uimm_5.read(ba)<< 5;std::stringstream ss;ss<< "clwsp"<< " # "<< ba<<(" [uimm="+std::to_string(uimm)+" | rd="+std::to_string(rd)+"]");return ss.str();})
static InstructionDefinition cswsp_rs2_uimm(ISA16_RV32IMACFD, "cswsp",(uint64_t) 0xc002,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(6, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(8, 7);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(12, 9);uimm+=R_uimm_2.read(ba)<< 2;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CSWSP\n");cp.code()+="etiss_coverage_count(1, 70);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} { cp.code()+="etiss_coverage_count(1, 2746);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 offs = *((RV32IMACFD*)cpu)->X[2ULL] + "+std::to_string(uimm)+"ULL;\n";cp.code()+="etiss_coverage_count(5, 2731, 2730, 2728, 2727, 2729);\n";cp.code()+="etiss_uint32 mem_val_0;\n";cp.code()+="mem_val_0 = (etiss_uint32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(9, 2745, 2737, 2735, 2733, 2734, 2744, 2742, 2741, 2739);\n";cp.code()+="cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="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("//CSWSP\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(6, 2);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 uimm=0;static BitArrayRange R_uimm_6(8, 7);uimm+=R_uimm_6.read(ba)<< 6;static BitArrayRange R_uimm_2(12, 9);uimm+=R_uimm_2.read(ba)<< 2;std::stringstream ss;ss<< "cswsp"<< " # "<< ba<<(" [rs2="+std::to_string(rs2)+" | uimm="+std::to_string(uimm)+"]");return ss.str();})
static InstructionDefinition cbnez_imm_rs1(ISA16_RV32IMACFD, "cbnez",(uint64_t) 0xe001,(uint64_t) 0xe003, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(4, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_6(6, 5);imm+=R_imm_6.read(ba)<< 6;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_3(11, 10);imm+=R_imm_3.read(ba)<< 3;static BitArrayRange R_imm_8(12, 12);imm+=R_imm_8.read(ba)<< 8;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//CBNEZ\n");cp.code()+="etiss_coverage_count(1, 61);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint32)((ic.current_address_+2)))+"ULL;\n";cp.code()+="etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";cp.code()+="} // block\n";} cp.code()+="etiss_coverage_count(1, 2572);\n";cp.code()+="if (*((RV32IMACFD*)cpu)->X["+std::to_string(rs1+8ULL)+"ULL] != 0LL) { // conditional\n";cp.code()+="etiss_coverage_count(6, 2579, 2577, 2576, 2574, 2575, 2578);\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+((etiss_int16)(((etiss_int16) imm)<<(7)) > >(7)))+"LL;\n";cp.code()+="etiss_coverage_count(6, 2586, 2580, 2585, 2581, 2584, 2582);\n";cp.code()+="} // conditional\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("//CBNEZ\n");cp.code()+="if (cpu->nextPc != "+std::to_string(ic.current_address_+2)+"ULL) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_5(2, 2);imm+=R_imm_5.read(ba)<< 5;static BitArrayRange R_imm_1(4, 3);imm+=R_imm_1.read(ba)<< 1;static BitArrayRange R_imm_6(6, 5);imm+=R_imm_6.read(ba)<< 6;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(9, 7);rs1+=R_rs1_0.read(ba)<< 0;static BitArrayRange R_imm_3(11, 10);imm+=R_imm_3.read(ba)<< 3;static BitArrayRange R_imm_8(12, 12);imm+=R_imm_8.read(ba)<< 8;std::stringstream ss;ss<< "cbnez"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+"]");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.