aboutsummaryrefslogtreecommitdiff
path: root/sim/frv/sem.c
diff options
context:
space:
mode:
Diffstat (limited to 'sim/frv/sem.c')
-rw-r--r--sim/frv/sem.c560
1 files changed, 322 insertions, 238 deletions
diff --git a/sim/frv/sem.c b/sim/frv/sem.c
index 4f2883b..0fb30c3 100644
--- a/sim/frv/sem.c
+++ b/sim/frv/sem.c
@@ -5630,138 +5630,6 @@ frvbf_write_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FL
#undef FLD
}
-/* rstb: rstb$pack $GRk,@($GRi,$GRj) */
-
-static SEM_PC
-SEM_FN_NAME (frvbf,rstb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
-{
-#define FLD(f) abuf->fields.sfmt_cswap.f
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
-
-{
- SI tmp_address;
- tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
-frvbf_write_mem_QI (current_cpu, pc, tmp_address, GET_H_GR (FLD (f_GRk)));
-frvbf_check_recovering_store (current_cpu, tmp_address, FLD (f_GRk), 1, 0);
-}
-
- return vpc;
-#undef FLD
-}
-
-/* rsth: rsth$pack $GRk,@($GRi,$GRj) */
-
-static SEM_PC
-SEM_FN_NAME (frvbf,rsth) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
-{
-#define FLD(f) abuf->fields.sfmt_cswap.f
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
-
-{
- SI tmp_address;
- tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
-frvbf_write_mem_HI (current_cpu, pc, tmp_address, GET_H_GR (FLD (f_GRk)));
-frvbf_check_recovering_store (current_cpu, tmp_address, FLD (f_GRk), 2, 0);
-}
-
- return vpc;
-#undef FLD
-}
-
-/* rst: rst$pack $GRk,@($GRi,$GRj) */
-
-static SEM_PC
-SEM_FN_NAME (frvbf,rst) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
-{
-#define FLD(f) abuf->fields.sfmt_cswap.f
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
-
-{
- SI tmp_address;
- tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
-frvbf_write_mem_SI (current_cpu, pc, tmp_address, GET_H_GR (FLD (f_GRk)));
-frvbf_check_recovering_store (current_cpu, tmp_address, FLD (f_GRk), 4, 0);
-}
-
- return vpc;
-#undef FLD
-}
-
-/* rstbf: rstbf$pack $FRintk,@($GRi,$GRj) */
-
-static SEM_PC
-SEM_FN_NAME (frvbf,rstbf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
-{
-#define FLD(f) abuf->fields.sfmt_cstbfu.f
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
-
-{
- SI tmp_address;
- tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
-frvbf_write_mem_QI (current_cpu, pc, tmp_address, GET_H_FR_INT (FLD (f_FRk)));
-frvbf_check_recovering_store (current_cpu, tmp_address, FLD (f_FRk), 1, 1);
-}
-
- return vpc;
-#undef FLD
-}
-
-/* rsthf: rsthf$pack $FRintk,@($GRi,$GRj) */
-
-static SEM_PC
-SEM_FN_NAME (frvbf,rsthf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
-{
-#define FLD(f) abuf->fields.sfmt_cstbfu.f
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
-
-{
- SI tmp_address;
- tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
-frvbf_write_mem_HI (current_cpu, pc, tmp_address, GET_H_FR_INT (FLD (f_FRk)));
-frvbf_check_recovering_store (current_cpu, tmp_address, FLD (f_FRk), 2, 1);
-}
-
- return vpc;
-#undef FLD
-}
-
-/* rstf: rstf$pack $FRintk,@($GRi,$GRj) */
-
-static SEM_PC
-SEM_FN_NAME (frvbf,rstf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
-{
-#define FLD(f) abuf->fields.sfmt_cstbfu.f
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
-
-{
- SI tmp_address;
- tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
-frvbf_write_mem_SI (current_cpu, pc, tmp_address, GET_H_FR_INT (FLD (f_FRk)));
-frvbf_check_recovering_store (current_cpu, tmp_address, FLD (f_FRk), 4, 1);
-}
-
- return vpc;
-#undef FLD
-}
-
/* std: std$pack $GRdoublek,@($GRi,$GRj) */
static SEM_PC
@@ -5831,54 +5699,6 @@ frvbf_write_mem_DI (current_cpu, pc, tmp_address, GET_H_CPR_DOUBLE (FLD (f_CPRk)
#undef FLD
}
-/* rstd: rstd$pack $GRdoublek,@($GRi,$GRj) */
-
-static SEM_PC
-SEM_FN_NAME (frvbf,rstd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
-{
-#define FLD(f) abuf->fields.sfmt_cstdu.f
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
-
-{
- SI tmp_address;
-{
- tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
-frvbf_write_mem_DI (current_cpu, pc, tmp_address, GET_H_GR_DOUBLE (FLD (f_GRk)));
-}
-frvbf_check_recovering_store (current_cpu, tmp_address, FLD (f_GRk), 8, 0);
-}
-
- return vpc;
-#undef FLD
-}
-
-/* rstdf: rstdf$pack $FRdoublek,@($GRi,$GRj) */
-
-static SEM_PC
-SEM_FN_NAME (frvbf,rstdf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
-{
-#define FLD(f) abuf->fields.sfmt_cstdfu.f
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
-
-{
- SI tmp_address;
-{
- tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
-frvbf_write_mem_DF (current_cpu, pc, tmp_address, GET_H_FR_DOUBLE (FLD (f_FRk)));
-}
-frvbf_check_recovering_store (current_cpu, tmp_address, FLD (f_FRk), 8, 1);
-}
-
- return vpc;
-#undef FLD
-}
-
/* stq: stq$pack $GRk,@($GRi,$GRj) */
static SEM_PC
@@ -5948,54 +5768,6 @@ frvbf_store_quad_CPR (current_cpu, pc, tmp_address, FLD (f_CPRk));
#undef FLD
}
-/* rstq: rstq$pack $GRk,@($GRi,$GRj) */
-
-static SEM_PC
-SEM_FN_NAME (frvbf,rstq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
-{
-#define FLD(f) abuf->fields.sfmt_smulcc.f
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
-
-{
- SI tmp_address;
-{
- tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
-frvbf_store_quad_GR (current_cpu, pc, tmp_address, FLD (f_GRk));
-}
-frvbf_check_recovering_store (current_cpu, tmp_address, FLD (f_GRk), 16, 0);
-}
-
- return vpc;
-#undef FLD
-}
-
-/* rstqf: rstqf$pack $FRintk,@($GRi,$GRj) */
-
-static SEM_PC
-SEM_FN_NAME (frvbf,rstqf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
-{
-#define FLD(f) abuf->fields.sfmt_cstdfu.f
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
-
-{
- SI tmp_address;
-{
- tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
-frvbf_store_quad_FRint (current_cpu, pc, tmp_address, FLD (f_FRk));
-}
-frvbf_check_recovering_store (current_cpu, tmp_address, FLD (f_FRk), 16, 1);
-}
-
- return vpc;
-#undef FLD
-}
-
/* stbu: stbu$pack $GRk,@($GRi,$GRj) */
static SEM_PC
@@ -16632,6 +16404,57 @@ SEM_FN_NAME (frvbf,membar) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
#undef FLD
}
+/* lrai: lrai$pack $GRi,$GRk,$LRAE,$LRAD,$LRAS */
+
+static SEM_PC
+SEM_FN_NAME (frvbf,lrai) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
+{
+#define FLD(f) abuf->fields.fmt_empty.f
+ ARGBUF *abuf = SEM_ARGBUF (sem_arg);
+ int UNUSED written = 0;
+ IADDR UNUSED pc = abuf->addr;
+ SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
+
+((void) 0); /*nop*/
+
+ return vpc;
+#undef FLD
+}
+
+/* lrad: lrad$pack $GRi,$GRk,$LRAE,$LRAD,$LRAS */
+
+static SEM_PC
+SEM_FN_NAME (frvbf,lrad) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
+{
+#define FLD(f) abuf->fields.fmt_empty.f
+ ARGBUF *abuf = SEM_ARGBUF (sem_arg);
+ int UNUSED written = 0;
+ IADDR UNUSED pc = abuf->addr;
+ SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
+
+((void) 0); /*nop*/
+
+ return vpc;
+#undef FLD
+}
+
+/* tlbpr: tlbpr$pack $GRi,$GRj,$TLBPRopx,$TLBPRL */
+
+static SEM_PC
+SEM_FN_NAME (frvbf,tlbpr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
+{
+#define FLD(f) abuf->fields.fmt_empty.f
+ ARGBUF *abuf = SEM_ARGBUF (sem_arg);
+ int UNUSED written = 0;
+ IADDR UNUSED pc = abuf->addr;
+ SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
+
+((void) 0); /*nop*/
+
+ return vpc;
+#undef FLD
+}
+
/* cop1: cop1$pack $s6_1,$CPRi,$CPRj,$CPRk */
static SEM_PC
@@ -22836,6 +22659,270 @@ frvbf_media_overflow (current_cpu, 1);
#undef FLD
}
+/* mqlclrhs: mqlclrhs$pack $FRintieven,$FRintjeven,$FRintkeven */
+
+static SEM_PC
+SEM_FN_NAME (frvbf,mqlclrhs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
+{
+#define FLD(f) abuf->fields.sfmt_cmqaddhss.f
+ ARGBUF *abuf = SEM_ARGBUF (sem_arg);
+ int UNUSED written = 0;
+ IADDR UNUSED pc = abuf->addr;
+ SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
+
+if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ORIF (ANDSI (FLD (f_FRj), SUBSI (2, 1)), ANDSI (FLD (f_FRk), SUBSI (2, 1))))) {
+frvbf_media_register_not_aligned (current_cpu);
+} else {
+{
+ HI tmp_a1;
+ HI tmp_a2;
+ HI tmp_a3;
+ HI tmp_a4;
+ HI tmp_b1;
+ HI tmp_b2;
+ HI tmp_b3;
+ HI tmp_b4;
+ {
+ SI opval = frv_ref_SI (GET_H_FR_INT (FLD (f_FRk)));
+ sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
+ written |= (1 << 14);
+ TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
+ }
+{
+ tmp_a1 = ADDHI (GET_H_FR_HI (((FLD (f_FRi)) + (0))), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
+ tmp_a2 = ADDHI (GET_H_FR_LO (((FLD (f_FRi)) + (0))), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
+ tmp_b1 = ADDHI (GET_H_FR_HI (((FLD (f_FRj)) + (0))), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
+ tmp_b2 = ADDHI (GET_H_FR_LO (((FLD (f_FRj)) + (0))), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
+}
+{
+ tmp_a3 = ADDHI (GET_H_FR_HI (((FLD (f_FRi)) + (1))), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
+ tmp_a4 = ADDHI (GET_H_FR_LO (((FLD (f_FRi)) + (1))), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
+ tmp_b3 = ADDHI (GET_H_FR_HI (((FLD (f_FRj)) + (1))), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
+ tmp_b4 = ADDHI (GET_H_FR_LO (((FLD (f_FRj)) + (1))), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
+}
+ {
+ UHI opval = (LEUHI (ABSHI (tmp_a1), ABSHI (tmp_b1))) ? (0) : (LEHI (0, tmp_b1)) ? (tmp_a1) : (EQHI (tmp_a1, -32768)) ? (32767) : (NEGHI (tmp_a1));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ((FLD (f_FRk)) + (0)), opval);
+ written |= (1 << 15);
+ TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
+ }
+ {
+ UHI opval = (LEUHI (ABSHI (tmp_a2), ABSHI (tmp_b2))) ? (0) : (LEHI (0, tmp_b2)) ? (tmp_a2) : (EQHI (tmp_a2, -32768)) ? (32767) : (NEGHI (tmp_a2));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ((FLD (f_FRk)) + (0)), opval);
+ written |= (1 << 17);
+ TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
+ }
+ {
+ UHI opval = (LEUHI (ABSHI (tmp_a3), ABSHI (tmp_b3))) ? (0) : (LEHI (0, tmp_b3)) ? (tmp_a3) : (EQHI (tmp_a3, -32768)) ? (32767) : (NEGHI (tmp_a3));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ((FLD (f_FRk)) + (1)), opval);
+ written |= (1 << 16);
+ TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
+ }
+ {
+ UHI opval = (LEUHI (ABSHI (tmp_a4), ABSHI (tmp_b4))) ? (0) : (LEHI (0, tmp_b4)) ? (tmp_a4) : (EQHI (tmp_a4, -32768)) ? (32767) : (NEGHI (tmp_a4));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ((FLD (f_FRk)) + (1)), opval);
+ written |= (1 << 18);
+ TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
+ }
+}
+}
+
+ abuf->written = written;
+ return vpc;
+#undef FLD
+}
+
+/* mqlmths: mqlmths$pack $FRintieven,$FRintjeven,$FRintkeven */
+
+static SEM_PC
+SEM_FN_NAME (frvbf,mqlmths) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
+{
+#define FLD(f) abuf->fields.sfmt_cmqaddhss.f
+ ARGBUF *abuf = SEM_ARGBUF (sem_arg);
+ int UNUSED written = 0;
+ IADDR UNUSED pc = abuf->addr;
+ SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
+
+if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ORIF (ANDSI (FLD (f_FRj), SUBSI (2, 1)), ANDSI (FLD (f_FRk), SUBSI (2, 1))))) {
+frvbf_media_register_not_aligned (current_cpu);
+} else {
+{
+ HI tmp_a1;
+ HI tmp_a2;
+ HI tmp_a3;
+ HI tmp_a4;
+ HI tmp_b1;
+ HI tmp_b2;
+ HI tmp_b3;
+ HI tmp_b4;
+ {
+ SI opval = frv_ref_SI (GET_H_FR_INT (FLD (f_FRk)));
+ sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
+ written |= (1 << 14);
+ TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
+ }
+{
+ tmp_a1 = ADDHI (GET_H_FR_HI (((FLD (f_FRi)) + (0))), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
+ tmp_a2 = ADDHI (GET_H_FR_LO (((FLD (f_FRi)) + (0))), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
+ tmp_b1 = ADDHI (GET_H_FR_HI (((FLD (f_FRj)) + (0))), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
+ tmp_b2 = ADDHI (GET_H_FR_LO (((FLD (f_FRj)) + (0))), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
+}
+{
+ tmp_a3 = ADDHI (GET_H_FR_HI (((FLD (f_FRi)) + (1))), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
+ tmp_a4 = ADDHI (GET_H_FR_LO (((FLD (f_FRi)) + (1))), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
+ tmp_b3 = ADDHI (GET_H_FR_HI (((FLD (f_FRj)) + (1))), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
+ tmp_b4 = ADDHI (GET_H_FR_LO (((FLD (f_FRj)) + (1))), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
+}
+ {
+ UHI opval = (ANDIF (GTHI (tmp_b1, -32768), GEHI (tmp_a1, ABSHI (tmp_b1)))) ? (tmp_b1) : (GTHI (tmp_a1, NEGHI (ABSHI (tmp_b1)))) ? (tmp_a1) : (EQHI (tmp_b1, -32768)) ? (32767) : (NEGHI (tmp_b1));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ((FLD (f_FRk)) + (0)), opval);
+ written |= (1 << 15);
+ TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
+ }
+ {
+ UHI opval = (ANDIF (GTHI (tmp_b2, -32768), GEHI (tmp_a2, ABSHI (tmp_b2)))) ? (tmp_b2) : (GTHI (tmp_a2, NEGHI (ABSHI (tmp_b2)))) ? (tmp_a2) : (EQHI (tmp_b2, -32768)) ? (32767) : (NEGHI (tmp_b2));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ((FLD (f_FRk)) + (0)), opval);
+ written |= (1 << 17);
+ TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
+ }
+ {
+ UHI opval = (ANDIF (GTHI (tmp_b3, -32768), GEHI (tmp_a3, ABSHI (tmp_b3)))) ? (tmp_b3) : (GTHI (tmp_a3, NEGHI (ABSHI (tmp_b3)))) ? (tmp_a3) : (EQHI (tmp_b3, -32768)) ? (32767) : (NEGHI (tmp_b3));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ((FLD (f_FRk)) + (1)), opval);
+ written |= (1 << 16);
+ TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
+ }
+ {
+ UHI opval = (ANDIF (GTHI (tmp_b4, -32768), GEHI (tmp_a4, ABSHI (tmp_b4)))) ? (tmp_b4) : (GTHI (tmp_a4, NEGHI (ABSHI (tmp_b4)))) ? (tmp_a4) : (EQHI (tmp_b4, -32768)) ? (32767) : (NEGHI (tmp_b4));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ((FLD (f_FRk)) + (1)), opval);
+ written |= (1 << 18);
+ TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
+ }
+}
+}
+
+ abuf->written = written;
+ return vpc;
+#undef FLD
+}
+
+/* mqsllhi: mqsllhi$pack $FRintieven,$u6,$FRintkeven */
+
+static SEM_PC
+SEM_FN_NAME (frvbf,mqsllhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
+{
+#define FLD(f) abuf->fields.sfmt_mqsllhi.f
+ ARGBUF *abuf = SEM_ARGBUF (sem_arg);
+ int UNUSED written = 0;
+ IADDR UNUSED pc = abuf->addr;
+ SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
+
+if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRk), SUBSI (2, 1)))) {
+frvbf_media_register_not_aligned (current_cpu);
+} else {
+{
+ {
+ SI opval = frv_ref_SI (GET_H_FR_INT (FLD (f_FRi)));
+ sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRi), opval);
+ written |= (1 << 9);
+ TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
+ }
+ {
+ SI opval = frv_ref_SI (GET_H_FR_INT (FLD (f_FRk)));
+ sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
+ written |= (1 << 10);
+ TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
+ }
+ {
+ UHI opval = SLLHI (GET_H_FR_HI (((FLD (f_FRi)) + (0))), ANDSI (FLD (f_u6), 15));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ((FLD (f_FRk)) + (0)), opval);
+ written |= (1 << 11);
+ TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
+ }
+ {
+ UHI opval = SLLHI (GET_H_FR_LO (((FLD (f_FRi)) + (0))), ANDSI (FLD (f_u6), 15));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ((FLD (f_FRk)) + (0)), opval);
+ written |= (1 << 13);
+ TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
+ }
+ {
+ UHI opval = SLLHI (GET_H_FR_HI (((FLD (f_FRi)) + (1))), ANDSI (FLD (f_u6), 15));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ((FLD (f_FRk)) + (1)), opval);
+ written |= (1 << 12);
+ TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
+ }
+ {
+ UHI opval = SLLHI (GET_H_FR_LO (((FLD (f_FRi)) + (1))), ANDSI (FLD (f_u6), 15));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ((FLD (f_FRk)) + (1)), opval);
+ written |= (1 << 14);
+ TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
+ }
+}
+}
+
+ abuf->written = written;
+ return vpc;
+#undef FLD
+}
+
+/* mqsrahi: mqsrahi$pack $FRintieven,$u6,$FRintkeven */
+
+static SEM_PC
+SEM_FN_NAME (frvbf,mqsrahi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
+{
+#define FLD(f) abuf->fields.sfmt_mqsllhi.f
+ ARGBUF *abuf = SEM_ARGBUF (sem_arg);
+ int UNUSED written = 0;
+ IADDR UNUSED pc = abuf->addr;
+ SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
+
+if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRk), SUBSI (2, 1)))) {
+frvbf_media_register_not_aligned (current_cpu);
+} else {
+{
+ {
+ SI opval = frv_ref_SI (GET_H_FR_INT (FLD (f_FRi)));
+ sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRi), opval);
+ written |= (1 << 9);
+ TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
+ }
+ {
+ SI opval = frv_ref_SI (GET_H_FR_INT (FLD (f_FRk)));
+ sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
+ written |= (1 << 10);
+ TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
+ }
+ {
+ UHI opval = SRAHI (GET_H_FR_HI (((FLD (f_FRi)) + (0))), ANDSI (FLD (f_u6), 15));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ((FLD (f_FRk)) + (0)), opval);
+ written |= (1 << 11);
+ TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
+ }
+ {
+ UHI opval = SRAHI (GET_H_FR_LO (((FLD (f_FRi)) + (0))), ANDSI (FLD (f_u6), 15));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ((FLD (f_FRk)) + (0)), opval);
+ written |= (1 << 13);
+ TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
+ }
+ {
+ UHI opval = SRAHI (GET_H_FR_HI (((FLD (f_FRi)) + (1))), ANDSI (FLD (f_u6), 15));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ((FLD (f_FRk)) + (1)), opval);
+ written |= (1 << 12);
+ TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
+ }
+ {
+ UHI opval = SRAHI (GET_H_FR_LO (((FLD (f_FRi)) + (1))), ANDSI (FLD (f_u6), 15));
+ sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ((FLD (f_FRk)) + (1)), opval);
+ written |= (1 << 14);
+ TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
+ }
+}
+}
+
+ abuf->written = written;
+ return vpc;
+#undef FLD
+}
+
/* maddaccs: maddaccs$pack $ACC40Si,$ACC40Sk */
static SEM_PC
@@ -28264,22 +28351,12 @@ static const struct sem_fn_desc sem_fns[] = {
{ FRVBF_INSN_STHF, SEM_FN_NAME (frvbf,sthf) },
{ FRVBF_INSN_STF, SEM_FN_NAME (frvbf,stf) },
{ FRVBF_INSN_STC, SEM_FN_NAME (frvbf,stc) },
- { FRVBF_INSN_RSTB, SEM_FN_NAME (frvbf,rstb) },
- { FRVBF_INSN_RSTH, SEM_FN_NAME (frvbf,rsth) },
- { FRVBF_INSN_RST, SEM_FN_NAME (frvbf,rst) },
- { FRVBF_INSN_RSTBF, SEM_FN_NAME (frvbf,rstbf) },
- { FRVBF_INSN_RSTHF, SEM_FN_NAME (frvbf,rsthf) },
- { FRVBF_INSN_RSTF, SEM_FN_NAME (frvbf,rstf) },
{ FRVBF_INSN_STD, SEM_FN_NAME (frvbf,std) },
{ FRVBF_INSN_STDF, SEM_FN_NAME (frvbf,stdf) },
{ FRVBF_INSN_STDC, SEM_FN_NAME (frvbf,stdc) },
- { FRVBF_INSN_RSTD, SEM_FN_NAME (frvbf,rstd) },
- { FRVBF_INSN_RSTDF, SEM_FN_NAME (frvbf,rstdf) },
{ FRVBF_INSN_STQ, SEM_FN_NAME (frvbf,stq) },
{ FRVBF_INSN_STQF, SEM_FN_NAME (frvbf,stqf) },
{ FRVBF_INSN_STQC, SEM_FN_NAME (frvbf,stqc) },
- { FRVBF_INSN_RSTQ, SEM_FN_NAME (frvbf,rstq) },
- { FRVBF_INSN_RSTQF, SEM_FN_NAME (frvbf,rstqf) },
{ FRVBF_INSN_STBU, SEM_FN_NAME (frvbf,stbu) },
{ FRVBF_INSN_STHU, SEM_FN_NAME (frvbf,sthu) },
{ FRVBF_INSN_STU, SEM_FN_NAME (frvbf,stu) },
@@ -28619,6 +28696,9 @@ static const struct sem_fn_desc sem_fns[] = {
{ FRVBF_INSN_DCUL, SEM_FN_NAME (frvbf,dcul) },
{ FRVBF_INSN_BAR, SEM_FN_NAME (frvbf,bar) },
{ FRVBF_INSN_MEMBAR, SEM_FN_NAME (frvbf,membar) },
+ { FRVBF_INSN_LRAI, SEM_FN_NAME (frvbf,lrai) },
+ { FRVBF_INSN_LRAD, SEM_FN_NAME (frvbf,lrad) },
+ { FRVBF_INSN_TLBPR, SEM_FN_NAME (frvbf,tlbpr) },
{ FRVBF_INSN_COP1, SEM_FN_NAME (frvbf,cop1) },
{ FRVBF_INSN_COP2, SEM_FN_NAME (frvbf,cop2) },
{ FRVBF_INSN_CLRGR, SEM_FN_NAME (frvbf,clrgr) },
@@ -28766,6 +28846,10 @@ static const struct sem_fn_desc sem_fns[] = {
{ FRVBF_INSN_CMQADDHUS, SEM_FN_NAME (frvbf,cmqaddhus) },
{ FRVBF_INSN_CMQSUBHSS, SEM_FN_NAME (frvbf,cmqsubhss) },
{ FRVBF_INSN_CMQSUBHUS, SEM_FN_NAME (frvbf,cmqsubhus) },
+ { FRVBF_INSN_MQLCLRHS, SEM_FN_NAME (frvbf,mqlclrhs) },
+ { FRVBF_INSN_MQLMTHS, SEM_FN_NAME (frvbf,mqlmths) },
+ { FRVBF_INSN_MQSLLHI, SEM_FN_NAME (frvbf,mqsllhi) },
+ { FRVBF_INSN_MQSRAHI, SEM_FN_NAME (frvbf,mqsrahi) },
{ FRVBF_INSN_MADDACCS, SEM_FN_NAME (frvbf,maddaccs) },
{ FRVBF_INSN_MSUBACCS, SEM_FN_NAME (frvbf,msubaccs) },
{ FRVBF_INSN_MDADDACCS, SEM_FN_NAME (frvbf,mdaddaccs) },