binutils: support for the SPARC M8 processor
[deliverable/binutils-gdb.git] / sim / common / cgen-types.h
index ad22f467efc4c40a804ce35587d3f6f659380eee..721004fb267bc3c05496ada9352c36512aff5736 100644 (file)
 /* Types for Cpu tools GENerated simulators.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996-2017 Free Software Foundation, Inc.
    Contributed by Cygnus Support.
 
 This file is part of GDB, the GNU debugger.
 
 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, or (at your option)
-any later version.
+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, write to the Free Software Foundation, Inc.,
-59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* This file is not included with cgen-sim.h as it defines types
+   needed by sim-base.h.  */
 
 #ifndef CGEN_TYPES_H
 #define CGEN_TYPES_H
 
+/* Miscellaneous cgen configury defined here as this file gets
+   included soon enough.  */
+
+/* Indicate we support --{profile,trace}-{range,function}.  */
+#undef SIM_HAVE_ADDR_RANGE
+#define SIM_HAVE_ADDR_RANGE
+
 #ifdef __GNUC__
 #define HAVE_LONGLONG
 #undef DI_FN_SUPPORT
-#define SIM_INLINE extern inline
 #else
 #undef HAVE_LONGLONG
 #define DI_FN_SUPPORT
-#define SIM_INLINE
-#endif
-
-#ifndef CGEN_CAT3
-#if defined(__STDC__) || defined(ALMOST_STDC)
-#define CGEN_XCAT3(a,b,c) a ## b ## c
-#define CGEN_CAT3(a,b,c) CGEN_XCAT3 (a, b, c)
-#else
-#define CGEN_CAT3(a,b,c) a/**/b/**/c
-#endif
 #endif
 \f
-extern const char *mode_names[];
+/* Mode support.  */
+
+/* Common mode types.  */
+/* ??? Target specific modes.  */
+typedef enum mode_type {
+  MODE_VOID, MODE_BI,
+  MODE_QI, MODE_HI, MODE_SI, MODE_DI,
+  MODE_UQI, MODE_UHI, MODE_USI, MODE_UDI,
+  MODE_SF, MODE_DF, MODE_XF, MODE_TF,
+  MODE_TARGET_MAX /* = MODE_TF? */,
+  /* These are host modes.  */
+  MODE_INT, MODE_UINT, MODE_PTR, /*??? MODE_ADDR, MODE_IADDR,*/
+  MODE_MAX
+} MODE_TYPE;
+
+#define MAX_TARGET_MODES ((int) MODE_TARGET_MAX)
+#define MAX_MODES ((int) MODE_MAX)
+
+extern const char * const mode_names[];
 #define MODE_NAME(m) (mode_names[m])
 
-#ifdef __STDC__
-typedef /*FIXME*/ signed char BI;
-typedef /*FIXME*/ signed char QI;
-#else
-typedef /*FIXME*/ char BI;
-typedef /*FIXME*/ char QI;
-#endif
-typedef short HI;
-typedef int SI;
-typedef unsigned char UBI;
-typedef unsigned char UQI;
-typedef unsigned short UHI;
-typedef unsigned int USI;
+typedef void VOID;
+typedef unsigned char BI;
+typedef signed8 QI;
+typedef signed16 HI;
+typedef signed32 SI;
+typedef unsigned8 UQI;
+typedef unsigned16 UHI;
+typedef unsigned32 USI;
 
 #ifdef HAVE_LONGLONG
-typedef long long DI;
-typedef unsigned long long UDI;
+typedef signed64 DI;
+typedef unsigned64 UDI;
 #define GETLODI(di) ((SI) (di))
-#define GETHIDI(di) ((SI) ((di) >> 32))
+#define GETHIDI(di) ((SI) ((UDI) (di) >> 32))
 #define SETLODI(di, val) ((di) = (((di) & 0xffffffff00000000LL) | (val)))
 #define SETHIDI(di, val) ((di) = (((di) & 0xffffffffLL) | (((DI) (val)) << 32)))
-#define SETDI(di, hi, lo) ((di) = MAKEDI (hi, lo))
-#define MAKEDI(hi, lo) ((((DI) (hi)) << 32) | ((DI) (lo)))
+#define MAKEDI(hi, lo) ((((DI) (SI) (hi)) << 32) | ((UDI) (USI) (lo)))
 #else
+/* DI mode support if "long long" doesn't exist.
+   At one point CGEN supported K&R C compilers, and ANSI C compilers without
+   "long long".  One can argue the various merits of keeping this in or
+   throwing it out.  I went to the trouble of adding it so for the time being
+   I'm leaving it in.  */
 typedef struct { SI hi,lo; } DI;
 typedef DI UDI;
 #define GETLODI(di) ((di).lo)
 #define GETHIDI(di) ((di).hi)
 #define SETLODI(di, val) ((di).lo = (val))
 #define SETHIDI(di, val) ((di).hi = (val))
-#define SETDI(di, hi, lo) ((di) = MAKEDI (hi, lo))
 extern DI make_struct_di (SI, SI);
 #define MAKEDI(hi, lo) (make_struct_di ((hi), (lo)))
 #endif
 
-/* FIXME: Need to provide libraries if these aren't appropriate for target,
-   or user's needs.  */
-typedef float SF;
-typedef double DF;
-typedef double XF; /* FIXME: configure, provide library */
-typedef double TF; /* FIXME: configure, provide library */
-
-struct argbuf;
-struct cgen_insn;
-struct scache;
-
-/* This is used to record extracted raw data from an instruction, among other
-   things.  It must be a host data type, and not a target one so USI is
-   inappropriate.  */
+/* These are used to record extracted raw data from an instruction, among other
+   things.  It must be a host data type, and not a target one.  */
+typedef int INT;
 typedef unsigned int UINT;
 
-typedef unsigned long PCADDR;
-typedef unsigned long ADDR;
-typedef /*FIXME*/ unsigned long insn_t;
-
-/* Forward declaration of STATE.
-   Must be defined before profile.h and other module headers.  */
-typedef struct sim_state *STATE;
-\f
-/* Execution support.
-
-   Semantic functions come in two versions.
-   One that uses the cache, and one that doesn't.
-   The one that doesn't may eventually be thrown away or replaced with
-   something else.  */
-
-/* ??? The cache stuff is still wip, but it at least works.  */
-
-#ifdef SCACHE_P
-
-/* iaddr: instruction address */
-typedef PCADDR IADDR;
-/* cia: current instruction address */
-typedef PCADDR CIA;
-#define CIA_ADDR(cia) (cia)
-typedef struct scache *SEM_ARG;
-#define EX_FN_NAME(fn) CGEN_CAT3 (exc,_,fn)
-#define SEM_FN_NAME(fn) CGEN_CAT3 (semc,_,fn)
-
-/* extract.c support */
-/* scache_unset is a cache entry that is never used.
-   It's raison d'etre is so BRANCH_VIA_CACHE doesn't have to test for
-   newval.cache == NULL.  */
-extern struct scache scache_unset;
-#define RECORD_IADDR(fld, val) \
-do { (fld) = (val); } while (0)
-
-/* semantics.c support */
-#define SEM_ARGBUF(sem_arg) (&(sem_arg)->argbuf)
-#define SEM_NEXT_PC(sc) ((sc)->next)
-#define SEM_BRANCH_VIA_CACHE(sc, newval) (newval)
-#define SEM_BRANCH_VIA_ADDR(sc, newval) (newval)
-/* Return address a branch insn will branch to.
-   This is only used during tracing.  */
-#define SEM_NEW_PC_ADDR(new_pc) (new_pc)
-
-#else /* ! SCACHE_P */
-
-typedef PCADDR IADDR;
-typedef PCADDR CIA;
-#define CIA_ADDR(cia) (cia)
-typedef struct argbuf *SEM_ARG;
-#define EX_FN_NAME(fn) CGEN_CAT3 (ex,_,fn)
-#define SEM_FN_NAME(fn) CGEN_CAT3 (sem,_,fn)
-
-/* extract.c support */
-#define RECORD_IADDR(fld, val) \
-do { (fld) = (val); } while (0)
-
-/* semantics.c support */
-#define SEM_ARGBUF(sem_arg) (sem_arg)
-#define SEM_NEXT_PC(abuf) (abuf->addr + abuf->length)
-#define SEM_BRANCH_VIA_CACHE(abuf, newval) (newval)
-#define SEM_BRANCH_VIA_ADDR(abuf, newval) (newval)
-#define SEM_NEW_PC_ADDR(new_pc) (new_pc)
-
-#endif /* ! SCACHE_P */
-\f
-#define EXTRACT_SIGNED(val, total, start, length) \
-(((((val) >> ((total) - ((start) + (length)))) & ((1 << (length)) - 1)) \
-  ^ (1 << ((length) - 1))) \
- - (1 << ((length) - 1)))
-
-#define EXTRACT_UNSIGNED(val, total, start, length) \
-(((val) >> ((total) - ((start) + (length)))) & ((1 << (length)) - 1))
+typedef unsigned_address ADDR;  /* FIXME: wip*/
+typedef unsigned_address IADDR; /* FIXME: wip*/
 
-/* Compute number of longs required to hold N bits.  */
-#define HOST_LONGS_FOR_BITS(n) \
-  (((n) + sizeof (long) * 8 - 1) / sizeof (long) * 8)
+/* fp types are in cgen-fpu.h */
 
 #endif /* CGEN_TYPES_H */
This page took 0.025917 seconds and 4 git commands to generate.