THIS FILE IS MACHINE GENERATED WITH CGEN.
-Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-This file is part of the GNU Simulators.
+This file is part of the GNU simulators.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "cgen-ops.h"
#undef GET_ATTR
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
+#else
+#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_/**/attr)
+#endif
/* This is used so that we can compile two copies of the semantic code,
one with full feature support and one without that runs fast(er).
SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
{
-#if WITH_SCACHE
- /* Update the recorded pc in the cpu state struct. */
+ /* Update the recorded pc in the cpu state struct.
+ Only necessary for WITH_SCACHE case, but to avoid the
+ conditional compilation .... */
SET_H_PC (pc);
-#endif
- sim_engine_invalid_insn (current_cpu, pc);
- sim_io_error (CPU_STATE (current_cpu), "invalid insn not handled\n");
- /* NOTREACHED */
+ /* Virtual insns have zero size. Overwrite vpc with address of next insn
+ using the default-insn-bitsize spec. When executing insns in parallel
+ we may want to queue the fault and continue execution. */
+ vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
+ vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
}
return vpc;
{
#if WITH_SCACHE_PBB_M32RBF
-#ifdef DEFINE_SWITCH
+#if defined DEFINE_SWITCH || defined FAST_P
/* In the switch case FAST_P is a constant, allowing several optimizations
in any called inline functions. */
vpc = m32rbf_pbb_begin (current_cpu, FAST_P);
#else
+#if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
vpc = m32rbf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
+#else
+ vpc = m32rbf_pbb_begin (current_cpu, 0);
+#endif
#endif
#endif
}
{
SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = ADDSI (* FLD (i_sr), FLD (f_simm16));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = ANDSI (* FLD (i_sr), FLD (f_uimm16));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = ORSI (* FLD (i_dr), * FLD (i_sr));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = ORSI (* FLD (i_sr), FLD (f_uimm16));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = XORSI (* FLD (i_dr), * FLD (i_sr));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = XORSI (* FLD (i_sr), FLD (f_uimm16));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = temp0;
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
{
BI opval = temp1;
CPU (h_cond) = opval;
- TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
}
}
{
SI opval = temp0;
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
{
BI opval = temp1;
CPU (h_cond) = opval;
- TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
}
}
{
SI opval = temp0;
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
{
BI opval = temp1;
CPU (h_cond) = opval;
- TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
}
}
{
SI opval = ADDSI (ANDSI (pc, -4), 4);
CPU (h_gr[((UINT) 14)]) = opval;
- TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
{
USI opval = FLD (i_disp8);
{
SI opval = ADDSI (pc, 4);
CPU (h_gr[((UINT) 14)]) = opval;
- TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
{
USI opval = FLD (i_disp24);
{
BI opval = LTSI (* FLD (i_src1), * FLD (i_src2));
CPU (h_cond) = opval;
- TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
}
return vpc;
{
BI opval = LTSI (* FLD (i_src2), FLD (f_simm16));
CPU (h_cond) = opval;
- TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
}
return vpc;
{
BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2));
CPU (h_cond) = opval;
- TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
}
return vpc;
{
BI opval = LTUSI (* FLD (i_src2), FLD (f_simm16));
CPU (h_cond) = opval;
- TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
}
return vpc;
SI opval = DIVSI (* FLD (i_dr), * FLD (i_sr));
* FLD (i_dr) = opval;
written |= (1 << 2);
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
}
SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr));
* FLD (i_dr) = opval;
written |= (1 << 2);
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
}
SI opval = MODSI (* FLD (i_dr), * FLD (i_sr));
* FLD (i_dr) = opval;
written |= (1 << 2);
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
}
SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr));
* FLD (i_dr) = opval;
written |= (1 << 2);
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
}
{
SI opval = temp0;
CPU (h_gr[((UINT) 14)]) = opval;
- TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
{
USI opval = temp1;
static SEM_PC
SEM_FN_NAME (m32rbf,jmp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
{
-#define FLD(f) abuf->fields.sfmt_mvtc.f
+#define FLD(f) abuf->fields.sfmt_jl.f
ARGBUF *abuf = SEM_ARGBUF (sem_arg);
int UNUSED written = 0;
IADDR UNUSED pc = abuf->addr;
{
SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = GETMEMSI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = EXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = EXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = temp0;
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
{
SI opval = temp1;
* FLD (i_sr) = opval;
- TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
}
{
SI opval = FLD (i_uimm24);
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = FLD (f_simm8);
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = FLD (f_simm16);
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
}
{
SI opval = MULSI (* FLD (i_dr), * FLD (i_sr));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = * FLD (i_sr);
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = TRUNCDISI (SRADI (GET_H_ACCUM (), 32));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = TRUNCDISI (GET_H_ACCUM ());
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = TRUNCDISI (SRADI (GET_H_ACCUM (), 16));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
static SEM_PC
SEM_FN_NAME (m32rbf,mvfc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
{
-#define FLD(f) abuf->fields.sfmt_mvfc.f
+#define FLD(f) abuf->fields.sfmt_ld_plus.f
ARGBUF *abuf = SEM_ARGBUF (sem_arg);
int UNUSED written = 0;
IADDR UNUSED pc = abuf->addr;
{
SI opval = GET_H_CR (FLD (f_r2));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
static SEM_PC
SEM_FN_NAME (m32rbf,mvtc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
{
-#define FLD(f) abuf->fields.sfmt_mvtc.f
+#define FLD(f) abuf->fields.sfmt_ld_plus.f
ARGBUF *abuf = SEM_ARGBUF (sem_arg);
int UNUSED written = 0;
IADDR UNUSED pc = abuf->addr;
{
USI opval = * FLD (i_sr);
SET_H_CR (FLD (f_r1), opval);
- TRACE_RESULT (current_cpu, abuf, "dcr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
}
return vpc;
{
SI opval = NEGSI (* FLD (i_sr));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = INVSI (* FLD (i_sr));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
USI opval = GET_H_CR (((UINT) 14));
SET_H_CR (((UINT) 6), opval);
- TRACE_RESULT (current_cpu, abuf, "cr-6", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
}
{
UQI opval = CPU (h_bpsw);
{
SI opval = SLLSI (FLD (f_hi16), 16);
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = SLLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = SLLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = SRASI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = SRLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = tmp_new_src2;
* FLD (i_src2) = opval;
- TRACE_RESULT (current_cpu, abuf, "src2", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
}
{
SI opval = tmp_new_src2;
* FLD (i_src2) = opval;
- TRACE_RESULT (current_cpu, abuf, "src2", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
}
{
SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr));
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
return vpc;
{
SI opval = temp0;
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
{
BI opval = temp1;
CPU (h_cond) = opval;
- TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
}
}
{
SI opval = temp0;
* FLD (i_dr) = opval;
- TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
}
{
BI opval = temp1;
CPU (h_cond) = opval;
- TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
}
}
{
USI opval = GET_H_CR (((UINT) 6));
SET_H_CR (((UINT) 14), opval);
- TRACE_RESULT (current_cpu, abuf, "cr-14", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
}
{
USI opval = ADDSI (pc, 4);
SET_H_CR (((UINT) 6), opval);
- TRACE_RESULT (current_cpu, abuf, "cr-6", 'x', opval);
+ TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
}
{
UQI opval = CPU (h_bpsw);
#undef FLD
}
+/* clrpsw: clrpsw $uimm8 */
+
+static SEM_PC
+SEM_FN_NAME (m32rbf,clrpsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
+{
+#define FLD(f) abuf->fields.sfmt_clrpsw.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, 2);
+
+ {
+ SI opval = ANDSI (GET_H_CR (((UINT) 0)), ORSI (INVBI (FLD (f_uimm8)), 65280));
+ SET_H_CR (((UINT) 0), opval);
+ TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
+ }
+
+ return vpc;
+#undef FLD
+}
+
+/* setpsw: setpsw $uimm8 */
+
+static SEM_PC
+SEM_FN_NAME (m32rbf,setpsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
+{
+#define FLD(f) abuf->fields.sfmt_clrpsw.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, 2);
+
+ {
+ SI opval = FLD (f_uimm8);
+ SET_H_CR (((UINT) 0), opval);
+ TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
+ }
+
+ return vpc;
+#undef FLD
+}
+
+/* bset: bset $uimm3,@($slo16,$sr) */
+
+static SEM_PC
+SEM_FN_NAME (m32rbf,bset) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
+{
+#define FLD(f) abuf->fields.sfmt_bset.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);
+
+ {
+ QI opval = ORQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), SLLSI (1, SUBSI (7, FLD (f_uimm3))));
+ SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval);
+ TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
+ }
+
+ return vpc;
+#undef FLD
+}
+
+/* bclr: bclr $uimm3,@($slo16,$sr) */
+
+static SEM_PC
+SEM_FN_NAME (m32rbf,bclr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
+{
+#define FLD(f) abuf->fields.sfmt_bset.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);
+
+ {
+ QI opval = ANDQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), INVQI (SLLSI (1, SUBSI (7, FLD (f_uimm3)))));
+ SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval);
+ TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
+ }
+
+ return vpc;
+#undef FLD
+}
+
+/* btst: btst $uimm3,$sr */
+
+static SEM_PC
+SEM_FN_NAME (m32rbf,btst) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
+{
+#define FLD(f) abuf->fields.sfmt_bset.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, 2);
+
+ {
+ BI opval = ANDQI (SRLSI (* FLD (i_sr), SUBSI (7, FLD (f_uimm3))), 1);
+ CPU (h_cond) = opval;
+ TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
+ }
+
+ return vpc;
+#undef FLD
+}
+
/* Table of all semantic fns. */
static const struct sem_fn_desc sem_fns[] = {
{ M32RBF_INSN_SUBX, SEM_FN_NAME (m32rbf,subx) },
{ M32RBF_INSN_TRAP, SEM_FN_NAME (m32rbf,trap) },
{ M32RBF_INSN_UNLOCK, SEM_FN_NAME (m32rbf,unlock) },
+ { M32RBF_INSN_CLRPSW, SEM_FN_NAME (m32rbf,clrpsw) },
+ { M32RBF_INSN_SETPSW, SEM_FN_NAME (m32rbf,setpsw) },
+ { M32RBF_INSN_BSET, SEM_FN_NAME (m32rbf,bset) },
+ { M32RBF_INSN_BCLR, SEM_FN_NAME (m32rbf,bclr) },
+ { M32RBF_INSN_BTST, SEM_FN_NAME (m32rbf,btst) },
{ 0, 0 }
};
for (sf = &sem_fns[0]; sf->fn != 0; ++sf)
{
- int valid_p = CGEN_INSN_MACH_HAS_P (idesc_table[sf->index].idata, mach_num);
+ const CGEN_INSN *insn = idesc_table[sf->index].idata;
+ int valid_p = (CGEN_INSN_VIRTUAL_P (insn)
+ || CGEN_INSN_MACH_HAS_P (insn, mach_num));
#if FAST_P
if (valid_p)
idesc_table[sf->index].sem_fast = sf->fn;