#ifndef SIM_CONFIG_H
#define SIM_CONFIG_H
#if defined(__NetBSD__)
# include <machine/endian.h>
# if (WITH_HOST_BYTE_ORDER == 0)
# undef WITH_HOST_BYTE_ORDER
# define WITH_HOST_BYTE_ORDER BYTE_ORDER
# endif
# if (BYTE_ORDER != WITH_HOST_BYTE_ORDER)
# error "host endian incorrectly configured, check config.h"
# endif
#endif
#if defined(__linux__)
# include <endian.h>
# if defined(__LITTLE_ENDIAN) && !defined(LITTLE_ENDIAN)
# define LITTLE_ENDIAN __LITTLE_ENDIAN
# endif
# if defined(__BIG_ENDIAN) && !defined(BIG_ENDIAN)
# define BIG_ENDIAN __BIG_ENDIAN
# endif
# if defined(__BYTE_ORDER) && !defined(BYTE_ORDER)
# define BYTE_ORDER __BYTE_ORDER
# endif
# if (WITH_HOST_BYTE_ORDER == 0)
# undef WITH_HOST_BYTE_ORDER
# define WITH_HOST_BYTE_ORDER BYTE_ORDER
# endif
# if (BYTE_ORDER != WITH_HOST_BYTE_ORDER)
# error "host endian incorrectly configured, check config.h"
# endif
#endif
#ifndef LITTLE_ENDIAN
#define LITTLE_ENDIAN 1234
#endif
#ifndef BIG_ENDIAN
#define BIG_ENDIAN 4321
#endif
#if defined(sparc) || defined(__sparc__)
# if (WITH_HOST_BYTE_ORDER == 0)
# undef WITH_HOST_BYTE_ORDER
# define WITH_HOST_BYTE_ORDER BIG_ENDIAN
# endif
# if (WITH_HOST_BYTE_ORDER != BIG_ENDIAN)
# error "sun was big endian last time I looked ..."
# endif
#endif
#if defined(i386) || defined(i486) || defined(i586) || defined (i686) || defined(__i386__) || defined(__i486__) || defined(__i586__) || defined (__i686__)
# if (WITH_HOST_BYTE_ORDER == 0)
# undef WITH_HOST_BYTE_ORDER
# define WITH_HOST_BYTE_ORDER LITTLE_ENDIAN
# endif
# if (WITH_HOST_BYTE_ORDER != LITTLE_ENDIAN)
# error "x86 was little endian last time I looked ..."
# endif
#endif
#if (defined (__i486__) || defined (__i586__) || defined (__i686__)) && defined(__GNUC__) && WITH_BSWAP
#undef htonl
#undef ntohl
#define htonl(IN) __extension__ ({ int _out; __asm__ ("bswap %0" : "=r" (_out) : "0" (IN)); _out; })
#define ntohl(IN) __extension__ ({ int _out; __asm__ ("bswap %0" : "=r" (_out) : "0" (IN)); _out; })
#endif
#if defined(_POWER) && defined(_AIX)
# if (WITH_HOST_BYTE_ORDER == 0)
# undef WITH_HOST_BYTE_ORDER
# define WITH_HOST_BYTE_ORDER BIG_ENDIAN
# endif
# if (WITH_HOST_BYTE_ORDER != BIG_ENDIAN)
# error "Power/PowerPC AIX was big endian last time I looked ..."
# endif
#endif
#if defined(__PPC) && defined(__sun__)
# if (WITH_HOST_BYTE_ORDER == 0)
# undef WITH_HOST_BYTE_ORDER
# define WITH_HOST_BYTE_ORDER LITTLE_ENDIAN
# endif
# if (WITH_HOST_BYTE_ORDER != LITTLE_ENDIAN)
# error "Solaris on PowerPCs was little endian last time I looked ..."
# endif
#endif
#if defined(__hppa__)
# if (WITH_HOST_BYTE_ORDER == 0)
# undef WITH_HOST_BYTE_ORDER
# define WITH_HOST_BYTE_ORDER BIG_ENDIAN
# endif
# if (WITH_HOST_BYTE_ORDER != BIG_ENDIAN)
# error "HP/PA was big endian last time I looked ..."
# endif
#endif
#if defined(__MIPSEB__)
# if (WITH_HOST_BYTE_ORDER == 0)
# undef WITH_HOST_BYTE_ORDER
# define WITH_HOST_BYTE_ORDER BIG_ENDIAN
# endif
# if (WITH_HOST_BYTE_ORDER != BIG_ENDIAN)
# error "MIPSEB was big endian last time I looked ..."
# endif
#endif
#if defined(__MIPSEL__)
# if (WITH_HOST_BYTE_ORDER == 0)
# undef WITH_HOST_BYTE_ORDER
# define WITH_HOST_BYTE_ORDER LITTLE_ENDIAN
# endif
# if (WITH_HOST_BYTE_ORDER != LITTLE_ENDIAN)
# error "MIPSEL was little endian last time I looked ..."
# endif
#endif
#if defined(__WIN32__)
# if (WITH_HOST_BYTE_ORDER == 0)
# undef WITH_HOST_BYTE_ORDER
# define WITH_HOST_BYTE_ORDER LITTLE_ENDIAN
# endif
# if (WITH_HOST_BYTE_ORDER != LITTLE_ENDIAN)
# error "Windows NT was little endian last time I looked ..."
# endif
#endif
#if defined(__osf__) && defined(__alpha__)
# if (WITH_HOST_BYTE_ORDER == 0)
# undef WITH_HOST_BYTE_ORDER
# define WITH_HOST_BYTE_ORDER LITTLE_ENDIAN
# endif
# if (WITH_HOST_BYTE_ORDER != LITTLE_ENDIAN)
# error "AXP running DEC unix was little endian last time I looked ..."
# endif
#endif
#define WITH_TREE_PROPERTIES 0
#ifndef WITH_HOST_BYTE_ORDER
#define WITH_HOST_BYTE_ORDER 0
#endif
#ifndef WITH_TARGET_BYTE_ORDER
#define WITH_TARGET_BYTE_ORDER 0
#endif
#ifndef WITH_DEFAULT_TARGET_BYTE_ORDER
#define WITH_DEFAULT_TARGET_BYTE_ORDER 0
#endif
extern int current_host_byte_order;
#define CURRENT_HOST_BYTE_ORDER (WITH_HOST_BYTE_ORDER \
? WITH_HOST_BYTE_ORDER \
: current_host_byte_order)
extern int current_target_byte_order;
#define CURRENT_TARGET_BYTE_ORDER (WITH_TARGET_BYTE_ORDER \
? WITH_TARGET_BYTE_ORDER \
: current_target_byte_order)
#ifndef WITH_XOR_ENDIAN
#define WITH_XOR_ENDIAN 0
#endif
#ifndef WITH_BSWAP
#define WITH_BSWAP 0
#endif
#if defined (WITH_SMP) && (WITH_SMP > 0)
#define MAX_NR_PROCESSORS WITH_SMP
#endif
#ifndef MAX_NR_PROCESSORS
#define MAX_NR_PROCESSORS 1
#endif
#ifndef WITH_TARGET_WORD_BITSIZE
#define WITH_TARGET_WORD_BITSIZE 32
#endif
#ifndef WITH_TARGET_ADDRESS_BITSIZE
#define WITH_TARGET_ADDRESS_BITSIZE WITH_TARGET_WORD_BITSIZE
#endif
#ifndef WITH_TARGET_CELL_BITSIZE
#define WITH_TARGET_CELL_BITSIZE WITH_TARGET_WORD_BITSIZE
#endif
#ifndef WITH_TARGET_FLOATING_POINT_BITSIZE
#define WITH_TARGET_FLOATING_POINT_BITSIZE 64
#endif
#ifndef WITH_TARGET_WORD_MSB
#define WITH_TARGET_WORD_MSB 0
#endif
enum sim_environment {
ALL_ENVIRONMENT,
USER_ENVIRONMENT,
VIRTUAL_ENVIRONMENT,
OPERATING_ENVIRONMENT
};
#ifdef WITH_ENVIRONMENT
#define SIM_HAVE_ENVIRONMENT
#endif
#ifndef WITH_ENVIRONMENT
#define WITH_ENVIRONMENT USER_ENVIRONMENT
#endif
#define DEFAULT_ENVIRONMENT (WITH_ENVIRONMENT != ALL_ENVIRONMENT \
? WITH_ENVIRONMENT \
: USER_ENVIRONMENT)
#ifndef WITH_CALLBACK_MEMORY
#define WITH_CALLBACK_MEMORY 1
#endif
#ifndef WITH_MODULO_MEMORY
#define WITH_MODULO_MEMORY 0
#endif
enum sim_alignments {
MIXED_ALIGNMENT,
NONSTRICT_ALIGNMENT,
STRICT_ALIGNMENT,
FORCED_ALIGNMENT,
};
extern enum sim_alignments current_alignment;
#if !defined (WITH_ALIGNMENT)
#define WITH_ALIGNMENT 0
#endif
#if !defined (WITH_DEFAULT_ALIGNMENT)
#define WITH_DEFAULT_ALIGNMENT 0
#endif
#define CURRENT_ALIGNMENT (WITH_ALIGNMENT \
? WITH_ALIGNMENT \
: current_alignment)
#if defined (WITH_FLOATING_POINT)
#define SOFT_FLOATING_POINT 1
#define HARD_FLOATING_POINT 2
extern int current_floating_point;
#define CURRENT_FLOATING_POINT (WITH_FLOATING_POINT \
? WITH_FLOATING_POINT \
: current_floating_point)
#endif
#ifndef WITH_ENGINE
#define WITH_ENGINE 1
#endif
#ifndef WITH_DEBUG
#define WITH_DEBUG 0
#endif
#ifndef WITH_TRACE
#define WITH_TRACE (-1)
#endif
#ifndef WITH_PROFILE
#define WITH_PROFILE (-1)
#endif
#ifndef WITH_ASSERT
#define WITH_ASSERT 1
#endif
#define MONITOR_INSTRUCTION_ISSUE 1
#define MONITOR_LOAD_STORE_UNIT 2
#define DEFAULT_WITH_MON (MONITOR_LOAD_STORE_UNIT \
| MONITOR_INSTRUCTION_ISSUE)
#ifndef WITH_MODEL
#define WITH_MODEL 0
#endif
#define CURRENT_MODEL (WITH_MODEL \
? WITH_MODEL \
: current_model)
#ifndef WITH_DEFAULT_MODEL
#define WITH_DEFAULT_MODEL DEFAULT_MODEL
#endif
#define MODEL_ISSUE_IGNORE (-1)
#define MODEL_ISSUE_PROCESS 1
#ifndef WITH_MODEL_ISSUE
#define WITH_MODEL_ISSUE 0
#endif
extern int current_model_issue;
#define CURRENT_MODEL_ISSUE (WITH_MODEL_ISSUE \
? WITH_MODEL_ISSUE \
: current_model_issue)
#define DONT_USE_STDIO 2
#define DO_USE_STDIO 1
#ifndef WITH_STDIO
#define WITH_STDIO 0
#endif
extern int current_stdio;
#define CURRENT_STDIO (WITH_STDIO \
? WITH_STDIO \
: current_stdio)
#ifndef WITH_REGPARM
#define WITH_REGPARM 0
#endif
#ifndef WITH_STDCALL
#define WITH_STDCALL 0
#endif
extern void sim_config_default (SIM_DESC sd);
extern SIM_RC sim_config (SIM_DESC sd);
extern void print_sim_config (SIM_DESC sd);
#endif