32rd += R_rd_0.
read(ba) << 0;
35rs1 += R_rs1_0.
read(ba) << 0;
38imm += R_imm_0.
read(ba) << 0;
46 cp.
code() = std::string(
"//LWU\n");
49cp.
code() +=
"etiss_coverage_count(1, 184);\n";
51cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
52cp.
code() +=
"{ // block\n";
54cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
55cp.
code() +=
"} // block\n";
58cp.
code() +=
"etiss_coverage_count(1, 7507);\n";
59cp.
code() +=
"{ // block\n";
60cp.
code() +=
"etiss_uint64 offs = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL;\n";
61cp.
code() +=
"etiss_coverage_count(7, 7480, 7479, 7475, 7474, 7472, 7478, 7476);\n";
62cp.
code() +=
"etiss_uint32 mem_val_0;\n";
63cp.
code() +=
"cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";
64cp.
code() +=
"if (cpu->exception) { // conditional\n";
66cp.
code() +=
"{ // procedure\n";
67cp.
code() +=
"RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
69cp.
code() +=
"} // procedure\n";
71cp.
code() +=
"} // conditional\n";
72cp.
code() +=
"etiss_uint32 res = (etiss_uint32)(mem_val_0);\n";
73cp.
code() +=
"etiss_coverage_count(6, 7490, 7489, 7487, 7485, 7483, 7484);\n";
74cp.
code() +=
"etiss_coverage_count(1, 7491);\n";
75if ((rd % 32ULL) != 0LL) {
76cp.
code() +=
"etiss_coverage_count(5, 7497, 7494, 7492, 7495, 7496);\n";
77cp.
code() +=
"*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_uint64)(res);\n";
78cp.
code() +=
"etiss_coverage_count(6, 7506, 7502, 7501, 7499, 7505, 7503);\n";
80cp.
code() +=
"} // block\n";
83cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
90 cp.
code() = std::string(
"//LWU\n");
93cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
105rd += R_rd_0.read(ba) << 0;
108rs1 += R_rs1_0.read(ba) << 0;
111imm += R_imm_0.read(ba) << 0;
115 std::stringstream ss;
117ss <<
"lwu" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
140rd += R_rd_0.
read(ba) << 0;
143rs1 += R_rs1_0.
read(ba) << 0;
146imm += R_imm_0.
read(ba) << 0;
154 cp.
code() = std::string(
"//LD\n");
157cp.
code() +=
"etiss_coverage_count(1, 185);\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, 7544);\n";
167cp.
code() +=
"{ // block\n";
168cp.
code() +=
"etiss_uint64 offs = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL;\n";
169cp.
code() +=
"etiss_coverage_count(7, 7517, 7516, 7513, 7512, 7510, 7515, 7514);\n";
170cp.
code() +=
"etiss_uint64 mem_val_0;\n";
171cp.
code() +=
"cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\n";
172cp.
code() +=
"if (cpu->exception) { // conditional\n";
174cp.
code() +=
"{ // procedure\n";
175cp.
code() +=
"RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
177cp.
code() +=
"} // procedure\n";
179cp.
code() +=
"} // conditional\n";
180cp.
code() +=
"etiss_int64 res = (etiss_int64)(mem_val_0);\n";
181cp.
code() +=
"etiss_coverage_count(6, 7527, 7526, 7524, 7522, 7520, 7521);\n";
182cp.
code() +=
"etiss_coverage_count(1, 7528);\n";
183if ((rd % 32ULL) != 0LL) {
184cp.
code() +=
"etiss_coverage_count(5, 7534, 7531, 7529, 7532, 7533);\n";
185cp.
code() +=
"*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_uint64)(res);\n";
186cp.
code() +=
"etiss_coverage_count(6, 7543, 7539, 7538, 7536, 7542, 7540);\n";
188cp.
code() +=
"} // block\n";
191cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
198 cp.
code() = std::string(
"//LD\n");
201cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
213rd += R_rd_0.read(ba) << 0;
216rs1 += R_rs1_0.read(ba) << 0;
219imm += R_imm_0.read(ba) << 0;
223 std::stringstream ss;
225ss <<
"ld" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
248imm += R_imm_0.
read(ba) << 0;
251rs1 += R_rs1_0.
read(ba) << 0;
254rs2 += R_rs2_0.
read(ba) << 0;
256imm += R_imm_5.
read(ba) << 5;
264 cp.
code() = std::string(
"//SD\n");
267cp.
code() +=
"etiss_coverage_count(1, 186);\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, 7569);\n";
277cp.
code() +=
"{ // block\n";
278cp.
code() +=
"etiss_uint64 offs = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL;\n";
279cp.
code() +=
"etiss_coverage_count(7, 7554, 7553, 7550, 7549, 7547, 7552, 7551);\n";
280cp.
code() +=
"etiss_uint64 mem_val_0;\n";
281cp.
code() +=
"mem_val_0 = (etiss_uint64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL]);\n";
282cp.
code() +=
"etiss_coverage_count(9, 7568, 7560, 7558, 7556, 7557, 7567, 7565, 7564, 7562);\n";
283cp.
code() +=
"cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\n";
284cp.
code() +=
"if (cpu->exception) { // conditional\n";
286cp.
code() +=
"{ // procedure\n";
287cp.
code() +=
"RV64IMACFD_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(
"//SD\n");
305cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
317imm += R_imm_0.read(ba) << 0;
320rs1 += R_rs1_0.read(ba) << 0;
323rs2 += R_rs2_0.read(ba) << 0;
325imm += R_imm_5.read(ba) << 5;
329 std::stringstream ss;
331ss <<
"sd" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
342 (uint64_t) 0xfc00707f,
354rd += R_rd_0.
read(ba) << 0;
357rs1 += R_rs1_0.
read(ba) << 0;
360shamt += R_shamt_0.
read(ba) << 0;
368 cp.
code() = std::string(
"//SLLI\n");
371cp.
code() +=
"etiss_coverage_count(1, 187);\n";
373cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
374cp.
code() +=
"{ // block\n";
376cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
377cp.
code() +=
"} // block\n";
379cp.
code() +=
"etiss_coverage_count(1, 7570);\n";
380if ((rd % 32ULL) != 0LL) {
381cp.
code() +=
"etiss_coverage_count(5, 7576, 7573, 7571, 7574, 7575);\n";
382cp.
code() +=
"*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] << " + std::to_string(shamt) +
"ULL;\n";
383cp.
code() +=
"etiss_coverage_count(9, 7589, 7581, 7580, 7578, 7588, 7586, 7585, 7583, 7587);\n";
386cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
399rd += R_rd_0.read(ba) << 0;
402rs1 += R_rs1_0.read(ba) << 0;
405shamt += R_shamt_0.read(ba) << 0;
409 std::stringstream ss;
411ss <<
"slli" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | shamt=" + std::to_string(shamt) +
"]");
422 (uint64_t) 0xfc00707f,
434rd += R_rd_0.
read(ba) << 0;
437rs1 += R_rs1_0.
read(ba) << 0;
440shamt += R_shamt_0.
read(ba) << 0;
448 cp.
code() = std::string(
"//SRLI\n");
451cp.
code() +=
"etiss_coverage_count(1, 188);\n";
453cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
454cp.
code() +=
"{ // block\n";
456cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
457cp.
code() +=
"} // block\n";
459cp.
code() +=
"etiss_coverage_count(1, 7590);\n";
460if ((rd % 32ULL) != 0LL) {
461cp.
code() +=
"etiss_coverage_count(5, 7596, 7593, 7591, 7594, 7595);\n";
462cp.
code() +=
"*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] >> " + std::to_string(shamt) +
"ULL;\n";
463cp.
code() +=
"etiss_coverage_count(9, 7609, 7601, 7600, 7598, 7608, 7606, 7605, 7603, 7607);\n";
466cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
479rd += R_rd_0.read(ba) << 0;
482rs1 += R_rs1_0.read(ba) << 0;
485shamt += R_shamt_0.read(ba) << 0;
489 std::stringstream ss;
491ss <<
"srli" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | shamt=" + std::to_string(shamt) +
"]");
501 (uint64_t) 0x40005013,
502 (uint64_t) 0xfc00707f,
514rd += R_rd_0.
read(ba) << 0;
517rs1 += R_rs1_0.
read(ba) << 0;
520shamt += R_shamt_0.
read(ba) << 0;
528 cp.
code() = std::string(
"//SRAI\n");
531cp.
code() +=
"etiss_coverage_count(1, 189);\n";
533cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
534cp.
code() +=
"{ // block\n";
536cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
537cp.
code() +=
"} // block\n";
539cp.
code() +=
"etiss_coverage_count(1, 7610);\n";
540if ((rd % 32ULL) != 0LL) {
541cp.
code() +=
"etiss_coverage_count(5, 7616, 7613, 7611, 7614, 7615);\n";
542cp.
code() +=
"*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = ((etiss_int64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL])) >> " + std::to_string(shamt) +
"ULL;\n";
543cp.
code() +=
"etiss_coverage_count(11, 7631, 7621, 7620, 7618, 7630, 7627, 7626, 7625, 7623, 7628, 7629);\n";
546cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
559rd += R_rd_0.read(ba) << 0;
562rs1 += R_rs1_0.read(ba) << 0;
565shamt += R_shamt_0.read(ba) << 0;
569 std::stringstream ss;
571ss <<
"srai" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | shamt=" + std::to_string(shamt) +
"]");
594rd += R_rd_0.
read(ba) << 0;
597rs1 += R_rs1_0.
read(ba) << 0;
600imm += R_imm_0.
read(ba) << 0;
608 cp.
code() = std::string(
"//ADDIW\n");
611cp.
code() +=
"etiss_coverage_count(1, 190);\n";
613cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
614cp.
code() +=
"{ // block\n";
616cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
617cp.
code() +=
"} // block\n";
620cp.
code() +=
"etiss_coverage_count(1, 7659);\n";
621cp.
code() +=
"{ // block\n";
622cp.
code() +=
"etiss_coverage_count(1, 7632);\n";
623if ((rd % 32ULL) != 0LL) {
624cp.
code() +=
"etiss_coverage_count(5, 7638, 7635, 7633, 7636, 7637);\n";
626cp.
code() +=
"etiss_coverage_count(1, 7658);\n";
627cp.
code() +=
"{ // block\n";
628cp.
code() +=
"etiss_int32 res = *((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL;\n";
629cp.
code() +=
"etiss_coverage_count(7, 7648, 7647, 7644, 7643, 7641, 7646, 7645);\n";
630cp.
code() +=
"*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_int64)(res);\n";
631cp.
code() +=
"etiss_coverage_count(6, 7657, 7653, 7652, 7650, 7656, 7654);\n";
632cp.
code() +=
"} // block\n";
635cp.
code() +=
"} // block\n";
638cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
651rd += R_rd_0.read(ba) << 0;
654rs1 += R_rs1_0.read(ba) << 0;
657imm += R_imm_0.read(ba) << 0;
661 std::stringstream ss;
663ss <<
"addiw" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
674 (uint64_t) 0xfe00707f,
686rd += R_rd_0.
read(ba) << 0;
689rs1 += R_rs1_0.
read(ba) << 0;
692shamt += R_shamt_0.
read(ba) << 0;
700 cp.
code() = std::string(
"//SLLIW\n");
703cp.
code() +=
"etiss_coverage_count(1, 191);\n";
705cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
706cp.
code() +=
"{ // block\n";
708cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
709cp.
code() +=
"} // block\n";
712cp.
code() +=
"etiss_coverage_count(1, 7690);\n";
713cp.
code() +=
"{ // block\n";
714cp.
code() +=
"etiss_coverage_count(1, 7660);\n";
715if ((rd % 32ULL) != 0LL) {
716cp.
code() +=
"etiss_coverage_count(5, 7666, 7663, 7661, 7664, 7665);\n";
718cp.
code() +=
"etiss_coverage_count(1, 7689);\n";
719cp.
code() +=
"{ // block\n";
720cp.
code() +=
"etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL])) << " + std::to_string(shamt) +
"ULL;\n";
721cp.
code() +=
"etiss_coverage_count(8, 7678, 7677, 7674, 7672, 7671, 7669, 7675, 7676);\n";
722cp.
code() +=
"*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";
723cp.
code() +=
"etiss_coverage_count(7, 7688, 7683, 7682, 7680, 7687, 7685, 7684);\n";
724cp.
code() +=
"} // block\n";
727cp.
code() +=
"} // block\n";
730cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
743rd += R_rd_0.read(ba) << 0;
746rs1 += R_rs1_0.read(ba) << 0;
749shamt += R_shamt_0.read(ba) << 0;
753 std::stringstream ss;
755ss <<
"slliw" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | shamt=" + std::to_string(shamt) +
"]");
766 (uint64_t) 0xfe00707f,
778rd += R_rd_0.
read(ba) << 0;
781rs1 += R_rs1_0.
read(ba) << 0;
784shamt += R_shamt_0.
read(ba) << 0;
792 cp.
code() = std::string(
"//SRLIW\n");
795cp.
code() +=
"etiss_coverage_count(1, 192);\n";
797cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
798cp.
code() +=
"{ // block\n";
800cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
801cp.
code() +=
"} // block\n";
804cp.
code() +=
"etiss_coverage_count(1, 7721);\n";
805cp.
code() +=
"{ // block\n";
806cp.
code() +=
"etiss_coverage_count(1, 7691);\n";
807if ((rd % 32ULL) != 0LL) {
808cp.
code() +=
"etiss_coverage_count(5, 7697, 7694, 7692, 7695, 7696);\n";
810cp.
code() +=
"etiss_coverage_count(1, 7720);\n";
811cp.
code() +=
"{ // block\n";
812cp.
code() +=
"etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL])) >> " + std::to_string(shamt) +
"ULL;\n";
813cp.
code() +=
"etiss_coverage_count(8, 7709, 7708, 7705, 7703, 7702, 7700, 7706, 7707);\n";
814cp.
code() +=
"*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";
815cp.
code() +=
"etiss_coverage_count(7, 7719, 7714, 7713, 7711, 7718, 7716, 7715);\n";
816cp.
code() +=
"} // block\n";
819cp.
code() +=
"} // block\n";
822cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
835rd += R_rd_0.read(ba) << 0;
838rs1 += R_rs1_0.read(ba) << 0;
841shamt += R_shamt_0.read(ba) << 0;
845 std::stringstream ss;
847ss <<
"srliw" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | shamt=" + std::to_string(shamt) +
"]");
857 (uint64_t) 0x4000501b,
858 (uint64_t) 0xfe00707f,
870rd += R_rd_0.
read(ba) << 0;
873rs1 += R_rs1_0.
read(ba) << 0;
876shamt += R_shamt_0.
read(ba) << 0;
884 cp.
code() = std::string(
"//SRAIW\n");
887cp.
code() +=
"etiss_coverage_count(1, 193);\n";
889cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
890cp.
code() +=
"{ // block\n";
892cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
893cp.
code() +=
"} // block\n";
896cp.
code() +=
"etiss_coverage_count(1, 7751);\n";
897cp.
code() +=
"{ // block\n";
898cp.
code() +=
"etiss_coverage_count(1, 7722);\n";
899if ((rd % 32ULL) != 0LL) {
900cp.
code() +=
"etiss_coverage_count(5, 7728, 7725, 7723, 7726, 7727);\n";
902cp.
code() +=
"etiss_coverage_count(1, 7750);\n";
903cp.
code() +=
"{ // block\n";
904cp.
code() +=
"etiss_int32 sh_val = ((etiss_int32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL])) >> " + std::to_string(shamt) +
"ULL;\n";
905cp.
code() +=
"etiss_coverage_count(8, 7740, 7739, 7736, 7734, 7733, 7731, 7737, 7738);\n";
906cp.
code() +=
"*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_uint64)(sh_val);\n";
907cp.
code() +=
"etiss_coverage_count(6, 7749, 7745, 7744, 7742, 7748, 7746);\n";
908cp.
code() +=
"} // block\n";
911cp.
code() +=
"} // block\n";
914cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
927rd += R_rd_0.read(ba) << 0;
930rs1 += R_rs1_0.read(ba) << 0;
933shamt += R_shamt_0.read(ba) << 0;
937 std::stringstream ss;
939ss <<
"sraiw" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | shamt=" + std::to_string(shamt) +
"]");
950 (uint64_t) 0xfe00707f,
962rd += R_rd_0.
read(ba) << 0;
965rs1 += R_rs1_0.
read(ba) << 0;
968rs2 += R_rs2_0.
read(ba) << 0;
976 cp.
code() = std::string(
"//ADDW\n");
979cp.
code() +=
"etiss_coverage_count(1, 194);\n";
981cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
982cp.
code() +=
"{ // block\n";
984cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
985cp.
code() +=
"} // block\n";
988cp.
code() +=
"etiss_coverage_count(1, 7786);\n";
989cp.
code() +=
"{ // block\n";
990cp.
code() +=
"etiss_coverage_count(1, 7752);\n";
991if ((rd % 32ULL) != 0LL) {
992cp.
code() +=
"etiss_coverage_count(5, 7758, 7755, 7753, 7756, 7757);\n";
994cp.
code() +=
"etiss_coverage_count(1, 7785);\n";
995cp.
code() +=
"{ // block\n";
996cp.
code() +=
"etiss_int32 res = (etiss_int32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL]) + (etiss_int32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL]);\n";
997cp.
code() +=
"etiss_coverage_count(10, 7775, 7774, 7766, 7764, 7763, 7761, 7773, 7771, 7770, 7768);\n";
998cp.
code() +=
"*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_int64)(res);\n";
999cp.
code() +=
"etiss_coverage_count(6, 7784, 7780, 7779, 7777, 7783, 7781);\n";
1000cp.
code() +=
"} // block\n";
1003cp.
code() +=
"} // block\n";
1006cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1019rd += R_rd_0.read(ba) << 0;
1022rs1 += R_rs1_0.read(ba) << 0;
1025rs2 += R_rs2_0.read(ba) << 0;
1029 std::stringstream ss;
1031ss <<
"addw" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1041 (uint64_t) 0x4000003b,
1042 (uint64_t) 0xfe00707f,
1054rd += R_rd_0.
read(ba) << 0;
1057rs1 += R_rs1_0.
read(ba) << 0;
1060rs2 += R_rs2_0.
read(ba) << 0;
1068 cp.
code() = std::string(
"//SUBW\n");
1071cp.
code() +=
"etiss_coverage_count(1, 195);\n";
1073cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
1074cp.
code() +=
"{ // block\n";
1076cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1077cp.
code() +=
"} // block\n";
1080cp.
code() +=
"etiss_coverage_count(1, 7821);\n";
1081cp.
code() +=
"{ // block\n";
1082cp.
code() +=
"etiss_coverage_count(1, 7787);\n";
1083if ((rd % 32ULL) != 0LL) {
1084cp.
code() +=
"etiss_coverage_count(5, 7793, 7790, 7788, 7791, 7792);\n";
1086cp.
code() +=
"etiss_coverage_count(1, 7820);\n";
1087cp.
code() +=
"{ // block\n";
1088cp.
code() +=
"etiss_int32 res = (etiss_int32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL]) - (etiss_int32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL]);\n";
1089cp.
code() +=
"etiss_coverage_count(10, 7810, 7809, 7801, 7799, 7798, 7796, 7808, 7806, 7805, 7803);\n";
1090cp.
code() +=
"*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_int64)(res);\n";
1091cp.
code() +=
"etiss_coverage_count(6, 7819, 7815, 7814, 7812, 7818, 7816);\n";
1092cp.
code() +=
"} // block\n";
1095cp.
code() +=
"} // block\n";
1098cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1111rd += R_rd_0.read(ba) << 0;
1114rs1 += R_rs1_0.read(ba) << 0;
1117rs2 += R_rs2_0.read(ba) << 0;
1121 std::stringstream ss;
1123ss <<
"subw" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1133 (uint64_t) 0x00103b,
1134 (uint64_t) 0xfe00707f,
1146rd += R_rd_0.
read(ba) << 0;
1149rs1 += R_rs1_0.
read(ba) << 0;
1152rs2 += R_rs2_0.
read(ba) << 0;
1160 cp.
code() = std::string(
"//SLLW\n");
1163cp.
code() +=
"etiss_coverage_count(1, 196);\n";
1165cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
1166cp.
code() +=
"{ // block\n";
1168cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1169cp.
code() +=
"} // block\n";
1172cp.
code() +=
"etiss_coverage_count(1, 7862);\n";
1173cp.
code() +=
"{ // block\n";
1174cp.
code() +=
"etiss_coverage_count(1, 7822);\n";
1175if ((rd % 32ULL) != 0LL) {
1176cp.
code() +=
"etiss_coverage_count(5, 7828, 7825, 7823, 7826, 7827);\n";
1178cp.
code() +=
"etiss_coverage_count(1, 7861);\n";
1179cp.
code() +=
"{ // block\n";
1180cp.
code() +=
"etiss_uint32 count = (etiss_uint64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL]) & 31ULL;\n";
1181cp.
code() +=
"etiss_coverage_count(7, 7838, 7837, 7835, 7834, 7833, 7831, 7836);\n";
1182cp.
code() +=
"etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL])) << count;\n";
1183cp.
code() +=
"etiss_coverage_count(8, 7850, 7849, 7846, 7844, 7843, 7841, 7847, 7848);\n";
1184cp.
code() +=
"*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";
1185cp.
code() +=
"etiss_coverage_count(7, 7860, 7855, 7854, 7852, 7859, 7857, 7856);\n";
1186cp.
code() +=
"} // block\n";
1189cp.
code() +=
"} // block\n";
1192cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1205rd += R_rd_0.read(ba) << 0;
1208rs1 += R_rs1_0.read(ba) << 0;
1211rs2 += R_rs2_0.read(ba) << 0;
1215 std::stringstream ss;
1217ss <<
"sllw" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1227 (uint64_t) 0x00503b,
1228 (uint64_t) 0xfe00707f,
1240rd += R_rd_0.
read(ba) << 0;
1243rs1 += R_rs1_0.
read(ba) << 0;
1246rs2 += R_rs2_0.
read(ba) << 0;
1254 cp.
code() = std::string(
"//SRLW\n");
1257cp.
code() +=
"etiss_coverage_count(1, 197);\n";
1259cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
1260cp.
code() +=
"{ // block\n";
1262cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1263cp.
code() +=
"} // block\n";
1266cp.
code() +=
"etiss_coverage_count(1, 7903);\n";
1267cp.
code() +=
"{ // block\n";
1268cp.
code() +=
"etiss_coverage_count(1, 7863);\n";
1269if ((rd % 32ULL) != 0LL) {
1270cp.
code() +=
"etiss_coverage_count(5, 7869, 7866, 7864, 7867, 7868);\n";
1272cp.
code() +=
"etiss_coverage_count(1, 7902);\n";
1273cp.
code() +=
"{ // block\n";
1274cp.
code() +=
"etiss_uint32 count = (etiss_uint64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL]) & 31ULL;\n";
1275cp.
code() +=
"etiss_coverage_count(7, 7879, 7878, 7876, 7875, 7874, 7872, 7877);\n";
1276cp.
code() +=
"etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL])) >> count;\n";
1277cp.
code() +=
"etiss_coverage_count(8, 7891, 7890, 7887, 7885, 7884, 7882, 7888, 7889);\n";
1278cp.
code() +=
"*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";
1279cp.
code() +=
"etiss_coverage_count(7, 7901, 7896, 7895, 7893, 7900, 7898, 7897);\n";
1280cp.
code() +=
"} // block\n";
1283cp.
code() +=
"} // block\n";
1286cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1299rd += R_rd_0.read(ba) << 0;
1302rs1 += R_rs1_0.read(ba) << 0;
1305rs2 += R_rs2_0.read(ba) << 0;
1309 std::stringstream ss;
1311ss <<
"srlw" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1321 (uint64_t) 0x4000503b,
1322 (uint64_t) 0xfe00707f,
1334rd += R_rd_0.
read(ba) << 0;
1337rs1 += R_rs1_0.
read(ba) << 0;
1340rs2 += R_rs2_0.
read(ba) << 0;
1348 cp.
code() = std::string(
"//SRAW\n");
1351cp.
code() +=
"etiss_coverage_count(1, 198);\n";
1353cp.
code() +=
"etiss_coverage_count(1, 1189);\n";
1354cp.
code() +=
"{ // block\n";
1356cp.
code() +=
"etiss_coverage_count(7, 1188, 1181, 1187, 1184, 1182, 1183, 1185);\n";
1357cp.
code() +=
"} // block\n";
1360cp.
code() +=
"etiss_coverage_count(1, 7943);\n";
1361cp.
code() +=
"{ // block\n";
1362cp.
code() +=
"etiss_coverage_count(1, 7904);\n";
1363if ((rd % 32ULL) != 0LL) {
1364cp.
code() +=
"etiss_coverage_count(5, 7910, 7907, 7905, 7908, 7909);\n";
1366cp.
code() +=
"etiss_coverage_count(1, 7942);\n";
1367cp.
code() +=
"{ // block\n";
1368cp.
code() +=
"etiss_uint32 count = (etiss_uint64)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs2 % 32ULL) +
"ULL]) & 31ULL;\n";
1369cp.
code() +=
"etiss_coverage_count(7, 7920, 7919, 7917, 7916, 7915, 7913, 7918);\n";
1370cp.
code() +=
"etiss_int32 sh_val = ((etiss_int32)(*((RV64IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL])) >> count;\n";
1371cp.
code() +=
"etiss_coverage_count(8, 7932, 7931, 7928, 7926, 7925, 7923, 7929, 7930);\n";
1372cp.
code() +=
"*((RV64IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_int64)(sh_val);\n";
1373cp.
code() +=
"etiss_coverage_count(6, 7941, 7937, 7936, 7934, 7940, 7938);\n";
1374cp.
code() +=
"} // block\n";
1377cp.
code() +=
"} // block\n";
1380cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1393rd += R_rd_0.read(ba) << 0;
1396rs1 += R_rs1_0.read(ba) << 0;
1399rs2 += R_rs2_0.read(ba) << 0;
1403 std::stringstream ss;
1405ss <<
"sraw" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
etiss::instr::InstructionGroup ISA32_RV64IMACFD("ISA32_RV64IMACFD", 32)
static InstructionDefinition lwu_rd_rs1_imm(ISA32_RV64IMACFD, "lwu",(uint64_t) 0x006003,(uint64_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//LWU\n");cp.code()+="etiss_coverage_count(1, 184);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"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, 7507);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint64 offs = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + "+std::to_string(((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL;\n";cp.code()+="etiss_coverage_count(7, 7480, 7479, 7475, 7474, 7472, 7478, 7476);\n";cp.code()+="etiss_uint32 mem_val_0;\n";cp.code()+="cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // conditional\n";cp.code()+="etiss_uint32 res = (etiss_uint32)(mem_val_0);\n";cp.code()+="etiss_coverage_count(6, 7490, 7489, 7487, 7485, 7483, 7484);\n";cp.code()+="etiss_coverage_count(1, 7491);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7497, 7494, 7492, 7495, 7496);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 7506, 7502, 7501, 7499, 7505, 7503);\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("//LWU\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;std::stringstream ss;ss<< "lwu"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition slliw_rd_rs1_shamt(ISA32_RV64IMACFD, "slliw",(uint64_t) 0x00101b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SLLIW\n");cp.code()+="etiss_coverage_count(1, 191);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"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, 7690);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7660);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7666, 7663, 7661, 7664, 7665);\n";{ cp.code()+="etiss_coverage_count(1, 7689);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL])) << "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(8, 7678, 7677, 7674, 7672, 7671, 7669, 7675, 7676);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";cp.code()+="etiss_coverage_count(7, 7688, 7683, 7682, 7680, 7687, 7685, 7684);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;std::stringstream ss;ss<< "slliw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | shamt="+std::to_string(shamt)+"]");return ss.str();})
static InstructionDefinition subw_rd_rs1_rs2(ISA32_RV64IMACFD, "subw",(uint64_t) 0x4000003b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SUBW\n");cp.code()+="etiss_coverage_count(1, 195);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"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, 7821);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7787);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7793, 7790, 7788, 7791, 7792);\n";{ cp.code()+="etiss_coverage_count(1, 7820);\n";cp.code()+="{ // block\n";cp.code()+="etiss_int32 res = (etiss_int32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]) - (etiss_int32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(10, 7810, 7809, 7801, 7799, 7798, 7796, 7808, 7806, 7805, 7803);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_int64)(res);\n";cp.code()+="etiss_coverage_count(6, 7819, 7815, 7814, 7812, 7818, 7816);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "subw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition srli_rd_rs1_shamt(ISA32_RV64IMACFD, "srli",(uint64_t) 0x005013,(uint64_t) 0xfc00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(25, 20);shamt+=R_shamt_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SRLI\n");cp.code()+="etiss_coverage_count(1, 188);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"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, 7590);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7596, 7593, 7591, 7594, 7595);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] >> "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(9, 7609, 7601, 7600, 7598, 7608, 7606, 7605, 7603, 7607);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(25, 20);shamt+=R_shamt_0.read(ba)<< 0;std::stringstream ss;ss<< "srli"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | shamt="+std::to_string(shamt)+"]");return ss.str();})
static InstructionDefinition addw_rd_rs1_rs2(ISA32_RV64IMACFD, "addw",(uint64_t) 0x00003b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//ADDW\n");cp.code()+="etiss_coverage_count(1, 194);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"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, 7786);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7752);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7758, 7755, 7753, 7756, 7757);\n";{ cp.code()+="etiss_coverage_count(1, 7785);\n";cp.code()+="{ // block\n";cp.code()+="etiss_int32 res = (etiss_int32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]) + (etiss_int32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(10, 7775, 7774, 7766, 7764, 7763, 7761, 7773, 7771, 7770, 7768);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_int64)(res);\n";cp.code()+="etiss_coverage_count(6, 7784, 7780, 7779, 7777, 7783, 7781);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "addw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition slli_rd_rs1_shamt(ISA32_RV64IMACFD, "slli",(uint64_t) 0x001013,(uint64_t) 0xfc00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(25, 20);shamt+=R_shamt_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SLLI\n");cp.code()+="etiss_coverage_count(1, 187);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"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, 7570);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7576, 7573, 7571, 7574, 7575);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] << "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(9, 7589, 7581, 7580, 7578, 7588, 7586, 7585, 7583, 7587);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(25, 20);shamt+=R_shamt_0.read(ba)<< 0;std::stringstream ss;ss<< "slli"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | shamt="+std::to_string(shamt)+"]");return ss.str();})
static InstructionDefinition sraw_rd_rs1_rs2(ISA32_RV64IMACFD, "sraw",(uint64_t) 0x4000503b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SRAW\n");cp.code()+="etiss_coverage_count(1, 198);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"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, 7943);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7904);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7910, 7907, 7905, 7908, 7909);\n";{ cp.code()+="etiss_coverage_count(1, 7942);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 count = (etiss_uint64)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]) & 31ULL;\n";cp.code()+="etiss_coverage_count(7, 7920, 7919, 7917, 7916, 7915, 7913, 7918);\n";cp.code()+="etiss_int32 sh_val = ((etiss_int32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL])) >> count;\n";cp.code()+="etiss_coverage_count(8, 7932, 7931, 7928, 7926, 7925, 7923, 7929, 7930);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_int64)(sh_val);\n";cp.code()+="etiss_coverage_count(6, 7941, 7937, 7936, 7934, 7940, 7938);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "sraw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition sllw_rd_rs1_rs2(ISA32_RV64IMACFD, "sllw",(uint64_t) 0x00103b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SLLW\n");cp.code()+="etiss_coverage_count(1, 196);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"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, 7862);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7822);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7828, 7825, 7823, 7826, 7827);\n";{ cp.code()+="etiss_coverage_count(1, 7861);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 count = (etiss_uint64)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]) & 31ULL;\n";cp.code()+="etiss_coverage_count(7, 7838, 7837, 7835, 7834, 7833, 7831, 7836);\n";cp.code()+="etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL])) << count;\n";cp.code()+="etiss_coverage_count(8, 7850, 7849, 7846, 7844, 7843, 7841, 7847, 7848);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";cp.code()+="etiss_coverage_count(7, 7860, 7855, 7854, 7852, 7859, 7857, 7856);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "sllw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition srliw_rd_rs1_shamt(ISA32_RV64IMACFD, "srliw",(uint64_t) 0x00501b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SRLIW\n");cp.code()+="etiss_coverage_count(1, 192);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"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, 7721);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7691);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7697, 7694, 7692, 7695, 7696);\n";{ cp.code()+="etiss_coverage_count(1, 7720);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL])) >> "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(8, 7709, 7708, 7705, 7703, 7702, 7700, 7706, 7707);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";cp.code()+="etiss_coverage_count(7, 7719, 7714, 7713, 7711, 7718, 7716, 7715);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;std::stringstream ss;ss<< "srliw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | shamt="+std::to_string(shamt)+"]");return ss.str();})
static InstructionDefinition srai_rd_rs1_shamt(ISA32_RV64IMACFD, "srai",(uint64_t) 0x40005013,(uint64_t) 0xfc00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(25, 20);shamt+=R_shamt_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SRAI\n");cp.code()+="etiss_coverage_count(1, 189);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"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, 7610);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7616, 7613, 7611, 7614, 7615);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = ((etiss_int64)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL])) >> "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(11, 7631, 7621, 7620, 7618, 7630, 7627, 7626, 7625, 7623, 7628, 7629);\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(25, 20);shamt+=R_shamt_0.read(ba)<< 0;std::stringstream ss;ss<< "srai"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | shamt="+std::to_string(shamt)+"]");return ss.str();})
static InstructionDefinition sraiw_rd_rs1_shamt(ISA32_RV64IMACFD, "sraiw",(uint64_t) 0x4000501b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SRAIW\n");cp.code()+="etiss_coverage_count(1, 193);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"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, 7751);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7722);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7728, 7725, 7723, 7726, 7727);\n";{ cp.code()+="etiss_coverage_count(1, 7750);\n";cp.code()+="{ // block\n";cp.code()+="etiss_int32 sh_val = ((etiss_int32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL])) >> "+std::to_string(shamt)+"ULL;\n";cp.code()+="etiss_coverage_count(8, 7740, 7739, 7736, 7734, 7733, 7731, 7737, 7738);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)(sh_val);\n";cp.code()+="etiss_coverage_count(6, 7749, 7745, 7744, 7742, 7748, 7746);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 shamt=0;static BitArrayRange R_shamt_0(24, 20);shamt+=R_shamt_0.read(ba)<< 0;std::stringstream ss;ss<< "sraiw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | shamt="+std::to_string(shamt)+"]");return ss.str();})
static InstructionDefinition ld_rd_rs1_imm(ISA32_RV64IMACFD, "ld",(uint64_t) 0x003003,(uint64_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//LD\n");cp.code()+="etiss_coverage_count(1, 185);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"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, 7544);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint64 offs = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + "+std::to_string(((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL;\n";cp.code()+="etiss_coverage_count(7, 7517, 7516, 7513, 7512, 7510, 7515, 7514);\n";cp.code()+="etiss_uint64 mem_val_0;\n";cp.code()+="cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // conditional\n";cp.code()+="etiss_int64 res = (etiss_int64)(mem_val_0);\n";cp.code()+="etiss_coverage_count(6, 7527, 7526, 7524, 7522, 7520, 7521);\n";cp.code()+="etiss_coverage_count(1, 7528);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7534, 7531, 7529, 7532, 7533);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)(res);\n";cp.code()+="etiss_coverage_count(6, 7543, 7539, 7538, 7536, 7542, 7540);\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("//LD\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;std::stringstream ss;ss<< "ld"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition sd_imm_rs1_rs2(ISA32_RV64IMACFD, "sd",(uint64_t) 0x003023,(uint64_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_0(11, 7);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;static BitArrayRange R_imm_5(31, 25);imm+=R_imm_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SD\n");cp.code()+="etiss_coverage_count(1, 186);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"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, 7569);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint64 offs = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + "+std::to_string(((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL;\n";cp.code()+="etiss_coverage_count(7, 7554, 7553, 7550, 7549, 7547, 7552, 7551);\n";cp.code()+="etiss_uint64 mem_val_0;\n";cp.code()+="mem_val_0 = (etiss_uint64)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]);\n";cp.code()+="etiss_coverage_count(9, 7568, 7560, 7558, 7556, 7557, 7567, 7565, 7564, 7562);\n";cp.code()+="cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 8);\n";cp.code()+="if (cpu->exception) { // conditional\n";{ cp.code()+="{ // procedure\n";cp.code()+="RV64IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";cp.code()+="goto instr_exit_"+std::to_string(ic.current_address_)+";\n";cp.code()+="} // procedure\n";} cp.code()+="} // conditional\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} { CodePart &cp=cs.append(CodePart::APPENDEDRETURNINGREQUIRED);cp.code()=std::string("//SD\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_0(11, 7);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;static BitArrayRange R_imm_5(31, 25);imm+=R_imm_5.read(ba)<< 5;std::stringstream ss;ss<< "sd"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition addiw_rd_rs1_imm(ISA32_RV64IMACFD, "addiw",(uint64_t) 0x00001b,(uint64_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//ADDIW\n");cp.code()+="etiss_coverage_count(1, 190);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"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, 7659);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7632);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7638, 7635, 7633, 7636, 7637);\n";{ cp.code()+="etiss_coverage_count(1, 7658);\n";cp.code()+="{ // block\n";cp.code()+="etiss_int32 res = *((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + "+std::to_string(((etiss_int16)(((etiss_int16) imm)<<(4)) > >(4)))+"LL;\n";cp.code()+="etiss_coverage_count(7, 7648, 7647, 7644, 7643, 7641, 7646, 7645);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_int64)(res);\n";cp.code()+="etiss_coverage_count(6, 7657, 7653, 7652, 7650, 7656, 7654);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;std::stringstream ss;ss<< "addiw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition srlw_rd_rs1_rs2(ISA32_RV64IMACFD, "srlw",(uint64_t) 0x00503b,(uint64_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//SRLW\n");cp.code()+="etiss_coverage_count(1, 197);\n";{ cp.code()+="etiss_coverage_count(1, 1189);\n";cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string((etiss_uint64)((ic.current_address_+4)))+"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, 7903);\n";cp.code()+="{ // block\n";cp.code()+="etiss_coverage_count(1, 7863);\n";if((rd % 32ULL) !=0LL) { cp.code()+="etiss_coverage_count(5, 7869, 7866, 7864, 7867, 7868);\n";{ cp.code()+="etiss_coverage_count(1, 7902);\n";cp.code()+="{ // block\n";cp.code()+="etiss_uint32 count = (etiss_uint64)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs2 % 32ULL)+"ULL]) & 31ULL;\n";cp.code()+="etiss_coverage_count(7, 7879, 7878, 7876, 7875, 7874, 7872, 7877);\n";cp.code()+="etiss_uint32 sh_val = ((etiss_uint32)(*((RV64IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL])) >> count;\n";cp.code()+="etiss_coverage_count(8, 7891, 7890, 7887, 7885, 7884, 7882, 7888, 7889);\n";cp.code()+="*((RV64IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint64)((etiss_int32)(sh_val));\n";cp.code()+="etiss_coverage_count(7, 7901, 7896, 7895, 7893, 7900, 7898, 7897);\n";cp.code()+="} // block\n";} } cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "srlw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");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.