X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fcommon%2Fcgen-types.h;h=259aed299ab71342b65d6dcccb2d5d43820d5e58;hb=423054beadf317757d43aefb9eddfe711a42e3e1;hp=ad22f467efc4c40a804ce35587d3f6f659380eee;hpb=e98fe4f7b54cbdf29aef9287bbb1bea8801dd05a;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/common/cgen-types.h b/sim/common/cgen-types.h index ad22f467ef..259aed299a 100644 --- a/sim/common/cgen-types.h +++ b/sim/common/cgen-types.h @@ -1,176 +1,105 @@ /* Types for Cpu tools GENerated simulators. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996-2020 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 . */ + +/* 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 -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; - -/* 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)) +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 */