mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-30 13:33:53 +08:00
3666a04883
This commits the result of running gdb/copyright.py as per our Start of New Year procedure... gdb/ChangeLog Update copyright year range in copyright header of all GDB files.
28946 lines
802 KiB
C
28946 lines
802 KiB
C
/* Simulator instruction semantics for frvbf.
|
|
|
|
THIS FILE IS MACHINE GENERATED WITH CGEN.
|
|
|
|
Copyright 1996-2021 Free Software Foundation, Inc.
|
|
|
|
This file is part of the GNU simulators.
|
|
|
|
This file is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3, or (at your option)
|
|
any later version.
|
|
|
|
It is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
|
License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
#define WANT_CPU frvbf
|
|
#define WANT_CPU_FRVBF
|
|
|
|
#include "sim-main.h"
|
|
#include "cgen-mem.h"
|
|
#include "cgen-ops.h"
|
|
|
|
#undef GET_ATTR
|
|
#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
|
|
|
|
/* 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).
|
|
FAST_P, when desired, is defined on the command line, -DFAST_P=1. */
|
|
#if FAST_P
|
|
#define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn)
|
|
#undef CGEN_TRACE_RESULT
|
|
#define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
|
|
#else
|
|
#define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn)
|
|
#endif
|
|
|
|
/* x-invalid: --invalid-- */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,x_invalid) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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, 0);
|
|
|
|
{
|
|
/* 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);
|
|
/* 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;
|
|
#undef FLD
|
|
}
|
|
|
|
/* x-after: --after-- */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,x_after) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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, 0);
|
|
|
|
{
|
|
#if WITH_SCACHE_PBB_FRVBF
|
|
frvbf_pbb_after (current_cpu, sem_arg);
|
|
#endif
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* x-before: --before-- */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,x_before) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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, 0);
|
|
|
|
{
|
|
#if WITH_SCACHE_PBB_FRVBF
|
|
frvbf_pbb_before (current_cpu, sem_arg);
|
|
#endif
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* x-cti-chain: --cti-chain-- */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,x_cti_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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, 0);
|
|
|
|
{
|
|
#if WITH_SCACHE_PBB_FRVBF
|
|
#ifdef DEFINE_SWITCH
|
|
vpc = frvbf_pbb_cti_chain (current_cpu, sem_arg,
|
|
pbb_br_type, pbb_br_npc);
|
|
BREAK (sem);
|
|
#else
|
|
/* FIXME: Allow provision of explicit ifmt spec in insn spec. */
|
|
vpc = frvbf_pbb_cti_chain (current_cpu, sem_arg,
|
|
CPU_PBB_BR_TYPE (current_cpu),
|
|
CPU_PBB_BR_NPC (current_cpu));
|
|
#endif
|
|
#endif
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* x-chain: --chain-- */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,x_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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, 0);
|
|
|
|
{
|
|
#if WITH_SCACHE_PBB_FRVBF
|
|
vpc = frvbf_pbb_chain (current_cpu, sem_arg);
|
|
#ifdef DEFINE_SWITCH
|
|
BREAK (sem);
|
|
#endif
|
|
#endif
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* x-begin: --begin-- */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,x_begin) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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, 0);
|
|
|
|
{
|
|
#if WITH_SCACHE_PBB_FRVBF
|
|
#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 = frvbf_pbb_begin (current_cpu, FAST_P);
|
|
#else
|
|
#if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
|
|
vpc = frvbf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
|
|
#else
|
|
vpc = frvbf_pbb_begin (current_cpu, 0);
|
|
#endif
|
|
#endif
|
|
#endif
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* add: add$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,add) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sub: sub$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = SUBSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* and: and$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,and) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = ANDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* or: or$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,or) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = ORSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* xor: xor$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,xor) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = XORSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* not: not$pack $GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,not) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_scutss.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 opval = INVSI (GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sdiv: sdiv$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sdiv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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);
|
|
|
|
{
|
|
frvbf_signed_integer_divide (current_cpu, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), FLD (f_GRk), 0);
|
|
; /*clobber*/
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nsdiv: nsdiv$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nsdiv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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);
|
|
|
|
{
|
|
frvbf_signed_integer_divide (current_cpu, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), FLD (f_GRk), 1);
|
|
; /*clobber*/
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* udiv: udiv$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,udiv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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);
|
|
|
|
{
|
|
frvbf_unsigned_integer_divide (current_cpu, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), FLD (f_GRk), 0);
|
|
; /*clobber*/
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nudiv: nudiv$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nudiv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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);
|
|
|
|
{
|
|
frvbf_unsigned_integer_divide (current_cpu, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), FLD (f_GRk), 1);
|
|
; /*clobber*/
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* smul: smul$pack $GRi,$GRj,$GRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,smul) (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);
|
|
|
|
{
|
|
DI opval = MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* umul: umul$pack $GRi,$GRj,$GRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,umul) (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);
|
|
|
|
{
|
|
DI opval = MULDI (ZEXTSIDI (GET_H_GR (FLD (f_GRi))), ZEXTSIDI (GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* smu: smu$pack $GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,smu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_smass.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);
|
|
|
|
{
|
|
DI opval = MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_iacc0_set, ((UINT) 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iacc0", 'D', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* smass: smass$pack $GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,smass) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_smass.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);
|
|
|
|
{
|
|
DI opval = (ANDIF (ANDIF (GTDI (MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (GET_H_GR (FLD (f_GRj)))), 0), GTDI (GET_H_IACC0 (((UINT) 0)), 0)), LTDI (SUBDI (MAKEDI (2147483647, 0xffffffff), MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (GET_H_GR (FLD (f_GRj))))), GET_H_IACC0 (((UINT) 0))))) ? (MAKEDI (2147483647, 0xffffffff)) : (ANDIF (ANDIF (LTDI (MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (GET_H_GR (FLD (f_GRj)))), 0), LTDI (GET_H_IACC0 (((UINT) 0)), 0)), GTDI (SUBDI (MAKEDI (0x80000000, 0), MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (GET_H_GR (FLD (f_GRj))))), GET_H_IACC0 (((UINT) 0))))) ? (MAKEDI (0x80000000, 0)) : (ADDDI (GET_H_IACC0 (((UINT) 0)), MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (GET_H_GR (FLD (f_GRj))))));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_iacc0_set, ((UINT) 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iacc0", 'D', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* smsss: smsss$pack $GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,smsss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_smass.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);
|
|
|
|
{
|
|
DI opval = (ANDIF (ANDIF (LTDI (MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (GET_H_GR (FLD (f_GRj)))), 0), GTDI (GET_H_IACC0 (((UINT) 0)), 0)), LTDI (ADDDI (MAKEDI (2147483647, 0xffffffff), MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (GET_H_GR (FLD (f_GRj))))), GET_H_IACC0 (((UINT) 0))))) ? (MAKEDI (2147483647, 0xffffffff)) : (ANDIF (ANDIF (GTDI (MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (GET_H_GR (FLD (f_GRj)))), 0), LTDI (GET_H_IACC0 (((UINT) 0)), 0)), GTDI (ADDDI (MAKEDI (0x80000000, 0), MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (GET_H_GR (FLD (f_GRj))))), GET_H_IACC0 (((UINT) 0))))) ? (MAKEDI (0x80000000, 0)) : (SUBDI (GET_H_IACC0 (((UINT) 0)), MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (GET_H_GR (FLD (f_GRj))))));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_iacc0_set, ((UINT) 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iacc0", 'D', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sll: sll$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sll) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = SLLSI (GET_H_GR (FLD (f_GRi)), ANDSI (GET_H_GR (FLD (f_GRj)), 31));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* srl: srl$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,srl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = SRLSI (GET_H_GR (FLD (f_GRi)), ANDSI (GET_H_GR (FLD (f_GRj)), 31));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sra: sra$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = SRASI (GET_H_GR (FLD (f_GRi)), ANDSI (GET_H_GR (FLD (f_GRj)), 31));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* slass: slass$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,slass) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = frvbf_shift_left_arith_saturate (current_cpu, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* scutss: scutss$pack $GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,scutss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_scutss.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 opval = frvbf_iacc_cut (current_cpu, GET_H_IACC0 (((UINT) 0)), GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* scan: scan$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,scan) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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_tmp1;
|
|
SI tmp_tmp2;
|
|
tmp_tmp1 = GET_H_GR (FLD (f_GRi));
|
|
tmp_tmp2 = SRASI (GET_H_GR (FLD (f_GRj)), 1);
|
|
{
|
|
SI opval = frvbf_scan_result (current_cpu, XORSI (tmp_tmp1, tmp_tmp2));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cadd: cadd$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cadd) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* csub: csub$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,csub) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = SUBSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cand: cand$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cand) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = ANDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cor: cor$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cor) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = ORSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cxor: cxor$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cxor) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = XORSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cnot: cnot$pack $GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cnot) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = INVSI (GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* csmul: csmul$pack $GRi,$GRj,$GRdoublek,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,csmul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_clddu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
DI opval = MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* csdiv: csdiv$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,csdiv) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
frvbf_signed_integer_divide (current_cpu, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), FLD (f_GRk), 0);
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cudiv: cudiv$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cudiv) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
frvbf_unsigned_integer_divide (current_cpu, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), FLD (f_GRk), 0);
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* csll: csll$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,csll) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = SLLSI (GET_H_GR (FLD (f_GRi)), ANDSI (GET_H_GR (FLD (f_GRj)), 31));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* csrl: csrl$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,csrl) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = SRLSI (GET_H_GR (FLD (f_GRi)), ANDSI (GET_H_GR (FLD (f_GRj)), 31));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* csra: csra$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,csra) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = SRASI (GET_H_GR (FLD (f_GRi)), ANDSI (GET_H_GR (FLD (f_GRj)), 31));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cscan: cscan$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cscan) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_tmp1;
|
|
SI tmp_tmp2;
|
|
tmp_tmp1 = GET_H_GR (FLD (f_GRi));
|
|
tmp_tmp2 = SRASI (GET_H_GR (FLD (f_GRj)), 1);
|
|
{
|
|
SI opval = frvbf_scan_result (current_cpu, XORSI (tmp_tmp1, tmp_tmp2));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* addcc: addcc$pack $GRi,$GRj,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,addcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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);
|
|
|
|
{
|
|
BI tmp_tmp;
|
|
QI tmp_cc;
|
|
SI tmp_result;
|
|
tmp_cc = CPU (h_iccr[FLD (f_ICCi_1)]);
|
|
tmp_tmp = ADDOFSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), 0);
|
|
if (EQBI (tmp_tmp, 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 13);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 2);
|
|
}
|
|
tmp_tmp = ADDCFSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), 0);
|
|
if (EQBI (tmp_tmp, 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 14);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 1);
|
|
}
|
|
tmp_result = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
if (EQSI (tmp_result, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_result, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
SI opval = tmp_result;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* subcc: subcc$pack $GRi,$GRj,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,subcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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);
|
|
|
|
{
|
|
BI tmp_tmp;
|
|
QI tmp_cc;
|
|
SI tmp_result;
|
|
tmp_cc = CPU (h_iccr[FLD (f_ICCi_1)]);
|
|
tmp_tmp = SUBOFSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), 0);
|
|
if (EQBI (tmp_tmp, 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 13);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 2);
|
|
}
|
|
tmp_tmp = SUBCFSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), 0);
|
|
if (EQBI (tmp_tmp, 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 14);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 1);
|
|
}
|
|
tmp_result = SUBSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
if (EQSI (tmp_result, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_result, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
SI opval = tmp_result;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* andcc: andcc$pack $GRi,$GRj,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,andcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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_tmp;
|
|
tmp_tmp = ANDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 7), 4);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 11), 8);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 3);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* orcc: orcc$pack $GRi,$GRj,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,orcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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_tmp;
|
|
tmp_tmp = ORSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 7), 4);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 11), 8);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 3);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* xorcc: xorcc$pack $GRi,$GRj,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,xorcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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_tmp;
|
|
tmp_tmp = XORSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 7), 4);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 11), 8);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 3);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sllcc: sllcc$pack $GRi,$GRj,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sllcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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_shift;
|
|
SI tmp_tmp;
|
|
QI tmp_cc;
|
|
tmp_shift = ANDSI (GET_H_GR (FLD (f_GRj)), 31);
|
|
tmp_cc = frvbf_set_icc_for_shift_left (current_cpu, GET_H_GR (FLD (f_GRi)), tmp_shift, CPU (h_iccr[FLD (f_ICCi_1)]));
|
|
tmp_tmp = SLLSI (GET_H_GR (FLD (f_GRi)), tmp_shift);
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* srlcc: srlcc$pack $GRi,$GRj,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,srlcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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_shift;
|
|
SI tmp_tmp;
|
|
QI tmp_cc;
|
|
tmp_shift = ANDSI (GET_H_GR (FLD (f_GRj)), 31);
|
|
tmp_cc = frvbf_set_icc_for_shift_right (current_cpu, GET_H_GR (FLD (f_GRi)), tmp_shift, CPU (h_iccr[FLD (f_ICCi_1)]));
|
|
tmp_tmp = SRLSI (GET_H_GR (FLD (f_GRi)), tmp_shift);
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sracc: sracc$pack $GRi,$GRj,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sracc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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_shift;
|
|
SI tmp_tmp;
|
|
QI tmp_cc;
|
|
tmp_shift = ANDSI (GET_H_GR (FLD (f_GRj)), 31);
|
|
tmp_cc = frvbf_set_icc_for_shift_right (current_cpu, GET_H_GR (FLD (f_GRi)), tmp_shift, CPU (h_iccr[FLD (f_ICCi_1)]));
|
|
tmp_tmp = SRASI (GET_H_GR (FLD (f_GRi)), tmp_shift);
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* smulcc: smulcc$pack $GRi,$GRj,$GRdoublek,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,smulcc) (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);
|
|
|
|
{
|
|
DI tmp_tmp;
|
|
QI tmp_cc;
|
|
tmp_cc = CPU (h_iccr[FLD (f_ICCi_1)]);
|
|
tmp_tmp = MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (GET_H_GR (FLD (f_GRj))));
|
|
if (EQDI (SRLDI (tmp_tmp, 63), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 7);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 8);
|
|
}
|
|
if (EQBI (EQDI (tmp_tmp, 0), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 11);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 4);
|
|
}
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* umulcc: umulcc$pack $GRi,$GRj,$GRdoublek,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,umulcc) (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);
|
|
|
|
{
|
|
DI tmp_tmp;
|
|
QI tmp_cc;
|
|
tmp_cc = CPU (h_iccr[FLD (f_ICCi_1)]);
|
|
tmp_tmp = MULDI (ZEXTSIDI (GET_H_GR (FLD (f_GRi))), ZEXTSIDI (GET_H_GR (FLD (f_GRj))));
|
|
if (EQDI (SRLDI (tmp_tmp, 63), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 7);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 8);
|
|
}
|
|
if (EQBI (EQDI (tmp_tmp, 0), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 11);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 4);
|
|
}
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* caddcc: caddcc$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,caddcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_caddcc.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
BI tmp_tmp;
|
|
QI tmp_cc;
|
|
SI tmp_result;
|
|
tmp_cc = CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]);
|
|
tmp_tmp = ADDOFSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), 0);
|
|
if (EQBI (tmp_tmp, 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 13);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 2);
|
|
}
|
|
tmp_tmp = ADDCFSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), 0);
|
|
if (EQBI (tmp_tmp, 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 14);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 1);
|
|
}
|
|
tmp_result = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
if (EQSI (tmp_result, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_result, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
SI opval = tmp_result;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* csubcc: csubcc$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,csubcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_caddcc.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
BI tmp_tmp;
|
|
QI tmp_cc;
|
|
SI tmp_result;
|
|
tmp_cc = CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]);
|
|
tmp_tmp = SUBOFSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), 0);
|
|
if (EQBI (tmp_tmp, 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 13);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 2);
|
|
}
|
|
tmp_tmp = SUBCFSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), 0);
|
|
if (EQBI (tmp_tmp, 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 14);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 1);
|
|
}
|
|
tmp_result = SUBSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
if (EQSI (tmp_result, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_result, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
SI opval = tmp_result;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* csmulcc: csmulcc$pack $GRi,$GRj,$GRdoublek,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,csmulcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_csmulcc.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
DI tmp_tmp;
|
|
QI tmp_cc;
|
|
tmp_cc = CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]);
|
|
tmp_tmp = MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (GET_H_GR (FLD (f_GRj))));
|
|
if (EQDI (SRLDI (tmp_tmp, 63), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 7);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 8);
|
|
}
|
|
if (EQBI (EQDI (tmp_tmp, 0), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 11);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 4);
|
|
}
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* candcc: candcc$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,candcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_caddcc.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = ANDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), 7), 4);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), 11), 8);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = ANDQI (CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), 3);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* corcc: corcc$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,corcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_caddcc.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = ORSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), 7), 4);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), 11), 8);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = ANDQI (CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), 3);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cxorcc: cxorcc$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cxorcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_caddcc.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = XORSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), 7), 4);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), 11), 8);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = ANDQI (CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), 3);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* csllcc: csllcc$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,csllcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_caddcc.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_shift;
|
|
SI tmp_tmp;
|
|
QI tmp_cc;
|
|
tmp_shift = ANDSI (GET_H_GR (FLD (f_GRj)), 31);
|
|
tmp_cc = frvbf_set_icc_for_shift_left (current_cpu, GET_H_GR (FLD (f_GRi)), tmp_shift, CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]));
|
|
tmp_tmp = SLLSI (GET_H_GR (FLD (f_GRi)), tmp_shift);
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* csrlcc: csrlcc$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,csrlcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_caddcc.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_shift;
|
|
SI tmp_tmp;
|
|
QI tmp_cc;
|
|
tmp_shift = ANDSI (GET_H_GR (FLD (f_GRj)), 31);
|
|
tmp_cc = frvbf_set_icc_for_shift_right (current_cpu, GET_H_GR (FLD (f_GRi)), tmp_shift, CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]));
|
|
tmp_tmp = SRLSI (GET_H_GR (FLD (f_GRi)), tmp_shift);
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* csracc: csracc$pack $GRi,$GRj,$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,csracc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_caddcc.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_shift;
|
|
SI tmp_tmp;
|
|
QI tmp_cc;
|
|
tmp_shift = ANDSI (GET_H_GR (FLD (f_GRj)), 31);
|
|
tmp_cc = frvbf_set_icc_for_shift_right (current_cpu, GET_H_GR (FLD (f_GRi)), tmp_shift, CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]));
|
|
tmp_tmp = SRASI (GET_H_GR (FLD (f_GRi)), tmp_shift);
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[ANDSI (FLD (f_CCi), 3)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* addx: addx$pack $GRi,$GRj,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,addx) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = ADDCSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 1)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* subx: subx$pack $GRi,$GRj,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,subx) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = SUBCSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 1)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* addxcc: addxcc$pack $GRi,$GRj,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,addxcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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_tmp;
|
|
QI tmp_cc;
|
|
tmp_cc = CPU (h_iccr[FLD (f_ICCi_1)]);
|
|
tmp_tmp = ADDCSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), TRUNCQIBI (ANDQI (tmp_cc, 1)));
|
|
if (EQBI (ADDOFSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), TRUNCQIBI (ANDQI (tmp_cc, 1))), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 13);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 2);
|
|
}
|
|
if (EQBI (ADDCFSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), TRUNCQIBI (ANDQI (tmp_cc, 1))), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 14);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 1);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* subxcc: subxcc$pack $GRi,$GRj,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,subxcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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_tmp;
|
|
QI tmp_cc;
|
|
tmp_cc = CPU (h_iccr[FLD (f_ICCi_1)]);
|
|
tmp_tmp = SUBCSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), TRUNCQIBI (ANDQI (tmp_cc, 1)));
|
|
if (EQBI (SUBOFSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), TRUNCQIBI (ANDQI (tmp_cc, 1))), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 13);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 2);
|
|
}
|
|
if (EQBI (SUBCFSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), TRUNCQIBI (ANDQI (tmp_cc, 1))), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 14);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 1);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* addss: addss$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,addss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (ADDOFSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), 0)) {
|
|
{
|
|
SI opval = (GTSI (GET_H_GR (FLD (f_GRi)), 0)) ? (2147483647) : (LTSI (GET_H_GR (FLD (f_GRi)), 0)) ? (0x80000000) : (0);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* subss: subss$pack $GRi,$GRj,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,subss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = SUBSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (SUBOFSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), 0)) {
|
|
{
|
|
SI opval = (GTSI (GET_H_GR (FLD (f_GRi)), 0)) ? (2147483647) : (LTSI (GET_H_GR (FLD (f_GRi)), 0)) ? (0x80000000) : (0);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* addi: addi$pack $GRi,$s12,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,addi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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 opval = ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* subi: subi$pack $GRi,$s12,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,subi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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 opval = SUBSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* andi: andi$pack $GRi,$s12,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,andi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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 opval = ANDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ori: ori$pack $GRi,$s12,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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 opval = ORSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* xori: xori$pack $GRi,$s12,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,xori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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 opval = XORSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sdivi: sdivi$pack $GRi,$s12,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sdivi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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);
|
|
|
|
{
|
|
frvbf_signed_integer_divide (current_cpu, GET_H_GR (FLD (f_GRi)), FLD (f_d12), FLD (f_GRk), 0);
|
|
; /*clobber*/
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nsdivi: nsdivi$pack $GRi,$s12,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nsdivi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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);
|
|
|
|
{
|
|
frvbf_signed_integer_divide (current_cpu, GET_H_GR (FLD (f_GRi)), FLD (f_d12), FLD (f_GRk), 1);
|
|
; /*clobber*/
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* udivi: udivi$pack $GRi,$s12,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,udivi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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);
|
|
|
|
{
|
|
frvbf_unsigned_integer_divide (current_cpu, GET_H_GR (FLD (f_GRi)), FLD (f_d12), FLD (f_GRk), 0);
|
|
; /*clobber*/
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nudivi: nudivi$pack $GRi,$s12,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nudivi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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);
|
|
|
|
{
|
|
frvbf_unsigned_integer_divide (current_cpu, GET_H_GR (FLD (f_GRi)), FLD (f_d12), FLD (f_GRk), 1);
|
|
; /*clobber*/
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* smuli: smuli$pack $GRi,$s12,$GRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,smuli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_smuli.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);
|
|
|
|
{
|
|
DI opval = MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (FLD (f_d12)));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* umuli: umuli$pack $GRi,$s12,$GRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,umuli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_smuli.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);
|
|
|
|
{
|
|
DI opval = MULDI (ZEXTSIDI (GET_H_GR (FLD (f_GRi))), ZEXTSIDI (FLD (f_d12)));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* slli: slli$pack $GRi,$s12,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,slli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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 opval = SLLSI (GET_H_GR (FLD (f_GRi)), ANDSI (FLD (f_d12), 31));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* srli: srli$pack $GRi,$s12,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,srli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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 opval = SRLSI (GET_H_GR (FLD (f_GRi)), ANDSI (FLD (f_d12), 31));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* srai: srai$pack $GRi,$s12,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,srai) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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 opval = SRASI (GET_H_GR (FLD (f_GRi)), ANDSI (FLD (f_d12), 31));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* scani: scani$pack $GRi,$s12,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,scani) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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_tmp1;
|
|
SI tmp_tmp2;
|
|
tmp_tmp1 = GET_H_GR (FLD (f_GRi));
|
|
tmp_tmp2 = SRASI (FLD (f_d12), 1);
|
|
{
|
|
SI opval = frvbf_scan_result (current_cpu, XORSI (tmp_tmp1, tmp_tmp2));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* addicc: addicc$pack $GRi,$s10,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,addicc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addicc.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);
|
|
|
|
{
|
|
BI tmp_tmp;
|
|
QI tmp_cc;
|
|
SI tmp_result;
|
|
tmp_cc = CPU (h_iccr[FLD (f_ICCi_1)]);
|
|
tmp_tmp = ADDOFSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10), 0);
|
|
if (EQBI (tmp_tmp, 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 13);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 2);
|
|
}
|
|
tmp_tmp = ADDCFSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10), 0);
|
|
if (EQBI (tmp_tmp, 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 14);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 1);
|
|
}
|
|
tmp_result = ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10));
|
|
if (EQSI (tmp_result, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_result, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
SI opval = tmp_result;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* subicc: subicc$pack $GRi,$s10,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,subicc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addicc.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);
|
|
|
|
{
|
|
BI tmp_tmp;
|
|
QI tmp_cc;
|
|
SI tmp_result;
|
|
tmp_cc = CPU (h_iccr[FLD (f_ICCi_1)]);
|
|
tmp_tmp = SUBOFSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10), 0);
|
|
if (EQBI (tmp_tmp, 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 13);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 2);
|
|
}
|
|
tmp_tmp = SUBCFSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10), 0);
|
|
if (EQBI (tmp_tmp, 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 14);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 1);
|
|
}
|
|
tmp_result = SUBSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10));
|
|
if (EQSI (tmp_result, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_result, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
SI opval = tmp_result;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* andicc: andicc$pack $GRi,$s10,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,andicc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addicc.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_tmp;
|
|
tmp_tmp = ANDSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10));
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 7), 4);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 11), 8);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 3);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* oricc: oricc$pack $GRi,$s10,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,oricc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addicc.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_tmp;
|
|
tmp_tmp = ORSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10));
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 7), 4);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 11), 8);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 3);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* xoricc: xoricc$pack $GRi,$s10,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,xoricc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addicc.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_tmp;
|
|
tmp_tmp = XORSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10));
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 7), 4);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
{
|
|
UQI opval = ORQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 11), 8);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 3);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* smulicc: smulicc$pack $GRi,$s10,$GRdoublek,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,smulicc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_smulicc.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);
|
|
|
|
{
|
|
DI tmp_tmp;
|
|
QI tmp_cc;
|
|
tmp_cc = CPU (h_iccr[FLD (f_ICCi_1)]);
|
|
tmp_tmp = MULDI (EXTSIDI (GET_H_GR (FLD (f_GRi))), EXTSIDI (FLD (f_s10)));
|
|
if (EQDI (SRLDI (tmp_tmp, 63), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 7);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 8);
|
|
}
|
|
if (EQBI (EQDI (tmp_tmp, 0), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 11);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 4);
|
|
}
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* umulicc: umulicc$pack $GRi,$s10,$GRdoublek,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,umulicc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_smulicc.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);
|
|
|
|
{
|
|
DI tmp_tmp;
|
|
QI tmp_cc;
|
|
tmp_cc = CPU (h_iccr[FLD (f_ICCi_1)]);
|
|
tmp_tmp = MULDI (ZEXTSIDI (GET_H_GR (FLD (f_GRi))), ZEXTSIDI (FLD (f_s10)));
|
|
if (EQDI (SRLDI (tmp_tmp, 63), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 7);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 8);
|
|
}
|
|
if (EQBI (EQDI (tmp_tmp, 0), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 11);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 4);
|
|
}
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sllicc: sllicc$pack $GRi,$s10,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sllicc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addicc.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_shift;
|
|
SI tmp_tmp;
|
|
QI tmp_cc;
|
|
tmp_shift = ANDSI (FLD (f_s10), 31);
|
|
tmp_cc = frvbf_set_icc_for_shift_left (current_cpu, GET_H_GR (FLD (f_GRi)), tmp_shift, CPU (h_iccr[FLD (f_ICCi_1)]));
|
|
tmp_tmp = SLLSI (GET_H_GR (FLD (f_GRi)), tmp_shift);
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* srlicc: srlicc$pack $GRi,$s10,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,srlicc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addicc.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_shift;
|
|
SI tmp_tmp;
|
|
QI tmp_cc;
|
|
tmp_shift = ANDSI (FLD (f_s10), 31);
|
|
tmp_cc = frvbf_set_icc_for_shift_right (current_cpu, GET_H_GR (FLD (f_GRi)), tmp_shift, CPU (h_iccr[FLD (f_ICCi_1)]));
|
|
tmp_tmp = SRLSI (GET_H_GR (FLD (f_GRi)), tmp_shift);
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sraicc: sraicc$pack $GRi,$s10,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sraicc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addicc.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_shift;
|
|
SI tmp_tmp;
|
|
QI tmp_cc;
|
|
tmp_shift = ANDSI (FLD (f_s10), 31);
|
|
tmp_cc = frvbf_set_icc_for_shift_right (current_cpu, GET_H_GR (FLD (f_GRi)), tmp_shift, CPU (h_iccr[FLD (f_ICCi_1)]));
|
|
tmp_tmp = SRASI (GET_H_GR (FLD (f_GRi)), tmp_shift);
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* addxi: addxi$pack $GRi,$s10,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,addxi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addicc.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 opval = ADDCSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10), TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 1)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* subxi: subxi$pack $GRi,$s10,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,subxi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addicc.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 opval = SUBCSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10), TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_1)]), 1)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* addxicc: addxicc$pack $GRi,$s10,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,addxicc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addicc.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_tmp;
|
|
QI tmp_cc;
|
|
tmp_cc = CPU (h_iccr[FLD (f_ICCi_1)]);
|
|
tmp_tmp = ADDCSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10), TRUNCQIBI (ANDQI (tmp_cc, 1)));
|
|
if (EQBI (ADDOFSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10), TRUNCQIBI (ANDQI (tmp_cc, 1))), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 13);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 2);
|
|
}
|
|
if (EQBI (ADDCFSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10), TRUNCQIBI (ANDQI (tmp_cc, 1))), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 14);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 1);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* subxicc: subxicc$pack $GRi,$s10,$GRk,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,subxicc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addicc.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_tmp;
|
|
QI tmp_cc;
|
|
tmp_cc = CPU (h_iccr[FLD (f_ICCi_1)]);
|
|
tmp_tmp = SUBCSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10), TRUNCQIBI (ANDQI (tmp_cc, 1)));
|
|
if (EQBI (SUBOFSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10), TRUNCQIBI (ANDQI (tmp_cc, 1))), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 13);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 2);
|
|
}
|
|
if (EQBI (SUBCFSI (GET_H_GR (FLD (f_GRi)), FLD (f_s10), TRUNCQIBI (ANDQI (tmp_cc, 1))), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 14);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 1);
|
|
}
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 7), 4);
|
|
} else {
|
|
if (LTSI (tmp_tmp, 0)) {
|
|
tmp_cc = ORQI (ANDQI (tmp_cc, 11), 8);
|
|
} else {
|
|
tmp_cc = ANDQI (tmp_cc, 3);
|
|
}
|
|
}
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmpb: cmpb$pack $GRi,$GRj,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmpb) (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);
|
|
|
|
{
|
|
QI tmp_cc;
|
|
if (EQBI (EQSI (ANDSI (GET_H_GR (FLD (f_GRi)), 0xff000000), ANDSI (GET_H_GR (FLD (f_GRj)), 0xff000000)), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 7);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 8);
|
|
}
|
|
if (EQBI (EQSI (ANDSI (GET_H_GR (FLD (f_GRi)), 16711680), ANDSI (GET_H_GR (FLD (f_GRj)), 16711680)), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 11);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 4);
|
|
}
|
|
if (EQBI (EQSI (ANDSI (GET_H_GR (FLD (f_GRi)), 65280), ANDSI (GET_H_GR (FLD (f_GRj)), 65280)), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 13);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 2);
|
|
}
|
|
if (EQBI (EQSI (ANDSI (GET_H_GR (FLD (f_GRi)), 255), ANDSI (GET_H_GR (FLD (f_GRj)), 255)), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 14);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 1);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmpba: cmpba$pack $GRi,$GRj,$ICCi_1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmpba) (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);
|
|
|
|
{
|
|
QI tmp_cc;
|
|
tmp_cc = 0;
|
|
if (EQBI (ORIF (EQSI (ANDSI (GET_H_GR (FLD (f_GRi)), 0xff000000), ANDSI (GET_H_GR (FLD (f_GRj)), 0xff000000)), ORIF (EQSI (ANDSI (GET_H_GR (FLD (f_GRi)), 16711680), ANDSI (GET_H_GR (FLD (f_GRj)), 16711680)), ORIF (EQSI (ANDSI (GET_H_GR (FLD (f_GRi)), 65280), ANDSI (GET_H_GR (FLD (f_GRj)), 65280)), EQSI (ANDSI (GET_H_GR (FLD (f_GRi)), 255), ANDSI (GET_H_GR (FLD (f_GRj)), 255))))), 0)) {
|
|
tmp_cc = ANDQI (tmp_cc, 14);
|
|
} else {
|
|
tmp_cc = ORQI (tmp_cc, 1);
|
|
}
|
|
{
|
|
UQI opval = tmp_cc;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_iccr[FLD (f_ICCi_1)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "iccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* setlo: setlo$pack $ulo16,$GRklo */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,setlo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_setlo.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);
|
|
|
|
{
|
|
UHI opval = FLD (f_u16);
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_gr_lo_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_lo", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sethi: sethi$pack $uhi16,$GRkhi */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sethi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_sethi.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);
|
|
|
|
{
|
|
UHI opval = FLD (f_u16);
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_gr_hi_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_hi", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* setlos: setlos$pack $slo16,$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,setlos) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_setlos.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 opval = FLD (f_s16);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldsb: ldsb$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldsb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = frvbf_read_mem_QI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldub: ldub$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = frvbf_read_mem_UQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldsh: ldsh$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldsh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = frvbf_read_mem_HI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* lduh: lduh$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,lduh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = frvbf_read_mem_UHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ld: ld$pack $ldann($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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 opval = frvbf_read_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldbf: ldbf$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldbf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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 opval = frvbf_read_mem_UQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldhf: ldhf$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldhf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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 opval = frvbf_read_mem_UHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldf: ldf$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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 opval = frvbf_read_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldc: ldc$pack @($GRi,$GRj),$CPRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ldcu.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 opval = frvbf_read_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_si_write (current_cpu, & CPU (h_cpr[FLD (f_CPRk)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cpr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldsb: nldsb$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldsb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_GRk), 0, 1, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_QI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldub: nldub$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_GRk), 0, 0, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_UQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldsh: nldsh$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldsh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_GRk), 0, 3, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_HI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nlduh: nlduh$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nlduh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_GRk), 0, 2, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_UHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nld: nld$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_addcc.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_GRk), 0, 4, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldbf: nldbf$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldbf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_FRk), 0, 0, 1);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_UQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldhf: nldhf$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldhf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_FRk), 0, 2, 1);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_UHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldf: nldf$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_FRk), 0, 4, 1);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldd: ldd$pack $lddann($GRi,$GRj),$GRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldd) (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;
|
|
if (NESI (FLD (f_GRk), 0)) {
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
DI opval = frvbf_read_mem_DI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* lddf: lddf$pack @($GRi,$GRj),$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,lddf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_clddfu.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)));
|
|
{
|
|
DF opval = frvbf_read_mem_DF (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* lddc: lddc$pack @($GRi,$GRj),$CPRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,lddc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_lddcu.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)));
|
|
{
|
|
DI opval = frvbf_read_mem_DI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_cpr_double_set, FLD (f_CPRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cpr_double", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldd: nldd$pack @($GRi,$GRj),$GRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldd) (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;
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_GRk), 0, 5, 0);
|
|
if (tmp_do_op) {
|
|
if (NESI (FLD (f_GRk), 0)) {
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
DI opval = frvbf_read_mem_DI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nlddf: nlddf$pack @($GRi,$GRj),$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nlddf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_clddfu.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;
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_FRk), 0, 5, 1);
|
|
if (tmp_do_op) {
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
DF opval = frvbf_read_mem_DF (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldq: ldq$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldq) (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_load_quad_GR (current_cpu, pc, tmp_address, FLD (f_GRk));
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldqf: ldqf$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldqf) (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_load_quad_FRint (current_cpu, pc, tmp_address, FLD (f_FRk));
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldqc: ldqc$pack @($GRi,$GRj),$CPRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldqc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stdcu.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_load_quad_CPR (current_cpu, pc, tmp_address, FLD (f_CPRk));
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldq: nldq$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldq) (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;
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_GRk), 0, 6, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
frvbf_load_quad_GR (current_cpu, pc, tmp_address, FLD (f_GRk));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldqf: nldqf$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldqf) (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;
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_FRk), 0, 6, 1);
|
|
if (tmp_do_op) {
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
frvbf_load_quad_FRint (current_cpu, pc, tmp_address, FLD (f_FRk));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldsbu: ldsbu$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldsbu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldsbu.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);
|
|
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_QI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldubu: ldubu$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldubu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldsbu.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);
|
|
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_UQI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldshu: ldshu$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldshu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldsbu.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);
|
|
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_HI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* lduhu: lduhu$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,lduhu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldsbu.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);
|
|
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_UHI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldu: ldu$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldsbu.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);
|
|
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_SI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldsbu: nldsbu$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldsbu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldsbu.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_GRk), 0, 1, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_QI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldubu: nldubu$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldubu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldsbu.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_GRk), 0, 0, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_UQI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldshu: nldshu$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldshu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldsbu.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_GRk), 0, 3, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_HI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nlduhu: nlduhu$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nlduhu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldsbu.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_GRk), 0, 2, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_UHI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldu: nldu$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldsbu.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_GRk), 0, 4, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_SI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldbfu: ldbfu$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldbfu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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);
|
|
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_UQI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldhfu: ldhfu$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldhfu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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);
|
|
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_UHI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldfu: ldfu$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldfu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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);
|
|
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_SI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldcu: ldcu$pack @($GRi,$GRj),$CPRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldcu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ldcu.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);
|
|
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_SI (current_cpu, pc, tmp_address);
|
|
sim_queue_si_write (current_cpu, & CPU (h_cpr[FLD (f_CPRk)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cpr", 'x', opval);
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldbfu: nldbfu$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldbfu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_FRk), 0, 0, 1);
|
|
if (tmp_do_op) {
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_UQI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldhfu: nldhfu$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldhfu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_FRk), 0, 2, 1);
|
|
if (tmp_do_op) {
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_UHI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldfu: nldfu$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldfu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_FRk), 0, 4, 1);
|
|
if (tmp_do_op) {
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_SI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* lddu: lddu$pack @($GRi,$GRj),$GRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,lddu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_clddu.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;
|
|
if (NESI (FLD (f_GRk), 0)) {
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
DI opval = frvbf_read_mem_DI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nlddu: nlddu$pack @($GRi,$GRj),$GRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nlddu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_clddu.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_GRk), 0, 5, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI tmp_address;
|
|
if (NESI (FLD (f_GRk), 0)) {
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
DI opval = frvbf_read_mem_DI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* lddfu: lddfu$pack @($GRi,$GRj),$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,lddfu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_clddfu.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)));
|
|
{
|
|
DF opval = frvbf_read_mem_DF (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* lddcu: lddcu$pack @($GRi,$GRj),$CPRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,lddcu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_lddcu.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)));
|
|
{
|
|
DI opval = frvbf_read_mem_DI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_cpr_double_set, FLD (f_CPRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cpr_double", 'D', opval);
|
|
}
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nlddfu: nlddfu$pack @($GRi,$GRj),$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nlddfu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_clddfu.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_FRk), 0, 5, 1);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI tmp_address;
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
DF opval = frvbf_read_mem_DF (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldqu: ldqu$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldqu) (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_load_quad_GR (current_cpu, pc, tmp_address, FLD (f_GRk));
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldqu: nldqu$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldqu) (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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_GRk), 0, 6, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI tmp_address;
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
frvbf_load_quad_GR (current_cpu, pc, tmp_address, FLD (f_GRk));
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldqfu: ldqfu$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldqfu) (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_load_quad_FRint (current_cpu, pc, tmp_address, FLD (f_FRk));
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldqcu: ldqcu$pack @($GRi,$GRj),$CPRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldqcu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stdcu.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_load_quad_CPR (current_cpu, pc, tmp_address, FLD (f_CPRk));
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldqfu: nldqfu$pack @($GRi,$GRj),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldqfu) (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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), FLD (f_GRj), FLD (f_FRk), 0, 6, 1);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI tmp_address;
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
frvbf_load_quad_FRint (current_cpu, pc, tmp_address, FLD (f_FRk));
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_force_update (current_cpu);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldsbi: ldsbi$pack @($GRi,$d12),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldsbi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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 opval = frvbf_read_mem_QI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldshi: ldshi$pack @($GRi,$d12),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldshi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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 opval = frvbf_read_mem_HI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldi: ldi$pack @($GRi,$d12),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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 opval = frvbf_read_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldubi: ldubi$pack @($GRi,$d12),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldubi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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 opval = frvbf_read_mem_UQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* lduhi: lduhi$pack @($GRi,$d12),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,lduhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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 opval = frvbf_read_mem_UHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldbfi: ldbfi$pack @($GRi,$d12),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldbfi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ldbfi.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 opval = frvbf_read_mem_UQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldhfi: ldhfi$pack @($GRi,$d12),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldhfi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ldbfi.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 opval = frvbf_read_mem_UHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldfi: ldfi$pack @($GRi,$d12),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldfi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ldbfi.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 opval = frvbf_read_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldsbi: nldsbi$pack @($GRi,$d12),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldsbi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), -1, FLD (f_GRk), FLD (f_d12), 1, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_QI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldubi: nldubi$pack @($GRi,$d12),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldubi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), -1, FLD (f_GRk), FLD (f_d12), 0, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_UQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldshi: nldshi$pack @($GRi,$d12),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldshi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), -1, FLD (f_GRk), FLD (f_d12), 3, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_HI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nlduhi: nlduhi$pack @($GRi,$d12),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nlduhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), -1, FLD (f_GRk), FLD (f_d12), 2, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_UHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldi: nldi$pack @($GRi,$d12),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), -1, FLD (f_GRk), FLD (f_d12), 4, 0);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldbfi: nldbfi$pack @($GRi,$d12),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldbfi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ldbfi.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), -1, FLD (f_FRk), FLD (f_d12), 0, 1);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_UQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldhfi: nldhfi$pack @($GRi,$d12),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldhfi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ldbfi.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), -1, FLD (f_FRk), FLD (f_d12), 2, 1);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_UHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldfi: nldfi$pack @($GRi,$d12),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldfi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ldbfi.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);
|
|
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), -1, FLD (f_FRk), FLD (f_d12), 4, 1);
|
|
if (tmp_do_op) {
|
|
{
|
|
SI opval = frvbf_read_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* lddi: lddi$pack @($GRi,$d12),$GRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,lddi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_smuli.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;
|
|
if (NESI (FLD (f_GRk), 0)) {
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
{
|
|
DI opval = frvbf_read_mem_DI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* lddfi: lddfi$pack @($GRi,$d12),$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,lddfi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_lddfi.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)), FLD (f_d12));
|
|
{
|
|
DF opval = frvbf_read_mem_DF (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nlddi: nlddi$pack @($GRi,$d12),$GRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nlddi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_smuli.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;
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), -1, FLD (f_GRk), FLD (f_d12), 5, 0);
|
|
if (tmp_do_op) {
|
|
if (NESI (FLD (f_GRk), 0)) {
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
{
|
|
DI opval = frvbf_read_mem_DI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nlddfi: nlddfi$pack @($GRi,$d12),$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nlddfi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_lddfi.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;
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), -1, FLD (f_FRk), FLD (f_d12), 5, 1);
|
|
if (tmp_do_op) {
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
{
|
|
DF opval = frvbf_read_mem_DF (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldqi: ldqi$pack @($GRi,$d12),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldqi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stdi.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)), FLD (f_d12));
|
|
frvbf_load_quad_GR (current_cpu, pc, tmp_address, FLD (f_GRk));
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ldqfi: ldqfi$pack @($GRi,$d12),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ldqfi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stdfi.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)), FLD (f_d12));
|
|
frvbf_load_quad_FRint (current_cpu, pc, tmp_address, FLD (f_FRk));
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nldqfi: nldqfi$pack @($GRi,$d12),$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nldqfi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stdfi.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;
|
|
{
|
|
BI tmp_do_op;
|
|
tmp_do_op = frvbf_check_non_excepting_load (current_cpu, FLD (f_GRi), -1, FLD (f_FRk), FLD (f_d12), 6, 1);
|
|
if (tmp_do_op) {
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
frvbf_load_quad_FRint (current_cpu, pc, tmp_address, FLD (f_FRk));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stb: stb$pack $GRk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stb) (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);
|
|
|
|
frvbf_write_mem_QI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), GET_H_GR (FLD (f_GRk)));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sth: sth$pack $GRk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sth) (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);
|
|
|
|
frvbf_write_mem_HI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), GET_H_GR (FLD (f_GRk)));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* st: st$pack $GRk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,st) (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);
|
|
|
|
frvbf_write_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), GET_H_GR (FLD (f_GRk)));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stbf: stbf$pack $FRintk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stbf) (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);
|
|
|
|
frvbf_write_mem_QI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), GET_H_FR_INT (FLD (f_FRk)));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sthf: sthf$pack $FRintk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sthf) (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);
|
|
|
|
frvbf_write_mem_HI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), GET_H_FR_INT (FLD (f_FRk)));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stf: stf$pack $FRintk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stf) (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);
|
|
|
|
frvbf_write_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), GET_H_FR_INT (FLD (f_FRk)));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stc: stc$pack $CPRk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stcu.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);
|
|
|
|
frvbf_write_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), CPU (h_cpr[FLD (f_CPRk)]));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* std: std$pack $GRdoublek,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,std) (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)));
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stdf: stdf$pack $FRdoublek,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stdf) (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)));
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stdc: stdc$pack $CPRdoublek,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stdc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stdcu.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_CPR_DOUBLE (FLD (f_CPRk)));
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stq: stq$pack $GRk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stq) (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));
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stqf: stqf$pack $FRintk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stqf) (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));
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stqc: stqc$pack $CPRk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stqc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stdcu.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_CPR (current_cpu, pc, tmp_address, FLD (f_CPRk));
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stbu: stbu$pack $GRk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stbu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cstbu.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);
|
|
|
|
{
|
|
USI 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)));
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sthu: sthu$pack $GRk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sthu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cstbu.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);
|
|
|
|
{
|
|
USI 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)));
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stu: stu$pack $GRk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cstbu.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);
|
|
|
|
{
|
|
USI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
frvbf_write_mem_WI (current_cpu, pc, tmp_address, GET_H_GR (FLD (f_GRk)));
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stbfu: stbfu$pack $FRintk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stbfu) (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);
|
|
|
|
{
|
|
USI 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)));
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sthfu: sthfu$pack $FRintk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sthfu) (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);
|
|
|
|
{
|
|
USI 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)));
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stfu: stfu$pack $FRintk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stfu) (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);
|
|
|
|
{
|
|
USI 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)));
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stcu: stcu$pack $CPRk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stcu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stcu.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);
|
|
|
|
{
|
|
USI 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, CPU (h_cpr[FLD (f_CPRk)]));
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stdu: stdu$pack $GRdoublek,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stdu) (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)));
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stdfu: stdfu$pack $FRdoublek,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stdfu) (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)));
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stdcu: stdcu$pack $CPRdoublek,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stdcu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stdcu.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_CPR_DOUBLE (FLD (f_CPRk)));
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stqu: stqu$pack $GRk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stqu) (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_store_quad_GR (current_cpu, pc, tmp_address, FLD (f_GRk));
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stqfu: stqfu$pack $FRintk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stqfu) (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));
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stqcu: stqcu$pack $CPRk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stqcu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stdcu.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_CPR (current_cpu, pc, tmp_address, FLD (f_CPRk));
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldsb: cldsb$pack @($GRi,$GRj),$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldsb) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = frvbf_read_mem_QI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldub: cldub$pack @($GRi,$GRj),$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldub) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = frvbf_read_mem_UQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldsh: cldsh$pack @($GRi,$GRj),$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldsh) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = frvbf_read_mem_HI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* clduh: clduh$pack @($GRi,$GRj),$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,clduh) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = frvbf_read_mem_UHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cld: cld$pack @($GRi,$GRj),$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cld) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = frvbf_read_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldbf: cldbf$pack @($GRi,$GRj),$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldbf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = frvbf_read_mem_UQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldhf: cldhf$pack @($GRi,$GRj),$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldhf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = frvbf_read_mem_UHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldf: cldf$pack @($GRi,$GRj),$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = frvbf_read_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldd: cldd$pack @($GRi,$GRj),$GRdoublek,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_clddu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_address;
|
|
if (NESI (FLD (f_GRk), 0)) {
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
DI opval = frvbf_read_mem_DI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* clddf: clddf$pack @($GRi,$GRj),$FRdoublek,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,clddf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_clddfu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_address;
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
DF opval = frvbf_read_mem_DF (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldq: cldq$pack @($GRi,$GRj),$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldq) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_address;
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
frvbf_load_quad_GR (current_cpu, pc, tmp_address, FLD (f_GRk));
|
|
}
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldsbu: cldsbu$pack @($GRi,$GRj),$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldsbu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldsbu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_QI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldubu: cldubu$pack @($GRi,$GRj),$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldubu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldsbu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_UQI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldshu: cldshu$pack @($GRi,$GRj),$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldshu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldsbu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_HI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* clduhu: clduhu$pack @($GRi,$GRj),$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,clduhu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldsbu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_UHI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldu: cldu$pack @($GRi,$GRj),$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldsbu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_SI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldbfu: cldbfu$pack @($GRi,$GRj),$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldbfu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_UQI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldhfu: cldhfu$pack @($GRi,$GRj),$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldhfu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_UHI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldfu: cldfu$pack @($GRi,$GRj),$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldfu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cldbfu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_address;
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
SI opval = frvbf_read_mem_SI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* clddu: clddu$pack @($GRi,$GRj),$GRdoublek,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,clddu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_clddu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_address;
|
|
if (NESI (FLD (f_GRk), 0)) {
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
DI opval = frvbf_read_mem_DI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_gr_double_set, FLD (f_GRk), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* clddfu: clddfu$pack @($GRi,$GRj),$FRdoublek,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,clddfu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_clddfu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_address;
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
{
|
|
DF opval = frvbf_read_mem_DF (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cldqu: cldqu$pack @($GRi,$GRj),$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cldqu) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_address;
|
|
{
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
frvbf_load_quad_GR (current_cpu, pc, tmp_address, FLD (f_GRk));
|
|
}
|
|
if (NESI (FLD (f_GRi), FLD (f_GRk))) {
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cstb: cstb$pack $GRk,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cstb) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
frvbf_write_mem_QI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), GET_H_GR (FLD (f_GRk)));
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* csth: csth$pack $GRk,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,csth) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
frvbf_write_mem_HI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), GET_H_GR (FLD (f_GRk)));
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cst: cst$pack $GRk,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cst) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
frvbf_write_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), GET_H_GR (FLD (f_GRk)));
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cstbf: cstbf$pack $FRintk,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cstbf) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
frvbf_write_mem_QI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), GET_H_FR_INT (FLD (f_FRk)));
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* csthf: csthf$pack $FRintk,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,csthf) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
frvbf_write_mem_HI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), GET_H_FR_INT (FLD (f_FRk)));
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cstf: cstf$pack $FRintk,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cstf) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
frvbf_write_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), GET_H_FR_INT (FLD (f_FRk)));
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cstd: cstd$pack $GRdoublek,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cstd) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
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)));
|
|
}
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cstdf: cstdf$pack $FRdoublek,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cstdf) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
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)));
|
|
}
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cstq: cstq$pack $GRk,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cstq) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
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));
|
|
}
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cstbu: cstbu$pack $GRk,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cstbu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cstbu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
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)));
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* csthu: csthu$pack $GRk,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,csthu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cstbu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
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)));
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cstu: cstu$pack $GRk,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cstu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cstbu.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
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)));
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cstbfu: cstbfu$pack $FRintk,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cstbfu) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
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)));
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* csthfu: csthfu$pack $FRintk,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,csthfu) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
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)));
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cstfu: cstfu$pack $FRintk,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cstfu) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
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)));
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cstdu: cstdu$pack $GRdoublek,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cstdu) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
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)));
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cstdfu: cstdfu$pack $FRdoublek,@($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cstdfu) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
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)));
|
|
}
|
|
{
|
|
SI opval = tmp_address;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRi), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stbi: stbi$pack $GRk,@($GRi,$d12) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stbi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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);
|
|
|
|
frvbf_write_mem_QI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)), GET_H_GR (FLD (f_GRk)));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sthi: sthi$pack $GRk,@($GRi,$d12) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sthi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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);
|
|
|
|
frvbf_write_mem_HI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)), GET_H_GR (FLD (f_GRk)));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sti: sti$pack $GRk,@($GRi,$d12) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sti) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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);
|
|
|
|
frvbf_write_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)), GET_H_GR (FLD (f_GRk)));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stbfi: stbfi$pack $FRintk,@($GRi,$d12) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stbfi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stbfi.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);
|
|
|
|
frvbf_write_mem_QI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)), GET_H_FR_INT (FLD (f_FRk)));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* sthfi: sthfi$pack $FRintk,@($GRi,$d12) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,sthfi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stbfi.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);
|
|
|
|
frvbf_write_mem_HI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)), GET_H_FR_INT (FLD (f_FRk)));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stfi: stfi$pack $FRintk,@($GRi,$d12) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stfi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stbfi.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);
|
|
|
|
frvbf_write_mem_SI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)), GET_H_FR_INT (FLD (f_FRk)));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stdi: stdi$pack $GRdoublek,@($GRi,$d12) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stdi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stdi.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)), FLD (f_d12));
|
|
frvbf_write_mem_DI (current_cpu, pc, tmp_address, GET_H_GR_DOUBLE (FLD (f_GRk)));
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stdfi: stdfi$pack $FRdoublek,@($GRi,$d12) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stdfi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stdfi.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)), FLD (f_d12));
|
|
frvbf_write_mem_DF (current_cpu, pc, tmp_address, GET_H_FR_DOUBLE (FLD (f_FRk)));
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stqi: stqi$pack $GRk,@($GRi,$d12) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stqi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stdi.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)), FLD (f_d12));
|
|
frvbf_store_quad_GR (current_cpu, pc, tmp_address, FLD (f_GRk));
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* stqfi: stqfi$pack $FRintk,@($GRi,$d12) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,stqfi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_stdfi.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)), FLD (f_d12));
|
|
frvbf_store_quad_FRint (current_cpu, pc, tmp_address, FLD (f_FRk));
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* swap: swap$pack @($GRi,$GRj),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,swap) (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_tmp;
|
|
SI tmp_address;
|
|
tmp_tmp = GET_H_GR (FLD (f_GRk));
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
frvbf_check_swap_address (current_cpu, tmp_address);
|
|
{
|
|
SI opval = frvbf_read_mem_WI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_write_mem_WI (current_cpu, pc, tmp_address, tmp_tmp);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* swapi: swapi$pack @($GRi,$d12),$GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,swapi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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_tmp;
|
|
SI tmp_address;
|
|
tmp_tmp = GET_H_GR (FLD (f_GRk));
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
frvbf_check_swap_address (current_cpu, tmp_address);
|
|
{
|
|
SI opval = frvbf_read_mem_WI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_write_mem_WI (current_cpu, pc, tmp_address, tmp_tmp);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cswap: cswap$pack @($GRi,$GRj),$GRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cswap) (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);
|
|
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI tmp_tmp;
|
|
SI tmp_address;
|
|
tmp_tmp = GET_H_GR (FLD (f_GRk));
|
|
tmp_address = ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
frvbf_check_swap_address (current_cpu, tmp_address);
|
|
{
|
|
SI opval = frvbf_read_mem_WI (current_cpu, pc, tmp_address);
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
frvbf_write_mem_WI (current_cpu, pc, tmp_address, tmp_tmp);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* movgf: movgf$pack $GRj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,movgf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmovgfd.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 opval = GET_H_GR (FLD (f_GRj));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* movfg: movfg$pack $FRintk,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,movfg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmovfgd.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 opval = GET_H_FR_INT (FLD (f_FRk));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRj), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* movgfd: movgfd$pack $GRj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,movgfd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmovgfd.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 (EQSI (FLD (f_GRj), 0)) {
|
|
{
|
|
{
|
|
SI opval = 0;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = 0;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
{
|
|
SI opval = GET_H_GR (FLD (f_GRj));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = GET_H_GR (ADDSI (FLD (f_GRj), 1));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* movfgd: movfgd$pack $FRintk,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,movfgd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmovfgd.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 (NESI (FLD (f_GRj), 0)) {
|
|
{
|
|
{
|
|
SI opval = GET_H_FR_INT (FLD (f_FRk));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRj), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = GET_H_FR_INT (ADDSI (FLD (f_FRk), 1));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, ADDSI (FLD (f_GRj), 1), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* movgfq: movgfq$pack $GRj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,movgfq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_movgfq.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 (EQSI (FLD (f_GRj), 0)) {
|
|
{
|
|
{
|
|
SI opval = 0;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = 0;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = 0;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, ADDSI (FLD (f_FRk), 2), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = 0;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, ADDSI (FLD (f_FRk), 3), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
{
|
|
SI opval = GET_H_GR (FLD (f_GRj));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = GET_H_GR (ADDSI (FLD (f_GRj), 1));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = GET_H_GR (ADDSI (FLD (f_GRj), 2));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, ADDSI (FLD (f_FRk), 2), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = GET_H_GR (ADDSI (FLD (f_GRj), 3));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, ADDSI (FLD (f_FRk), 3), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* movfgq: movfgq$pack $FRintk,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,movfgq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_movfgq.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 (NESI (FLD (f_GRj), 0)) {
|
|
{
|
|
{
|
|
SI opval = GET_H_FR_INT (FLD (f_FRk));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRj), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = GET_H_FR_INT (ADDSI (FLD (f_FRk), 1));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, ADDSI (FLD (f_GRj), 1), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = GET_H_FR_INT (ADDSI (FLD (f_FRk), 2));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, ADDSI (FLD (f_GRj), 2), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = GET_H_FR_INT (ADDSI (FLD (f_FRk), 3));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, ADDSI (FLD (f_GRj), 3), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmovgf: cmovgf$pack $GRj,$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmovgf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmovgfd.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = GET_H_GR (FLD (f_GRj));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmovfg: cmovfg$pack $FRintk,$GRj,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmovfg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmovfgd.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = GET_H_FR_INT (FLD (f_FRk));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRj), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmovgfd: cmovgfd$pack $GRj,$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmovgfd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmovgfd.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (EQSI (FLD (f_GRj), 0)) {
|
|
{
|
|
{
|
|
SI opval = 0;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = 0;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
{
|
|
SI opval = GET_H_GR (FLD (f_GRj));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = GET_H_GR (ADDSI (FLD (f_GRj), 1));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmovfgd: cmovfgd$pack $FRintk,$GRj,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmovfgd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmovfgd.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 (ANDIF (NESI (FLD (f_GRj), 0), EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2)))) {
|
|
{
|
|
{
|
|
SI opval = GET_H_FR_INT (FLD (f_FRk));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRj), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = GET_H_FR_INT (ADDSI (FLD (f_FRk), 1));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, ADDSI (FLD (f_GRj), 1), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* movgs: movgs$pack $GRj,$spr */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,movgs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_movgs.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);
|
|
|
|
{
|
|
USI opval = GET_H_GR (FLD (f_GRj));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, FLD (f_spr), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* movsg: movsg$pack $spr,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,movsg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_movsg.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 opval = GET_H_SPR (FLD (f_spr));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_gr_set, FLD (f_GRj), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bra: bra$pack $hint_taken$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bno: bno$pack$hint_not_taken */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bno) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* beq: beq$pack $ICCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,beq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_beq.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bne: bne$pack $ICCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_beq.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ble: ble$pack $ICCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ble) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_beq.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)), XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1))))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bgt: bgt$pack $ICCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bgt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_beq.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (NOTBI (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)), XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1)))))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* blt: blt$pack $ICCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,blt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_beq.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1)))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bge: bge$pack $ICCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bge) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_beq.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (NOTBI (XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1))))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bls: bls$pack $ICCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bls) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_beq.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bhi: bhi$pack $ICCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_beq.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (NOTBI (ORIF (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2))))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bc: bc$pack $ICCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_beq.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bnc: bnc$pack $ICCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bnc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_beq.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (NOTBI (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1)))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bn: bn$pack $ICCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bn) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_beq.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bp: bp$pack $ICCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_beq.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bv: bv$pack $ICCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_beq.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bnv: bnv$pack $ICCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bnv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_beq.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1)))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbra: fbra$pack $hint_taken$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbno: fbno$pack$hint_not_taken */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbno) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbne: fbne$pack $FCCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbeq: fbeq$pack $FCCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbeq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fblg: fblg$pack $FCCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fblg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbue: fbue$pack $FCCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbue) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1)))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbul: fbul$pack $FCCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1)))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbge: fbge$pack $FCCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbge) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fblt: fblt$pack $FCCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fblt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbuge: fbuge$pack $FCCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbuge) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbug: fbug$pack $FCCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbug) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1)))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fble: fble$pack $FCCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fble) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbgt: fbgt$pack $FCCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbgt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbule: fbule$pack $FCCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbule) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbu: fbu$pack $FCCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbo: fbo$pack $FCCi_2,$hint,$label16 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fbne.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, FLD (i_label16), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1))))) {
|
|
{
|
|
USI opval = FLD (i_label16);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bctrlr: bctrlr$pack $ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bctrlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bralr: bralr$pack$hint_taken */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bralr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bnolr: bnolr$pack$hint_not_taken */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bnolr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* beqlr: beqlr$pack $ICCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,beqlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bnelr: bnelr$pack $ICCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bnelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* blelr: blelr$pack $ICCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,blelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)), XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1))))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bgtlr: bgtlr$pack $ICCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bgtlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (NOTBI (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)), XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1)))))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bltlr: bltlr$pack $ICCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bltlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1)))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bgelr: bgelr$pack $ICCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bgelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (NOTBI (XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1))))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* blslr: blslr$pack $ICCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,blslr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bhilr: bhilr$pack $ICCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bhilr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (NOTBI (ORIF (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2))))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bclr: bclr$pack $ICCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bclr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bnclr: bnclr$pack $ICCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bnclr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (NOTBI (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1)))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bnlr: bnlr$pack $ICCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bnlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bplr: bplr$pack $ICCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bplr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bvlr: bvlr$pack $ICCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bvlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bnvlr: bnvlr$pack $ICCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bnvlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1)))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbralr: fbralr$pack$hint_taken */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbralr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbnolr: fbnolr$pack$hint_not_taken */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbnolr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbeqlr: fbeqlr$pack $FCCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbeqlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbnelr: fbnelr$pack $FCCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbnelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fblglr: fblglr$pack $FCCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fblglr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbuelr: fbuelr$pack $FCCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbuelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1)))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbullr: fbullr$pack $FCCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbullr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1)))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbgelr: fbgelr$pack $FCCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbgelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbltlr: fbltlr$pack $FCCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbltlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbugelr: fbugelr$pack $FCCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbugelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbuglr: fbuglr$pack $FCCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbuglr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1)))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fblelr: fblelr$pack $FCCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fblelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbgtlr: fbgtlr$pack $FCCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbgtlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbulelr: fbulelr$pack $FCCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbulelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbulr: fbulr$pack $FCCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbulr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fbolr: fbolr$pack $FCCi_2,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fbolr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1))))) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bcralr: bcralr$pack $ccond$hint_taken */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bcralr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bcnolr: bcnolr$pack$hint_not_taken */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bcnolr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
((void) 0); /*nop*/
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bceqlr: bceqlr$pack $ICCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bceqlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bcnelr: bcnelr$pack $ICCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bcnelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bclelr: bclelr$pack $ICCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bclelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)), XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1))))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bcgtlr: bcgtlr$pack $ICCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bcgtlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (NOTBI (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)), XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1)))))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bcltlr: bcltlr$pack $ICCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bcltlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1)))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bcgelr: bcgelr$pack $ICCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bcgelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (NOTBI (XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1))))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bclslr: bclslr$pack $ICCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bclslr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (ORIF (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bchilr: bchilr$pack $ICCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bchilr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (NOTBI (ORIF (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2))))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bcclr: bcclr$pack $ICCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bcclr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bcnclr: bcnclr$pack $ICCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bcnclr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (NOTBI (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1)))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bcnlr: bcnlr$pack $ICCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bcnlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bcplr: bcplr$pack $ICCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bcplr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bcvlr: bcvlr$pack $ICCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bcvlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bcnvlr: bcnvlr$pack $ICCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bcnvlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_bceqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1)))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcbralr: fcbralr$pack $ccond$hint_taken */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcbralr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcbnolr: fcbnolr$pack$hint_not_taken */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcbnolr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
((void) 0); /*nop*/
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcbeqlr: fcbeqlr$pack $FCCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcbeqlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcbnelr: fcbnelr$pack $FCCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcbnelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcblglr: fcblglr$pack $FCCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcblglr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcbuelr: fcbuelr$pack $FCCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcbuelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1)))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcbullr: fcbullr$pack $FCCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcbullr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1)))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcbgelr: fcbgelr$pack $FCCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcbgelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcbltlr: fcbltlr$pack $FCCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcbltlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcbugelr: fcbugelr$pack $FCCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcbugelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcbuglr: fcbuglr$pack $FCCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcbuglr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1)))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcblelr: fcblelr$pack $FCCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcblelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcbgtlr: fcbgtlr$pack $FCCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcbgtlr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcbulelr: fcbulelr$pack $FCCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcbulelr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcbulr: fcbulr$pack $FCCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcbulr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcbolr: fcbolr$pack $FCCi_2,$ccond,$hint */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcbolr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcbeqlr.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);
|
|
|
|
{
|
|
frvbf_model_branch (current_cpu, GET_H_SPR (((UINT) 272)), FLD (f_hint));
|
|
{
|
|
SI tmp_tmp;
|
|
tmp_tmp = SUBSI (GET_H_SPR (((UINT) 273)), 1);
|
|
{
|
|
USI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_spr_set, ((UINT) 273), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "spr", 'x', opval);
|
|
}
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1))))) {
|
|
if (EQSI (FLD (f_ccond), 0)) {
|
|
if (NESI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
if (EQSI (tmp_tmp, 0)) {
|
|
{
|
|
USI opval = GET_H_SPR (((UINT) 272));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* jmpl: jmpl$pack @($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,jmpl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cjmpl.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 (EQSI (FLD (f_LI), 1)) {
|
|
frvbf_set_write_next_vliw_addr_to_LR (current_cpu, 1);
|
|
}
|
|
{
|
|
USI opval = ANDSI (ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), 0xfffffffc);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
frvbf_model_branch (current_cpu, pc, 2);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* calll: calll$pack $callann($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,calll) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cjmpl.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 (EQSI (FLD (f_LI), 1)) {
|
|
frvbf_set_write_next_vliw_addr_to_LR (current_cpu, 1);
|
|
}
|
|
{
|
|
USI opval = ANDSI (ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), 0xfffffffc);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
frvbf_model_branch (current_cpu, pc, 2);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* jmpil: jmpil$pack @($GRi,$s12) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,jmpil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_jmpil.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 (EQSI (FLD (f_LI), 1)) {
|
|
frvbf_set_write_next_vliw_addr_to_LR (current_cpu, 1);
|
|
}
|
|
{
|
|
USI opval = ANDSI (ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)), 0xfffffffc);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
frvbf_model_branch (current_cpu, pc, 2);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* callil: callil$pack @($GRi,$s12) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,callil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_jmpil.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 (EQSI (FLD (f_LI), 1)) {
|
|
frvbf_set_write_next_vliw_addr_to_LR (current_cpu, 1);
|
|
}
|
|
{
|
|
USI opval = ANDSI (ADDSI (GET_H_GR (FLD (f_GRi)), FLD (f_d12)), 0xfffffffc);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
frvbf_model_branch (current_cpu, pc, 2);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* call: call$pack $label24 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,call) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_call.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);
|
|
|
|
{
|
|
frvbf_set_write_next_vliw_addr_to_LR (current_cpu, 1);
|
|
{
|
|
USI opval = FLD (i_label24);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
frvbf_model_branch (current_cpu, pc, 2);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* rett: rett$pack $debug */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,rett) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_rett.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);
|
|
|
|
{
|
|
{
|
|
USI opval = frv_rett (current_cpu, pc, FLD (f_debug));
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
frvbf_model_branch (current_cpu, pc, 2);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* rei: rei$pack $eir */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,rei) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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
|
|
}
|
|
|
|
/* tra: tra$pack $GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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);
|
|
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tno: tno$pack */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tno) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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
|
|
}
|
|
|
|
/* teq: teq$pack $ICCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,teq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_teq.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tne: tne$pack $ICCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_teq.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 (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tle: tle$pack $ICCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tle) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_teq.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)), XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tgt: tgt$pack $ICCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tgt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_teq.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 (NOTBI (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)), XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1)))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tlt: tlt$pack $ICCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tlt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_teq.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 (XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tge: tge$pack $ICCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tge) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_teq.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 (NOTBI (XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tls: tls$pack $ICCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tls) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_teq.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 (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* thi: thi$pack $ICCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,thi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_teq.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 (NOTBI (ORIF (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tc: tc$pack $ICCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_teq.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 (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tnc: tnc$pack $ICCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tnc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_teq.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 (NOTBI (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tn: tn$pack $ICCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tn) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_teq.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tp: tp$pack $ICCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_teq.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 (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tv: tv$pack $ICCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_teq.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tnv: tnv$pack $ICCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tnv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_teq.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 (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftra: ftra$pack $GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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);
|
|
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftno: ftno$pack */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftno) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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
|
|
}
|
|
|
|
/* ftne: ftne$pack $FCCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fteq: fteq$pack $FCCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fteq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftlg: ftlg$pack $FCCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftlg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftue: ftue$pack $FCCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftue) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftul: ftul$pack $FCCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftge: ftge$pack $FCCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftge) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftlt: ftlt$pack $FCCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftlt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftuge: ftuge$pack $FCCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftuge) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftug: ftug$pack $FCCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftug) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftle: ftle$pack $FCCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftle) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftgt: ftgt$pack $FCCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftgt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftule: ftule$pack $FCCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftule) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftu: ftu$pack $FCCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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 (TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fto: fto$pack $FCCi_2,$GRi,$GRj */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fto) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tira: tira$pack $GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tira) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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);
|
|
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tino: tino$pack */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tino) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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
|
|
}
|
|
|
|
/* tieq: tieq$pack $ICCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tieq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_tieq.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tine: tine$pack $ICCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tine) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_tieq.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 (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tile: tile$pack $ICCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tile) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_tieq.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)), XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tigt: tigt$pack $ICCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tigt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_tieq.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 (NOTBI (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)), XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1)))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tilt: tilt$pack $ICCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tilt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_tieq.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 (XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tige: tige$pack $ICCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tige) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_tieq.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 (NOTBI (XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tils: tils$pack $ICCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tils) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_tieq.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 (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tihi: tihi$pack $ICCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tihi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_tieq.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 (NOTBI (ORIF (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 4), 2))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tic: tic$pack $ICCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tic) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_tieq.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 (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tinc: tinc$pack $ICCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tinc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_tieq.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 (NOTBI (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tin: tin$pack $ICCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tin) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_tieq.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tip: tip$pack $ICCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tip) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_tieq.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 (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 8), 3)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tiv: tiv$pack $ICCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tiv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_tieq.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* tinv: tinv$pack $ICCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,tinv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_tieq.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 (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_2)]), 2), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftira: ftira$pack $GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftira) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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);
|
|
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftino: ftino$pack */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftino) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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
|
|
}
|
|
|
|
/* ftine: ftine$pack $FCCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftine) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftieq: ftieq$pack $FCCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftieq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftilg: ftilg$pack $FCCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftilg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftiue: ftiue$pack $FCCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftiue) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftiul: ftiul$pack $FCCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftiul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftige: ftige$pack $FCCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftige) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftilt: ftilt$pack $FCCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftilt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftiuge: ftiuge$pack $FCCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftiuge) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftiug: ftiug$pack $FCCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftiug) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftile: ftile$pack $FCCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftile) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftigt: ftigt$pack $FCCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftigt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftiule: ftiule$pack $FCCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftiule) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftiu: ftiu$pack $FCCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftiu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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 (TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 1))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ftio: ftio$pack $FCCi_2,$GRi,$s12 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ftio) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_ftine.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 4), 2)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_2)]), 2), 1))))) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
if (NEBI (CPU (h_psr_esr), 0)) {
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
}
|
|
}
|
|
frv_itrap (current_cpu, pc, GET_H_GR (FLD (f_GRi)), FLD (f_d12));
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* break: break$pack */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,break) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_break.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);
|
|
|
|
{
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
; /*clobber*/
|
|
frv_break (current_cpu);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mtrap: mtrap$pack */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mtrap) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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);
|
|
|
|
frv_mtrap (current_cpu);
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* andcr: andcr$pack $CRi,$CRj,$CRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,andcr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_andcr.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);
|
|
|
|
{
|
|
UQI opval = frvbf_cr_logic (current_cpu, 0, CPU (h_cccr[FLD (f_CRi)]), CPU (h_cccr[FLD (f_CRj)]));
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRk)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* orcr: orcr$pack $CRi,$CRj,$CRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,orcr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_andcr.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);
|
|
|
|
{
|
|
UQI opval = frvbf_cr_logic (current_cpu, 1, CPU (h_cccr[FLD (f_CRi)]), CPU (h_cccr[FLD (f_CRj)]));
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRk)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* xorcr: xorcr$pack $CRi,$CRj,$CRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,xorcr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_andcr.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);
|
|
|
|
{
|
|
UQI opval = frvbf_cr_logic (current_cpu, 2, CPU (h_cccr[FLD (f_CRi)]), CPU (h_cccr[FLD (f_CRj)]));
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRk)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nandcr: nandcr$pack $CRi,$CRj,$CRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nandcr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_andcr.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);
|
|
|
|
{
|
|
UQI opval = frvbf_cr_logic (current_cpu, 3, CPU (h_cccr[FLD (f_CRi)]), CPU (h_cccr[FLD (f_CRj)]));
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRk)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* norcr: norcr$pack $CRi,$CRj,$CRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,norcr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_andcr.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);
|
|
|
|
{
|
|
UQI opval = frvbf_cr_logic (current_cpu, 4, CPU (h_cccr[FLD (f_CRi)]), CPU (h_cccr[FLD (f_CRj)]));
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRk)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* andncr: andncr$pack $CRi,$CRj,$CRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,andncr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_andcr.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);
|
|
|
|
{
|
|
UQI opval = frvbf_cr_logic (current_cpu, 5, CPU (h_cccr[FLD (f_CRi)]), CPU (h_cccr[FLD (f_CRj)]));
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRk)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* orncr: orncr$pack $CRi,$CRj,$CRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,orncr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_andcr.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);
|
|
|
|
{
|
|
UQI opval = frvbf_cr_logic (current_cpu, 6, CPU (h_cccr[FLD (f_CRi)]), CPU (h_cccr[FLD (f_CRj)]));
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRk)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nandncr: nandncr$pack $CRi,$CRj,$CRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nandncr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_andcr.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);
|
|
|
|
{
|
|
UQI opval = frvbf_cr_logic (current_cpu, 7, CPU (h_cccr[FLD (f_CRi)]), CPU (h_cccr[FLD (f_CRj)]));
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRk)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* norncr: norncr$pack $CRi,$CRj,$CRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,norncr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_andcr.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);
|
|
|
|
{
|
|
UQI opval = frvbf_cr_logic (current_cpu, 8, CPU (h_cccr[FLD (f_CRi)]), CPU (h_cccr[FLD (f_CRj)]));
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRk)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* notcr: notcr$pack $CRj,$CRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,notcr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_andcr.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);
|
|
|
|
{
|
|
UQI opval = XORQI (CPU (h_cccr[FLD (f_CRj)]), 1);
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRk)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ckra: ckra$pack $CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ckra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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);
|
|
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ckno: ckno$pack $CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ckno) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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);
|
|
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ckeq: ckeq$pack $ICCi_3,$CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ckeq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 4), 2))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ckne: ckne$pack $ICCi_3,$CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ckne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 4), 2)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ckle: ckle$pack $ICCi_3,$CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ckle) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 4), 2)), XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 2), 1))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ckgt: ckgt$pack $ICCi_3,$CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ckgt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (NOTBI (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 4), 2)), XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 2), 1)))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cklt: cklt$pack $ICCi_3,$CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cklt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 2), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ckge: ckge$pack $ICCi_3,$CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ckge) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (NOTBI (XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 2), 1))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ckls: ckls$pack $ICCi_3,$CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ckls) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 1)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 4), 2)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ckhi: ckhi$pack $ICCi_3,$CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ckhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (NOTBI (ORIF (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 1)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 4), 2))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ckc: ckc$pack $ICCi_3,$CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ckc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 1))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cknc: cknc$pack $ICCi_3,$CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cknc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (NOTBI (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ckn: ckn$pack $ICCi_3,$CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ckn) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 8), 3))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ckp: ckp$pack $ICCi_3,$CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ckp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 8), 3)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ckv: ckv$pack $ICCi_3,$CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ckv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 2), 1))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cknv: cknv$pack $ICCi_3,$CRj_int */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cknv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 2), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fckra: fckra$pack $CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fckra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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);
|
|
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fckno: fckno$pack $CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fckno) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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);
|
|
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fckne: fckne$pack $FCCi_3,$CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fckne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 4), 2)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 1))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fckeq: fckeq$pack $FCCi_3,$CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fckeq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 8), 3))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcklg: fcklg$pack $FCCi_3,$CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcklg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 4), 2)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 2), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fckue: fckue$pack $FCCi_3,$CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fckue) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 8), 3)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fckul: fckul$pack $FCCi_3,$CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fckul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 4), 2)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fckge: fckge$pack $FCCi_3,$CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fckge) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 2), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcklt: fcklt$pack $FCCi_3,$CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcklt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 4), 2))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fckuge: fckuge$pack $FCCi_3,$CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fckuge) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 1))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fckug: fckug$pack $FCCi_3,$CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fckug) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fckle: fckle$pack $FCCi_3,$CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fckle) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 4), 2)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fckgt: fckgt$pack $FCCi_3,$CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fckgt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 2), 1))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fckule: fckule$pack $FCCi_3,$CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fckule) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 4), 2)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 1))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcku: fcku$pack $FCCi_3,$CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcku) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 1))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcko: fcko$pack $FCCi_3,$CRj_float */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcko) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 4), 2)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 2), 1))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 1);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cckra: cckra$pack $CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cckra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cckno: cckno$pack $CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cckno) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cckeq: cckeq$pack $ICCi_3,$CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cckeq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 4), 2))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cckne: cckne$pack $ICCi_3,$CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cckne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 4), 2)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cckle: cckle$pack $ICCi_3,$CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cckle) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 4), 2)), XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 2), 1))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cckgt: cckgt$pack $ICCi_3,$CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cckgt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (NOTBI (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 4), 2)), XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 2), 1)))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ccklt: ccklt$pack $ICCi_3,$CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ccklt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 2), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cckge: cckge$pack $ICCi_3,$CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cckge) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (NOTBI (XORBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 2), 1))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cckls: cckls$pack $ICCi_3,$CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cckls) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (ORIF (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 1)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 4), 2)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cckhi: cckhi$pack $ICCi_3,$CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cckhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (NOTBI (ORIF (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 1)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 4), 2))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cckc: cckc$pack $ICCi_3,$CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cckc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 1))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ccknc: ccknc$pack $ICCi_3,$CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ccknc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (NOTBI (TRUNCQIBI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cckn: cckn$pack $ICCi_3,$CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cckn) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 8), 3))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cckp: cckp$pack $ICCi_3,$CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cckp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 8), 3)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cckv: cckv$pack $ICCi_3,$CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cckv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 2), 1))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ccknv: ccknv$pack $ICCi_3,$CRj_int,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ccknv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cckeq.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (NOTBI (TRUNCQIBI (SRLQI (ANDQI (CPU (h_iccr[FLD (f_ICCi_3)]), 2), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_int)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfckra: cfckra$pack $CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfckra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfckno: cfckno$pack $CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfckno) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfckne: cfckne$pack $FCCi_3,$CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfckne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 4), 2)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 1))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfckeq: cfckeq$pack $FCCi_3,$CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfckeq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 8), 3))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfcklg: cfcklg$pack $FCCi_3,$CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfcklg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 4), 2)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 2), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfckue: cfckue$pack $FCCi_3,$CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfckue) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 8), 3)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfckul: cfckul$pack $FCCi_3,$CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfckul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 4), 2)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfckge: cfckge$pack $FCCi_3,$CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfckge) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 2), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfcklt: cfcklt$pack $FCCi_3,$CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfcklt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 4), 2))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfckuge: cfckuge$pack $FCCi_3,$CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfckuge) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 1))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfckug: cfckug$pack $FCCi_3,$CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfckug) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 2), 1)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 1)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfckle: cfckle$pack $FCCi_3,$CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfckle) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 8), 3)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 4), 2)))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfckgt: cfckgt$pack $FCCi_3,$CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfckgt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 2), 1))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfckule: cfckule$pack $FCCi_3,$CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfckule) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 4), 2)), TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 1))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfcku: cfcku$pack $FCCi_3,$CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfcku) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (TRUNCQIBI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 1))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfcko: cfcko$pack $FCCi_3,$CRj_float,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfcko) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfckne.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 8), 3)), ORIF (TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 4), 2)), TRUNCQIBI (SRLQI (ANDQI (CPU (h_fccr[FLD (f_FCCi_3)]), 2), 1))))) {
|
|
{
|
|
UQI opval = 3;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 0;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_cccr[FLD (f_CRj_float)]), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "cccr", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cjmpl: cjmpl$pack @($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cjmpl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cjmpl.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
if (EQSI (FLD (f_LI), 1)) {
|
|
frvbf_set_write_next_vliw_addr_to_LR (current_cpu, 1);
|
|
}
|
|
{
|
|
USI opval = ANDSI (ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), 0xfffffffc);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
frvbf_model_branch (current_cpu, pc, 2);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ccalll: ccalll$pack @($GRi,$GRj),$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ccalll) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cjmpl.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
if (EQSI (FLD (f_LI), 1)) {
|
|
frvbf_set_write_next_vliw_addr_to_LR (current_cpu, 1);
|
|
}
|
|
{
|
|
USI opval = ANDSI (ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), 0xfffffffc);
|
|
sim_queue_pc_write (current_cpu, opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
|
|
}
|
|
frvbf_model_branch (current_cpu, pc, 2);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* ici: ici$pack @($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,ici) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_icpl.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);
|
|
|
|
frvbf_insn_cache_invalidate (current_cpu, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), 0);
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* dci: dci$pack @($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,dci) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_icpl.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);
|
|
|
|
frvbf_data_cache_invalidate (current_cpu, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), 0);
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* icei: icei$pack @($GRi,$GRj),$ae */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,icei) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_icei.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 (EQSI (FLD (f_ae), 0)) {
|
|
frvbf_insn_cache_invalidate (current_cpu, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), -1);
|
|
} else {
|
|
frvbf_insn_cache_invalidate (current_cpu, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), FLD (f_ae));
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* dcei: dcei$pack @($GRi,$GRj),$ae */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,dcei) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_icei.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 (EQSI (FLD (f_ae), 0)) {
|
|
frvbf_data_cache_invalidate (current_cpu, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), -1);
|
|
} else {
|
|
frvbf_data_cache_invalidate (current_cpu, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), FLD (f_ae));
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* dcf: dcf$pack @($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,dcf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_icpl.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);
|
|
|
|
frvbf_data_cache_flush (current_cpu, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), 0);
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* dcef: dcef$pack @($GRi,$GRj),$ae */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,dcef) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_icei.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 (EQSI (FLD (f_ae), 0)) {
|
|
frvbf_data_cache_flush (current_cpu, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), -1);
|
|
} else {
|
|
frvbf_data_cache_flush (current_cpu, ADDSI (GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj))), FLD (f_ae));
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* witlb: witlb$pack $GRk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,witlb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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
|
|
}
|
|
|
|
/* wdtlb: wdtlb$pack $GRk,@($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,wdtlb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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
|
|
}
|
|
|
|
/* itlbi: itlbi$pack @($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,itlbi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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
|
|
}
|
|
|
|
/* dtlbi: dtlbi$pack @($GRi,$GRj) */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,dtlbi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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
|
|
}
|
|
|
|
/* icpl: icpl$pack $GRi,$GRj,$lock */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,icpl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_icpl.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);
|
|
|
|
frvbf_insn_cache_preload (current_cpu, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), FLD (f_lock));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* dcpl: dcpl$pack $GRi,$GRj,$lock */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,dcpl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_icpl.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);
|
|
|
|
frvbf_data_cache_preload (current_cpu, GET_H_GR (FLD (f_GRi)), GET_H_GR (FLD (f_GRj)), FLD (f_lock));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* icul: icul$pack $GRi */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,icul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_jmpil.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);
|
|
|
|
frvbf_insn_cache_unlock (current_cpu, GET_H_GR (FLD (f_GRi)));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* dcul: dcul$pack $GRi */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,dcul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_jmpil.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);
|
|
|
|
frvbf_data_cache_unlock (current_cpu, GET_H_GR (FLD (f_GRi)));
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* bar: bar$pack */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,bar) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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
|
|
}
|
|
|
|
/* membar: membar$pack */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,membar) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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
|
|
}
|
|
|
|
/* 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.sfmt_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.sfmt_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.sfmt_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
|
|
SEM_FN_NAME (frvbf,cop1) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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
|
|
}
|
|
|
|
/* cop2: cop2$pack $s6_1,$CPRi,$CPRj,$CPRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cop2) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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
|
|
}
|
|
|
|
/* clrgr: clrgr$pack $GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,clrgr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_swapi.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);
|
|
|
|
{
|
|
frv_ref_SI (GET_H_GR (FLD (f_GRk)));
|
|
frvbf_clear_ne_flags (current_cpu, FLD (f_GRk), 0);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* clrfr: clrfr$pack $FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,clrfr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
frv_ref_SI (GET_H_FR (FLD (f_FRk)));
|
|
frvbf_clear_ne_flags (current_cpu, FLD (f_FRk), 1);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* clrga: clrga$pack */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,clrga) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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);
|
|
|
|
frvbf_clear_ne_flags (current_cpu, -1, 0);
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* clrfa: clrfa$pack */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,clrfa) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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);
|
|
|
|
frvbf_clear_ne_flags (current_cpu, -1, 1);
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* commitgr: commitgr$pack $GRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,commitgr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_setlos.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);
|
|
|
|
frvbf_commit (current_cpu, FLD (f_GRk), 0);
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* commitfr: commitfr$pack $FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,commitfr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mhsethis.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);
|
|
|
|
frvbf_commit (current_cpu, FLD (f_FRk), 1);
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* commitga: commitga$pack */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,commitga) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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);
|
|
|
|
frvbf_commit (current_cpu, -1, 0);
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* commitfa: commitfa$pack */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,commitfa) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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);
|
|
|
|
frvbf_commit (current_cpu, -1, 1);
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fitos: fitos$pack $FRintj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fitos) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fditos.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);
|
|
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->floatsisf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fstoi: fstoi$pack $FRj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fstoi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdstoi.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 opval = CGEN_CPU_FPU (current_cpu)->ops->fixsfsi (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fitod: fitod$pack $FRintj,$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fitod) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fitod.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);
|
|
|
|
{
|
|
DF opval = CGEN_CPU_FPU (current_cpu)->ops->floatsidf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdtoi: fdtoi$pack $FRdoublej,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdtoi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdtoi.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 opval = CGEN_CPU_FPU (current_cpu)->ops->fixdfsi (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR_DOUBLE (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fditos: fditos$pack $FRintj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fditos) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fditos.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->floatsisf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->floatsisf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR_INT (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdstoi: fdstoi$pack $FRj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdstoi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdstoi.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 opval = CGEN_CPU_FPU (current_cpu)->ops->fixsfsi (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = CGEN_CPU_FPU (current_cpu)->ops->fixsfsi (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfditos: nfditos$pack $FRintj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfditos) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fditos.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->floatsisf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 1));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->floatsisf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR_INT (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfdstoi: nfdstoi$pack $FRj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfdstoi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdstoi.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SI opval = CGEN_CPU_FPU (current_cpu)->ops->fixsfsi (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 1));
|
|
{
|
|
USI opval = CGEN_CPU_FPU (current_cpu)->ops->fixsfsi (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfitos: cfitos$pack $FRintj,$FRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfitos) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfitos.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->floatsisf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfstoi: cfstoi$pack $FRj,$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfstoi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfstoi.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = CGEN_CPU_FPU (current_cpu)->ops->fixsfsi (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfitos: nfitos$pack $FRintj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfitos) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fditos.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->floatsisf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfstoi: nfstoi$pack $FRj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfstoi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdstoi.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SI opval = CGEN_CPU_FPU (current_cpu)->ops->fixsfsi (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fmovs: fmovs$pack $FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fmovs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
SF opval = GET_H_FR (FLD (f_FRj));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fmovd: fmovd$pack $FRdoublej,$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fmovd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fmaddd.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);
|
|
|
|
{
|
|
DF opval = GET_H_FR_DOUBLE (FLD (f_FRj));
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdmovs: fdmovs$pack $FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdmovs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
{
|
|
SF opval = GET_H_FR (FLD (f_FRj));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = GET_H_FR (ADDSI (FLD (f_FRj), 1));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfmovs: cfmovs$pack $FRj,$FRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfmovs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SF opval = GET_H_FR (FLD (f_FRj));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fnegs: fnegs$pack $FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fnegs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->negsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fnegd: fnegd$pack $FRdoublej,$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fnegd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fmaddd.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);
|
|
|
|
{
|
|
DF opval = CGEN_CPU_FPU (current_cpu)->ops->negdf (CGEN_CPU_FPU (current_cpu), GET_H_FR_DOUBLE (FLD (f_FRj)));
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdnegs: fdnegs$pack $FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdnegs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->negsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->negsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfnegs: cfnegs$pack $FRj,$FRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfnegs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->negsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fabss: fabss$pack $FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fabss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->abssf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fabsd: fabsd$pack $FRdoublej,$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fabsd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fmaddd.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);
|
|
|
|
{
|
|
DF opval = CGEN_CPU_FPU (current_cpu)->ops->absdf (CGEN_CPU_FPU (current_cpu), GET_H_FR_DOUBLE (FLD (f_FRj)));
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdabss: fdabss$pack $FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdabss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->abssf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->abssf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfabss: cfabss$pack $FRj,$FRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfabss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->abssf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fsqrts: fsqrts$pack $FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fsqrts) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->sqrtsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdsqrts: fdsqrts$pack $FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdsqrts) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->sqrtsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->sqrtsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfdsqrts: nfdsqrts$pack $FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfdsqrts) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->sqrtsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 1));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->sqrtsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fsqrtd: fsqrtd$pack $FRdoublej,$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fsqrtd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fmaddd.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);
|
|
|
|
{
|
|
DF opval = CGEN_CPU_FPU (current_cpu)->ops->sqrtdf (CGEN_CPU_FPU (current_cpu), GET_H_FR_DOUBLE (FLD (f_FRj)));
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfsqrts: cfsqrts$pack $FRj,$FRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfsqrts) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->sqrtsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfsqrts: nfsqrts$pack $FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfsqrts) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->sqrtsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fadds: fadds$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fadds) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fsubs: fsubs$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fsubs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fmuls: fmuls$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fmuls) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdivs: fdivs$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdivs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->divsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* faddd: faddd$pack $FRdoublei,$FRdoublej,$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,faddd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fmaddd.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);
|
|
|
|
{
|
|
DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), GET_H_FR_DOUBLE (FLD (f_FRi)), GET_H_FR_DOUBLE (FLD (f_FRj)));
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fsubd: fsubd$pack $FRdoublei,$FRdoublej,$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fsubd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fmaddd.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);
|
|
|
|
{
|
|
DF opval = CGEN_CPU_FPU (current_cpu)->ops->subdf (CGEN_CPU_FPU (current_cpu), GET_H_FR_DOUBLE (FLD (f_FRi)), GET_H_FR_DOUBLE (FLD (f_FRj)));
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fmuld: fmuld$pack $FRdoublei,$FRdoublej,$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fmuld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fmaddd.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);
|
|
|
|
{
|
|
DF opval = CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FR_DOUBLE (FLD (f_FRi)), GET_H_FR_DOUBLE (FLD (f_FRj)));
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdivd: fdivd$pack $FRdoublei,$FRdoublej,$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdivd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fmaddd.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);
|
|
|
|
{
|
|
DF opval = CGEN_CPU_FPU (current_cpu)->ops->divdf (CGEN_CPU_FPU (current_cpu), GET_H_FR_DOUBLE (FLD (f_FRi)), GET_H_FR_DOUBLE (FLD (f_FRj)));
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfadds: cfadds$pack $FRi,$FRj,$FRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfadds) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfsubs: cfsubs$pack $FRi,$FRj,$FRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfsubs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfmuls: cfmuls$pack $FRi,$FRj,$FRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfmuls) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfdivs: cfdivs$pack $FRi,$FRj,$FRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfdivs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->divsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfadds: nfadds$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfadds) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfsubs: nfsubs$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfsubs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfmuls: nfmuls$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfmuls) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfdivs: nfdivs$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfdivs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->divsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcmps: fcmps$pack $FRi,$FRj,$FCCi_2 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcmps) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfcmps.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 (CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)))) {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)))) {
|
|
{
|
|
UQI opval = 8;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)))) {
|
|
{
|
|
UQI opval = 4;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 1;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fcmpd: fcmpd$pack $FRdoublei,$FRdoublej,$FCCi_2 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fcmpd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fcmpd.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 (CGEN_CPU_FPU (current_cpu)->ops->gtdf (CGEN_CPU_FPU (current_cpu), GET_H_FR_DOUBLE (FLD (f_FRi)), GET_H_FR_DOUBLE (FLD (f_FRj)))) {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->eqdf (CGEN_CPU_FPU (current_cpu), GET_H_FR_DOUBLE (FLD (f_FRi)), GET_H_FR_DOUBLE (FLD (f_FRj)))) {
|
|
{
|
|
UQI opval = 8;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->ltdf (CGEN_CPU_FPU (current_cpu), GET_H_FR_DOUBLE (FLD (f_FRi)), GET_H_FR_DOUBLE (FLD (f_FRj)))) {
|
|
{
|
|
UQI opval = 4;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 1;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 2);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfcmps: cfcmps$pack $FRi,$FRj,$FCCi_2,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfcmps) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfcmps.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)))) {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)))) {
|
|
{
|
|
UQI opval = 8;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)))) {
|
|
{
|
|
UQI opval = 4;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 1;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdcmps: fdcmps$pack $FRi,$FRj,$FCCi_2 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdcmps) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_nfdcmps.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 (CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)))) {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)))) {
|
|
{
|
|
UQI opval = 8;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)))) {
|
|
{
|
|
UQI opval = 4;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 1;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)))) {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCi_2), 1)]), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)))) {
|
|
{
|
|
UQI opval = 8;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCi_2), 1)]), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)))) {
|
|
{
|
|
UQI opval = 4;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCi_2), 1)]), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 1;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCi_2), 1)]), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fmadds: fmadds$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fmadds) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj))), GET_H_FR (FLD (f_FRk)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fmsubs: fmsubs$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fmsubs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj))), GET_H_FR (FLD (f_FRk)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fmaddd: fmaddd$pack $FRdoublei,$FRdoublej,$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fmaddd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fmaddd.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);
|
|
|
|
{
|
|
DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FR_DOUBLE (FLD (f_FRi)), GET_H_FR_DOUBLE (FLD (f_FRj))), GET_H_FR_DOUBLE (FLD (f_FRk)));
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fmsubd: fmsubd$pack $FRdoublei,$FRdoublej,$FRdoublek */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fmsubd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fmaddd.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);
|
|
|
|
{
|
|
DF opval = CGEN_CPU_FPU (current_cpu)->ops->subdf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FR_DOUBLE (FLD (f_FRi)), GET_H_FR_DOUBLE (FLD (f_FRj))), GET_H_FR_DOUBLE (FLD (f_FRk)));
|
|
sim_queue_fn_df_write (current_cpu, frvbf_h_fr_double_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_double", 'f', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdmadds: fdmadds$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdmadds) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj))), GET_H_FR (FLD (f_FRk)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1))), GET_H_FR (ADDSI (FLD (f_FRk), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfdmadds: nfdmadds$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfdmadds) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj))), GET_H_FR (FLD (f_FRk)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 1));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1))), GET_H_FR (ADDSI (FLD (f_FRk), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfmadds: cfmadds$pack $FRi,$FRj,$FRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfmadds) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj))), GET_H_FR (FLD (f_FRk)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfmsubs: cfmsubs$pack $FRi,$FRj,$FRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfmsubs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj))), GET_H_FR (FLD (f_FRk)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfmadds: nfmadds$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfmadds) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj))), GET_H_FR (FLD (f_FRk)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfmsubs: nfmsubs$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfmsubs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj))), GET_H_FR (FLD (f_FRk)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fmas: fmas$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fmas) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fmss: fmss$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fmss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdmas: fdmas$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdmas) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmas.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 2)), GET_H_FR (ADDSI (FLD (f_FRj), 2)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 2), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 3)), GET_H_FR (ADDSI (FLD (f_FRj), 3)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 3), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdmss: fdmss$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdmss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmas.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 2)), GET_H_FR (ADDSI (FLD (f_FRj), 2)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 2), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 3)), GET_H_FR (ADDSI (FLD (f_FRj), 3)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 3), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfdmas: nfdmas$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfdmas) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmas.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 1));
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 2));
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 3));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 2)), GET_H_FR (ADDSI (FLD (f_FRj), 2)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 2), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 3)), GET_H_FR (ADDSI (FLD (f_FRj), 3)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 3), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfdmss: nfdmss$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfdmss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmas.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 1));
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 2));
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 3));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 2)), GET_H_FR (ADDSI (FLD (f_FRj), 2)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 2), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 3)), GET_H_FR (ADDSI (FLD (f_FRj), 3)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 3), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfmas: cfmas$pack $FRi,$FRj,$FRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfmas) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmas.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cfmss: cfmss$pack $FRi,$FRj,$FRk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cfmss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cfmas.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fmad: fmad$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fmad) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->ftruncdfsf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->fextsfdf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR (FLD (f_FRi))), CGEN_CPU_FPU (current_cpu)->ops->fextsfdf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR (FLD (f_FRj)))));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->ftruncdfsf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->fextsfdf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR (ADDSI (FLD (f_FRi), 1))), CGEN_CPU_FPU (current_cpu)->ops->fextsfdf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR (ADDSI (FLD (f_FRj), 1)))));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fmsd: fmsd$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fmsd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->ftruncdfsf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->fextsfdf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR (FLD (f_FRi))), CGEN_CPU_FPU (current_cpu)->ops->fextsfdf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR (FLD (f_FRj)))));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->ftruncdfsf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, CGEN_CPU_FPU (current_cpu)->ops->subdf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->fextsfdf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR (ADDSI (FLD (f_FRi), 1))), CGEN_CPU_FPU (current_cpu)->ops->fextsfdf (CGEN_CPU_FPU (current_cpu), FPCONV_DEFAULT, GET_H_FR (ADDSI (FLD (f_FRj), 1)))));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfmas: nfmas$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfmas) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 1));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfmss: nfmss$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfmss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 1));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdadds: fdadds$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdadds) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdsubs: fdsubs$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdsubs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdmuls: fdmuls$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdmuls) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fddivs: fddivs$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fddivs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->divsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->divsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdsads: fdsads$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdsads) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fdmulcs: fdmulcs$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fdmulcs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfdmulcs: nfdmulcs$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfdmulcs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 1));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfdadds: nfdadds$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfdadds) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 1));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfdsubs: nfdsubs$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfdsubs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 1));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfdmuls: nfdmuls$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfdmuls) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 1));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfddivs: nfddivs$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfddivs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->divsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 1));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->divsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfdsads: nfdsads$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfdsads) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_fdmadds.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 1));
|
|
{
|
|
SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)));
|
|
sim_queue_fn_sf_write (current_cpu, frvbf_h_fr_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* nfdcmps: nfdcmps$pack $FRi,$FRj,$FCCi_2 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,nfdcmps) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_nfdcmps.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);
|
|
|
|
{
|
|
frvbf_set_ne_index (current_cpu, FLD (f_FRk));
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)))) {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)))) {
|
|
{
|
|
UQI opval = 8;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (FLD (f_FRi)), GET_H_FR (FLD (f_FRj)))) {
|
|
{
|
|
UQI opval = 4;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 1;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCi_2)]), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
frvbf_set_ne_index (current_cpu, ADDSI (FLD (f_FRk), 1));
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)))) {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCi_2), 1)]), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)))) {
|
|
{
|
|
UQI opval = 8;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCi_2), 1)]), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FR (ADDSI (FLD (f_FRi), 1)), GET_H_FR (ADDSI (FLD (f_FRj), 1)))) {
|
|
{
|
|
UQI opval = 4;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCi_2), 1)]), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 1;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCi_2), 1)]), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mhsetlos: mhsetlos$pack $u12,$FRklo */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mhsetlos) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mhsetlos.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);
|
|
|
|
{
|
|
UHI opval = FLD (f_u12);
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mhsethis: mhsethis$pack $u12,$FRkhi */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mhsethis) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mhsethis.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);
|
|
|
|
{
|
|
UHI opval = FLD (f_u12);
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mhdsets: mhdsets$pack $u12,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mhdsets) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mhdsets.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 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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = FLD (f_u12);
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = FLD (f_u12);
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mhsetloh: mhsetloh$pack $s5,$FRklo */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mhsetloh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mhsetloh.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);
|
|
|
|
{
|
|
HI tmp_tmp;
|
|
tmp_tmp = GET_H_FR_LO (FLD (f_FRk));
|
|
tmp_tmp = ANDHI (tmp_tmp, 2047);
|
|
tmp_tmp = ORHI (tmp_tmp, SLLSI (ANDSI (FLD (f_s5), 31), 11));
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mhsethih: mhsethih$pack $s5,$FRkhi */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mhsethih) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mhsethih.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);
|
|
|
|
{
|
|
HI tmp_tmp;
|
|
tmp_tmp = GET_H_FR_HI (FLD (f_FRk));
|
|
tmp_tmp = ANDHI (tmp_tmp, 2047);
|
|
tmp_tmp = ORHI (tmp_tmp, SLLSI (ANDSI (FLD (f_s5), 31), 11));
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mhdseth: mhdseth$pack $s5,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mhdseth) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mhdseth.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 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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
HI tmp_tmp;
|
|
tmp_tmp = GET_H_FR_HI (ADDSI (FLD (f_FRk), 0));
|
|
tmp_tmp = ANDHI (tmp_tmp, 2047);
|
|
tmp_tmp = ORHI (tmp_tmp, SLLSI (ANDSI (FLD (f_s5), 31), 11));
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
{
|
|
HI tmp_tmp;
|
|
tmp_tmp = GET_H_FR_LO (ADDSI (FLD (f_FRk), 0));
|
|
tmp_tmp = ANDHI (tmp_tmp, 2047);
|
|
tmp_tmp = ORHI (tmp_tmp, SLLSI (ANDSI (FLD (f_s5), 31), 11));
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mand: mand$pack $FRinti,$FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mand) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mwcut.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 opval = ANDSI (GET_H_FR_INT (FLD (f_FRi)), GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mor: mor$pack $FRinti,$FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mor) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mwcut.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 opval = ORSI (GET_H_FR_INT (FLD (f_FRi)), GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mxor: mxor$pack $FRinti,$FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mxor) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mwcut.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 opval = XORSI (GET_H_FR_INT (FLD (f_FRi)), GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmand: cmand$pack $FRinti,$FRintj,$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmand) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmand.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = ANDSI (GET_H_FR_INT (FLD (f_FRi)), GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmor: cmor$pack $FRinti,$FRintj,$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmor) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmand.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = ORSI (GET_H_FR_INT (FLD (f_FRi)), GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmxor: cmxor$pack $FRinti,$FRintj,$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmxor) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmand.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = XORSI (GET_H_FR_INT (FLD (f_FRi)), GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mnot: mnot$pack $FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mnot) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mcut.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 opval = INVSI (GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmnot: cmnot$pack $FRintj,$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmnot) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmand.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
SI opval = INVSI (GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 3);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mrotli: mrotli$pack $FRinti,$u6,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mrotli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mwcuti.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 opval = ROLSI (GET_H_FR_INT (FLD (f_FRi)), ANDSI (FLD (f_u6), 31));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mrotri: mrotri$pack $FRinti,$u6,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mrotri) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mwcuti.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 opval = RORSI (GET_H_FR_INT (FLD (f_FRi)), ANDSI (FLD (f_u6), 31));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mwcut: mwcut$pack $FRinti,$FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mwcut) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mwcut.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 opval = frvbf_cut (current_cpu, GET_H_FR_INT (FLD (f_FRi)), GET_H_FR_INT (ADDSI (FLD (f_FRi), 1)), GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mwcuti: mwcuti$pack $FRinti,$u6,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mwcuti) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mwcuti.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 opval = frvbf_cut (current_cpu, GET_H_FR_INT (FLD (f_FRi)), GET_H_FR_INT (ADDSI (FLD (f_FRi), 1)), FLD (f_u6));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mcut: mcut$pack $ACC40Si,$FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mcut) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mcut.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 opval = frvbf_media_cut (current_cpu, GET_H_ACC40S (FLD (f_ACC40Si)), GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mcuti: mcuti$pack $ACC40Si,$s6,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mcuti) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mcuti.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 opval = frvbf_media_cut (current_cpu, GET_H_ACC40S (FLD (f_ACC40Si)), FLD (f_s6));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mcutss: mcutss$pack $ACC40Si,$FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mcutss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mcut.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 opval = frvbf_media_cut_ss (current_cpu, GET_H_ACC40S (FLD (f_ACC40Si)), GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mcutssi: mcutssi$pack $ACC40Si,$s6,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mcutssi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mcuti.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 opval = frvbf_media_cut_ss (current_cpu, GET_H_ACC40S (FLD (f_ACC40Si)), FLD (f_s6));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mdcutssi: mdcutssi$pack $ACC40Si,$s6,$FRintkeven */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mdcutssi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mdcutssi.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 (ANDSI (FLD (f_ACC40Si), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ANDSI (FLD (f_FRk), SUBSI (2, 1))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
{
|
|
SI opval = frvbf_media_cut_ss (current_cpu, GET_H_ACC40S (FLD (f_ACC40Si)), FLD (f_s6));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = frvbf_media_cut_ss (current_cpu, GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 1)), FLD (f_s6));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* maveh: maveh$pack $FRinti,$FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,maveh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mwcut.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 opval = frvbf_media_average (current_cpu, GET_H_FR_INT (FLD (f_FRi)), GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* msllhi: msllhi$pack $FRinti,$u6,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,msllhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_msllhi.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 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);
|
|
CGEN_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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = SLLHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), ANDSI (FLD (f_u6), 15));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = SLLHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), ANDSI (FLD (f_u6), 15));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* msrlhi: msrlhi$pack $FRinti,$u6,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,msrlhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_msllhi.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 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);
|
|
CGEN_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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = SRLHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), ANDSI (FLD (f_u6), 15));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = SRLHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), ANDSI (FLD (f_u6), 15));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* msrahi: msrahi$pack $FRinti,$u6,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,msrahi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_msllhi.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 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);
|
|
CGEN_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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = SRAHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), ANDSI (FLD (f_u6), 15));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = SRAHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), ANDSI (FLD (f_u6), 15));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mdrotli: mdrotli$pack $FRintieven,$s6,$FRintkeven */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mdrotli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mdrotli.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 = ROLSI (GET_H_FR_INT (FLD (f_FRi)), ANDSI (FLD (f_s6), 31));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
USI opval = ROLSI (GET_H_FR_INT (ADDSI (FLD (f_FRi), 1)), ANDSI (FLD (f_s6), 31));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mcplhi: mcplhi$pack $FRinti,$u6,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mcplhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mcplhi.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);
|
|
|
|
{
|
|
HI tmp_arg1;
|
|
HI tmp_arg2;
|
|
HI tmp_shift;
|
|
{
|
|
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);
|
|
CGEN_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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
tmp_shift = ANDSI (FLD (f_u6), 15);
|
|
tmp_arg1 = SLLHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), tmp_shift);
|
|
if (NEHI (tmp_shift, 0)) {
|
|
{
|
|
tmp_arg2 = GET_H_FR_HI (ADDSI (FLD (f_FRi), 1));
|
|
tmp_arg2 = SRLHI (SLLHI (tmp_arg2, SUBSI (15, tmp_shift)), SUBSI (15, tmp_shift));
|
|
tmp_arg1 = ORHI (tmp_arg1, tmp_arg2);
|
|
}
|
|
}
|
|
{
|
|
UHI opval = tmp_arg1;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mcpli: mcpli$pack $FRinti,$u6,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mcpli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mwcuti.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_tmp;
|
|
SI tmp_shift;
|
|
tmp_shift = ANDSI (FLD (f_u6), 31);
|
|
tmp_tmp = SLLSI (GET_H_FR_INT (FLD (f_FRi)), tmp_shift);
|
|
if (NESI (tmp_shift, 0)) {
|
|
{
|
|
SI tmp_tmp1;
|
|
tmp_tmp1 = SRLSI (SLLSI (GET_H_FR_INT (ADDSI (FLD (f_FRi), 1)), SUBSI (31, tmp_shift)), SUBSI (31, tmp_shift));
|
|
tmp_tmp = ORSI (tmp_tmp, tmp_tmp1);
|
|
}
|
|
}
|
|
{
|
|
SI opval = tmp_tmp;
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* msaths: msaths$pack $FRinti,$FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,msaths) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmaddhss.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);
|
|
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
if (GTHI (tmp_argihi, tmp_argjhi)) {
|
|
{
|
|
UHI opval = tmp_argjhi;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTHI (tmp_argihi, INVHI (tmp_argjhi))) {
|
|
{
|
|
UHI opval = INVHI (tmp_argjhi);
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_argihi;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
if (GTHI (tmp_argilo, tmp_argjlo)) {
|
|
{
|
|
UHI opval = tmp_argjlo;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTHI (tmp_argilo, INVHI (tmp_argjlo))) {
|
|
{
|
|
UHI opval = INVHI (tmp_argjlo);
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_argilo;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqsaths: mqsaths$pack $FRintieven,$FRintjeven,$FRintkeven */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqsaths) (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_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
if (GTHI (tmp_argihi, tmp_argjhi)) {
|
|
{
|
|
UHI opval = tmp_argjhi;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTHI (tmp_argihi, INVHI (tmp_argjhi))) {
|
|
{
|
|
UHI opval = INVHI (tmp_argjhi);
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_argihi;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
if (GTHI (tmp_argilo, tmp_argjlo)) {
|
|
{
|
|
UHI opval = tmp_argjlo;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTHI (tmp_argilo, INVHI (tmp_argjlo))) {
|
|
{
|
|
UHI opval = INVHI (tmp_argjlo);
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_argilo;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
if (GTHI (tmp_argihi, tmp_argjhi)) {
|
|
{
|
|
UHI opval = tmp_argjhi;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTHI (tmp_argihi, INVHI (tmp_argjhi))) {
|
|
{
|
|
UHI opval = INVHI (tmp_argjhi);
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_argihi;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
if (GTHI (tmp_argilo, tmp_argjlo)) {
|
|
{
|
|
UHI opval = tmp_argjlo;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTHI (tmp_argilo, INVHI (tmp_argjlo))) {
|
|
{
|
|
UHI opval = INVHI (tmp_argjlo);
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_argilo;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* msathu: msathu$pack $FRinti,$FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,msathu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmaddhss.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);
|
|
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
if (GTUHI (tmp_argihi, tmp_argjhi)) {
|
|
{
|
|
UHI opval = tmp_argjhi;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_argihi;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
if (GTUHI (tmp_argilo, tmp_argjlo)) {
|
|
{
|
|
UHI opval = tmp_argjlo;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_argilo;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mcmpsh: mcmpsh$pack $FRinti,$FRintj,$FCCk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mcmpsh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mcmpsh.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 (ANDSI (FLD (f_FCCk), SUBSI (2, 1))) {
|
|
frvbf_media_cr_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
if (GTHI (tmp_argihi, tmp_argjhi)) {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCk)]), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (EQHI (tmp_argihi, tmp_argjhi)) {
|
|
{
|
|
UQI opval = 8;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCk)]), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTHI (tmp_argihi, tmp_argjhi)) {
|
|
{
|
|
UQI opval = 4;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCk)]), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 1;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCk)]), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (GTHI (tmp_argilo, tmp_argjlo)) {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCk), 1)]), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (EQHI (tmp_argilo, tmp_argjlo)) {
|
|
{
|
|
UQI opval = 8;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCk), 1)]), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTHI (tmp_argilo, tmp_argjlo)) {
|
|
{
|
|
UQI opval = 4;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCk), 1)]), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 1;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCk), 1)]), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mcmpuh: mcmpuh$pack $FRinti,$FRintj,$FCCk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mcmpuh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mcmpsh.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 (ANDSI (FLD (f_FCCk), SUBSI (2, 1))) {
|
|
frvbf_media_cr_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
if (GTUHI (tmp_argihi, tmp_argjhi)) {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCk)]), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (EQHI (tmp_argihi, tmp_argjhi)) {
|
|
{
|
|
UQI opval = 8;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCk)]), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTUHI (tmp_argihi, tmp_argjhi)) {
|
|
{
|
|
UQI opval = 4;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCk)]), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 1;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[FLD (f_FCCk)]), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (GTUHI (tmp_argilo, tmp_argjlo)) {
|
|
{
|
|
UQI opval = 2;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCk), 1)]), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (EQHI (tmp_argilo, tmp_argjlo)) {
|
|
{
|
|
UQI opval = 8;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCk), 1)]), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
if (LTUHI (tmp_argilo, tmp_argjlo)) {
|
|
{
|
|
UQI opval = 4;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCk), 1)]), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
} else {
|
|
{
|
|
UQI opval = 1;
|
|
sim_queue_qi_write (current_cpu, & CPU (h_fccr[ADDSI (FLD (f_FCCk), 1)]), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fccr", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mabshs: mabshs$pack $FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mabshs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mabshs.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);
|
|
|
|
{
|
|
HI tmp_arghi;
|
|
HI tmp_arglo;
|
|
{
|
|
SI opval = frv_ref_SI (GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRj), opval);
|
|
CGEN_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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
tmp_arghi = GET_H_FR_HI (ADDSI (FLD (f_FRj), 0));
|
|
tmp_arglo = GET_H_FR_LO (ADDSI (FLD (f_FRj), 0));
|
|
if (GTDI (ABSDI (EXTHIDI (tmp_arghi)), 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (ABSDI (EXTHIDI (tmp_arghi)), -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = ABSDI (EXTHIDI (tmp_arghi));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
if (GTDI (ABSDI (EXTHIDI (tmp_arglo)), 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (ABSDI (EXTHIDI (tmp_arglo)), -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = ABSDI (EXTHIDI (tmp_arglo));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* maddhss: maddhss$pack $FRinti,$FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,maddhss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmaddhss.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);
|
|
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* maddhus: maddhus$pack $FRinti,$FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,maddhus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmaddhss.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);
|
|
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* msubhss: msubhss$pack $FRinti,$FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,msubhss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmaddhss.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);
|
|
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* msubhus: msubhus$pack $FRinti,$FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,msubhus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmaddhss.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);
|
|
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmaddhss: cmaddhss$pack $FRinti,$FRintj,$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmaddhss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmaddhss.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmaddhus: cmaddhus$pack $FRinti,$FRintj,$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmaddhus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmaddhss.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmsubhss: cmsubhss$pack $FRinti,$FRintj,$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmsubhss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmaddhss.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmsubhus: cmsubhus$pack $FRinti,$FRintj,$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmsubhus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmaddhss.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqaddhss: mqaddhss$pack $FRintieven,$FRintjeven,$FRintkeven */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqaddhss) (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_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqaddhus: mqaddhus$pack $FRintieven,$FRintjeven,$FRintkeven */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqaddhus) (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 {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqsubhss: mqsubhss$pack $FRintieven,$FRintjeven,$FRintkeven */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqsubhss) (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_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqsubhus: mqsubhus$pack $FRintieven,$FRintjeven,$FRintkeven */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqsubhus) (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 {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmqaddhss: cmqaddhss$pack $FRintieven,$FRintjeven,$FRintkeven,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmqaddhss) (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 {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
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 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmqaddhus: cmqaddhus$pack $FRintieven,$FRintjeven,$FRintkeven,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmqaddhus) (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 {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
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 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmqsubhss: cmqsubhss$pack $FRintieven,$FRintjeven,$FRintkeven,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmqsubhss) (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 {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
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 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 32767)) {
|
|
{
|
|
{
|
|
UHI opval = 32767;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, -32768)) {
|
|
{
|
|
{
|
|
UHI opval = -32768;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmqsubhus: cmqsubhus$pack $FRintieven,$FRintjeven,$FRintkeven,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmqsubhus) (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 {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
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 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
if (GTDI (tmp_tmp, 65535)) {
|
|
{
|
|
{
|
|
UHI opval = 65535;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, 0)) {
|
|
{
|
|
{
|
|
UHI opval = 0;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
tmp_a1 = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_a2 = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_b1 = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_b2 = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
tmp_a3 = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_a4 = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_b3 = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_b4 = ADDHI (GET_H_FR_LO (ADDSI (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, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_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, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_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, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_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, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
tmp_a1 = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_a2 = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_b1 = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_b2 = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
tmp_a3 = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_a4 = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_b3 = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_b4 = ADDHI (GET_H_FR_LO (ADDSI (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, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_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, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 17);
|
|
CGEN_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, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_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, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_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);
|
|
CGEN_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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = SLLHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), ANDSI (FLD (f_u6), 15));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = SLLHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), ANDSI (FLD (f_u6), 15));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = SLLHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), ANDSI (FLD (f_u6), 15));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = SLLHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), ANDSI (FLD (f_u6), 15));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_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);
|
|
CGEN_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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = SRAHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), ANDSI (FLD (f_u6), 15));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = SRAHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), ANDSI (FLD (f_u6), 15));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = SRAHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), ANDSI (FLD (f_u6), 15));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = SRAHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), ANDSI (FLD (f_u6), 15));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* maddaccs: maddaccs$pack $ACC40Si,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,maddaccs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mdasaccs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Si))) {
|
|
if (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Si), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (FLD (f_ACC40Si)), GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 1)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, INVDI (MAKEDI (127, 0xffffffff)))) {
|
|
{
|
|
{
|
|
DI opval = INVDI (MAKEDI (127, 0xffffffff));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* msubaccs: msubaccs$pack $ACC40Si,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,msubaccs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mdasaccs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Si))) {
|
|
if (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Si), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (GET_H_ACC40S (FLD (f_ACC40Si)), GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 1)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, INVDI (MAKEDI (127, 0xffffffff)))) {
|
|
{
|
|
{
|
|
DI opval = INVDI (MAKEDI (127, 0xffffffff));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mdaddaccs: mdaddaccs$pack $ACC40Si,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mdaddaccs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mdasaccs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Si))) {
|
|
if (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Si), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (FLD (f_ACC40Si)), GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 1)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, INVDI (MAKEDI (127, 0xffffffff)))) {
|
|
{
|
|
{
|
|
DI opval = INVDI (MAKEDI (127, 0xffffffff));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 2)), GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 3)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, INVDI (MAKEDI (127, 0xffffffff)))) {
|
|
{
|
|
{
|
|
DI opval = INVDI (MAKEDI (127, 0xffffffff));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mdsubaccs: mdsubaccs$pack $ACC40Si,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mdsubaccs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mdasaccs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Si))) {
|
|
if (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Si), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (GET_H_ACC40S (FLD (f_ACC40Si)), GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 1)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, INVDI (MAKEDI (127, 0xffffffff)))) {
|
|
{
|
|
{
|
|
DI opval = INVDI (MAKEDI (127, 0xffffffff));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 2)), GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 3)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, INVDI (MAKEDI (127, 0xffffffff)))) {
|
|
{
|
|
{
|
|
DI opval = INVDI (MAKEDI (127, 0xffffffff));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* masaccs: masaccs$pack $ACC40Si,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,masaccs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mdasaccs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Si))) {
|
|
if (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Si), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (FLD (f_ACC40Si)), GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 1)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, INVDI (MAKEDI (127, 0xffffffff)))) {
|
|
{
|
|
{
|
|
DI opval = INVDI (MAKEDI (127, 0xffffffff));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 4);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (GET_H_ACC40S (FLD (f_ACC40Si)), GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 1)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, INVDI (MAKEDI (127, 0xffffffff)))) {
|
|
{
|
|
{
|
|
DI opval = INVDI (MAKEDI (127, 0xffffffff));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 5);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mdasaccs: mdasaccs$pack $ACC40Si,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mdasaccs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mdasaccs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Si))) {
|
|
if (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Si), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (FLD (f_ACC40Si)), GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 1)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, INVDI (MAKEDI (127, 0xffffffff)))) {
|
|
{
|
|
{
|
|
DI opval = INVDI (MAKEDI (127, 0xffffffff));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (GET_H_ACC40S (FLD (f_ACC40Si)), GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 1)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, INVDI (MAKEDI (127, 0xffffffff)))) {
|
|
{
|
|
{
|
|
DI opval = INVDI (MAKEDI (127, 0xffffffff));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 2)), GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 3)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, INVDI (MAKEDI (127, 0xffffffff)))) {
|
|
{
|
|
{
|
|
DI opval = INVDI (MAKEDI (127, 0xffffffff));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 2)), GET_H_ACC40S (ADDSI (FLD (f_ACC40Si), 3)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, INVDI (MAKEDI (127, 0xffffffff)))) {
|
|
{
|
|
{
|
|
DI opval = INVDI (MAKEDI (127, 0xffffffff));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mmulhs: mmulhs$pack $FRinti,$FRintj,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mmulhs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mmulhu: mmulhu$pack $FRinti,$FRintj,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mmulhu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mmulxhs: mmulxhs$pack $FRinti,$FRintj,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mmulxhs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mmulxhu: mmulxhu$pack $FRinti,$FRintj,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mmulxhu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmmulhs: cmmulhs$pack $FRinti,$FRintj,$ACC40Sk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmmulhs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmmulhu: cmmulhu$pack $FRinti,$FRintj,$ACC40Sk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmmulhu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqmulhs: mqmulhs$pack $FRintieven,$FRintjeven,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqmulhs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqmulhu: mqmulhu$pack $FRintieven,$FRintjeven,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqmulhu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqmulxhs: mqmulxhs$pack $FRintieven,$FRintjeven,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqmulxhs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqmulxhu: mqmulxhu$pack $FRintieven,$FRintjeven,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqmulxhu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmqmulhs: cmqmulhs$pack $FRintieven,$FRintjeven,$ACC40Sk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmqmulhs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmqmulhu: cmqmulhu$pack $FRintieven,$FRintjeven,$ACC40Sk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmqmulhu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
{
|
|
DI opval = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mmachs: mmachs$pack $FRinti,$FRintj,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mmachs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (FLD (f_ACC40Sk)), MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 1)), MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mmachu: mmachu$pack $FRinti,$FRintj,$ACC40Uk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mmachu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachu.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Uk))) {
|
|
if (ANDSI (FLD (f_ACC40Uk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40U (FLD (f_ACC40Uk)), MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, FLD (f_ACC40Uk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, FLD (f_ACC40Uk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UDI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, FLD (f_ACC40Uk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40U (ADDSI (FLD (f_ACC40Uk), 1)), MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UDI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mmrdhs: mmrdhs$pack $FRinti,$FRintj,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mmrdhs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (GET_H_ACC40S (FLD (f_ACC40Sk)), MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 1)), MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mmrdhu: mmrdhu$pack $FRinti,$FRintj,$ACC40Uk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mmrdhu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachu.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Uk))) {
|
|
if (ANDSI (FLD (f_ACC40Uk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (GET_H_ACC40U (FLD (f_ACC40Uk)), MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, FLD (f_ACC40Uk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, FLD (f_ACC40Uk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UDI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, FLD (f_ACC40Uk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = SUBDI (GET_H_ACC40U (ADDSI (FLD (f_ACC40Uk), 1)), MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UDI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmmachs: cmmachs$pack $FRinti,$FRintj,$ACC40Sk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmmachs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (FLD (f_ACC40Sk)), MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 1)), MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmmachu: cmmachu$pack $FRinti,$FRintj,$ACC40Uk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmmachu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachu.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Uk))) {
|
|
if (ANDSI (FLD (f_ACC40Uk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40U (FLD (f_ACC40Uk)), MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, FLD (f_ACC40Uk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, FLD (f_ACC40Uk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UDI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, FLD (f_ACC40Uk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40U (ADDSI (FLD (f_ACC40Uk), 1)), MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UDI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqmachs: mqmachs$pack $FRintieven,$FRintjeven,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqmachs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (FLD (f_ACC40Sk)), MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 1)), MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 2)), MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 3)), MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqmachu: mqmachu$pack $FRintieven,$FRintjeven,$ACC40Uk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqmachu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachu.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Uk))) {
|
|
if (ANDSI (FLD (f_ACC40Uk), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40U (FLD (f_ACC40Uk)), MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, FLD (f_ACC40Uk), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, FLD (f_ACC40Uk), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UDI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, FLD (f_ACC40Uk), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40U (ADDSI (FLD (f_ACC40Uk), 1)), MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UDI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40U (ADDSI (FLD (f_ACC40Uk), 2)), MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 2), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 2), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
UDI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 2), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40U (ADDSI (FLD (f_ACC40Uk), 3)), MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 3), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 3), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
UDI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 3), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmqmachs: cmqmachs$pack $FRintieven,$FRintjeven,$ACC40Sk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmqmachs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (FLD (f_ACC40Sk)), MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 1)), MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 2)), MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 21);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 21);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 21);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 3)), MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 22);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 22);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 22);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmqmachu: cmqmachu$pack $FRintieven,$FRintjeven,$ACC40Uk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmqmachu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachu.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Uk))) {
|
|
if (ANDSI (FLD (f_ACC40Uk), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40U (FLD (f_ACC40Uk)), MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, FLD (f_ACC40Uk), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, FLD (f_ACC40Uk), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
UDI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, FLD (f_ACC40Uk), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40U (ADDSI (FLD (f_ACC40Uk), 1)), MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
UDI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 1), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40U (ADDSI (FLD (f_ACC40Uk), 2)), MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 2), opval);
|
|
written |= (1 << 21);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 2), opval);
|
|
written |= (1 << 21);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
UDI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 2), opval);
|
|
written |= (1 << 21);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40U (ADDSI (FLD (f_ACC40Uk), 3)), MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 3), opval);
|
|
written |= (1 << 22);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
UDI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 3), opval);
|
|
written |= (1 << 22);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
UDI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40U_set, ADDSI (FLD (f_ACC40Uk), 3), opval);
|
|
written |= (1 << 22);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40U", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqxmachs: mqxmachs$pack $FRintieven,$FRintjeven,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqxmachs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 2)), MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 3)), MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (FLD (f_ACC40Sk)), MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 1)), MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqxmacxhs: mqxmacxhs$pack $FRintieven,$FRintjeven,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqxmacxhs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 2)), MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 3)), MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (FLD (f_ACC40Sk)), MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 1)), MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqmacxhs: mqmacxhs$pack $FRintieven,$FRintjeven,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqmacxhs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (4, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (FLD (f_ACC40Sk)), MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 1)), MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 2)), MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjlo)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 2);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 2), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
DI tmp_tmp;
|
|
tmp_tmp = ADDDI (GET_H_ACC40S (ADDSI (FLD (f_ACC40Sk), 3)), MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjhi)));
|
|
if (GTDI (tmp_tmp, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 1);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 3), opval);
|
|
written |= (1 << 20);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mcpxrs: mcpxrs$pack $FRinti,$FRintj,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mcpxrs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
tmp_tmp2 = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
tmp_tmp1 = SUBDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mcpxru: mcpxru$pack $FRinti,$FRintj,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mcpxru) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
tmp_tmp2 = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
tmp_tmp1 = SUBDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mcpxis: mcpxis$pack $FRinti,$FRintj,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mcpxis) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjlo));
|
|
tmp_tmp2 = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjhi));
|
|
tmp_tmp1 = ADDDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mcpxiu: mcpxiu$pack $FRinti,$FRintj,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mcpxiu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjlo));
|
|
tmp_tmp2 = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjhi));
|
|
tmp_tmp1 = ADDDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmcpxrs: cmcpxrs$pack $FRinti,$FRintj,$ACC40Sk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmcpxrs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
tmp_tmp2 = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
tmp_tmp1 = SUBDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmcpxru: cmcpxru$pack $FRinti,$FRintj,$ACC40Sk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmcpxru) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
tmp_tmp2 = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
tmp_tmp1 = SUBDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmcpxis: cmcpxis$pack $FRinti,$FRintj,$ACC40Sk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmcpxis) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjlo));
|
|
tmp_tmp2 = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjhi));
|
|
tmp_tmp1 = ADDDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmcpxiu: cmcpxiu$pack $FRinti,$FRintj,$ACC40Sk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmcpxiu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
if (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjlo));
|
|
tmp_tmp2 = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjhi));
|
|
tmp_tmp1 = ADDDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqcpxrs: mqcpxrs$pack $FRintieven,$FRintjeven,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqcpxrs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
tmp_tmp2 = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
tmp_tmp1 = SUBDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjhi));
|
|
tmp_tmp2 = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjlo));
|
|
tmp_tmp1 = SUBDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqcpxru: mqcpxru$pack $FRintieven,$FRintjeven,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqcpxru) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
tmp_tmp2 = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
tmp_tmp1 = SUBDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjhi));
|
|
tmp_tmp2 = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjlo));
|
|
tmp_tmp1 = SUBDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqcpxis: mqcpxis$pack $FRintieven,$FRintjeven,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqcpxis) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
HI tmp_argihi;
|
|
HI tmp_argilo;
|
|
HI tmp_argjhi;
|
|
HI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjlo));
|
|
tmp_tmp2 = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjhi));
|
|
tmp_tmp1 = ADDDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (EXTHIDI (tmp_argihi), EXTHIDI (tmp_argjlo));
|
|
tmp_tmp2 = MULDI (EXTHIDI (tmp_argilo), EXTHIDI (tmp_argjhi));
|
|
tmp_tmp1 = ADDDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (127, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (127, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0xffffff80, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0xffffff80, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mqcpxiu: mqcpxiu$pack $FRintieven,$FRintjeven,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mqcpxiu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmqmachs.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 (frvbf_check_acc_range (current_cpu, FLD (f_ACC40Sk))) {
|
|
if (ANDSI (FLD (f_ACC40Sk), SUBSI (2, 1))) {
|
|
frvbf_media_acc_not_aligned (current_cpu);
|
|
} else {
|
|
if (ORIF (ANDSI (FLD (f_FRi), SUBSI (2, 1)), ANDSI (FLD (f_FRj), SUBSI (2, 1)))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
UHI tmp_argihi;
|
|
UHI tmp_argilo;
|
|
UHI tmp_argjhi;
|
|
UHI tmp_argjlo;
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 0)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 0)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjlo));
|
|
tmp_tmp2 = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjhi));
|
|
tmp_tmp1 = ADDDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 8);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
tmp_argihi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argilo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRi), 1)), MULSI (GET_H_FR_INT (FLD (f_FRi)), 0));
|
|
tmp_argjhi = ADDHI (GET_H_FR_HI (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
tmp_argjlo = ADDHI (GET_H_FR_LO (ADDSI (FLD (f_FRj), 1)), MULSI (GET_H_FR_INT (FLD (f_FRj)), 0));
|
|
}
|
|
{
|
|
DI tmp_tmp1;
|
|
DI tmp_tmp2;
|
|
tmp_tmp1 = MULDI (ZEXTHIDI (tmp_argihi), ZEXTHIDI (tmp_argjlo));
|
|
tmp_tmp2 = MULDI (ZEXTHIDI (tmp_argilo), ZEXTHIDI (tmp_argjhi));
|
|
tmp_tmp1 = ADDDI (tmp_tmp1, tmp_tmp2);
|
|
if (GTDI (tmp_tmp1, MAKEDI (255, 0xffffffff))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (255, 0xffffffff);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
if (LTDI (tmp_tmp1, MAKEDI (0, 0))) {
|
|
{
|
|
{
|
|
DI opval = MAKEDI (0, 0);
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
frvbf_media_overflow (current_cpu, 4);
|
|
}
|
|
} else {
|
|
{
|
|
DI opval = tmp_tmp1;
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, ADDSI (FLD (f_ACC40Sk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mexpdhw: mexpdhw$pack $FRinti,$u6,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mexpdhw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmexpdhw.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);
|
|
|
|
{
|
|
UHI tmp_tmp;
|
|
if (ANDSI (FLD (f_u6), 1)) {
|
|
tmp_tmp = GET_H_FR_LO (ADDSI (FLD (f_FRi), 0));
|
|
} else {
|
|
tmp_tmp = GET_H_FR_HI (ADDSI (FLD (f_FRi), 0));
|
|
}
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmexpdhw: cmexpdhw$pack $FRinti,$u6,$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmexpdhw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmexpdhw.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 (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
UHI tmp_tmp;
|
|
if (ANDSI (FLD (f_u6), 1)) {
|
|
tmp_tmp = GET_H_FR_LO (ADDSI (FLD (f_FRi), 0));
|
|
} else {
|
|
tmp_tmp = GET_H_FR_HI (ADDSI (FLD (f_FRi), 0));
|
|
}
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mexpdhd: mexpdhd$pack $FRinti,$u6,$FRintkeven */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mexpdhd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmexpdhd.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 (ANDSI (FLD (f_FRk), SUBSI (2, 1))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
UHI tmp_tmp;
|
|
{
|
|
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 << 6);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
if (ANDSI (FLD (f_u6), 1)) {
|
|
tmp_tmp = GET_H_FR_LO (ADDSI (FLD (f_FRi), 0));
|
|
} else {
|
|
tmp_tmp = GET_H_FR_HI (ADDSI (FLD (f_FRi), 0));
|
|
}
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmexpdhd: cmexpdhd$pack $FRinti,$u6,$FRintkeven,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmexpdhd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmexpdhd.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 (ANDSI (FLD (f_FRk), SUBSI (2, 1))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
UHI tmp_tmp;
|
|
{
|
|
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 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
if (ANDSI (FLD (f_u6), 1)) {
|
|
tmp_tmp = GET_H_FR_LO (ADDSI (FLD (f_FRi), 0));
|
|
} else {
|
|
tmp_tmp = GET_H_FR_HI (ADDSI (FLD (f_FRi), 0));
|
|
}
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = tmp_tmp;
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mpackh: mpackh$pack $FRinti,$FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mpackh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmaddhss.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);
|
|
|
|
{
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRi), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mdpackh: mdpackh$pack $FRintieven,$FRintjeven,$FRintkeven */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mdpackh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mdpackh.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 {
|
|
{
|
|
{
|
|
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 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
SI opval = frv_ref_SI (GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRj), opval);
|
|
written |= (1 << 11);
|
|
CGEN_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 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRi), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
{
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRi), 1));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRj), 1));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* munpackh: munpackh$pack $FRinti,$FRintkeven */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,munpackh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_munpackh.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 (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 << 6);
|
|
CGEN_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 << 7);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
{
|
|
UHI opval = GET_H_FR_HI (ADDSI (FLD (f_FRi), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 8);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_HI (ADDSI (FLD (f_FRi), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRi), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), ADDSI (0, 1)), opval);
|
|
written |= (1 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRi), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), ADDSI (0, 1)), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mdunpackh: mdunpackh$pack $FRintieven,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mdunpackh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mdunpackh.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 (4, 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 << 8);
|
|
CGEN_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 << 9);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
{
|
|
{
|
|
UHI opval = GET_H_FR_HI (ADDSI (FLD (f_FRi), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_HI (ADDSI (FLD (f_FRi), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRi), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), ADDSI (0, 1)), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRi), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), ADDSI (0, 1)), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
{
|
|
{
|
|
UHI opval = GET_H_FR_HI (ADDSI (FLD (f_FRi), 1));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 2), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_HI (ADDSI (FLD (f_FRi), 1));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 2), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRi), 1));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), ADDSI (2, 1)), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRi), 1));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), ADDSI (2, 1)), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mbtoh: mbtoh$pack $FRintj,$FRintkeven */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mbtoh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmbtoh.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 opval = frv_ref_SI (GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRj), opval);
|
|
CGEN_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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
if (ANDSI (FLD (f_FRk), SUBSI (2, 1))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
{
|
|
UHI opval = GET_H_FR_3 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_2 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_1 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_0 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmbtoh: cmbtoh$pack $FRintj,$FRintkeven,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmbtoh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmbtoh.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 opval = frv_ref_SI (GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRj), opval);
|
|
CGEN_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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
if (ANDSI (FLD (f_FRk), SUBSI (2, 1))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
{
|
|
UHI opval = GET_H_FR_3 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_2 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_1 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_0 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mhtob: mhtob$pack $FRintjeven,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mhtob) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmhtob.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 opval = frv_ref_SI (GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRj), opval);
|
|
CGEN_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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
if (ANDSI (FLD (f_FRj), SUBSI (2, 1))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
{
|
|
UHI opval = GET_H_FR_HI (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_3_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_3", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_2_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_2", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_HI (ADDSI (FLD (f_FRj), 1));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_1_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_1", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRj), 1));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_0_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_0", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmhtob: cmhtob$pack $FRintjeven,$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmhtob) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmhtob.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 opval = frv_ref_SI (GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRj), opval);
|
|
CGEN_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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
if (ANDSI (FLD (f_FRj), SUBSI (2, 1))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
{
|
|
UHI opval = GET_H_FR_HI (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_3_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_3", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_2_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_2", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_HI (ADDSI (FLD (f_FRj), 1));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_1_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_1", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_LO (ADDSI (FLD (f_FRj), 1));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_0_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_0", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mbtohe: mbtohe$pack $FRintj,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mbtohe) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmbtohe.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 opval = frv_ref_SI (GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRj), opval);
|
|
CGEN_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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
if (ANDSI (FLD (f_FRk), SUBSI (4, 1))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
{
|
|
{
|
|
UHI opval = GET_H_FR_3 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 10);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_3 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_2 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 11);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_2 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_1 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 2), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_1 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 2), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_0 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 3), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_0 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 3), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* cmbtohe: cmbtohe$pack $FRintj,$FRintk,$CCi,$cond */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,cmbtohe) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmbtohe.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 opval = frv_ref_SI (GET_H_FR_INT (FLD (f_FRj)));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRj), opval);
|
|
CGEN_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);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
if (ANDSI (FLD (f_FRk), SUBSI (4, 1))) {
|
|
frvbf_media_register_not_aligned (current_cpu);
|
|
} else {
|
|
if (EQQI (CPU (h_cccr[FLD (f_CCi)]), ORSI (FLD (f_cond), 2))) {
|
|
{
|
|
{
|
|
UHI opval = GET_H_FR_3 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 12);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_3 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 0), opval);
|
|
written |= (1 << 16);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_2 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 13);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_2 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 1), opval);
|
|
written |= (1 << 17);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_1 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 2), opval);
|
|
written |= (1 << 14);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_1 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 2), opval);
|
|
written |= (1 << 18);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_0 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_hi_set, ADDSI (FLD (f_FRk), 3), opval);
|
|
written |= (1 << 15);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_hi", 'x', opval);
|
|
}
|
|
{
|
|
UHI opval = GET_H_FR_0 (ADDSI (FLD (f_FRj), 0));
|
|
sim_queue_fn_hi_write (current_cpu, frvbf_h_fr_lo_set, ADDSI (FLD (f_FRk), 3), opval);
|
|
written |= (1 << 19);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_lo", 'x', opval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
abuf->written = written;
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mnop: mnop$pack */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mnop) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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
|
|
}
|
|
|
|
/* mclracc-0: mclracc$pack $ACC40Sk,$A0 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mclracc_0) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mdasaccs.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);
|
|
|
|
frvbf_clear_accumulators (current_cpu, FLD (f_ACC40Sk), 0);
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mclracc-1: mclracc$pack $ACC40Sk,$A1 */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mclracc_1) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mdasaccs.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);
|
|
|
|
frvbf_clear_accumulators (current_cpu, FLD (f_ACC40Sk), 1);
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mrdacc: mrdacc$pack $ACC40Si,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mrdacc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mcuti.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 opval = GET_H_ACC40S (FLD (f_ACC40Si));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mrdaccg: mrdaccg$pack $ACCGi,$FRintk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mrdaccg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mrdaccg.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 opval = GET_H_ACCG (FLD (f_ACCGi));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_fr_int_set, FLD (f_FRk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "fr_int", 'x', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mwtacc: mwtacc$pack $FRinti,$ACC40Sk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mwtacc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_cmmachs.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);
|
|
|
|
{
|
|
DI opval = ORDI (ANDDI (GET_H_ACC40S (FLD (f_ACC40Sk)), MAKEDI (0xffffffff, 0)), GET_H_FR_INT (FLD (f_FRi)));
|
|
sim_queue_fn_di_write (current_cpu, frvbf_h_acc40S_set, FLD (f_ACC40Sk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "acc40S", 'D', opval);
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mwtaccg: mwtaccg$pack $FRinti,$ACCGk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mwtaccg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_mwtaccg.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);
|
|
|
|
{
|
|
frv_ref_SI (GET_H_ACCG (FLD (f_ACCGk)));
|
|
{
|
|
USI opval = GET_H_FR_INT (FLD (f_FRi));
|
|
sim_queue_fn_si_write (current_cpu, frvbf_h_accg_set, FLD (f_ACCGk), opval);
|
|
CGEN_TRACE_RESULT (current_cpu, abuf, "accg", 'x', opval);
|
|
}
|
|
}
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mcop1: mcop1$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mcop1) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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);
|
|
|
|
frvbf_media_cop (current_cpu, 1);
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* mcop2: mcop2$pack $FRi,$FRj,$FRk */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,mcop2) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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);
|
|
|
|
frvbf_media_cop (current_cpu, 2);
|
|
|
|
return vpc;
|
|
#undef FLD
|
|
}
|
|
|
|
/* fnop: fnop$pack */
|
|
|
|
static SEM_PC
|
|
SEM_FN_NAME (frvbf,fnop) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
|
|
{
|
|
#define FLD(f) abuf->fields.sfmt_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
|
|
}
|
|
|
|
/* Table of all semantic fns. */
|
|
|
|
static const struct sem_fn_desc sem_fns[] = {
|
|
{ FRVBF_INSN_X_INVALID, SEM_FN_NAME (frvbf,x_invalid) },
|
|
{ FRVBF_INSN_X_AFTER, SEM_FN_NAME (frvbf,x_after) },
|
|
{ FRVBF_INSN_X_BEFORE, SEM_FN_NAME (frvbf,x_before) },
|
|
{ FRVBF_INSN_X_CTI_CHAIN, SEM_FN_NAME (frvbf,x_cti_chain) },
|
|
{ FRVBF_INSN_X_CHAIN, SEM_FN_NAME (frvbf,x_chain) },
|
|
{ FRVBF_INSN_X_BEGIN, SEM_FN_NAME (frvbf,x_begin) },
|
|
{ FRVBF_INSN_ADD, SEM_FN_NAME (frvbf,add) },
|
|
{ FRVBF_INSN_SUB, SEM_FN_NAME (frvbf,sub) },
|
|
{ FRVBF_INSN_AND, SEM_FN_NAME (frvbf,and) },
|
|
{ FRVBF_INSN_OR, SEM_FN_NAME (frvbf,or) },
|
|
{ FRVBF_INSN_XOR, SEM_FN_NAME (frvbf,xor) },
|
|
{ FRVBF_INSN_NOT, SEM_FN_NAME (frvbf,not) },
|
|
{ FRVBF_INSN_SDIV, SEM_FN_NAME (frvbf,sdiv) },
|
|
{ FRVBF_INSN_NSDIV, SEM_FN_NAME (frvbf,nsdiv) },
|
|
{ FRVBF_INSN_UDIV, SEM_FN_NAME (frvbf,udiv) },
|
|
{ FRVBF_INSN_NUDIV, SEM_FN_NAME (frvbf,nudiv) },
|
|
{ FRVBF_INSN_SMUL, SEM_FN_NAME (frvbf,smul) },
|
|
{ FRVBF_INSN_UMUL, SEM_FN_NAME (frvbf,umul) },
|
|
{ FRVBF_INSN_SMU, SEM_FN_NAME (frvbf,smu) },
|
|
{ FRVBF_INSN_SMASS, SEM_FN_NAME (frvbf,smass) },
|
|
{ FRVBF_INSN_SMSSS, SEM_FN_NAME (frvbf,smsss) },
|
|
{ FRVBF_INSN_SLL, SEM_FN_NAME (frvbf,sll) },
|
|
{ FRVBF_INSN_SRL, SEM_FN_NAME (frvbf,srl) },
|
|
{ FRVBF_INSN_SRA, SEM_FN_NAME (frvbf,sra) },
|
|
{ FRVBF_INSN_SLASS, SEM_FN_NAME (frvbf,slass) },
|
|
{ FRVBF_INSN_SCUTSS, SEM_FN_NAME (frvbf,scutss) },
|
|
{ FRVBF_INSN_SCAN, SEM_FN_NAME (frvbf,scan) },
|
|
{ FRVBF_INSN_CADD, SEM_FN_NAME (frvbf,cadd) },
|
|
{ FRVBF_INSN_CSUB, SEM_FN_NAME (frvbf,csub) },
|
|
{ FRVBF_INSN_CAND, SEM_FN_NAME (frvbf,cand) },
|
|
{ FRVBF_INSN_COR, SEM_FN_NAME (frvbf,cor) },
|
|
{ FRVBF_INSN_CXOR, SEM_FN_NAME (frvbf,cxor) },
|
|
{ FRVBF_INSN_CNOT, SEM_FN_NAME (frvbf,cnot) },
|
|
{ FRVBF_INSN_CSMUL, SEM_FN_NAME (frvbf,csmul) },
|
|
{ FRVBF_INSN_CSDIV, SEM_FN_NAME (frvbf,csdiv) },
|
|
{ FRVBF_INSN_CUDIV, SEM_FN_NAME (frvbf,cudiv) },
|
|
{ FRVBF_INSN_CSLL, SEM_FN_NAME (frvbf,csll) },
|
|
{ FRVBF_INSN_CSRL, SEM_FN_NAME (frvbf,csrl) },
|
|
{ FRVBF_INSN_CSRA, SEM_FN_NAME (frvbf,csra) },
|
|
{ FRVBF_INSN_CSCAN, SEM_FN_NAME (frvbf,cscan) },
|
|
{ FRVBF_INSN_ADDCC, SEM_FN_NAME (frvbf,addcc) },
|
|
{ FRVBF_INSN_SUBCC, SEM_FN_NAME (frvbf,subcc) },
|
|
{ FRVBF_INSN_ANDCC, SEM_FN_NAME (frvbf,andcc) },
|
|
{ FRVBF_INSN_ORCC, SEM_FN_NAME (frvbf,orcc) },
|
|
{ FRVBF_INSN_XORCC, SEM_FN_NAME (frvbf,xorcc) },
|
|
{ FRVBF_INSN_SLLCC, SEM_FN_NAME (frvbf,sllcc) },
|
|
{ FRVBF_INSN_SRLCC, SEM_FN_NAME (frvbf,srlcc) },
|
|
{ FRVBF_INSN_SRACC, SEM_FN_NAME (frvbf,sracc) },
|
|
{ FRVBF_INSN_SMULCC, SEM_FN_NAME (frvbf,smulcc) },
|
|
{ FRVBF_INSN_UMULCC, SEM_FN_NAME (frvbf,umulcc) },
|
|
{ FRVBF_INSN_CADDCC, SEM_FN_NAME (frvbf,caddcc) },
|
|
{ FRVBF_INSN_CSUBCC, SEM_FN_NAME (frvbf,csubcc) },
|
|
{ FRVBF_INSN_CSMULCC, SEM_FN_NAME (frvbf,csmulcc) },
|
|
{ FRVBF_INSN_CANDCC, SEM_FN_NAME (frvbf,candcc) },
|
|
{ FRVBF_INSN_CORCC, SEM_FN_NAME (frvbf,corcc) },
|
|
{ FRVBF_INSN_CXORCC, SEM_FN_NAME (frvbf,cxorcc) },
|
|
{ FRVBF_INSN_CSLLCC, SEM_FN_NAME (frvbf,csllcc) },
|
|
{ FRVBF_INSN_CSRLCC, SEM_FN_NAME (frvbf,csrlcc) },
|
|
{ FRVBF_INSN_CSRACC, SEM_FN_NAME (frvbf,csracc) },
|
|
{ FRVBF_INSN_ADDX, SEM_FN_NAME (frvbf,addx) },
|
|
{ FRVBF_INSN_SUBX, SEM_FN_NAME (frvbf,subx) },
|
|
{ FRVBF_INSN_ADDXCC, SEM_FN_NAME (frvbf,addxcc) },
|
|
{ FRVBF_INSN_SUBXCC, SEM_FN_NAME (frvbf,subxcc) },
|
|
{ FRVBF_INSN_ADDSS, SEM_FN_NAME (frvbf,addss) },
|
|
{ FRVBF_INSN_SUBSS, SEM_FN_NAME (frvbf,subss) },
|
|
{ FRVBF_INSN_ADDI, SEM_FN_NAME (frvbf,addi) },
|
|
{ FRVBF_INSN_SUBI, SEM_FN_NAME (frvbf,subi) },
|
|
{ FRVBF_INSN_ANDI, SEM_FN_NAME (frvbf,andi) },
|
|
{ FRVBF_INSN_ORI, SEM_FN_NAME (frvbf,ori) },
|
|
{ FRVBF_INSN_XORI, SEM_FN_NAME (frvbf,xori) },
|
|
{ FRVBF_INSN_SDIVI, SEM_FN_NAME (frvbf,sdivi) },
|
|
{ FRVBF_INSN_NSDIVI, SEM_FN_NAME (frvbf,nsdivi) },
|
|
{ FRVBF_INSN_UDIVI, SEM_FN_NAME (frvbf,udivi) },
|
|
{ FRVBF_INSN_NUDIVI, SEM_FN_NAME (frvbf,nudivi) },
|
|
{ FRVBF_INSN_SMULI, SEM_FN_NAME (frvbf,smuli) },
|
|
{ FRVBF_INSN_UMULI, SEM_FN_NAME (frvbf,umuli) },
|
|
{ FRVBF_INSN_SLLI, SEM_FN_NAME (frvbf,slli) },
|
|
{ FRVBF_INSN_SRLI, SEM_FN_NAME (frvbf,srli) },
|
|
{ FRVBF_INSN_SRAI, SEM_FN_NAME (frvbf,srai) },
|
|
{ FRVBF_INSN_SCANI, SEM_FN_NAME (frvbf,scani) },
|
|
{ FRVBF_INSN_ADDICC, SEM_FN_NAME (frvbf,addicc) },
|
|
{ FRVBF_INSN_SUBICC, SEM_FN_NAME (frvbf,subicc) },
|
|
{ FRVBF_INSN_ANDICC, SEM_FN_NAME (frvbf,andicc) },
|
|
{ FRVBF_INSN_ORICC, SEM_FN_NAME (frvbf,oricc) },
|
|
{ FRVBF_INSN_XORICC, SEM_FN_NAME (frvbf,xoricc) },
|
|
{ FRVBF_INSN_SMULICC, SEM_FN_NAME (frvbf,smulicc) },
|
|
{ FRVBF_INSN_UMULICC, SEM_FN_NAME (frvbf,umulicc) },
|
|
{ FRVBF_INSN_SLLICC, SEM_FN_NAME (frvbf,sllicc) },
|
|
{ FRVBF_INSN_SRLICC, SEM_FN_NAME (frvbf,srlicc) },
|
|
{ FRVBF_INSN_SRAICC, SEM_FN_NAME (frvbf,sraicc) },
|
|
{ FRVBF_INSN_ADDXI, SEM_FN_NAME (frvbf,addxi) },
|
|
{ FRVBF_INSN_SUBXI, SEM_FN_NAME (frvbf,subxi) },
|
|
{ FRVBF_INSN_ADDXICC, SEM_FN_NAME (frvbf,addxicc) },
|
|
{ FRVBF_INSN_SUBXICC, SEM_FN_NAME (frvbf,subxicc) },
|
|
{ FRVBF_INSN_CMPB, SEM_FN_NAME (frvbf,cmpb) },
|
|
{ FRVBF_INSN_CMPBA, SEM_FN_NAME (frvbf,cmpba) },
|
|
{ FRVBF_INSN_SETLO, SEM_FN_NAME (frvbf,setlo) },
|
|
{ FRVBF_INSN_SETHI, SEM_FN_NAME (frvbf,sethi) },
|
|
{ FRVBF_INSN_SETLOS, SEM_FN_NAME (frvbf,setlos) },
|
|
{ FRVBF_INSN_LDSB, SEM_FN_NAME (frvbf,ldsb) },
|
|
{ FRVBF_INSN_LDUB, SEM_FN_NAME (frvbf,ldub) },
|
|
{ FRVBF_INSN_LDSH, SEM_FN_NAME (frvbf,ldsh) },
|
|
{ FRVBF_INSN_LDUH, SEM_FN_NAME (frvbf,lduh) },
|
|
{ FRVBF_INSN_LD, SEM_FN_NAME (frvbf,ld) },
|
|
{ FRVBF_INSN_LDBF, SEM_FN_NAME (frvbf,ldbf) },
|
|
{ FRVBF_INSN_LDHF, SEM_FN_NAME (frvbf,ldhf) },
|
|
{ FRVBF_INSN_LDF, SEM_FN_NAME (frvbf,ldf) },
|
|
{ FRVBF_INSN_LDC, SEM_FN_NAME (frvbf,ldc) },
|
|
{ FRVBF_INSN_NLDSB, SEM_FN_NAME (frvbf,nldsb) },
|
|
{ FRVBF_INSN_NLDUB, SEM_FN_NAME (frvbf,nldub) },
|
|
{ FRVBF_INSN_NLDSH, SEM_FN_NAME (frvbf,nldsh) },
|
|
{ FRVBF_INSN_NLDUH, SEM_FN_NAME (frvbf,nlduh) },
|
|
{ FRVBF_INSN_NLD, SEM_FN_NAME (frvbf,nld) },
|
|
{ FRVBF_INSN_NLDBF, SEM_FN_NAME (frvbf,nldbf) },
|
|
{ FRVBF_INSN_NLDHF, SEM_FN_NAME (frvbf,nldhf) },
|
|
{ FRVBF_INSN_NLDF, SEM_FN_NAME (frvbf,nldf) },
|
|
{ FRVBF_INSN_LDD, SEM_FN_NAME (frvbf,ldd) },
|
|
{ FRVBF_INSN_LDDF, SEM_FN_NAME (frvbf,lddf) },
|
|
{ FRVBF_INSN_LDDC, SEM_FN_NAME (frvbf,lddc) },
|
|
{ FRVBF_INSN_NLDD, SEM_FN_NAME (frvbf,nldd) },
|
|
{ FRVBF_INSN_NLDDF, SEM_FN_NAME (frvbf,nlddf) },
|
|
{ FRVBF_INSN_LDQ, SEM_FN_NAME (frvbf,ldq) },
|
|
{ FRVBF_INSN_LDQF, SEM_FN_NAME (frvbf,ldqf) },
|
|
{ FRVBF_INSN_LDQC, SEM_FN_NAME (frvbf,ldqc) },
|
|
{ FRVBF_INSN_NLDQ, SEM_FN_NAME (frvbf,nldq) },
|
|
{ FRVBF_INSN_NLDQF, SEM_FN_NAME (frvbf,nldqf) },
|
|
{ FRVBF_INSN_LDSBU, SEM_FN_NAME (frvbf,ldsbu) },
|
|
{ FRVBF_INSN_LDUBU, SEM_FN_NAME (frvbf,ldubu) },
|
|
{ FRVBF_INSN_LDSHU, SEM_FN_NAME (frvbf,ldshu) },
|
|
{ FRVBF_INSN_LDUHU, SEM_FN_NAME (frvbf,lduhu) },
|
|
{ FRVBF_INSN_LDU, SEM_FN_NAME (frvbf,ldu) },
|
|
{ FRVBF_INSN_NLDSBU, SEM_FN_NAME (frvbf,nldsbu) },
|
|
{ FRVBF_INSN_NLDUBU, SEM_FN_NAME (frvbf,nldubu) },
|
|
{ FRVBF_INSN_NLDSHU, SEM_FN_NAME (frvbf,nldshu) },
|
|
{ FRVBF_INSN_NLDUHU, SEM_FN_NAME (frvbf,nlduhu) },
|
|
{ FRVBF_INSN_NLDU, SEM_FN_NAME (frvbf,nldu) },
|
|
{ FRVBF_INSN_LDBFU, SEM_FN_NAME (frvbf,ldbfu) },
|
|
{ FRVBF_INSN_LDHFU, SEM_FN_NAME (frvbf,ldhfu) },
|
|
{ FRVBF_INSN_LDFU, SEM_FN_NAME (frvbf,ldfu) },
|
|
{ FRVBF_INSN_LDCU, SEM_FN_NAME (frvbf,ldcu) },
|
|
{ FRVBF_INSN_NLDBFU, SEM_FN_NAME (frvbf,nldbfu) },
|
|
{ FRVBF_INSN_NLDHFU, SEM_FN_NAME (frvbf,nldhfu) },
|
|
{ FRVBF_INSN_NLDFU, SEM_FN_NAME (frvbf,nldfu) },
|
|
{ FRVBF_INSN_LDDU, SEM_FN_NAME (frvbf,lddu) },
|
|
{ FRVBF_INSN_NLDDU, SEM_FN_NAME (frvbf,nlddu) },
|
|
{ FRVBF_INSN_LDDFU, SEM_FN_NAME (frvbf,lddfu) },
|
|
{ FRVBF_INSN_LDDCU, SEM_FN_NAME (frvbf,lddcu) },
|
|
{ FRVBF_INSN_NLDDFU, SEM_FN_NAME (frvbf,nlddfu) },
|
|
{ FRVBF_INSN_LDQU, SEM_FN_NAME (frvbf,ldqu) },
|
|
{ FRVBF_INSN_NLDQU, SEM_FN_NAME (frvbf,nldqu) },
|
|
{ FRVBF_INSN_LDQFU, SEM_FN_NAME (frvbf,ldqfu) },
|
|
{ FRVBF_INSN_LDQCU, SEM_FN_NAME (frvbf,ldqcu) },
|
|
{ FRVBF_INSN_NLDQFU, SEM_FN_NAME (frvbf,nldqfu) },
|
|
{ FRVBF_INSN_LDSBI, SEM_FN_NAME (frvbf,ldsbi) },
|
|
{ FRVBF_INSN_LDSHI, SEM_FN_NAME (frvbf,ldshi) },
|
|
{ FRVBF_INSN_LDI, SEM_FN_NAME (frvbf,ldi) },
|
|
{ FRVBF_INSN_LDUBI, SEM_FN_NAME (frvbf,ldubi) },
|
|
{ FRVBF_INSN_LDUHI, SEM_FN_NAME (frvbf,lduhi) },
|
|
{ FRVBF_INSN_LDBFI, SEM_FN_NAME (frvbf,ldbfi) },
|
|
{ FRVBF_INSN_LDHFI, SEM_FN_NAME (frvbf,ldhfi) },
|
|
{ FRVBF_INSN_LDFI, SEM_FN_NAME (frvbf,ldfi) },
|
|
{ FRVBF_INSN_NLDSBI, SEM_FN_NAME (frvbf,nldsbi) },
|
|
{ FRVBF_INSN_NLDUBI, SEM_FN_NAME (frvbf,nldubi) },
|
|
{ FRVBF_INSN_NLDSHI, SEM_FN_NAME (frvbf,nldshi) },
|
|
{ FRVBF_INSN_NLDUHI, SEM_FN_NAME (frvbf,nlduhi) },
|
|
{ FRVBF_INSN_NLDI, SEM_FN_NAME (frvbf,nldi) },
|
|
{ FRVBF_INSN_NLDBFI, SEM_FN_NAME (frvbf,nldbfi) },
|
|
{ FRVBF_INSN_NLDHFI, SEM_FN_NAME (frvbf,nldhfi) },
|
|
{ FRVBF_INSN_NLDFI, SEM_FN_NAME (frvbf,nldfi) },
|
|
{ FRVBF_INSN_LDDI, SEM_FN_NAME (frvbf,lddi) },
|
|
{ FRVBF_INSN_LDDFI, SEM_FN_NAME (frvbf,lddfi) },
|
|
{ FRVBF_INSN_NLDDI, SEM_FN_NAME (frvbf,nlddi) },
|
|
{ FRVBF_INSN_NLDDFI, SEM_FN_NAME (frvbf,nlddfi) },
|
|
{ FRVBF_INSN_LDQI, SEM_FN_NAME (frvbf,ldqi) },
|
|
{ FRVBF_INSN_LDQFI, SEM_FN_NAME (frvbf,ldqfi) },
|
|
{ FRVBF_INSN_NLDQFI, SEM_FN_NAME (frvbf,nldqfi) },
|
|
{ FRVBF_INSN_STB, SEM_FN_NAME (frvbf,stb) },
|
|
{ FRVBF_INSN_STH, SEM_FN_NAME (frvbf,sth) },
|
|
{ FRVBF_INSN_ST, SEM_FN_NAME (frvbf,st) },
|
|
{ FRVBF_INSN_STBF, SEM_FN_NAME (frvbf,stbf) },
|
|
{ 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_STD, SEM_FN_NAME (frvbf,std) },
|
|
{ FRVBF_INSN_STDF, SEM_FN_NAME (frvbf,stdf) },
|
|
{ FRVBF_INSN_STDC, SEM_FN_NAME (frvbf,stdc) },
|
|
{ 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_STBU, SEM_FN_NAME (frvbf,stbu) },
|
|
{ FRVBF_INSN_STHU, SEM_FN_NAME (frvbf,sthu) },
|
|
{ FRVBF_INSN_STU, SEM_FN_NAME (frvbf,stu) },
|
|
{ FRVBF_INSN_STBFU, SEM_FN_NAME (frvbf,stbfu) },
|
|
{ FRVBF_INSN_STHFU, SEM_FN_NAME (frvbf,sthfu) },
|
|
{ FRVBF_INSN_STFU, SEM_FN_NAME (frvbf,stfu) },
|
|
{ FRVBF_INSN_STCU, SEM_FN_NAME (frvbf,stcu) },
|
|
{ FRVBF_INSN_STDU, SEM_FN_NAME (frvbf,stdu) },
|
|
{ FRVBF_INSN_STDFU, SEM_FN_NAME (frvbf,stdfu) },
|
|
{ FRVBF_INSN_STDCU, SEM_FN_NAME (frvbf,stdcu) },
|
|
{ FRVBF_INSN_STQU, SEM_FN_NAME (frvbf,stqu) },
|
|
{ FRVBF_INSN_STQFU, SEM_FN_NAME (frvbf,stqfu) },
|
|
{ FRVBF_INSN_STQCU, SEM_FN_NAME (frvbf,stqcu) },
|
|
{ FRVBF_INSN_CLDSB, SEM_FN_NAME (frvbf,cldsb) },
|
|
{ FRVBF_INSN_CLDUB, SEM_FN_NAME (frvbf,cldub) },
|
|
{ FRVBF_INSN_CLDSH, SEM_FN_NAME (frvbf,cldsh) },
|
|
{ FRVBF_INSN_CLDUH, SEM_FN_NAME (frvbf,clduh) },
|
|
{ FRVBF_INSN_CLD, SEM_FN_NAME (frvbf,cld) },
|
|
{ FRVBF_INSN_CLDBF, SEM_FN_NAME (frvbf,cldbf) },
|
|
{ FRVBF_INSN_CLDHF, SEM_FN_NAME (frvbf,cldhf) },
|
|
{ FRVBF_INSN_CLDF, SEM_FN_NAME (frvbf,cldf) },
|
|
{ FRVBF_INSN_CLDD, SEM_FN_NAME (frvbf,cldd) },
|
|
{ FRVBF_INSN_CLDDF, SEM_FN_NAME (frvbf,clddf) },
|
|
{ FRVBF_INSN_CLDQ, SEM_FN_NAME (frvbf,cldq) },
|
|
{ FRVBF_INSN_CLDSBU, SEM_FN_NAME (frvbf,cldsbu) },
|
|
{ FRVBF_INSN_CLDUBU, SEM_FN_NAME (frvbf,cldubu) },
|
|
{ FRVBF_INSN_CLDSHU, SEM_FN_NAME (frvbf,cldshu) },
|
|
{ FRVBF_INSN_CLDUHU, SEM_FN_NAME (frvbf,clduhu) },
|
|
{ FRVBF_INSN_CLDU, SEM_FN_NAME (frvbf,cldu) },
|
|
{ FRVBF_INSN_CLDBFU, SEM_FN_NAME (frvbf,cldbfu) },
|
|
{ FRVBF_INSN_CLDHFU, SEM_FN_NAME (frvbf,cldhfu) },
|
|
{ FRVBF_INSN_CLDFU, SEM_FN_NAME (frvbf,cldfu) },
|
|
{ FRVBF_INSN_CLDDU, SEM_FN_NAME (frvbf,clddu) },
|
|
{ FRVBF_INSN_CLDDFU, SEM_FN_NAME (frvbf,clddfu) },
|
|
{ FRVBF_INSN_CLDQU, SEM_FN_NAME (frvbf,cldqu) },
|
|
{ FRVBF_INSN_CSTB, SEM_FN_NAME (frvbf,cstb) },
|
|
{ FRVBF_INSN_CSTH, SEM_FN_NAME (frvbf,csth) },
|
|
{ FRVBF_INSN_CST, SEM_FN_NAME (frvbf,cst) },
|
|
{ FRVBF_INSN_CSTBF, SEM_FN_NAME (frvbf,cstbf) },
|
|
{ FRVBF_INSN_CSTHF, SEM_FN_NAME (frvbf,csthf) },
|
|
{ FRVBF_INSN_CSTF, SEM_FN_NAME (frvbf,cstf) },
|
|
{ FRVBF_INSN_CSTD, SEM_FN_NAME (frvbf,cstd) },
|
|
{ FRVBF_INSN_CSTDF, SEM_FN_NAME (frvbf,cstdf) },
|
|
{ FRVBF_INSN_CSTQ, SEM_FN_NAME (frvbf,cstq) },
|
|
{ FRVBF_INSN_CSTBU, SEM_FN_NAME (frvbf,cstbu) },
|
|
{ FRVBF_INSN_CSTHU, SEM_FN_NAME (frvbf,csthu) },
|
|
{ FRVBF_INSN_CSTU, SEM_FN_NAME (frvbf,cstu) },
|
|
{ FRVBF_INSN_CSTBFU, SEM_FN_NAME (frvbf,cstbfu) },
|
|
{ FRVBF_INSN_CSTHFU, SEM_FN_NAME (frvbf,csthfu) },
|
|
{ FRVBF_INSN_CSTFU, SEM_FN_NAME (frvbf,cstfu) },
|
|
{ FRVBF_INSN_CSTDU, SEM_FN_NAME (frvbf,cstdu) },
|
|
{ FRVBF_INSN_CSTDFU, SEM_FN_NAME (frvbf,cstdfu) },
|
|
{ FRVBF_INSN_STBI, SEM_FN_NAME (frvbf,stbi) },
|
|
{ FRVBF_INSN_STHI, SEM_FN_NAME (frvbf,sthi) },
|
|
{ FRVBF_INSN_STI, SEM_FN_NAME (frvbf,sti) },
|
|
{ FRVBF_INSN_STBFI, SEM_FN_NAME (frvbf,stbfi) },
|
|
{ FRVBF_INSN_STHFI, SEM_FN_NAME (frvbf,sthfi) },
|
|
{ FRVBF_INSN_STFI, SEM_FN_NAME (frvbf,stfi) },
|
|
{ FRVBF_INSN_STDI, SEM_FN_NAME (frvbf,stdi) },
|
|
{ FRVBF_INSN_STDFI, SEM_FN_NAME (frvbf,stdfi) },
|
|
{ FRVBF_INSN_STQI, SEM_FN_NAME (frvbf,stqi) },
|
|
{ FRVBF_INSN_STQFI, SEM_FN_NAME (frvbf,stqfi) },
|
|
{ FRVBF_INSN_SWAP, SEM_FN_NAME (frvbf,swap) },
|
|
{ FRVBF_INSN_SWAPI, SEM_FN_NAME (frvbf,swapi) },
|
|
{ FRVBF_INSN_CSWAP, SEM_FN_NAME (frvbf,cswap) },
|
|
{ FRVBF_INSN_MOVGF, SEM_FN_NAME (frvbf,movgf) },
|
|
{ FRVBF_INSN_MOVFG, SEM_FN_NAME (frvbf,movfg) },
|
|
{ FRVBF_INSN_MOVGFD, SEM_FN_NAME (frvbf,movgfd) },
|
|
{ FRVBF_INSN_MOVFGD, SEM_FN_NAME (frvbf,movfgd) },
|
|
{ FRVBF_INSN_MOVGFQ, SEM_FN_NAME (frvbf,movgfq) },
|
|
{ FRVBF_INSN_MOVFGQ, SEM_FN_NAME (frvbf,movfgq) },
|
|
{ FRVBF_INSN_CMOVGF, SEM_FN_NAME (frvbf,cmovgf) },
|
|
{ FRVBF_INSN_CMOVFG, SEM_FN_NAME (frvbf,cmovfg) },
|
|
{ FRVBF_INSN_CMOVGFD, SEM_FN_NAME (frvbf,cmovgfd) },
|
|
{ FRVBF_INSN_CMOVFGD, SEM_FN_NAME (frvbf,cmovfgd) },
|
|
{ FRVBF_INSN_MOVGS, SEM_FN_NAME (frvbf,movgs) },
|
|
{ FRVBF_INSN_MOVSG, SEM_FN_NAME (frvbf,movsg) },
|
|
{ FRVBF_INSN_BRA, SEM_FN_NAME (frvbf,bra) },
|
|
{ FRVBF_INSN_BNO, SEM_FN_NAME (frvbf,bno) },
|
|
{ FRVBF_INSN_BEQ, SEM_FN_NAME (frvbf,beq) },
|
|
{ FRVBF_INSN_BNE, SEM_FN_NAME (frvbf,bne) },
|
|
{ FRVBF_INSN_BLE, SEM_FN_NAME (frvbf,ble) },
|
|
{ FRVBF_INSN_BGT, SEM_FN_NAME (frvbf,bgt) },
|
|
{ FRVBF_INSN_BLT, SEM_FN_NAME (frvbf,blt) },
|
|
{ FRVBF_INSN_BGE, SEM_FN_NAME (frvbf,bge) },
|
|
{ FRVBF_INSN_BLS, SEM_FN_NAME (frvbf,bls) },
|
|
{ FRVBF_INSN_BHI, SEM_FN_NAME (frvbf,bhi) },
|
|
{ FRVBF_INSN_BC, SEM_FN_NAME (frvbf,bc) },
|
|
{ FRVBF_INSN_BNC, SEM_FN_NAME (frvbf,bnc) },
|
|
{ FRVBF_INSN_BN, SEM_FN_NAME (frvbf,bn) },
|
|
{ FRVBF_INSN_BP, SEM_FN_NAME (frvbf,bp) },
|
|
{ FRVBF_INSN_BV, SEM_FN_NAME (frvbf,bv) },
|
|
{ FRVBF_INSN_BNV, SEM_FN_NAME (frvbf,bnv) },
|
|
{ FRVBF_INSN_FBRA, SEM_FN_NAME (frvbf,fbra) },
|
|
{ FRVBF_INSN_FBNO, SEM_FN_NAME (frvbf,fbno) },
|
|
{ FRVBF_INSN_FBNE, SEM_FN_NAME (frvbf,fbne) },
|
|
{ FRVBF_INSN_FBEQ, SEM_FN_NAME (frvbf,fbeq) },
|
|
{ FRVBF_INSN_FBLG, SEM_FN_NAME (frvbf,fblg) },
|
|
{ FRVBF_INSN_FBUE, SEM_FN_NAME (frvbf,fbue) },
|
|
{ FRVBF_INSN_FBUL, SEM_FN_NAME (frvbf,fbul) },
|
|
{ FRVBF_INSN_FBGE, SEM_FN_NAME (frvbf,fbge) },
|
|
{ FRVBF_INSN_FBLT, SEM_FN_NAME (frvbf,fblt) },
|
|
{ FRVBF_INSN_FBUGE, SEM_FN_NAME (frvbf,fbuge) },
|
|
{ FRVBF_INSN_FBUG, SEM_FN_NAME (frvbf,fbug) },
|
|
{ FRVBF_INSN_FBLE, SEM_FN_NAME (frvbf,fble) },
|
|
{ FRVBF_INSN_FBGT, SEM_FN_NAME (frvbf,fbgt) },
|
|
{ FRVBF_INSN_FBULE, SEM_FN_NAME (frvbf,fbule) },
|
|
{ FRVBF_INSN_FBU, SEM_FN_NAME (frvbf,fbu) },
|
|
{ FRVBF_INSN_FBO, SEM_FN_NAME (frvbf,fbo) },
|
|
{ FRVBF_INSN_BCTRLR, SEM_FN_NAME (frvbf,bctrlr) },
|
|
{ FRVBF_INSN_BRALR, SEM_FN_NAME (frvbf,bralr) },
|
|
{ FRVBF_INSN_BNOLR, SEM_FN_NAME (frvbf,bnolr) },
|
|
{ FRVBF_INSN_BEQLR, SEM_FN_NAME (frvbf,beqlr) },
|
|
{ FRVBF_INSN_BNELR, SEM_FN_NAME (frvbf,bnelr) },
|
|
{ FRVBF_INSN_BLELR, SEM_FN_NAME (frvbf,blelr) },
|
|
{ FRVBF_INSN_BGTLR, SEM_FN_NAME (frvbf,bgtlr) },
|
|
{ FRVBF_INSN_BLTLR, SEM_FN_NAME (frvbf,bltlr) },
|
|
{ FRVBF_INSN_BGELR, SEM_FN_NAME (frvbf,bgelr) },
|
|
{ FRVBF_INSN_BLSLR, SEM_FN_NAME (frvbf,blslr) },
|
|
{ FRVBF_INSN_BHILR, SEM_FN_NAME (frvbf,bhilr) },
|
|
{ FRVBF_INSN_BCLR, SEM_FN_NAME (frvbf,bclr) },
|
|
{ FRVBF_INSN_BNCLR, SEM_FN_NAME (frvbf,bnclr) },
|
|
{ FRVBF_INSN_BNLR, SEM_FN_NAME (frvbf,bnlr) },
|
|
{ FRVBF_INSN_BPLR, SEM_FN_NAME (frvbf,bplr) },
|
|
{ FRVBF_INSN_BVLR, SEM_FN_NAME (frvbf,bvlr) },
|
|
{ FRVBF_INSN_BNVLR, SEM_FN_NAME (frvbf,bnvlr) },
|
|
{ FRVBF_INSN_FBRALR, SEM_FN_NAME (frvbf,fbralr) },
|
|
{ FRVBF_INSN_FBNOLR, SEM_FN_NAME (frvbf,fbnolr) },
|
|
{ FRVBF_INSN_FBEQLR, SEM_FN_NAME (frvbf,fbeqlr) },
|
|
{ FRVBF_INSN_FBNELR, SEM_FN_NAME (frvbf,fbnelr) },
|
|
{ FRVBF_INSN_FBLGLR, SEM_FN_NAME (frvbf,fblglr) },
|
|
{ FRVBF_INSN_FBUELR, SEM_FN_NAME (frvbf,fbuelr) },
|
|
{ FRVBF_INSN_FBULLR, SEM_FN_NAME (frvbf,fbullr) },
|
|
{ FRVBF_INSN_FBGELR, SEM_FN_NAME (frvbf,fbgelr) },
|
|
{ FRVBF_INSN_FBLTLR, SEM_FN_NAME (frvbf,fbltlr) },
|
|
{ FRVBF_INSN_FBUGELR, SEM_FN_NAME (frvbf,fbugelr) },
|
|
{ FRVBF_INSN_FBUGLR, SEM_FN_NAME (frvbf,fbuglr) },
|
|
{ FRVBF_INSN_FBLELR, SEM_FN_NAME (frvbf,fblelr) },
|
|
{ FRVBF_INSN_FBGTLR, SEM_FN_NAME (frvbf,fbgtlr) },
|
|
{ FRVBF_INSN_FBULELR, SEM_FN_NAME (frvbf,fbulelr) },
|
|
{ FRVBF_INSN_FBULR, SEM_FN_NAME (frvbf,fbulr) },
|
|
{ FRVBF_INSN_FBOLR, SEM_FN_NAME (frvbf,fbolr) },
|
|
{ FRVBF_INSN_BCRALR, SEM_FN_NAME (frvbf,bcralr) },
|
|
{ FRVBF_INSN_BCNOLR, SEM_FN_NAME (frvbf,bcnolr) },
|
|
{ FRVBF_INSN_BCEQLR, SEM_FN_NAME (frvbf,bceqlr) },
|
|
{ FRVBF_INSN_BCNELR, SEM_FN_NAME (frvbf,bcnelr) },
|
|
{ FRVBF_INSN_BCLELR, SEM_FN_NAME (frvbf,bclelr) },
|
|
{ FRVBF_INSN_BCGTLR, SEM_FN_NAME (frvbf,bcgtlr) },
|
|
{ FRVBF_INSN_BCLTLR, SEM_FN_NAME (frvbf,bcltlr) },
|
|
{ FRVBF_INSN_BCGELR, SEM_FN_NAME (frvbf,bcgelr) },
|
|
{ FRVBF_INSN_BCLSLR, SEM_FN_NAME (frvbf,bclslr) },
|
|
{ FRVBF_INSN_BCHILR, SEM_FN_NAME (frvbf,bchilr) },
|
|
{ FRVBF_INSN_BCCLR, SEM_FN_NAME (frvbf,bcclr) },
|
|
{ FRVBF_INSN_BCNCLR, SEM_FN_NAME (frvbf,bcnclr) },
|
|
{ FRVBF_INSN_BCNLR, SEM_FN_NAME (frvbf,bcnlr) },
|
|
{ FRVBF_INSN_BCPLR, SEM_FN_NAME (frvbf,bcplr) },
|
|
{ FRVBF_INSN_BCVLR, SEM_FN_NAME (frvbf,bcvlr) },
|
|
{ FRVBF_INSN_BCNVLR, SEM_FN_NAME (frvbf,bcnvlr) },
|
|
{ FRVBF_INSN_FCBRALR, SEM_FN_NAME (frvbf,fcbralr) },
|
|
{ FRVBF_INSN_FCBNOLR, SEM_FN_NAME (frvbf,fcbnolr) },
|
|
{ FRVBF_INSN_FCBEQLR, SEM_FN_NAME (frvbf,fcbeqlr) },
|
|
{ FRVBF_INSN_FCBNELR, SEM_FN_NAME (frvbf,fcbnelr) },
|
|
{ FRVBF_INSN_FCBLGLR, SEM_FN_NAME (frvbf,fcblglr) },
|
|
{ FRVBF_INSN_FCBUELR, SEM_FN_NAME (frvbf,fcbuelr) },
|
|
{ FRVBF_INSN_FCBULLR, SEM_FN_NAME (frvbf,fcbullr) },
|
|
{ FRVBF_INSN_FCBGELR, SEM_FN_NAME (frvbf,fcbgelr) },
|
|
{ FRVBF_INSN_FCBLTLR, SEM_FN_NAME (frvbf,fcbltlr) },
|
|
{ FRVBF_INSN_FCBUGELR, SEM_FN_NAME (frvbf,fcbugelr) },
|
|
{ FRVBF_INSN_FCBUGLR, SEM_FN_NAME (frvbf,fcbuglr) },
|
|
{ FRVBF_INSN_FCBLELR, SEM_FN_NAME (frvbf,fcblelr) },
|
|
{ FRVBF_INSN_FCBGTLR, SEM_FN_NAME (frvbf,fcbgtlr) },
|
|
{ FRVBF_INSN_FCBULELR, SEM_FN_NAME (frvbf,fcbulelr) },
|
|
{ FRVBF_INSN_FCBULR, SEM_FN_NAME (frvbf,fcbulr) },
|
|
{ FRVBF_INSN_FCBOLR, SEM_FN_NAME (frvbf,fcbolr) },
|
|
{ FRVBF_INSN_JMPL, SEM_FN_NAME (frvbf,jmpl) },
|
|
{ FRVBF_INSN_CALLL, SEM_FN_NAME (frvbf,calll) },
|
|
{ FRVBF_INSN_JMPIL, SEM_FN_NAME (frvbf,jmpil) },
|
|
{ FRVBF_INSN_CALLIL, SEM_FN_NAME (frvbf,callil) },
|
|
{ FRVBF_INSN_CALL, SEM_FN_NAME (frvbf,call) },
|
|
{ FRVBF_INSN_RETT, SEM_FN_NAME (frvbf,rett) },
|
|
{ FRVBF_INSN_REI, SEM_FN_NAME (frvbf,rei) },
|
|
{ FRVBF_INSN_TRA, SEM_FN_NAME (frvbf,tra) },
|
|
{ FRVBF_INSN_TNO, SEM_FN_NAME (frvbf,tno) },
|
|
{ FRVBF_INSN_TEQ, SEM_FN_NAME (frvbf,teq) },
|
|
{ FRVBF_INSN_TNE, SEM_FN_NAME (frvbf,tne) },
|
|
{ FRVBF_INSN_TLE, SEM_FN_NAME (frvbf,tle) },
|
|
{ FRVBF_INSN_TGT, SEM_FN_NAME (frvbf,tgt) },
|
|
{ FRVBF_INSN_TLT, SEM_FN_NAME (frvbf,tlt) },
|
|
{ FRVBF_INSN_TGE, SEM_FN_NAME (frvbf,tge) },
|
|
{ FRVBF_INSN_TLS, SEM_FN_NAME (frvbf,tls) },
|
|
{ FRVBF_INSN_THI, SEM_FN_NAME (frvbf,thi) },
|
|
{ FRVBF_INSN_TC, SEM_FN_NAME (frvbf,tc) },
|
|
{ FRVBF_INSN_TNC, SEM_FN_NAME (frvbf,tnc) },
|
|
{ FRVBF_INSN_TN, SEM_FN_NAME (frvbf,tn) },
|
|
{ FRVBF_INSN_TP, SEM_FN_NAME (frvbf,tp) },
|
|
{ FRVBF_INSN_TV, SEM_FN_NAME (frvbf,tv) },
|
|
{ FRVBF_INSN_TNV, SEM_FN_NAME (frvbf,tnv) },
|
|
{ FRVBF_INSN_FTRA, SEM_FN_NAME (frvbf,ftra) },
|
|
{ FRVBF_INSN_FTNO, SEM_FN_NAME (frvbf,ftno) },
|
|
{ FRVBF_INSN_FTNE, SEM_FN_NAME (frvbf,ftne) },
|
|
{ FRVBF_INSN_FTEQ, SEM_FN_NAME (frvbf,fteq) },
|
|
{ FRVBF_INSN_FTLG, SEM_FN_NAME (frvbf,ftlg) },
|
|
{ FRVBF_INSN_FTUE, SEM_FN_NAME (frvbf,ftue) },
|
|
{ FRVBF_INSN_FTUL, SEM_FN_NAME (frvbf,ftul) },
|
|
{ FRVBF_INSN_FTGE, SEM_FN_NAME (frvbf,ftge) },
|
|
{ FRVBF_INSN_FTLT, SEM_FN_NAME (frvbf,ftlt) },
|
|
{ FRVBF_INSN_FTUGE, SEM_FN_NAME (frvbf,ftuge) },
|
|
{ FRVBF_INSN_FTUG, SEM_FN_NAME (frvbf,ftug) },
|
|
{ FRVBF_INSN_FTLE, SEM_FN_NAME (frvbf,ftle) },
|
|
{ FRVBF_INSN_FTGT, SEM_FN_NAME (frvbf,ftgt) },
|
|
{ FRVBF_INSN_FTULE, SEM_FN_NAME (frvbf,ftule) },
|
|
{ FRVBF_INSN_FTU, SEM_FN_NAME (frvbf,ftu) },
|
|
{ FRVBF_INSN_FTO, SEM_FN_NAME (frvbf,fto) },
|
|
{ FRVBF_INSN_TIRA, SEM_FN_NAME (frvbf,tira) },
|
|
{ FRVBF_INSN_TINO, SEM_FN_NAME (frvbf,tino) },
|
|
{ FRVBF_INSN_TIEQ, SEM_FN_NAME (frvbf,tieq) },
|
|
{ FRVBF_INSN_TINE, SEM_FN_NAME (frvbf,tine) },
|
|
{ FRVBF_INSN_TILE, SEM_FN_NAME (frvbf,tile) },
|
|
{ FRVBF_INSN_TIGT, SEM_FN_NAME (frvbf,tigt) },
|
|
{ FRVBF_INSN_TILT, SEM_FN_NAME (frvbf,tilt) },
|
|
{ FRVBF_INSN_TIGE, SEM_FN_NAME (frvbf,tige) },
|
|
{ FRVBF_INSN_TILS, SEM_FN_NAME (frvbf,tils) },
|
|
{ FRVBF_INSN_TIHI, SEM_FN_NAME (frvbf,tihi) },
|
|
{ FRVBF_INSN_TIC, SEM_FN_NAME (frvbf,tic) },
|
|
{ FRVBF_INSN_TINC, SEM_FN_NAME (frvbf,tinc) },
|
|
{ FRVBF_INSN_TIN, SEM_FN_NAME (frvbf,tin) },
|
|
{ FRVBF_INSN_TIP, SEM_FN_NAME (frvbf,tip) },
|
|
{ FRVBF_INSN_TIV, SEM_FN_NAME (frvbf,tiv) },
|
|
{ FRVBF_INSN_TINV, SEM_FN_NAME (frvbf,tinv) },
|
|
{ FRVBF_INSN_FTIRA, SEM_FN_NAME (frvbf,ftira) },
|
|
{ FRVBF_INSN_FTINO, SEM_FN_NAME (frvbf,ftino) },
|
|
{ FRVBF_INSN_FTINE, SEM_FN_NAME (frvbf,ftine) },
|
|
{ FRVBF_INSN_FTIEQ, SEM_FN_NAME (frvbf,ftieq) },
|
|
{ FRVBF_INSN_FTILG, SEM_FN_NAME (frvbf,ftilg) },
|
|
{ FRVBF_INSN_FTIUE, SEM_FN_NAME (frvbf,ftiue) },
|
|
{ FRVBF_INSN_FTIUL, SEM_FN_NAME (frvbf,ftiul) },
|
|
{ FRVBF_INSN_FTIGE, SEM_FN_NAME (frvbf,ftige) },
|
|
{ FRVBF_INSN_FTILT, SEM_FN_NAME (frvbf,ftilt) },
|
|
{ FRVBF_INSN_FTIUGE, SEM_FN_NAME (frvbf,ftiuge) },
|
|
{ FRVBF_INSN_FTIUG, SEM_FN_NAME (frvbf,ftiug) },
|
|
{ FRVBF_INSN_FTILE, SEM_FN_NAME (frvbf,ftile) },
|
|
{ FRVBF_INSN_FTIGT, SEM_FN_NAME (frvbf,ftigt) },
|
|
{ FRVBF_INSN_FTIULE, SEM_FN_NAME (frvbf,ftiule) },
|
|
{ FRVBF_INSN_FTIU, SEM_FN_NAME (frvbf,ftiu) },
|
|
{ FRVBF_INSN_FTIO, SEM_FN_NAME (frvbf,ftio) },
|
|
{ FRVBF_INSN_BREAK, SEM_FN_NAME (frvbf,break) },
|
|
{ FRVBF_INSN_MTRAP, SEM_FN_NAME (frvbf,mtrap) },
|
|
{ FRVBF_INSN_ANDCR, SEM_FN_NAME (frvbf,andcr) },
|
|
{ FRVBF_INSN_ORCR, SEM_FN_NAME (frvbf,orcr) },
|
|
{ FRVBF_INSN_XORCR, SEM_FN_NAME (frvbf,xorcr) },
|
|
{ FRVBF_INSN_NANDCR, SEM_FN_NAME (frvbf,nandcr) },
|
|
{ FRVBF_INSN_NORCR, SEM_FN_NAME (frvbf,norcr) },
|
|
{ FRVBF_INSN_ANDNCR, SEM_FN_NAME (frvbf,andncr) },
|
|
{ FRVBF_INSN_ORNCR, SEM_FN_NAME (frvbf,orncr) },
|
|
{ FRVBF_INSN_NANDNCR, SEM_FN_NAME (frvbf,nandncr) },
|
|
{ FRVBF_INSN_NORNCR, SEM_FN_NAME (frvbf,norncr) },
|
|
{ FRVBF_INSN_NOTCR, SEM_FN_NAME (frvbf,notcr) },
|
|
{ FRVBF_INSN_CKRA, SEM_FN_NAME (frvbf,ckra) },
|
|
{ FRVBF_INSN_CKNO, SEM_FN_NAME (frvbf,ckno) },
|
|
{ FRVBF_INSN_CKEQ, SEM_FN_NAME (frvbf,ckeq) },
|
|
{ FRVBF_INSN_CKNE, SEM_FN_NAME (frvbf,ckne) },
|
|
{ FRVBF_INSN_CKLE, SEM_FN_NAME (frvbf,ckle) },
|
|
{ FRVBF_INSN_CKGT, SEM_FN_NAME (frvbf,ckgt) },
|
|
{ FRVBF_INSN_CKLT, SEM_FN_NAME (frvbf,cklt) },
|
|
{ FRVBF_INSN_CKGE, SEM_FN_NAME (frvbf,ckge) },
|
|
{ FRVBF_INSN_CKLS, SEM_FN_NAME (frvbf,ckls) },
|
|
{ FRVBF_INSN_CKHI, SEM_FN_NAME (frvbf,ckhi) },
|
|
{ FRVBF_INSN_CKC, SEM_FN_NAME (frvbf,ckc) },
|
|
{ FRVBF_INSN_CKNC, SEM_FN_NAME (frvbf,cknc) },
|
|
{ FRVBF_INSN_CKN, SEM_FN_NAME (frvbf,ckn) },
|
|
{ FRVBF_INSN_CKP, SEM_FN_NAME (frvbf,ckp) },
|
|
{ FRVBF_INSN_CKV, SEM_FN_NAME (frvbf,ckv) },
|
|
{ FRVBF_INSN_CKNV, SEM_FN_NAME (frvbf,cknv) },
|
|
{ FRVBF_INSN_FCKRA, SEM_FN_NAME (frvbf,fckra) },
|
|
{ FRVBF_INSN_FCKNO, SEM_FN_NAME (frvbf,fckno) },
|
|
{ FRVBF_INSN_FCKNE, SEM_FN_NAME (frvbf,fckne) },
|
|
{ FRVBF_INSN_FCKEQ, SEM_FN_NAME (frvbf,fckeq) },
|
|
{ FRVBF_INSN_FCKLG, SEM_FN_NAME (frvbf,fcklg) },
|
|
{ FRVBF_INSN_FCKUE, SEM_FN_NAME (frvbf,fckue) },
|
|
{ FRVBF_INSN_FCKUL, SEM_FN_NAME (frvbf,fckul) },
|
|
{ FRVBF_INSN_FCKGE, SEM_FN_NAME (frvbf,fckge) },
|
|
{ FRVBF_INSN_FCKLT, SEM_FN_NAME (frvbf,fcklt) },
|
|
{ FRVBF_INSN_FCKUGE, SEM_FN_NAME (frvbf,fckuge) },
|
|
{ FRVBF_INSN_FCKUG, SEM_FN_NAME (frvbf,fckug) },
|
|
{ FRVBF_INSN_FCKLE, SEM_FN_NAME (frvbf,fckle) },
|
|
{ FRVBF_INSN_FCKGT, SEM_FN_NAME (frvbf,fckgt) },
|
|
{ FRVBF_INSN_FCKULE, SEM_FN_NAME (frvbf,fckule) },
|
|
{ FRVBF_INSN_FCKU, SEM_FN_NAME (frvbf,fcku) },
|
|
{ FRVBF_INSN_FCKO, SEM_FN_NAME (frvbf,fcko) },
|
|
{ FRVBF_INSN_CCKRA, SEM_FN_NAME (frvbf,cckra) },
|
|
{ FRVBF_INSN_CCKNO, SEM_FN_NAME (frvbf,cckno) },
|
|
{ FRVBF_INSN_CCKEQ, SEM_FN_NAME (frvbf,cckeq) },
|
|
{ FRVBF_INSN_CCKNE, SEM_FN_NAME (frvbf,cckne) },
|
|
{ FRVBF_INSN_CCKLE, SEM_FN_NAME (frvbf,cckle) },
|
|
{ FRVBF_INSN_CCKGT, SEM_FN_NAME (frvbf,cckgt) },
|
|
{ FRVBF_INSN_CCKLT, SEM_FN_NAME (frvbf,ccklt) },
|
|
{ FRVBF_INSN_CCKGE, SEM_FN_NAME (frvbf,cckge) },
|
|
{ FRVBF_INSN_CCKLS, SEM_FN_NAME (frvbf,cckls) },
|
|
{ FRVBF_INSN_CCKHI, SEM_FN_NAME (frvbf,cckhi) },
|
|
{ FRVBF_INSN_CCKC, SEM_FN_NAME (frvbf,cckc) },
|
|
{ FRVBF_INSN_CCKNC, SEM_FN_NAME (frvbf,ccknc) },
|
|
{ FRVBF_INSN_CCKN, SEM_FN_NAME (frvbf,cckn) },
|
|
{ FRVBF_INSN_CCKP, SEM_FN_NAME (frvbf,cckp) },
|
|
{ FRVBF_INSN_CCKV, SEM_FN_NAME (frvbf,cckv) },
|
|
{ FRVBF_INSN_CCKNV, SEM_FN_NAME (frvbf,ccknv) },
|
|
{ FRVBF_INSN_CFCKRA, SEM_FN_NAME (frvbf,cfckra) },
|
|
{ FRVBF_INSN_CFCKNO, SEM_FN_NAME (frvbf,cfckno) },
|
|
{ FRVBF_INSN_CFCKNE, SEM_FN_NAME (frvbf,cfckne) },
|
|
{ FRVBF_INSN_CFCKEQ, SEM_FN_NAME (frvbf,cfckeq) },
|
|
{ FRVBF_INSN_CFCKLG, SEM_FN_NAME (frvbf,cfcklg) },
|
|
{ FRVBF_INSN_CFCKUE, SEM_FN_NAME (frvbf,cfckue) },
|
|
{ FRVBF_INSN_CFCKUL, SEM_FN_NAME (frvbf,cfckul) },
|
|
{ FRVBF_INSN_CFCKGE, SEM_FN_NAME (frvbf,cfckge) },
|
|
{ FRVBF_INSN_CFCKLT, SEM_FN_NAME (frvbf,cfcklt) },
|
|
{ FRVBF_INSN_CFCKUGE, SEM_FN_NAME (frvbf,cfckuge) },
|
|
{ FRVBF_INSN_CFCKUG, SEM_FN_NAME (frvbf,cfckug) },
|
|
{ FRVBF_INSN_CFCKLE, SEM_FN_NAME (frvbf,cfckle) },
|
|
{ FRVBF_INSN_CFCKGT, SEM_FN_NAME (frvbf,cfckgt) },
|
|
{ FRVBF_INSN_CFCKULE, SEM_FN_NAME (frvbf,cfckule) },
|
|
{ FRVBF_INSN_CFCKU, SEM_FN_NAME (frvbf,cfcku) },
|
|
{ FRVBF_INSN_CFCKO, SEM_FN_NAME (frvbf,cfcko) },
|
|
{ FRVBF_INSN_CJMPL, SEM_FN_NAME (frvbf,cjmpl) },
|
|
{ FRVBF_INSN_CCALLL, SEM_FN_NAME (frvbf,ccalll) },
|
|
{ FRVBF_INSN_ICI, SEM_FN_NAME (frvbf,ici) },
|
|
{ FRVBF_INSN_DCI, SEM_FN_NAME (frvbf,dci) },
|
|
{ FRVBF_INSN_ICEI, SEM_FN_NAME (frvbf,icei) },
|
|
{ FRVBF_INSN_DCEI, SEM_FN_NAME (frvbf,dcei) },
|
|
{ FRVBF_INSN_DCF, SEM_FN_NAME (frvbf,dcf) },
|
|
{ FRVBF_INSN_DCEF, SEM_FN_NAME (frvbf,dcef) },
|
|
{ FRVBF_INSN_WITLB, SEM_FN_NAME (frvbf,witlb) },
|
|
{ FRVBF_INSN_WDTLB, SEM_FN_NAME (frvbf,wdtlb) },
|
|
{ FRVBF_INSN_ITLBI, SEM_FN_NAME (frvbf,itlbi) },
|
|
{ FRVBF_INSN_DTLBI, SEM_FN_NAME (frvbf,dtlbi) },
|
|
{ FRVBF_INSN_ICPL, SEM_FN_NAME (frvbf,icpl) },
|
|
{ FRVBF_INSN_DCPL, SEM_FN_NAME (frvbf,dcpl) },
|
|
{ FRVBF_INSN_ICUL, SEM_FN_NAME (frvbf,icul) },
|
|
{ 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) },
|
|
{ FRVBF_INSN_CLRFR, SEM_FN_NAME (frvbf,clrfr) },
|
|
{ FRVBF_INSN_CLRGA, SEM_FN_NAME (frvbf,clrga) },
|
|
{ FRVBF_INSN_CLRFA, SEM_FN_NAME (frvbf,clrfa) },
|
|
{ FRVBF_INSN_COMMITGR, SEM_FN_NAME (frvbf,commitgr) },
|
|
{ FRVBF_INSN_COMMITFR, SEM_FN_NAME (frvbf,commitfr) },
|
|
{ FRVBF_INSN_COMMITGA, SEM_FN_NAME (frvbf,commitga) },
|
|
{ FRVBF_INSN_COMMITFA, SEM_FN_NAME (frvbf,commitfa) },
|
|
{ FRVBF_INSN_FITOS, SEM_FN_NAME (frvbf,fitos) },
|
|
{ FRVBF_INSN_FSTOI, SEM_FN_NAME (frvbf,fstoi) },
|
|
{ FRVBF_INSN_FITOD, SEM_FN_NAME (frvbf,fitod) },
|
|
{ FRVBF_INSN_FDTOI, SEM_FN_NAME (frvbf,fdtoi) },
|
|
{ FRVBF_INSN_FDITOS, SEM_FN_NAME (frvbf,fditos) },
|
|
{ FRVBF_INSN_FDSTOI, SEM_FN_NAME (frvbf,fdstoi) },
|
|
{ FRVBF_INSN_NFDITOS, SEM_FN_NAME (frvbf,nfditos) },
|
|
{ FRVBF_INSN_NFDSTOI, SEM_FN_NAME (frvbf,nfdstoi) },
|
|
{ FRVBF_INSN_CFITOS, SEM_FN_NAME (frvbf,cfitos) },
|
|
{ FRVBF_INSN_CFSTOI, SEM_FN_NAME (frvbf,cfstoi) },
|
|
{ FRVBF_INSN_NFITOS, SEM_FN_NAME (frvbf,nfitos) },
|
|
{ FRVBF_INSN_NFSTOI, SEM_FN_NAME (frvbf,nfstoi) },
|
|
{ FRVBF_INSN_FMOVS, SEM_FN_NAME (frvbf,fmovs) },
|
|
{ FRVBF_INSN_FMOVD, SEM_FN_NAME (frvbf,fmovd) },
|
|
{ FRVBF_INSN_FDMOVS, SEM_FN_NAME (frvbf,fdmovs) },
|
|
{ FRVBF_INSN_CFMOVS, SEM_FN_NAME (frvbf,cfmovs) },
|
|
{ FRVBF_INSN_FNEGS, SEM_FN_NAME (frvbf,fnegs) },
|
|
{ FRVBF_INSN_FNEGD, SEM_FN_NAME (frvbf,fnegd) },
|
|
{ FRVBF_INSN_FDNEGS, SEM_FN_NAME (frvbf,fdnegs) },
|
|
{ FRVBF_INSN_CFNEGS, SEM_FN_NAME (frvbf,cfnegs) },
|
|
{ FRVBF_INSN_FABSS, SEM_FN_NAME (frvbf,fabss) },
|
|
{ FRVBF_INSN_FABSD, SEM_FN_NAME (frvbf,fabsd) },
|
|
{ FRVBF_INSN_FDABSS, SEM_FN_NAME (frvbf,fdabss) },
|
|
{ FRVBF_INSN_CFABSS, SEM_FN_NAME (frvbf,cfabss) },
|
|
{ FRVBF_INSN_FSQRTS, SEM_FN_NAME (frvbf,fsqrts) },
|
|
{ FRVBF_INSN_FDSQRTS, SEM_FN_NAME (frvbf,fdsqrts) },
|
|
{ FRVBF_INSN_NFDSQRTS, SEM_FN_NAME (frvbf,nfdsqrts) },
|
|
{ FRVBF_INSN_FSQRTD, SEM_FN_NAME (frvbf,fsqrtd) },
|
|
{ FRVBF_INSN_CFSQRTS, SEM_FN_NAME (frvbf,cfsqrts) },
|
|
{ FRVBF_INSN_NFSQRTS, SEM_FN_NAME (frvbf,nfsqrts) },
|
|
{ FRVBF_INSN_FADDS, SEM_FN_NAME (frvbf,fadds) },
|
|
{ FRVBF_INSN_FSUBS, SEM_FN_NAME (frvbf,fsubs) },
|
|
{ FRVBF_INSN_FMULS, SEM_FN_NAME (frvbf,fmuls) },
|
|
{ FRVBF_INSN_FDIVS, SEM_FN_NAME (frvbf,fdivs) },
|
|
{ FRVBF_INSN_FADDD, SEM_FN_NAME (frvbf,faddd) },
|
|
{ FRVBF_INSN_FSUBD, SEM_FN_NAME (frvbf,fsubd) },
|
|
{ FRVBF_INSN_FMULD, SEM_FN_NAME (frvbf,fmuld) },
|
|
{ FRVBF_INSN_FDIVD, SEM_FN_NAME (frvbf,fdivd) },
|
|
{ FRVBF_INSN_CFADDS, SEM_FN_NAME (frvbf,cfadds) },
|
|
{ FRVBF_INSN_CFSUBS, SEM_FN_NAME (frvbf,cfsubs) },
|
|
{ FRVBF_INSN_CFMULS, SEM_FN_NAME (frvbf,cfmuls) },
|
|
{ FRVBF_INSN_CFDIVS, SEM_FN_NAME (frvbf,cfdivs) },
|
|
{ FRVBF_INSN_NFADDS, SEM_FN_NAME (frvbf,nfadds) },
|
|
{ FRVBF_INSN_NFSUBS, SEM_FN_NAME (frvbf,nfsubs) },
|
|
{ FRVBF_INSN_NFMULS, SEM_FN_NAME (frvbf,nfmuls) },
|
|
{ FRVBF_INSN_NFDIVS, SEM_FN_NAME (frvbf,nfdivs) },
|
|
{ FRVBF_INSN_FCMPS, SEM_FN_NAME (frvbf,fcmps) },
|
|
{ FRVBF_INSN_FCMPD, SEM_FN_NAME (frvbf,fcmpd) },
|
|
{ FRVBF_INSN_CFCMPS, SEM_FN_NAME (frvbf,cfcmps) },
|
|
{ FRVBF_INSN_FDCMPS, SEM_FN_NAME (frvbf,fdcmps) },
|
|
{ FRVBF_INSN_FMADDS, SEM_FN_NAME (frvbf,fmadds) },
|
|
{ FRVBF_INSN_FMSUBS, SEM_FN_NAME (frvbf,fmsubs) },
|
|
{ FRVBF_INSN_FMADDD, SEM_FN_NAME (frvbf,fmaddd) },
|
|
{ FRVBF_INSN_FMSUBD, SEM_FN_NAME (frvbf,fmsubd) },
|
|
{ FRVBF_INSN_FDMADDS, SEM_FN_NAME (frvbf,fdmadds) },
|
|
{ FRVBF_INSN_NFDMADDS, SEM_FN_NAME (frvbf,nfdmadds) },
|
|
{ FRVBF_INSN_CFMADDS, SEM_FN_NAME (frvbf,cfmadds) },
|
|
{ FRVBF_INSN_CFMSUBS, SEM_FN_NAME (frvbf,cfmsubs) },
|
|
{ FRVBF_INSN_NFMADDS, SEM_FN_NAME (frvbf,nfmadds) },
|
|
{ FRVBF_INSN_NFMSUBS, SEM_FN_NAME (frvbf,nfmsubs) },
|
|
{ FRVBF_INSN_FMAS, SEM_FN_NAME (frvbf,fmas) },
|
|
{ FRVBF_INSN_FMSS, SEM_FN_NAME (frvbf,fmss) },
|
|
{ FRVBF_INSN_FDMAS, SEM_FN_NAME (frvbf,fdmas) },
|
|
{ FRVBF_INSN_FDMSS, SEM_FN_NAME (frvbf,fdmss) },
|
|
{ FRVBF_INSN_NFDMAS, SEM_FN_NAME (frvbf,nfdmas) },
|
|
{ FRVBF_INSN_NFDMSS, SEM_FN_NAME (frvbf,nfdmss) },
|
|
{ FRVBF_INSN_CFMAS, SEM_FN_NAME (frvbf,cfmas) },
|
|
{ FRVBF_INSN_CFMSS, SEM_FN_NAME (frvbf,cfmss) },
|
|
{ FRVBF_INSN_FMAD, SEM_FN_NAME (frvbf,fmad) },
|
|
{ FRVBF_INSN_FMSD, SEM_FN_NAME (frvbf,fmsd) },
|
|
{ FRVBF_INSN_NFMAS, SEM_FN_NAME (frvbf,nfmas) },
|
|
{ FRVBF_INSN_NFMSS, SEM_FN_NAME (frvbf,nfmss) },
|
|
{ FRVBF_INSN_FDADDS, SEM_FN_NAME (frvbf,fdadds) },
|
|
{ FRVBF_INSN_FDSUBS, SEM_FN_NAME (frvbf,fdsubs) },
|
|
{ FRVBF_INSN_FDMULS, SEM_FN_NAME (frvbf,fdmuls) },
|
|
{ FRVBF_INSN_FDDIVS, SEM_FN_NAME (frvbf,fddivs) },
|
|
{ FRVBF_INSN_FDSADS, SEM_FN_NAME (frvbf,fdsads) },
|
|
{ FRVBF_INSN_FDMULCS, SEM_FN_NAME (frvbf,fdmulcs) },
|
|
{ FRVBF_INSN_NFDMULCS, SEM_FN_NAME (frvbf,nfdmulcs) },
|
|
{ FRVBF_INSN_NFDADDS, SEM_FN_NAME (frvbf,nfdadds) },
|
|
{ FRVBF_INSN_NFDSUBS, SEM_FN_NAME (frvbf,nfdsubs) },
|
|
{ FRVBF_INSN_NFDMULS, SEM_FN_NAME (frvbf,nfdmuls) },
|
|
{ FRVBF_INSN_NFDDIVS, SEM_FN_NAME (frvbf,nfddivs) },
|
|
{ FRVBF_INSN_NFDSADS, SEM_FN_NAME (frvbf,nfdsads) },
|
|
{ FRVBF_INSN_NFDCMPS, SEM_FN_NAME (frvbf,nfdcmps) },
|
|
{ FRVBF_INSN_MHSETLOS, SEM_FN_NAME (frvbf,mhsetlos) },
|
|
{ FRVBF_INSN_MHSETHIS, SEM_FN_NAME (frvbf,mhsethis) },
|
|
{ FRVBF_INSN_MHDSETS, SEM_FN_NAME (frvbf,mhdsets) },
|
|
{ FRVBF_INSN_MHSETLOH, SEM_FN_NAME (frvbf,mhsetloh) },
|
|
{ FRVBF_INSN_MHSETHIH, SEM_FN_NAME (frvbf,mhsethih) },
|
|
{ FRVBF_INSN_MHDSETH, SEM_FN_NAME (frvbf,mhdseth) },
|
|
{ FRVBF_INSN_MAND, SEM_FN_NAME (frvbf,mand) },
|
|
{ FRVBF_INSN_MOR, SEM_FN_NAME (frvbf,mor) },
|
|
{ FRVBF_INSN_MXOR, SEM_FN_NAME (frvbf,mxor) },
|
|
{ FRVBF_INSN_CMAND, SEM_FN_NAME (frvbf,cmand) },
|
|
{ FRVBF_INSN_CMOR, SEM_FN_NAME (frvbf,cmor) },
|
|
{ FRVBF_INSN_CMXOR, SEM_FN_NAME (frvbf,cmxor) },
|
|
{ FRVBF_INSN_MNOT, SEM_FN_NAME (frvbf,mnot) },
|
|
{ FRVBF_INSN_CMNOT, SEM_FN_NAME (frvbf,cmnot) },
|
|
{ FRVBF_INSN_MROTLI, SEM_FN_NAME (frvbf,mrotli) },
|
|
{ FRVBF_INSN_MROTRI, SEM_FN_NAME (frvbf,mrotri) },
|
|
{ FRVBF_INSN_MWCUT, SEM_FN_NAME (frvbf,mwcut) },
|
|
{ FRVBF_INSN_MWCUTI, SEM_FN_NAME (frvbf,mwcuti) },
|
|
{ FRVBF_INSN_MCUT, SEM_FN_NAME (frvbf,mcut) },
|
|
{ FRVBF_INSN_MCUTI, SEM_FN_NAME (frvbf,mcuti) },
|
|
{ FRVBF_INSN_MCUTSS, SEM_FN_NAME (frvbf,mcutss) },
|
|
{ FRVBF_INSN_MCUTSSI, SEM_FN_NAME (frvbf,mcutssi) },
|
|
{ FRVBF_INSN_MDCUTSSI, SEM_FN_NAME (frvbf,mdcutssi) },
|
|
{ FRVBF_INSN_MAVEH, SEM_FN_NAME (frvbf,maveh) },
|
|
{ FRVBF_INSN_MSLLHI, SEM_FN_NAME (frvbf,msllhi) },
|
|
{ FRVBF_INSN_MSRLHI, SEM_FN_NAME (frvbf,msrlhi) },
|
|
{ FRVBF_INSN_MSRAHI, SEM_FN_NAME (frvbf,msrahi) },
|
|
{ FRVBF_INSN_MDROTLI, SEM_FN_NAME (frvbf,mdrotli) },
|
|
{ FRVBF_INSN_MCPLHI, SEM_FN_NAME (frvbf,mcplhi) },
|
|
{ FRVBF_INSN_MCPLI, SEM_FN_NAME (frvbf,mcpli) },
|
|
{ FRVBF_INSN_MSATHS, SEM_FN_NAME (frvbf,msaths) },
|
|
{ FRVBF_INSN_MQSATHS, SEM_FN_NAME (frvbf,mqsaths) },
|
|
{ FRVBF_INSN_MSATHU, SEM_FN_NAME (frvbf,msathu) },
|
|
{ FRVBF_INSN_MCMPSH, SEM_FN_NAME (frvbf,mcmpsh) },
|
|
{ FRVBF_INSN_MCMPUH, SEM_FN_NAME (frvbf,mcmpuh) },
|
|
{ FRVBF_INSN_MABSHS, SEM_FN_NAME (frvbf,mabshs) },
|
|
{ FRVBF_INSN_MADDHSS, SEM_FN_NAME (frvbf,maddhss) },
|
|
{ FRVBF_INSN_MADDHUS, SEM_FN_NAME (frvbf,maddhus) },
|
|
{ FRVBF_INSN_MSUBHSS, SEM_FN_NAME (frvbf,msubhss) },
|
|
{ FRVBF_INSN_MSUBHUS, SEM_FN_NAME (frvbf,msubhus) },
|
|
{ FRVBF_INSN_CMADDHSS, SEM_FN_NAME (frvbf,cmaddhss) },
|
|
{ FRVBF_INSN_CMADDHUS, SEM_FN_NAME (frvbf,cmaddhus) },
|
|
{ FRVBF_INSN_CMSUBHSS, SEM_FN_NAME (frvbf,cmsubhss) },
|
|
{ FRVBF_INSN_CMSUBHUS, SEM_FN_NAME (frvbf,cmsubhus) },
|
|
{ FRVBF_INSN_MQADDHSS, SEM_FN_NAME (frvbf,mqaddhss) },
|
|
{ FRVBF_INSN_MQADDHUS, SEM_FN_NAME (frvbf,mqaddhus) },
|
|
{ FRVBF_INSN_MQSUBHSS, SEM_FN_NAME (frvbf,mqsubhss) },
|
|
{ FRVBF_INSN_MQSUBHUS, SEM_FN_NAME (frvbf,mqsubhus) },
|
|
{ FRVBF_INSN_CMQADDHSS, SEM_FN_NAME (frvbf,cmqaddhss) },
|
|
{ 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) },
|
|
{ FRVBF_INSN_MDSUBACCS, SEM_FN_NAME (frvbf,mdsubaccs) },
|
|
{ FRVBF_INSN_MASACCS, SEM_FN_NAME (frvbf,masaccs) },
|
|
{ FRVBF_INSN_MDASACCS, SEM_FN_NAME (frvbf,mdasaccs) },
|
|
{ FRVBF_INSN_MMULHS, SEM_FN_NAME (frvbf,mmulhs) },
|
|
{ FRVBF_INSN_MMULHU, SEM_FN_NAME (frvbf,mmulhu) },
|
|
{ FRVBF_INSN_MMULXHS, SEM_FN_NAME (frvbf,mmulxhs) },
|
|
{ FRVBF_INSN_MMULXHU, SEM_FN_NAME (frvbf,mmulxhu) },
|
|
{ FRVBF_INSN_CMMULHS, SEM_FN_NAME (frvbf,cmmulhs) },
|
|
{ FRVBF_INSN_CMMULHU, SEM_FN_NAME (frvbf,cmmulhu) },
|
|
{ FRVBF_INSN_MQMULHS, SEM_FN_NAME (frvbf,mqmulhs) },
|
|
{ FRVBF_INSN_MQMULHU, SEM_FN_NAME (frvbf,mqmulhu) },
|
|
{ FRVBF_INSN_MQMULXHS, SEM_FN_NAME (frvbf,mqmulxhs) },
|
|
{ FRVBF_INSN_MQMULXHU, SEM_FN_NAME (frvbf,mqmulxhu) },
|
|
{ FRVBF_INSN_CMQMULHS, SEM_FN_NAME (frvbf,cmqmulhs) },
|
|
{ FRVBF_INSN_CMQMULHU, SEM_FN_NAME (frvbf,cmqmulhu) },
|
|
{ FRVBF_INSN_MMACHS, SEM_FN_NAME (frvbf,mmachs) },
|
|
{ FRVBF_INSN_MMACHU, SEM_FN_NAME (frvbf,mmachu) },
|
|
{ FRVBF_INSN_MMRDHS, SEM_FN_NAME (frvbf,mmrdhs) },
|
|
{ FRVBF_INSN_MMRDHU, SEM_FN_NAME (frvbf,mmrdhu) },
|
|
{ FRVBF_INSN_CMMACHS, SEM_FN_NAME (frvbf,cmmachs) },
|
|
{ FRVBF_INSN_CMMACHU, SEM_FN_NAME (frvbf,cmmachu) },
|
|
{ FRVBF_INSN_MQMACHS, SEM_FN_NAME (frvbf,mqmachs) },
|
|
{ FRVBF_INSN_MQMACHU, SEM_FN_NAME (frvbf,mqmachu) },
|
|
{ FRVBF_INSN_CMQMACHS, SEM_FN_NAME (frvbf,cmqmachs) },
|
|
{ FRVBF_INSN_CMQMACHU, SEM_FN_NAME (frvbf,cmqmachu) },
|
|
{ FRVBF_INSN_MQXMACHS, SEM_FN_NAME (frvbf,mqxmachs) },
|
|
{ FRVBF_INSN_MQXMACXHS, SEM_FN_NAME (frvbf,mqxmacxhs) },
|
|
{ FRVBF_INSN_MQMACXHS, SEM_FN_NAME (frvbf,mqmacxhs) },
|
|
{ FRVBF_INSN_MCPXRS, SEM_FN_NAME (frvbf,mcpxrs) },
|
|
{ FRVBF_INSN_MCPXRU, SEM_FN_NAME (frvbf,mcpxru) },
|
|
{ FRVBF_INSN_MCPXIS, SEM_FN_NAME (frvbf,mcpxis) },
|
|
{ FRVBF_INSN_MCPXIU, SEM_FN_NAME (frvbf,mcpxiu) },
|
|
{ FRVBF_INSN_CMCPXRS, SEM_FN_NAME (frvbf,cmcpxrs) },
|
|
{ FRVBF_INSN_CMCPXRU, SEM_FN_NAME (frvbf,cmcpxru) },
|
|
{ FRVBF_INSN_CMCPXIS, SEM_FN_NAME (frvbf,cmcpxis) },
|
|
{ FRVBF_INSN_CMCPXIU, SEM_FN_NAME (frvbf,cmcpxiu) },
|
|
{ FRVBF_INSN_MQCPXRS, SEM_FN_NAME (frvbf,mqcpxrs) },
|
|
{ FRVBF_INSN_MQCPXRU, SEM_FN_NAME (frvbf,mqcpxru) },
|
|
{ FRVBF_INSN_MQCPXIS, SEM_FN_NAME (frvbf,mqcpxis) },
|
|
{ FRVBF_INSN_MQCPXIU, SEM_FN_NAME (frvbf,mqcpxiu) },
|
|
{ FRVBF_INSN_MEXPDHW, SEM_FN_NAME (frvbf,mexpdhw) },
|
|
{ FRVBF_INSN_CMEXPDHW, SEM_FN_NAME (frvbf,cmexpdhw) },
|
|
{ FRVBF_INSN_MEXPDHD, SEM_FN_NAME (frvbf,mexpdhd) },
|
|
{ FRVBF_INSN_CMEXPDHD, SEM_FN_NAME (frvbf,cmexpdhd) },
|
|
{ FRVBF_INSN_MPACKH, SEM_FN_NAME (frvbf,mpackh) },
|
|
{ FRVBF_INSN_MDPACKH, SEM_FN_NAME (frvbf,mdpackh) },
|
|
{ FRVBF_INSN_MUNPACKH, SEM_FN_NAME (frvbf,munpackh) },
|
|
{ FRVBF_INSN_MDUNPACKH, SEM_FN_NAME (frvbf,mdunpackh) },
|
|
{ FRVBF_INSN_MBTOH, SEM_FN_NAME (frvbf,mbtoh) },
|
|
{ FRVBF_INSN_CMBTOH, SEM_FN_NAME (frvbf,cmbtoh) },
|
|
{ FRVBF_INSN_MHTOB, SEM_FN_NAME (frvbf,mhtob) },
|
|
{ FRVBF_INSN_CMHTOB, SEM_FN_NAME (frvbf,cmhtob) },
|
|
{ FRVBF_INSN_MBTOHE, SEM_FN_NAME (frvbf,mbtohe) },
|
|
{ FRVBF_INSN_CMBTOHE, SEM_FN_NAME (frvbf,cmbtohe) },
|
|
{ FRVBF_INSN_MNOP, SEM_FN_NAME (frvbf,mnop) },
|
|
{ FRVBF_INSN_MCLRACC_0, SEM_FN_NAME (frvbf,mclracc_0) },
|
|
{ FRVBF_INSN_MCLRACC_1, SEM_FN_NAME (frvbf,mclracc_1) },
|
|
{ FRVBF_INSN_MRDACC, SEM_FN_NAME (frvbf,mrdacc) },
|
|
{ FRVBF_INSN_MRDACCG, SEM_FN_NAME (frvbf,mrdaccg) },
|
|
{ FRVBF_INSN_MWTACC, SEM_FN_NAME (frvbf,mwtacc) },
|
|
{ FRVBF_INSN_MWTACCG, SEM_FN_NAME (frvbf,mwtaccg) },
|
|
{ FRVBF_INSN_MCOP1, SEM_FN_NAME (frvbf,mcop1) },
|
|
{ FRVBF_INSN_MCOP2, SEM_FN_NAME (frvbf,mcop2) },
|
|
{ FRVBF_INSN_FNOP, SEM_FN_NAME (frvbf,fnop) },
|
|
{ 0, 0 }
|
|
};
|
|
|
|
/* Add the semantic fns to IDESC_TABLE. */
|
|
|
|
void
|
|
SEM_FN_NAME (frvbf,init_idesc_table) (SIM_CPU *current_cpu)
|
|
{
|
|
IDESC *idesc_table = CPU_IDESC (current_cpu);
|
|
const struct sem_fn_desc *sf;
|
|
int mach_num = MACH_NUM (CPU_MACH (current_cpu));
|
|
|
|
for (sf = &sem_fns[0]; sf->fn != 0; ++sf)
|
|
{
|
|
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;
|
|
else
|
|
idesc_table[sf->index].sem_fast = SEM_FN_NAME (frvbf,x_invalid);
|
|
#else
|
|
if (valid_p)
|
|
idesc_table[sf->index].sem_full = sf->fn;
|
|
else
|
|
idesc_table[sf->index].sem_full = SEM_FN_NAME (frvbf,x_invalid);
|
|
#endif
|
|
}
|
|
}
|
|
|