aboutsummaryrefslogtreecommitdiff
path: root/sim/common/cgen-types.h
diff options
context:
space:
mode:
authorDavid Edelsohn <dje.gcc@gmail.com>1997-05-01 01:48:27 +0000
committerDavid Edelsohn <dje.gcc@gmail.com>1997-05-01 01:48:27 +0000
commitb9c8cd102327327d3367feb770f41e051243f7de (patch)
treec151d6c7f179f0986f005a35070a81324f7b9db8 /sim/common/cgen-types.h
parent070573509fc9cd4a23e72675df94e6dea592853f (diff)
downloadgdb-b9c8cd102327327d3367feb770f41e051243f7de.zip
gdb-b9c8cd102327327d3367feb770f41e051243f7de.tar.gz
gdb-b9c8cd102327327d3367feb770f41e051243f7de.tar.bz2
* cgen-mem.h, cgen-scache.[ch], cgen-sem.h, cgen-sim.h: New files.
* cgen-trace.[ch], cgen-types.h, cgen-utils.c, genmloop.sh: New files. * sim-model.c: New file.
Diffstat (limited to 'sim/common/cgen-types.h')
-rw-r--r--sim/common/cgen-types.h176
1 files changed, 176 insertions, 0 deletions
diff --git a/sim/common/cgen-types.h b/sim/common/cgen-types.h
new file mode 100644
index 0000000..ad22f46
--- /dev/null
+++ b/sim/common/cgen-types.h
@@ -0,0 +1,176 @@
+/* Types for Cpu tools GENerated simulators.
+ Copyright (C) 1996, 1997 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.
+
+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. */
+
+#ifndef CGEN_TYPES_H
+#define CGEN_TYPES_H
+
+#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
+
+extern const char *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;
+
+#ifdef HAVE_LONGLONG
+typedef long long DI;
+typedef unsigned long long UDI;
+#define GETLODI(di) ((SI) (di))
+#define GETHIDI(di) ((SI) ((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)))
+#else
+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. */
+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;
+
+/* 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 */
+
+#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))
+
+/* Compute number of longs required to hold N bits. */
+#define HOST_LONGS_FOR_BITS(n) \
+ (((n) + sizeof (long) * 8 - 1) / sizeof (long) * 8)
+
+#endif /* CGEN_TYPES_H */