11 using namespace etiss;
31 rd += R_rd_0.
read(ba) << 0;
34 rs1 += R_rs1_0.
read(ba) << 0;
37 imm += R_imm_0.
read(ba) << 0;
44 cp.
code() = std::string(
"//FLW\n");
48 cp.
code() +=
"{ // block\n";
50 cp.
code() +=
"} // block\n";
53 cp.
code() +=
"{ // block\n";
54 cp.
code() +=
"etiss_uint32 offs = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL;\n";
55 cp.
code() +=
"etiss_uint32 mem_val_0;\n";
56 cp.
code() +=
"cpu->exception |= (*(system->dread))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";
57 cp.
code() +=
"if (cpu->exception) { // conditional\n";
59 cp.
code() +=
"{ // procedure\n";
60 cp.
code() +=
"RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
62 cp.
code() +=
"} // procedure\n";
64 cp.
code() +=
"} // conditional\n";
65 cp.
code() +=
"etiss_uint32 res = (etiss_uint32)(mem_val_0);\n";
67 cp.
code() +=
"{ // block\n";
68 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
69 cp.
code() +=
"} // block\n";
71 cp.
code() +=
"} // block\n";
74 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
81 cp.
code() = std::string(
"//FLW\n");
84 cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
96 rd += R_rd_0.read(ba) << 0;
99 rs1 += R_rs1_0.read(ba) << 0;
102 imm += R_imm_0.read(ba) << 0;
106 std::stringstream ss;
108 ss <<
"flw" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | imm=" + std::to_string(imm) +
"]");
130 imm += R_imm_0.
read(ba) << 0;
133 rs1 += R_rs1_0.
read(ba) << 0;
136 rs2 += R_rs2_0.
read(ba) << 0;
138 imm += R_imm_5.
read(ba) << 5;
145 cp.
code() = std::string(
"//FSW\n");
149 cp.
code() +=
"{ // block\n";
151 cp.
code() +=
"} // block\n";
154 cp.
code() +=
"{ // block\n";
155 cp.
code() +=
"etiss_uint32 offs = *((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL] + " + std::to_string(((
etiss_int16)(((
etiss_int16)imm) << (4)) >> (4))) +
"LL;\n";
156 cp.
code() +=
"etiss_uint32 mem_val_0;\n";
157 cp.
code() +=
"mem_val_0 = (etiss_uint32)(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]);\n";
158 cp.
code() +=
"cpu->exception |= (*(system->dwrite))(system->handle, cpu, offs, (etiss_uint8*)&mem_val_0, 4);\n";
159 cp.
code() +=
"if (cpu->exception) { // conditional\n";
161 cp.
code() +=
"{ // procedure\n";
162 cp.
code() +=
"RV32IMACFD_translate_exc_code(cpu, system, plugin_pointers, cpu->exception);\n";
164 cp.
code() +=
"} // procedure\n";
166 cp.
code() +=
"} // conditional\n";
167 cp.
code() +=
"} // block\n";
170 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
177 cp.
code() = std::string(
"//FSW\n");
180 cp.
code() +=
"if (cpu->return_pending || cpu->exception) return cpu->exception;\n";
192 imm += R_imm_0.read(ba) << 0;
195 rs1 += R_rs1_0.read(ba) << 0;
198 rs2 += R_rs2_0.read(ba) << 0;
200 imm += R_imm_5.read(ba) << 5;
204 std::stringstream ss;
206 ss <<
"fsw" <<
" # " << ba << (
" [imm=" + std::to_string(imm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
228 rd += R_rd_0.
read(ba) << 0;
231 rm += R_rm_0.
read(ba) << 0;
234 rs1 += R_rs1_0.
read(ba) << 0;
237 rs2 += R_rs2_0.
read(ba) << 0;
240 rs3 += R_rs3_0.
read(ba) << 0;
247 cp.
code() = std::string(
"//FMADD_S\n");
251 cp.
code() +=
"{ // block\n";
253 cp.
code() +=
"} // block\n";
256 cp.
code() +=
"{ // block\n";
258 cp.
code() +=
"{ // block\n";
259 cp.
code() +=
"etiss_uint32 res = fmadd_s(unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]), unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]), unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs3) +
"ULL]), 0LL, RV32IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) +
"ULL));\n";
260 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
261 cp.
code() +=
"} // block\n";
263 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
264 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
265 cp.
code() +=
"} // block\n";
268 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
281 rd += R_rd_0.read(ba) << 0;
284 rm += R_rm_0.read(ba) << 0;
287 rs1 += R_rs1_0.read(ba) << 0;
290 rs2 += R_rs2_0.read(ba) << 0;
293 rs3 += R_rs3_0.read(ba) << 0;
297 std::stringstream ss;
299 ss <<
"fmadd_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rm=" + std::to_string(rm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
" | rs3=" + std::to_string(rs3) +
"]");
321 rd += R_rd_0.
read(ba) << 0;
324 rm += R_rm_0.
read(ba) << 0;
327 rs1 += R_rs1_0.
read(ba) << 0;
330 rs2 += R_rs2_0.
read(ba) << 0;
333 rs3 += R_rs3_0.
read(ba) << 0;
340 cp.
code() = std::string(
"//FMSUB_S\n");
344 cp.
code() +=
"{ // block\n";
346 cp.
code() +=
"} // block\n";
349 cp.
code() +=
"{ // block\n";
351 cp.
code() +=
"{ // block\n";
352 cp.
code() +=
"etiss_uint32 res = fmadd_s(unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]), unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]), unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs3) +
"ULL]), 1ULL, RV32IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) +
"ULL));\n";
353 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
354 cp.
code() +=
"} // block\n";
356 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
357 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
358 cp.
code() +=
"} // block\n";
361 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
374 rd += R_rd_0.read(ba) << 0;
377 rm += R_rm_0.read(ba) << 0;
380 rs1 += R_rs1_0.read(ba) << 0;
383 rs2 += R_rs2_0.read(ba) << 0;
386 rs3 += R_rs3_0.read(ba) << 0;
390 std::stringstream ss;
392 ss <<
"fmsub_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rm=" + std::to_string(rm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
" | rs3=" + std::to_string(rs3) +
"]");
414 rd += R_rd_0.
read(ba) << 0;
417 rm += R_rm_0.
read(ba) << 0;
420 rs1 += R_rs1_0.
read(ba) << 0;
423 rs2 += R_rs2_0.
read(ba) << 0;
426 rs3 += R_rs3_0.
read(ba) << 0;
433 cp.
code() = std::string(
"//FNMADD_S\n");
437 cp.
code() +=
"{ // block\n";
439 cp.
code() +=
"} // block\n";
442 cp.
code() +=
"{ // block\n";
444 cp.
code() +=
"{ // block\n";
445 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
446 cp.
code() +=
"etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]);\n";
447 cp.
code() +=
"etiss_uint32 frs3 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs3) +
"ULL]);\n";
448 cp.
code() +=
"etiss_uint32 res = fmadd_s(frs1, frs2, frs3, 2ULL, RV32IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) +
"ULL));\n";
449 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
450 cp.
code() +=
"} // block\n";
452 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
453 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
454 cp.
code() +=
"} // block\n";
457 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
470 rd += R_rd_0.read(ba) << 0;
473 rm += R_rm_0.read(ba) << 0;
476 rs1 += R_rs1_0.read(ba) << 0;
479 rs2 += R_rs2_0.read(ba) << 0;
482 rs3 += R_rs3_0.read(ba) << 0;
486 std::stringstream ss;
488 ss <<
"fnmadd_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rm=" + std::to_string(rm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
" | rs3=" + std::to_string(rs3) +
"]");
510 rd += R_rd_0.
read(ba) << 0;
513 rm += R_rm_0.
read(ba) << 0;
516 rs1 += R_rs1_0.
read(ba) << 0;
519 rs2 += R_rs2_0.
read(ba) << 0;
522 rs3 += R_rs3_0.
read(ba) << 0;
529 cp.
code() = std::string(
"//FNMSUB_S\n");
533 cp.
code() +=
"{ // block\n";
535 cp.
code() +=
"} // block\n";
538 cp.
code() +=
"{ // block\n";
540 cp.
code() +=
"{ // block\n";
541 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
542 cp.
code() +=
"etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]);\n";
543 cp.
code() +=
"etiss_uint32 frs3 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs3) +
"ULL]);\n";
544 cp.
code() +=
"etiss_uint32 res = fmadd_s(frs1, frs2, frs3, 3ULL, RV32IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) +
"ULL));\n";
545 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
546 cp.
code() +=
"} // block\n";
548 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
549 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
550 cp.
code() +=
"} // block\n";
553 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
566 rd += R_rd_0.read(ba) << 0;
569 rm += R_rm_0.read(ba) << 0;
572 rs1 += R_rs1_0.read(ba) << 0;
575 rs2 += R_rs2_0.read(ba) << 0;
578 rs3 += R_rs3_0.read(ba) << 0;
582 std::stringstream ss;
584 ss <<
"fnmsub_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rm=" + std::to_string(rm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
" | rs3=" + std::to_string(rs3) +
"]");
606 rd += R_rd_0.
read(ba) << 0;
609 rm += R_rm_0.
read(ba) << 0;
612 rs1 += R_rs1_0.
read(ba) << 0;
615 rs2 += R_rs2_0.
read(ba) << 0;
622 cp.
code() = std::string(
"//FADD_S\n");
626 cp.
code() +=
"{ // block\n";
628 cp.
code() +=
"} // block\n";
631 cp.
code() +=
"{ // block\n";
633 cp.
code() +=
"{ // block\n";
634 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
635 cp.
code() +=
"etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]);\n";
636 cp.
code() +=
"etiss_uint32 res = fadd_s(frs1, frs2, RV32IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) +
"ULL));\n";
637 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
638 cp.
code() +=
"} // block\n";
640 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
641 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
642 cp.
code() +=
"} // block\n";
645 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
658 rd += R_rd_0.read(ba) << 0;
661 rm += R_rm_0.read(ba) << 0;
664 rs1 += R_rs1_0.read(ba) << 0;
667 rs2 += R_rs2_0.read(ba) << 0;
671 std::stringstream ss;
673 ss <<
"fadd_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rm=" + std::to_string(rm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
695 rd += R_rd_0.
read(ba) << 0;
698 rm += R_rm_0.
read(ba) << 0;
701 rs1 += R_rs1_0.
read(ba) << 0;
704 rs2 += R_rs2_0.
read(ba) << 0;
711 cp.
code() = std::string(
"//FSUB_S\n");
715 cp.
code() +=
"{ // block\n";
717 cp.
code() +=
"} // block\n";
720 cp.
code() +=
"{ // block\n";
722 cp.
code() +=
"{ // block\n";
723 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
724 cp.
code() +=
"etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]);\n";
725 cp.
code() +=
"etiss_uint32 res = fsub_s(frs1, frs2, RV32IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) +
"ULL));\n";
726 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
727 cp.
code() +=
"} // block\n";
729 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
730 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
731 cp.
code() +=
"} // block\n";
734 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
747 rd += R_rd_0.read(ba) << 0;
750 rm += R_rm_0.read(ba) << 0;
753 rs1 += R_rs1_0.read(ba) << 0;
756 rs2 += R_rs2_0.read(ba) << 0;
760 std::stringstream ss;
762 ss <<
"fsub_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rm=" + std::to_string(rm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
784 rd += R_rd_0.
read(ba) << 0;
787 rm += R_rm_0.
read(ba) << 0;
790 rs1 += R_rs1_0.
read(ba) << 0;
793 rs2 += R_rs2_0.
read(ba) << 0;
800 cp.
code() = std::string(
"//FMUL_S\n");
804 cp.
code() +=
"{ // block\n";
806 cp.
code() +=
"} // block\n";
809 cp.
code() +=
"{ // block\n";
811 cp.
code() +=
"{ // block\n";
812 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
813 cp.
code() +=
"etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]);\n";
814 cp.
code() +=
"etiss_uint32 res = fmul_s(frs1, frs2, RV32IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) +
"ULL));\n";
815 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
816 cp.
code() +=
"} // block\n";
818 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
819 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
820 cp.
code() +=
"} // block\n";
823 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
836 rd += R_rd_0.read(ba) << 0;
839 rm += R_rm_0.read(ba) << 0;
842 rs1 += R_rs1_0.read(ba) << 0;
845 rs2 += R_rs2_0.read(ba) << 0;
849 std::stringstream ss;
851 ss <<
"fmul_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rm=" + std::to_string(rm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
873 rd += R_rd_0.
read(ba) << 0;
876 rm += R_rm_0.
read(ba) << 0;
879 rs1 += R_rs1_0.
read(ba) << 0;
882 rs2 += R_rs2_0.
read(ba) << 0;
889 cp.
code() = std::string(
"//FDIV_S\n");
893 cp.
code() +=
"{ // block\n";
895 cp.
code() +=
"} // block\n";
898 cp.
code() +=
"{ // block\n";
900 cp.
code() +=
"{ // block\n";
901 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
902 cp.
code() +=
"etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]);\n";
903 cp.
code() +=
"etiss_uint32 res = fdiv_s(frs1, frs2, RV32IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) +
"ULL));\n";
904 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
905 cp.
code() +=
"} // block\n";
907 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
908 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
909 cp.
code() +=
"} // block\n";
912 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
925 rd += R_rd_0.read(ba) << 0;
928 rm += R_rm_0.read(ba) << 0;
931 rs1 += R_rs1_0.read(ba) << 0;
934 rs2 += R_rs2_0.read(ba) << 0;
938 std::stringstream ss;
940 ss <<
"fdiv_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rm=" + std::to_string(rm) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
962 rd += R_rd_0.
read(ba) << 0;
965 rm += R_rm_0.
read(ba) << 0;
968 rs1 += R_rs1_0.
read(ba) << 0;
975 cp.
code() = std::string(
"//FSQRT_S\n");
979 cp.
code() +=
"{ // block\n";
981 cp.
code() +=
"} // block\n";
984 cp.
code() +=
"{ // block\n";
986 cp.
code() +=
"{ // block\n";
987 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
988 cp.
code() +=
"etiss_uint32 res = fsqrt_s(frs1, RV32IMACFD_get_rm(cpu, system, plugin_pointers, " + std::to_string(rm) +
"ULL));\n";
989 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
990 cp.
code() +=
"} // block\n";
992 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
993 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
994 cp.
code() +=
"} // block\n";
997 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1010 rd += R_rd_0.read(ba) << 0;
1013 rm += R_rm_0.read(ba) << 0;
1016 rs1 += R_rs1_0.read(ba) << 0;
1020 std::stringstream ss;
1022 ss <<
"fsqrt_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rm=" + std::to_string(rm) +
" | rs1=" + std::to_string(rs1) +
"]");
1044 rd += R_rd_0.
read(ba) << 0;
1047 rs1 += R_rs1_0.
read(ba) << 0;
1050 rs2 += R_rs2_0.
read(ba) << 0;
1057 cp.
code() = std::string(
"//FSGNJ_S\n");
1061 cp.
code() +=
"{ // block\n";
1063 cp.
code() +=
"} // block\n";
1066 cp.
code() +=
"{ // block\n";
1068 cp.
code() +=
"{ // block\n";
1069 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
1070 cp.
code() +=
"etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]);\n";
1071 cp.
code() +=
"etiss_uint32 res = ((((((frs2) >> (31ULL)) & 1ULL)) << 31) | ((((frs1) >> (0LL)) & 2147483647ULL)));\n";
1072 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
1073 cp.
code() +=
"} // block\n";
1075 cp.
code() +=
"} // block\n";
1078 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1091 rd += R_rd_0.read(ba) << 0;
1094 rs1 += R_rs1_0.read(ba) << 0;
1097 rs2 += R_rs2_0.read(ba) << 0;
1101 std::stringstream ss;
1103 ss <<
"fsgnj_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1125 rd += R_rd_0.
read(ba) << 0;
1128 rs1 += R_rs1_0.
read(ba) << 0;
1131 rs2 += R_rs2_0.
read(ba) << 0;
1138 cp.
code() = std::string(
"//FSGNJN_S\n");
1142 cp.
code() +=
"{ // block\n";
1144 cp.
code() +=
"} // block\n";
1147 cp.
code() +=
"{ // block\n";
1149 cp.
code() +=
"{ // block\n";
1150 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
1151 cp.
code() +=
"etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]);\n";
1152 cp.
code() +=
"etiss_uint32 res = (((~((((frs2) >> (31ULL)) & 1ULL))) << 31) | ((((frs1) >> (0LL)) & 2147483647ULL)));\n";
1153 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
1154 cp.
code() +=
"} // block\n";
1156 cp.
code() +=
"} // block\n";
1159 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1172 rd += R_rd_0.read(ba) << 0;
1175 rs1 += R_rs1_0.read(ba) << 0;
1178 rs2 += R_rs2_0.read(ba) << 0;
1182 std::stringstream ss;
1184 ss <<
"fsgnjn_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1206 rd += R_rd_0.
read(ba) << 0;
1209 rs1 += R_rs1_0.
read(ba) << 0;
1212 rs2 += R_rs2_0.
read(ba) << 0;
1219 cp.
code() = std::string(
"//FSGNJX_S\n");
1223 cp.
code() +=
"{ // block\n";
1225 cp.
code() +=
"} // block\n";
1228 cp.
code() +=
"{ // block\n";
1230 cp.
code() +=
"{ // block\n";
1231 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
1232 cp.
code() +=
"etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]);\n";
1233 cp.
code() +=
"etiss_uint32 res = frs1 ^ (frs2 & 2147483648ULL);\n";
1234 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
1235 cp.
code() +=
"} // block\n";
1237 cp.
code() +=
"} // block\n";
1240 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1253 rd += R_rd_0.read(ba) << 0;
1256 rs1 += R_rs1_0.read(ba) << 0;
1259 rs2 += R_rs2_0.read(ba) << 0;
1263 std::stringstream ss;
1265 ss <<
"fsgnjx_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1287 rd += R_rd_0.
read(ba) << 0;
1290 rs1 += R_rs1_0.
read(ba) << 0;
1293 rs2 += R_rs2_0.
read(ba) << 0;
1300 cp.
code() = std::string(
"//FMIN_S\n");
1304 cp.
code() +=
"{ // block\n";
1306 cp.
code() +=
"} // block\n";
1309 cp.
code() +=
"{ // block\n";
1311 cp.
code() +=
"{ // block\n";
1312 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
1313 cp.
code() +=
"etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]);\n";
1314 cp.
code() +=
"etiss_uint32 res = fsel_s(frs1, frs2, 0LL);\n";
1315 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
1316 cp.
code() +=
"} // block\n";
1318 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
1319 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
1320 cp.
code() +=
"} // block\n";
1323 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1336 rd += R_rd_0.read(ba) << 0;
1339 rs1 += R_rs1_0.read(ba) << 0;
1342 rs2 += R_rs2_0.read(ba) << 0;
1346 std::stringstream ss;
1348 ss <<
"fmin_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1370 rd += R_rd_0.
read(ba) << 0;
1373 rs1 += R_rs1_0.
read(ba) << 0;
1376 rs2 += R_rs2_0.
read(ba) << 0;
1383 cp.
code() = std::string(
"//FMAX_S\n");
1387 cp.
code() +=
"{ // block\n";
1389 cp.
code() +=
"} // block\n";
1392 cp.
code() +=
"{ // block\n";
1394 cp.
code() +=
"{ // block\n";
1395 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
1396 cp.
code() +=
"etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]);\n";
1397 cp.
code() +=
"etiss_uint32 res = fsel_s(frs1, frs2, 1ULL);\n";
1398 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
1399 cp.
code() +=
"} // block\n";
1401 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
1402 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
1403 cp.
code() +=
"} // block\n";
1406 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1419 rd += R_rd_0.read(ba) << 0;
1422 rs1 += R_rs1_0.read(ba) << 0;
1425 rs2 += R_rs2_0.read(ba) << 0;
1429 std::stringstream ss;
1431 ss <<
"fmax_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1453 rd += R_rd_0.
read(ba) << 0;
1456 rm += R_rm_0.
read(ba) << 0;
1459 rs1 += R_rs1_0.
read(ba) << 0;
1466 cp.
code() = std::string(
"//FCVT_W_S\n");
1470 cp.
code() +=
"{ // block\n";
1472 cp.
code() +=
"} // block\n";
1475 cp.
code() +=
"{ // block\n";
1476 cp.
code() +=
"etiss_int32 res = 0LL;\n";
1478 cp.
code() +=
"{ // block\n";
1479 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
1480 cp.
code() +=
"res = fcvt_s(frs1, 0LL, " + std::to_string(rm) +
"ULL);\n";
1481 cp.
code() +=
"} // block\n";
1483 if ((rd % 32ULL) != 0LL) {
1484 cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = res;\n";
1486 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
1487 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
1488 cp.
code() +=
"} // block\n";
1491 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1504 rd += R_rd_0.read(ba) << 0;
1507 rm += R_rm_0.read(ba) << 0;
1510 rs1 += R_rs1_0.read(ba) << 0;
1514 std::stringstream ss;
1516 ss <<
"fcvt_w_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rm=" + std::to_string(rm) +
" | rs1=" + std::to_string(rs1) +
"]");
1538 rd += R_rd_0.
read(ba) << 0;
1541 rm += R_rm_0.
read(ba) << 0;
1544 rs1 += R_rs1_0.
read(ba) << 0;
1551 cp.
code() = std::string(
"//FCVT_WU_S\n");
1555 cp.
code() +=
"{ // block\n";
1557 cp.
code() +=
"} // block\n";
1560 cp.
code() +=
"{ // block\n";
1561 cp.
code() +=
"etiss_uint32 res = 0LL;\n";
1563 cp.
code() +=
"{ // block\n";
1564 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
1565 cp.
code() +=
"res = fcvt_s(frs1, 1ULL, " + std::to_string(rm) +
"ULL);\n";
1566 cp.
code() +=
"} // block\n";
1568 if ((rd % 32ULL) != 0LL) {
1569 cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_uint32)((etiss_int32)(res));\n";
1571 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
1572 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
1573 cp.
code() +=
"} // block\n";
1576 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1589 rd += R_rd_0.read(ba) << 0;
1592 rm += R_rm_0.read(ba) << 0;
1595 rs1 += R_rs1_0.read(ba) << 0;
1599 std::stringstream ss;
1601 ss <<
"fcvt_wu_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rm=" + std::to_string(rm) +
" | rs1=" + std::to_string(rs1) +
"]");
1623 rd += R_rd_0.
read(ba) << 0;
1626 rs1 += R_rs1_0.
read(ba) << 0;
1629 rs2 += R_rs2_0.
read(ba) << 0;
1636 cp.
code() = std::string(
"//FEQ_S\n");
1640 cp.
code() +=
"{ // block\n";
1642 cp.
code() +=
"} // block\n";
1645 cp.
code() +=
"{ // block\n";
1646 cp.
code() +=
"etiss_uint32 res = 0LL;\n";
1648 cp.
code() +=
"{ // block\n";
1649 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
1650 cp.
code() +=
"etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]);\n";
1651 cp.
code() +=
"res = fcmp_s(frs1, frs2, 0LL);\n";
1652 cp.
code() +=
"} // block\n";
1654 if ((rd % 32ULL) != 0LL) {
1655 cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = res;\n";
1657 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
1658 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
1659 cp.
code() +=
"} // block\n";
1662 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1675 rd += R_rd_0.read(ba) << 0;
1678 rs1 += R_rs1_0.read(ba) << 0;
1681 rs2 += R_rs2_0.read(ba) << 0;
1685 std::stringstream ss;
1687 ss <<
"feq_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1709 rd += R_rd_0.
read(ba) << 0;
1712 rs1 += R_rs1_0.
read(ba) << 0;
1715 rs2 += R_rs2_0.
read(ba) << 0;
1722 cp.
code() = std::string(
"//FLT_S\n");
1726 cp.
code() +=
"{ // block\n";
1728 cp.
code() +=
"} // block\n";
1731 cp.
code() +=
"{ // block\n";
1732 cp.
code() +=
"etiss_uint32 res = 0LL;\n";
1734 cp.
code() +=
"{ // block\n";
1735 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
1736 cp.
code() +=
"etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]);\n";
1737 cp.
code() +=
"res = fcmp_s(frs1, frs2, 2ULL);\n";
1738 cp.
code() +=
"} // block\n";
1740 if ((rd % 32ULL) != 0LL) {
1741 cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = res;\n";
1743 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
1744 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
1745 cp.
code() +=
"} // block\n";
1748 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1761 rd += R_rd_0.read(ba) << 0;
1764 rs1 += R_rs1_0.read(ba) << 0;
1767 rs2 += R_rs2_0.read(ba) << 0;
1771 std::stringstream ss;
1773 ss <<
"flt_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1795 rd += R_rd_0.
read(ba) << 0;
1798 rs1 += R_rs1_0.
read(ba) << 0;
1801 rs2 += R_rs2_0.
read(ba) << 0;
1808 cp.
code() = std::string(
"//FLE_S\n");
1812 cp.
code() +=
"{ // block\n";
1814 cp.
code() +=
"} // block\n";
1817 cp.
code() +=
"{ // block\n";
1818 cp.
code() +=
"etiss_uint32 res = 0LL;\n";
1820 cp.
code() +=
"{ // block\n";
1821 cp.
code() +=
"etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]);\n";
1822 cp.
code() +=
"etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs2) +
"ULL]);\n";
1823 cp.
code() +=
"res = fcmp_s(frs1, frs2, 1ULL);\n";
1824 cp.
code() +=
"} // block\n";
1826 if ((rd % 32ULL) != 0LL) {
1827 cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = res;\n";
1829 cp.
code() +=
"etiss_uint32 flags = fget_flags();\n";
1830 cp.
code() +=
"((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";
1831 cp.
code() +=
"} // block\n";
1834 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1847 rd += R_rd_0.read(ba) << 0;
1850 rs1 += R_rs1_0.read(ba) << 0;
1853 rs2 += R_rs2_0.read(ba) << 0;
1857 std::stringstream ss;
1859 ss <<
"fle_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
" | rs2=" + std::to_string(rs2) +
"]");
1881 rd += R_rd_0.
read(ba) << 0;
1884 rs1 += R_rs1_0.
read(ba) << 0;
1891 cp.
code() = std::string(
"//FCLASS_S\n");
1895 cp.
code() +=
"{ // block\n";
1897 cp.
code() +=
"} // block\n";
1900 cp.
code() +=
"{ // block\n";
1901 cp.
code() +=
"etiss_uint32 res = 0LL;\n";
1902 cp.
code() +=
"res = fclass_s(unbox_s(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]));\n";
1903 if ((rd % 32ULL) != 0LL) {
1904 cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = res;\n";
1906 cp.
code() +=
"} // block\n";
1909 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1922 rd += R_rd_0.read(ba) << 0;
1925 rs1 += R_rs1_0.read(ba) << 0;
1929 std::stringstream ss;
1931 ss <<
"fclass_s" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
"]");
1953 rd += R_rd_0.
read(ba) << 0;
1956 rm += R_rm_0.
read(ba) << 0;
1959 rs1 += R_rs1_0.
read(ba) << 0;
1966 cp.
code() = std::string(
"//FCVT_S_W\n");
1970 cp.
code() +=
"{ // block\n";
1972 cp.
code() +=
"} // block\n";
1975 cp.
code() +=
"{ // block\n";
1977 cp.
code() +=
"{ // block\n";
1978 cp.
code() +=
"etiss_uint32 res = fcvt_s((etiss_uint32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL]), 2ULL, " + std::to_string(rm) +
"ULL);\n";
1979 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
1980 cp.
code() +=
"} // block\n";
1982 cp.
code() +=
"} // block\n";
1985 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
1998 rd += R_rd_0.read(ba) << 0;
2001 rm += R_rm_0.read(ba) << 0;
2004 rs1 += R_rs1_0.read(ba) << 0;
2008 std::stringstream ss;
2010 ss <<
"fcvt_s_w" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rm=" + std::to_string(rm) +
" | rs1=" + std::to_string(rs1) +
"]");
2032 rd += R_rd_0.
read(ba) << 0;
2035 rm += R_rm_0.
read(ba) << 0;
2038 rs1 += R_rs1_0.
read(ba) << 0;
2045 cp.
code() = std::string(
"//FCVT_S_WU\n");
2049 cp.
code() +=
"{ // block\n";
2051 cp.
code() +=
"} // block\n";
2054 cp.
code() +=
"{ // block\n";
2056 cp.
code() +=
"{ // block\n";
2057 cp.
code() +=
"etiss_uint32 res = fcvt_s((etiss_uint32)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL]), 3ULL, " + std::to_string(rm) +
"ULL);\n";
2058 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(res);\n";
2059 cp.
code() +=
"} // block\n";
2061 cp.
code() +=
"} // block\n";
2064 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2077 rd += R_rd_0.read(ba) << 0;
2080 rm += R_rm_0.read(ba) << 0;
2083 rs1 += R_rs1_0.read(ba) << 0;
2087 std::stringstream ss;
2089 ss <<
"fcvt_s_wu" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rm=" + std::to_string(rm) +
" | rs1=" + std::to_string(rs1) +
"]");
2111 rd += R_rd_0.
read(ba) << 0;
2114 rs1 += R_rs1_0.
read(ba) << 0;
2121 cp.
code() = std::string(
"//FMV_X_W\n");
2125 cp.
code() +=
"{ // block\n";
2127 cp.
code() +=
"} // block\n";
2130 cp.
code() +=
"{ // block\n";
2131 if ((rd % 32ULL) != 0LL) {
2132 cp.
code() +=
"*((RV32IMACFD*)cpu)->X[" + std::to_string(rd % 32ULL) +
"ULL] = (etiss_uint32)((etiss_int32)(((RV32IMACFD*)cpu)->F[" + std::to_string(rs1) +
"ULL]));\n";
2134 cp.
code() +=
"} // block\n";
2137 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2150 rd += R_rd_0.read(ba) << 0;
2153 rs1 += R_rs1_0.read(ba) << 0;
2157 std::stringstream ss;
2159 ss <<
"fmv_x_w" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
"]");
2181 rd += R_rd_0.
read(ba) << 0;
2184 rs1 += R_rs1_0.
read(ba) << 0;
2191 cp.
code() = std::string(
"//FMV_W_X\n");
2195 cp.
code() +=
"{ // block\n";
2197 cp.
code() +=
"} // block\n";
2200 cp.
code() +=
"{ // block\n";
2202 cp.
code() +=
"{ // block\n";
2203 cp.
code() +=
"((RV32IMACFD*)cpu)->F[" + std::to_string(rd) +
"ULL] = -4294967296LL | (etiss_uint64)(*((RV32IMACFD*)cpu)->X[" + std::to_string(rs1 % 32ULL) +
"ULL]);\n";
2204 cp.
code() +=
"} // block\n";
2206 cp.
code() +=
"} // block\n";
2209 cp.
code() +=
"cpu->instructionPointer = cpu->nextPc;\n";
2222 rd += R_rd_0.read(ba) << 0;
2225 rs1 += R_rs1_0.read(ba) << 0;
2229 std::stringstream ss;
2231 ss <<
"fmv_w_x" <<
" # " << ba << (
" [rd=" + std::to_string(rd) +
" | rs1=" + std::to_string(rs1) +
"]");
etiss::instr::InstructionGroup ISA32_RV32IMACFD("ISA32_RV32IMACFD", 32)
static InstructionDefinition fmin_s_rd_rs1_rs2(ISA32_RV32IMACFD, "fmin_s",(uint32_t) 0x28000053,(uint32_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FMIN_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_uint32 res = fsel_s(frs1, frs2, 0LL);\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fmin_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fadd_s_rd_rm_rs1_rs2(ISA32_RV32IMACFD, "fadd_s",(uint32_t) 0x000053,(uint32_t) 0xfe00007f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FADD_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_uint32 res = fadd_s(frs1, frs2, RV32IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fadd_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fmadd_s_rd_rm_rs1_rs2_rs3(ISA32_RV32IMACFD, "fmadd_s",(uint32_t) 0x000043,(uint32_t) 0x600007f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FMADD_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = fmadd_s(unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]), unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]), unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs3)+"ULL]), 0LL, RV32IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;std::stringstream ss;ss<< "fmadd_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+" | rs3="+std::to_string(rs3)+"]");return ss.str();})
static InstructionDefinition fcvt_s_wu_rd_rm_rs1(ISA32_RV32IMACFD, "fcvt_s_wu",(uint32_t) 0xd0100053,(uint32_t) 0xfff0007f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FCVT_S_WU\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = fcvt_s((etiss_uint32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]), 3ULL, "+std::to_string(rm)+"ULL);\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "fcvt_s_wu"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition fdiv_s_rd_rm_rs1_rs2(ISA32_RV32IMACFD, "fdiv_s",(uint32_t) 0x18000053,(uint32_t) 0xfe00007f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FDIV_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_uint32 res = fdiv_s(frs1, frs2, RV32IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fdiv_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fsub_s_rd_rm_rs1_rs2(ISA32_RV32IMACFD, "fsub_s",(uint32_t) 0x8000053,(uint32_t) 0xfe00007f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FSUB_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_uint32 res = fsub_s(frs1, frs2, RV32IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fsub_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fsgnjn_s_rd_rs1_rs2(ISA32_RV32IMACFD, "fsgnjn_s",(uint32_t) 0x20001053,(uint32_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FSGNJN_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_uint32 res = (((~((((frs2) >> (31ULL)) & 1ULL))) << 31) | ((((frs1) >> (0LL)) & 2147483647ULL)));\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fsgnjn_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fcvt_wu_s_rd_rm_rs1(ISA32_RV32IMACFD, "fcvt_wu_s",(uint32_t) 0xc0100053,(uint32_t) 0xfff0007f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FCVT_WU_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = 0LL;\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="res = fcvt_s(frs1, 1ULL, "+std::to_string(rm)+"ULL);\n";cp.code()+="} // block\n";} if((rd % 32ULL) !=0LL) { cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint32)((etiss_int32)(res));\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "fcvt_wu_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition fnmadd_s_rd_rm_rs1_rs2_rs3(ISA32_RV32IMACFD, "fnmadd_s",(uint32_t) 0x00004f,(uint32_t) 0x600007f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FNMADD_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_uint32 frs3 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs3)+"ULL]);\n";cp.code()+="etiss_uint32 res = fmadd_s(frs1, frs2, frs3, 2ULL, RV32IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;std::stringstream ss;ss<< "fnmadd_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+" | rs3="+std::to_string(rs3)+"]");return ss.str();})
static InstructionDefinition fsw_imm_rs1_rs2(ISA32_RV32IMACFD, "fsw",(uint32_t) 0x002027,(uint32_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint16 imm=0;static BitArrayRange R_imm_0(11, 7);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;static BitArrayRange R_imm_5(31, 25);imm+=R_imm_5.read(ba)<< 5;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FSW\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";cp.code()+="etiss_uint32 offs = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + "+std::to_string(((etiss_int16)(((etiss_int16) imm)<<(4)) >>(4)))+"LL;\n";cp.code()+="etiss_uint32 mem_val_0;\n";cp.code()+="mem_val_0 = (etiss_uint32)(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\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("//FSW\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint16 imm=0;static BitArrayRange R_imm_0(11, 7);imm+=R_imm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;static BitArrayRange R_imm_5(31, 25);imm+=R_imm_5.read(ba)<< 5;std::stringstream ss;ss<< "fsw"<< " # "<< ba<<(" [imm="+std::to_string(imm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fsgnjx_s_rd_rs1_rs2(ISA32_RV32IMACFD, "fsgnjx_s",(uint32_t) 0x20002053,(uint32_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FSGNJX_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_uint32 res = frs1 ^ (frs2 & 2147483648ULL);\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fsgnjx_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fcvt_w_s_rd_rm_rs1(ISA32_RV32IMACFD, "fcvt_w_s",(uint32_t) 0xc0000053,(uint32_t) 0xfff0007f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FCVT_W_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";cp.code()+="etiss_int32 res = 0LL;\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="res = fcvt_s(frs1, 0LL, "+std::to_string(rm)+"ULL);\n";cp.code()+="} // block\n";} if((rd % 32ULL) !=0LL) { cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = res;\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "fcvt_w_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition fmsub_s_rd_rm_rs1_rs2_rs3(ISA32_RV32IMACFD, "fmsub_s",(uint32_t) 0x000047,(uint32_t) 0x600007f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FMSUB_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = fmadd_s(unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]), unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]), unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs3)+"ULL]), 1ULL, RV32IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;std::stringstream ss;ss<< "fmsub_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+" | rs3="+std::to_string(rs3)+"]");return ss.str();})
static InstructionDefinition fmv_w_x_rd_rs1(ISA32_RV32IMACFD, "fmv_w_x",(uint32_t) 0xf0000053,(uint32_t) 0xfff0707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FMV_W_X\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]);\n";cp.code()+="} // block\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "fmv_w_x"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition fclass_s_rd_rs1(ISA32_RV32IMACFD, "fclass_s",(uint32_t) 0xe0001053,(uint32_t) 0xfff0707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FCLASS_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = 0LL;\n";cp.code()+="res = fclass_s(unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]));\n";if((rd % 32ULL) !=0LL) { cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = res;\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "fclass_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition fmax_s_rd_rs1_rs2(ISA32_RV32IMACFD, "fmax_s",(uint32_t) 0x28001053,(uint32_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FMAX_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_uint32 res = fsel_s(frs1, frs2, 1ULL);\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fmax_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fmv_x_w_rd_rs1(ISA32_RV32IMACFD, "fmv_x_w",(uint32_t) 0xe0000053,(uint32_t) 0xfff0707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FMV_X_W\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";if((rd % 32ULL) !=0LL) { cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = (etiss_uint32)((etiss_int32)(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]));\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "fmv_x_w"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition fsgnj_s_rd_rs1_rs2(ISA32_RV32IMACFD, "fsgnj_s",(uint32_t) 0x20000053,(uint32_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FSGNJ_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_uint32 res = ((((((frs2) >> (31ULL)) & 1ULL)) << 31) | ((((frs1) >> (0LL)) & 2147483647ULL)));\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fsgnj_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fcvt_s_w_rd_rm_rs1(ISA32_RV32IMACFD, "fcvt_s_w",(uint32_t) 0xd0000053,(uint32_t) 0xfff0007f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FCVT_S_W\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = fcvt_s((etiss_uint32)(*((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL]), 2ULL, "+std::to_string(rm)+"ULL);\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "fcvt_s_w"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition feq_s_rd_rs1_rs2(ISA32_RV32IMACFD, "feq_s",(uint32_t) 0xa0002053,(uint32_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FEQ_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = 0LL;\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="res = fcmp_s(frs1, frs2, 0LL);\n";cp.code()+="} // block\n";} if((rd % 32ULL) !=0LL) { cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = res;\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "feq_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fsqrt_s_rd_rm_rs1(ISA32_RV32IMACFD, "fsqrt_s",(uint32_t) 0x58000053,(uint32_t) 0xfff0007f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FSQRT_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_uint32 res = fsqrt_s(frs1, RV32IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;std::stringstream ss;ss<< "fsqrt_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+"]");return ss.str();})
static InstructionDefinition flt_s_rd_rs1_rs2(ISA32_RV32IMACFD, "flt_s",(uint32_t) 0xa0001053,(uint32_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FLT_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = 0LL;\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="res = fcmp_s(frs1, frs2, 2ULL);\n";cp.code()+="} // block\n";} if((rd % 32ULL) !=0LL) { cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = res;\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "flt_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition fnmsub_s_rd_rm_rs1_rs2_rs3(ISA32_RV32IMACFD, "fnmsub_s",(uint32_t) 0x00004b,(uint32_t) 0x600007f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FNMSUB_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_uint32 frs3 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs3)+"ULL]);\n";cp.code()+="etiss_uint32 res = fmadd_s(frs1, frs2, frs3, 3ULL, RV32IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;etiss_uint8 rs3=0;static BitArrayRange R_rs3_0(31, 27);rs3+=R_rs3_0.read(ba)<< 0;std::stringstream ss;ss<< "fnmsub_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+" | rs3="+std::to_string(rs3)+"]");return ss.str();})
static InstructionDefinition fle_s_rd_rs1_rs2(ISA32_RV32IMACFD, "fle_s",(uint32_t) 0xa0000053,(uint32_t) 0xfe00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FLE_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";cp.code()+="etiss_uint32 res = 0LL;\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="res = fcmp_s(frs1, frs2, 1ULL);\n";cp.code()+="} // block\n";} if((rd % 32ULL) !=0LL) { cp.code()+="*((RV32IMACFD*)cpu)->X["+std::to_string(rd % 32ULL)+"ULL] = res;\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fle_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static InstructionDefinition flw_rd_rs1_imm(ISA32_RV32IMACFD, "flw",(uint32_t) 0x002007,(uint32_t) 0x00707f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FLW\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";cp.code()+="etiss_uint32 offs = *((RV32IMACFD*)cpu)->X["+std::to_string(rs1 % 32ULL)+"ULL] + "+std::to_string(((etiss_int16)(((etiss_int16) imm)<<(4)) >>(4)))+"LL;\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_uint32 res = (etiss_uint32)(mem_val_0);\n";{ cp.code()+="{ // block\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} { CodePart &cp=cs.append(CodePart::APPENDEDRETURNINGREQUIRED);cp.code()=std::string("//FLW\n");cp.code()+="if (cpu->return_pending || cpu->exception) return cpu->exception;\n";} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint16 imm=0;static BitArrayRange R_imm_0(31, 20);imm+=R_imm_0.read(ba)<< 0;std::stringstream ss;ss<< "flw"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rs1="+std::to_string(rs1)+" | imm="+std::to_string(imm)+"]");return ss.str();})
static InstructionDefinition fmul_s_rd_rm_rs1_rs2(ISA32_RV32IMACFD, "fmul_s",(uint32_t) 0x10000053,(uint32_t) 0xfe00007f, [](BitArray &ba, etiss::CodeSet &cs, InstructionContext &ic) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;{ CodePart &cp=cs.append(CodePart::INITIALREQUIRED);cp.code()=std::string("//FMUL_S\n");{ cp.code()+="{ // block\n";cp.code()+="cpu->nextPc = "+std::to_string(ic.current_address_+4)+"ULL;\n";cp.code()+="} // block\n";} { cp.code()+="{ // block\n";{ cp.code()+="{ // block\n";cp.code()+="etiss_uint32 frs1 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs1)+"ULL]);\n";cp.code()+="etiss_uint32 frs2 = unbox_s(((RV32IMACFD*)cpu)->F["+std::to_string(rs2)+"ULL]);\n";cp.code()+="etiss_uint32 res = fmul_s(frs1, frs2, RV32IMACFD_get_rm(cpu, system, plugin_pointers, "+std::to_string(rm)+"ULL));\n";cp.code()+="((RV32IMACFD*)cpu)->F["+std::to_string(rd)+"ULL] = -4294967296LL | (etiss_uint64)(res);\n";cp.code()+="} // block\n";} cp.code()+="etiss_uint32 flags = fget_flags();\n";cp.code()+="((RV32IMACFD*)cpu)->FCSR = (((RV32IMACFD*)cpu)->FCSR & -32LL) | (flags & 31ULL);\n";cp.code()+="} // block\n";} cp.code()+="instr_exit_"+std::to_string(ic.current_address_)+":\n";cp.code()+="cpu->instructionPointer = cpu->nextPc;\n";cp.getAffectedRegisters().add("instructionPointer", 32);} return true;}, 0, [](BitArray &ba, Instruction &instr) { etiss_uint8 rd=0;static BitArrayRange R_rd_0(11, 7);rd+=R_rd_0.read(ba)<< 0;etiss_uint8 rm=0;static BitArrayRange R_rm_0(14, 12);rm+=R_rm_0.read(ba)<< 0;etiss_uint8 rs1=0;static BitArrayRange R_rs1_0(19, 15);rs1+=R_rs1_0.read(ba)<< 0;etiss_uint8 rs2=0;static BitArrayRange R_rs2_0(24, 20);rs2+=R_rs2_0.read(ba)<< 0;std::stringstream ss;ss<< "fmul_s"<< " # "<< ba<<(" [rd="+std::to_string(rd)+" | rm="+std::to_string(rm)+" | rs1="+std::to_string(rs1)+" | rs2="+std::to_string(rs2)+"]");return ss.str();})
static __inline__ uint32_t
Contains a small code snipped.
@ APPENDEDRETURNINGREQUIRED
RegisterSet & getAffectedRegisters()
void append(const CodePart &part, CodePart::TYPE type)
void add(const RegisterPart &rp)
add a registerPart to the set or just its relevant bits if a register with the same name is already p...
Reading through it will only return bits within the range.
I read(const BitArray &ba)
reads bits from the range to the return value starting at the lsb.
this class contains parameters that persist in between instruction lookpus/translation within a trans...
uint64_t current_address_
start address of current instruction
holds information and translation callbacks for an instruction.
Page Table Entry (PTE) defines the composition of Page Frame Number (PFN) and relavant flags.