⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sem.c

📁 这个是LINUX下的GDB调度工具的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
/* Simulator instruction semantics for frvbf.THIS FILE IS MACHINE GENERATED WITH CGEN.Copyright 1996-2004 Free Software Foundation, Inc.This file is part of the GNU simulators.This program is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public License alongwith this program; if not, write to the Free Software Foundation, Inc.,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.*/#define WANT_CPU frvbf#define WANT_CPU_FRVBF#include "sim-main.h"#include "cgen-mem.h"#include "cgen-ops.h"#undef GET_ATTR#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)#else#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_/**/attr)#endif/* This is used so that we can compile two copies of the semantic code,   one with full feature support and one without that runs fast(er).   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 TRACE_RESULT#define TRACE_RESULT(cpu, abuf, name, type, val)#else#define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn)#endif/* x-invalid: --invalid-- */static SEM_PCSEM_FN_NAME (frvbf,x_invalid) (SIM_CPU *current_cpu, SEM_ARG sem_arg){#define FLD(f) abuf->fields.fmt_empty.f  ARGBUF *abuf = SEM_ARGBUF (sem_arg);  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 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_PCSEM_FN_NAME (frvbf,x_after) (SIM_CPU *current_cpu, SEM_ARG sem_arg){#define FLD(f) abuf->fields.fmt_empty.f  ARGBUF *abuf = SEM_ARGBUF (sem_arg);  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);  {#if WITH_SCACHE_PBB_FRVBF    frvbf_pbb_after (current_cpu, sem_arg);#endif  }  return vpc;#undef FLD}/* x-before: --before-- */static SEM_PCSEM_FN_NAME (frvbf,x_before) (SIM_CPU *current_cpu, SEM_ARG sem_arg){#define FLD(f) abuf->fields.fmt_empty.f  ARGBUF *abuf = SEM_ARGBUF (sem_arg);  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 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_PCSEM_FN_NAME (frvbf,x_cti_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg){#define FLD(f) abuf->fields.fmt_empty.f  ARGBUF *abuf = SEM_ARGBUF (sem_arg);  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 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_PCSEM_FN_NAME (frvbf,x_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg){#define FLD(f) abuf->fields.fmt_empty.f  ARGBUF *abuf = SEM_ARGBUF (sem_arg);  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 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_PCSEM_FN_NAME (frvbf,x_begin) (SIM_CPU *current_cpu, SEM_ARG sem_arg){#define FLD(f) abuf->fields.fmt_empty.f  ARGBUF *abuf = SEM_ARGBUF (sem_arg);  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 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_PCSEM_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);    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }  return vpc;#undef FLD}/* sub: sub$pack $GRi,$GRj,$GRk */static SEM_PCSEM_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);    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }  return vpc;#undef FLD}/* and: and$pack $GRi,$GRj,$GRk */static SEM_PCSEM_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);    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }  return vpc;#undef FLD}/* or: or$pack $GRi,$GRj,$GRk */static SEM_PCSEM_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);    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }  return vpc;#undef FLD}/* xor: xor$pack $GRi,$GRj,$GRk */static SEM_PCSEM_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);    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }  return vpc;#undef FLD}/* not: not$pack $GRj,$GRk */static SEM_PCSEM_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);    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }  return vpc;#undef FLD}/* sdiv: sdiv$pack $GRi,$GRj,$GRk */static SEM_PCSEM_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_PCSEM_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_PCSEM_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_PCSEM_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_PCSEM_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);    TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);  }  return vpc;#undef FLD}/* umul: umul$pack $GRi,$GRj,$GRdoublek */static SEM_PCSEM_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);    TRACE_RESULT (current_cpu, abuf, "gr_double", 'D', opval);  }  return vpc;#undef FLD}/* smu: smu$pack $GRi,$GRj */static SEM_PCSEM_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);    TRACE_RESULT (current_cpu, abuf, "iacc0", 'D', opval);  }  return vpc;#undef FLD}/* smass: smass$pack $GRi,$GRj */static SEM_PCSEM_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 (9223372036854775807, 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 (9223372036854775808, 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))))));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -