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

📄 igen.h

📁 这个是LINUX下的GDB调度工具的源码
💻 H
字号:
/* The IGEN simulator generator for GDB, the GNU Debugger.   Copyright 2002 Free Software Foundation, Inc.   Contributed by Andrew Cagney.   This file is part of GDB.   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, 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 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, write to the Free Software   Foundation, Inc., 59 Temple Place - Suite 330,   Boston, MA 02111-1307, USA.  *//* code-generation options: */typedef enum{  /* Transfer control to an instructions semantic code using the the     standard call/return mechanism */  generate_calls,  /* Transfer control to an instructions semantic code using     (computed) goto's instead of the more conventional call/return     mechanism */  generate_jumps,}igen_code;typedef enum{  nia_is_cia_plus_one,  nia_is_void,  nia_is_invalid,}igen_nia;typedef struct _igen_gen_options igen_gen_options;struct _igen_gen_options{  int direct_access;  int semantic_icache;  int insn_in_icache;  int conditional_issue;  int slot_verification;  int delayed_branch;  /* If zeroing a register, which one? */  int zero_reg;  int zero_reg_nr;  /* should multiple simulators be generated? */  int multi_sim;  /* name of the default multi-sim model */  char *default_model;  /* should the simulator support multi word instructions and if so,     what is the max nr of words. */  int multi_word;  /* SMP?  Should the generated code include SMP support (>0) and if     so, for how many processors? */  int smp;  /* how should the next instruction address be computed? */  igen_nia nia;  /* nr of instructions in the decoded instruction cache */  int icache;  int icache_size;  /* see above */  igen_code code;};typedef struct _igen_trace_options igen_trace_options;struct _igen_trace_options{  int rule_selection;  int rule_rejection;  int insn_insertion;  int insn_expansion;  int entries;  int combine;};typedef struct _igen_name{  char *u;  char *l;}igen_name;typedef struct _igen_module{  igen_name prefix;  igen_name suffix;}igen_module;typedef struct _igen_module_options{  igen_module global;  igen_module engine;  igen_module icache;  igen_module idecode;  igen_module itable;  igen_module semantics;  igen_module support;}igen_module_options;typedef struct _igen_decode_options igen_decode_options;struct _igen_decode_options{  /* Combine tables?  Should the generator make a second pass through     each generated table looking for any sub-entries that contain the     same instructions.  Those entries being merged into a single     table */  int combine;  /* Instruction expansion? Should the semantic code for each     instruction, when the oportunity arrises, be expanded according     to the variable opcode files that the instruction decode process     renders constant */  int duplicate;  /* Treat reserved fields as constant (zero) instead of ignoring     their value when determining decode tables */  int zero_reserved;  /* Convert any padded switch rules into goto_switch */  int switch_as_goto;  /* Force all tables to be generated with this lookup mechanism */  char *overriding_gen;};typedef struct _igen_warn_options igen_warn_options;struct _igen_warn_options{  /* Issue warning about discarded instructions */  int discard;  /* Issue warning about invalid instruction widths */  int width;  /* Issue warning about unimplemented instructions */  int unimplemented;};typedef struct _igen_options igen_options;struct _igen_options{  /* What does the instruction look like - bit ordering, size, widths or     offesets */  int hi_bit_nr;  int insn_bit_size;  int insn_specifying_widths;  /* what should global names be prefixed with? */  igen_module_options module;  /* See above for options and flags */  igen_gen_options gen;  /* See above for trace options */  igen_trace_options trace;  /* See above for include options */  table_include *include;  /* See above for decode options */  igen_decode_options decode;  /* Filter set to be used on the flag field of the instruction table */  filter *flags_filter;  /* See above for warn options */  igen_warn_options warn;  /* Be more picky about the input */  error_func (*warning);  /* Model (processor) set - like flags_filter. Used to select the     specific ISA within a processor family. */  filter *model_filter;  /* Format name set */  filter *format_name_filter;};extern igen_options options;/* default options - hopefully backward compatible */#define INIT_OPTIONS() \do { \  memset (&options, 0, sizeof options); \  memset (&options.warn, -1, sizeof (options.warn)); \  options.hi_bit_nr = 0; \  options.insn_bit_size = default_insn_bit_size; \  options.insn_specifying_widths = 0; \  options.module.global.prefix.u = ""; \  options.module.global.prefix.l = ""; \  /* the prefixes */ \  options.module.engine = options.module.global; \  options.module.icache = options.module.global; \  options.module.idecode = options.module.global; \  options.module.itable = options.module.global; \  options.module.semantics = options.module.global; \  options.module.support = options.module.global; \  /* the suffixes */ \  options.module.engine.suffix.l = "engine"; \  options.module.engine.suffix.u = "ENGINE"; \  options.module.icache.suffix.l = "icache"; \  options.module.icache.suffix.u = "ICACHE"; \  options.module.idecode.suffix.l = "idecode"; \  options.module.idecode.suffix.u = "IDECODE"; \  options.module.itable.suffix.l = "itable"; \  options.module.itable.suffix.u = "ITABLE"; \  options.module.semantics.suffix.l = "semantics"; \  options.module.semantics.suffix.u = "SEMANTICS"; \  options.module.support.suffix.l = "support"; \  options.module.support.suffix.u = "SUPPORT"; \  /* misc stuff */ \  options.gen.code = generate_calls; \  options.gen.icache_size = 1024; \  options.warning = warning; \} while (0)

⌨️ 快捷键说明

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