* gas/config/tc-avr.c: Change ISA for devices with USB support to
[external/binutils.git] / sim / igen / igen.h
index 188e3e4..3bbbf2b 100644 (file)
@@ -1,26 +1,29 @@
-/*  This file is part of the program psim.
-
-    Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au>
-
-    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.
-    */
+/* The IGEN simulator generator for GDB, the GNU Debugger.
+
+   Copyright 2002-2013 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 3 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, see <http://www.gnu.org/licenses/>.  */
+
 
 /* code-generation options: */
 
-typedef enum {
+typedef enum
+{
 
   /* Transfer control to an instructions semantic code using the the
      standard call/return mechanism */
@@ -33,18 +36,22 @@ typedef enum {
 
   generate_jumps,
 
-} igen_code;
+}
+igen_code;
 
-typedef enum {
+typedef enum
+{
   nia_is_cia_plus_one,
   nia_is_void,
   nia_is_invalid,
-} igen_nia;
+}
+igen_nia;
 
 
 
 typedef struct _igen_gen_options igen_gen_options;
-struct _igen_gen_options {
+struct _igen_gen_options
+{
   int direct_access;
   int semantic_icache;
   int insn_in_icache;
@@ -59,6 +66,9 @@ struct _igen_gen_options {
   /* 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;
@@ -80,30 +90,44 @@ struct _igen_gen_options {
 
 
 typedef struct _igen_trace_options igen_trace_options;
-struct _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_prefix_name {
-  char *name;
-  char *uname;
-} igen_prefix_name;
-
-typedef struct _igen_prefix_options {
-  igen_prefix_name global;
-  igen_prefix_name engine;
-  igen_prefix_name icache;
-  igen_prefix_name idecode;
-  igen_prefix_name itable;
-  igen_prefix_name semantics;
-  igen_prefix_name support;
-} igen_prefix_options;
-
-typedef struct _igen_decode_options igen_decode_options ;
-struct _igen_decode_options {
+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
@@ -130,13 +154,25 @@ struct _igen_decode_options {
 
 
 typedef struct _igen_warn_options igen_warn_options;
-struct _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 {
+struct _igen_options
+{
 
   /* What does the instruction look like - bit ordering, size, widths or
      offesets */
@@ -145,7 +181,7 @@ struct _igen_options {
   int insn_specifying_widths;
 
   /* what should global names be prefixed with? */
-  igen_prefix_options prefix;
+  igen_module_options module;
 
   /* See above for options and flags */
   igen_gen_options gen;
@@ -153,6 +189,9 @@ struct _igen_options {
   /* 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;
 
@@ -175,23 +214,38 @@ struct _igen_options {
 
 extern igen_options options;
 
-/* default options - hopefully backward compatible */ \
-#define INIT_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).prefix.global.name = ""; \
-  (OPTIONS).prefix.global.uname = ""; \
-  (OPTIONS).prefix.engine = (OPTIONS).prefix.global; \
-  (OPTIONS).prefix.icache = (OPTIONS).prefix.global; \
-  (OPTIONS).prefix.idecode = (OPTIONS).prefix.global; \
-  (OPTIONS).prefix.itable = (OPTIONS).prefix.global; \
-  (OPTIONS).prefix.semantics = (OPTIONS).prefix.global; \
-  (OPTIONS).prefix.support = (OPTIONS).prefix.global; \
-  (OPTIONS).gen.code = generate_calls; \
-  (OPTIONS).gen.icache_size = 1024; \
-  (OPTIONS).warning = warning; \
+  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)