/* ACC -- Automatic Compiler Configuration
 
 
 
   Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
 
   All Rights Reserved.
 
 
 
   This software is a copyrighted work licensed under the terms of
 
   the GNU General Public License. Please consult the file "ACC_LICENSE"
 
   for details.
 
 
 
   Markus F.X.J. Oberhumer
 
   <markus@oberhumer.com>
 
   http://www.oberhumer.com/
 
 */
 
 
 
 
 
/*
 
 * Memory Model - exactly one of:
 
 *
 
 *   ACC_MM_FLAT            [default]
 
 *   ACC_MM_TINY
 
 *   ACC_MM_SMALL
 
 *   ACC_MM_MEDIUM
 
 *   ACC_MM_COMPACT
 
 *   ACC_MM_LARGE
 
 *   ACC_MM_HUGE
 
 */
 
 
 
#if (ACC_OS_DOS16 || ACC_OS_OS216 || ACC_OS_WIN16)
 
 
 
#if (UINT_MAX != ACC_0xffffL)
 
#  error "this should not happen"
 
#endif
 
#if defined(__TINY__) || defined(M_I86TM) || defined(_M_I86TM)
 
#  define ACC_MM_TINY           1
 
#elif defined(__HUGE__) || defined(_HUGE_) || defined(M_I86HM) || defined(_M_I86HM)
 
#  define ACC_MM_HUGE           1
 
#elif defined(__SMALL__) || defined(M_I86SM) || defined(_M_I86SM) || defined(SMALL_MODEL)
 
#  define ACC_MM_SMALL          1
 
#elif defined(__MEDIUM__) || defined(M_I86MM) || defined(_M_I86MM)
 
#  define ACC_MM_MEDIUM         1
 
#elif defined(__COMPACT__) || defined(M_I86CM) || defined(_M_I86CM)
 
#  define ACC_MM_COMPACT        1
 
#elif defined(__LARGE__) || defined(M_I86LM) || defined(_M_I86LM) || defined(LARGE_MODEL)
 
#  define ACC_MM_LARGE          1
 
#elif (ACC_CC_AZTECC)
 
#  if defined(_LARGE_CODE) && defined(_LARGE_DATA)
 
#    define ACC_MM_LARGE        1
 
#  elif defined(_LARGE_CODE)
 
#    define ACC_MM_MEDIUM       1
 
#  elif defined(_LARGE_DATA)
 
#    define ACC_MM_COMPACT      1
 
#  else
 
#    define ACC_MM_SMALL        1
 
#  endif
 
#elif (ACC_CC_ZORTECHC && defined(__VCM__))
 
#  define ACC_MM_LARGE          1
 
#else
 
#  error "unknown memory model"
 
#endif
 
 
 
 
 
/* ACC_HAVE_MM_HUGE_PTR   ... working __huge pointers
 
 * ACC_HAVE_MM_HUGE_ARRAY ... char __huge x[256*1024L] works */
 
#define ACC_HAVE_MM_HUGE_PTR        1
 
#define ACC_HAVE_MM_HUGE_ARRAY      1
 
 
 
#if (ACC_MM_TINY)
 
#  undef ACC_HAVE_MM_HUGE_ARRAY
 
#endif
 
 
 
#if (ACC_CC_AZTECC || ACC_CC_PACIFICC || ACC_CC_ZORTECHC)
 
#  undef ACC_HAVE_MM_HUGE_PTR
 
#  undef ACC_HAVE_MM_HUGE_ARRAY
 
#elif (ACC_CC_DMC || ACC_CC_SYMANTECC)
 
#  undef ACC_HAVE_MM_HUGE_ARRAY
 
#elif (ACC_CC_MSC && defined(_QC))
 
#  undef ACC_HAVE_MM_HUGE_ARRAY
 
#  if (_MSC_VER < 600)
 
#    undef ACC_HAVE_MM_HUGE_PTR
 
#  endif
 
#elif (ACC_CC_TURBOC && (__TURBOC__ < 0x0295))
 
#  undef ACC_HAVE_MM_HUGE_ARRAY
 
#elif (ACC_CC_WATCOMC && (__WATCOMC__ >= 1200))
 
   /* pointer arithmetics with __huge arrays seems broken in OpenWatcom 1.x */
 
#  undef ACC_HAVE_MM_HUGE_ARRAY
 
#endif
 
 
 
#ifdef __cplusplus
 
extern "C" {
 
#endif
 
#if (ACC_CC_BORLANDC && (__BORLANDC__ >= 0x0200))
 
   extern void __near __cdecl _AHSHIFT(void);
 
#  define ACC_MM_AHSHIFT      ((unsigned) _AHSHIFT)
 
#elif (ACC_CC_DMC || ACC_CC_SYMANTECC || ACC_CC_ZORTECHC)
 
   extern void __near __cdecl _AHSHIFT(void);
 
#  define ACC_MM_AHSHIFT      ((unsigned) _AHSHIFT)
 
#elif (ACC_CC_MSC || ACC_CC_TOPSPEEDC)
 
   extern void __near __cdecl _AHSHIFT(void);
 
#  define ACC_MM_AHSHIFT      ((unsigned) _AHSHIFT)
 
#elif (ACC_CC_TURBOC && (__TURBOC__ >= 0x0295))
 
   extern void __near __cdecl _AHSHIFT(void);
 
#  define ACC_MM_AHSHIFT      ((unsigned) _AHSHIFT)
 
#elif ((ACC_CC_AZTECC || ACC_CC_PACIFICC || ACC_CC_TURBOC) && ACC_OS_DOS16)
 
#  define ACC_MM_AHSHIFT      12
 
#elif (ACC_CC_WATCOMC)
 
   extern unsigned char _HShift;
 
#  define ACC_MM_AHSHIFT      ((unsigned) _HShift)
 
#else
 
#  error "FIXME - implement ACC_MM_AHSHIFT"
 
#endif
 
#ifdef __cplusplus
 
} /* extern "C" */
 
#endif
 
 
 
 
 
#elif (ACC_ARCH_C166)
 
#if !defined(__MODEL__)
 
#  error "FIXME - C166 __MODEL__"
 
#elif ((__MODEL__) == 0)
 
#  define ACC_MM_SMALL          1
 
#elif ((__MODEL__) == 1)
 
#  define ACC_MM_SMALL          1
 
#elif ((__MODEL__) == 2)
 
#  define ACC_MM_LARGE          1
 
#elif ((__MODEL__) == 3)
 
#  define ACC_MM_TINY           1
 
#elif ((__MODEL__) == 4)
 
#  define ACC_MM_XTINY          1
 
#elif ((__MODEL__) == 5)
 
#  define ACC_MM_XSMALL         1
 
#else
 
#  error "FIXME - C166 __MODEL__"
 
#endif
 
 
 
 
 
#elif (ACC_ARCH_MCS251)
 
#if !defined(__MODEL__)
 
#  error "FIXME - MCS251 __MODEL__"
 
#elif ((__MODEL__) == 0)
 
#  define ACC_MM_SMALL          1
 
#elif ((__MODEL__) == 2)
 
#  define ACC_MM_LARGE          1
 
#elif ((__MODEL__) == 3)
 
#  define ACC_MM_TINY           1
 
#elif ((__MODEL__) == 4)
 
#  define ACC_MM_XTINY          1
 
#elif ((__MODEL__) == 5)
 
#  define ACC_MM_XSMALL         1
 
#else
 
#  error "FIXME - MCS251 __MODEL__"
 
#endif
 
 
 
 
 
#elif (ACC_ARCH_MCS51)
 
#if !defined(__MODEL__)
 
#  error "FIXME - MCS51 __MODEL__"
 
#elif ((__MODEL__) == 1)
 
#  define ACC_MM_SMALL          1
 
#elif ((__MODEL__) == 2)
 
#  define ACC_MM_LARGE          1
 
#elif ((__MODEL__) == 3)
 
#  define ACC_MM_TINY           1
 
#elif ((__MODEL__) == 4)
 
#  define ACC_MM_XTINY          1
 
#elif ((__MODEL__) == 5)
 
#  define ACC_MM_XSMALL         1
 
#else
 
#  error "FIXME - MCS51 __MODEL__"
 
#endif
 
 
 
#else
 
 
 
#  define ACC_MM_FLAT           1
 
 
 
#endif
 
 
 
 
 
#if (ACC_MM_FLAT)
 
#  define ACC_INFO_MM           "flat"
 
#elif (ACC_MM_TINY)
 
#  define ACC_INFO_MM           "tiny"
 
#elif (ACC_MM_SMALL)
 
#  define ACC_INFO_MM           "small"
 
#elif (ACC_MM_MEDIUM)
 
#  define ACC_INFO_MM           "medium"
 
#elif (ACC_MM_COMPACT)
 
#  define ACC_INFO_MM           "compact"
 
#elif (ACC_MM_LARGE)
 
#  define ACC_INFO_MM           "large"
 
#elif (ACC_MM_HUGE)
 
#  define ACC_INFO_MM           "huge"
 
#else
 
#  error "unknown memory model"
 
#endif
 
 
 
 
 
/*
 
vi:ts=4:et
 
*/