home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0638.ZIP / CCE_0638 / UPDATE / UPDATE30.ZOO / gcc-2.4.0 / atari.h next >
C/C++ Source or Header  |  1993-05-21  |  18KB  |  585 lines

  1. /* Definitions of target machine for GNU compiler.  atariST/TT version.
  2.    Copyright (C) 1987, 1988 Free Software Foundation, Inc.
  3.  
  4. This file is part of GNU CC.
  5.  
  6. GNU CC is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 2, or (at your option)
  9. any later version.
  10.  
  11. GNU CC is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with GNU CC; see the file COPYING.  If not, write to
  18. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  19.  
  20. /* The following Macros control the compilation
  21.  *
  22.  *    CROSSATARI    defined when making cross compiler for TOS or Minix
  23.  *    MINIX        defined when making cross compiler for MINIX only
  24.  *    atariminix    defined when making compiler for MINIX
  25.  *    atarist        defined when making compiler for TOS
  26.  */
  27.  
  28. #include "m68k/m68k.h"
  29.  
  30. #if defined(__GNUC__)
  31. #  if defined(alloca)
  32. #    undef alloca
  33. #  endif
  34. #  define alloca(x) __builtin_alloca(x)
  35. #endif
  36.  
  37. #if defined(sparc)
  38. # if !defined(alloca)
  39. #    include <alloca.h>
  40. # endif
  41. #endif
  42.  
  43. /* See m68k.h.  0 means 68000 with no 68881.  */
  44.  
  45. #define TARGET_DEFAULT 0    /* use this for a regular ST       */
  46. /* #define TARGET_DEFAULT 2    use this for a ST with 68881/82    */
  47. /* #define TARGET_DEFAULT 5    use this for a TT withOUT 68881/82 */
  48. /* #define TARGET_DEFAULT 7    use this for a TT with 68881/82    */
  49. /* #define TARGET_DEFAULT 0407  use this for a Falcon           */
  50. /*          may be vaporware but we are ready for it. yeah!! */
  51.       /* USE this for a 68040, when -m68040 is specified. In this
  52.          mode, the 881/2 instructions not on the 040 are not produced
  53.          see TARGET_68040 in m68k.h
  54.          (also note the difference vs TARGET_68040_ONLY) */
  55.  
  56. /* #define TARGET_DEFAULT 01000 use this for 68040_ONLY, dont know what
  57.                     this is useful for */
  58.  
  59.  
  60. /* These compiler options take an argument.  We ignore -target for now.  */
  61.  
  62. #define WORD_SWITCH_TAKES_ARG(STR)                \
  63.  (!strcmp (STR, "Tdata") || !strcmp (STR, "include")        \
  64.   || !strcmp (STR, "imacros") || !strcmp (STR, "target")    \
  65.   || !strcmp (STR, "assert"))
  66.  
  67. /* -m68040 requires special flags to the assembler.  */
  68. /* -m68000 requires special flags to the assembler.  */
  69.  
  70. /* -m68000 (on atari) need this flag to assembler, otherwise pc relative
  71.    code is produced where it should not be (in places where the
  72.    68000 only allows data ALTERABLE addressing modes) (++jrb 03/19/89) */
  73.  
  74. #if (TARGET_DEFAULT & 01000)
  75. /* note atleast gas-1.38 Patchlevel 2 required for mc68040 specific
  76.    support in the assembler.
  77.  */
  78. #define ASM_SPEC \
  79.  "%{m68000:-mc68000} %{mc68000:-mc68000} "\
  80.  "%{!mc68000:%{!m68000:%{!m68020*:%{!mc68020:%{!m68030:%{!mc68030:-mc68040}}}}}}"
  81. #else
  82. /* falcon/TT */
  83. #if (TARGET_DEFAULT & 5) /* note this is true for TARGET_DEFAULT == 0407 too */
  84. /* for the TT etc (020/030) also appropriate for m68040 (falcon)
  85.    ie: -m68020-40 (and not -m68040). Note that the
  86.    assembler does not need any special indication of the 040
  87.    when -m68020-40, only needs -mc68020. the only time
  88.    the assembler needs -mc68040 is when -m68040
  89.  */
  90. #define ASM_SPEC \
  91.  "%{m68000:-mc68000} %{mc68000:-mc68000} "\
  92.  "%{!mc68000:%{!m68000:%{m68040:-mc68040}}}"\
  93.  "%{!mc68000:%{!m68000:%{mc68040:-mc68040}}}"
  94. #else
  95. /* for a regular 68k ST */
  96. #define ASM_SPEC \
  97.  "%{m68040:-mc68040} "\
  98.  "%{!m68040:%{!mc68020:%{!m68020*:%{!m68030:%{!mc68030:-mc68000}}}}}"
  99. #endif /* TT /falcon */
  100. #endif /* m68040 */
  101.  
  102. /* Register to use for base-relative addressing. The BASE_ADDR_* macros
  103.    are for using GNU cpp's stringification feature. */
  104.  
  105. #define BASE_ADDR_REG    4        /* a4 */
  106. #undef PIC_OFFSET_TABLE_REGNUM
  107. #define PIC_OFFSET_TABLE_REGNUM    (BASE_ADDR_REG+8)    /* GCC register num */
  108. #define BASE_ADDR_STRING(X)    "a" #X
  109. #define BASE_ADDR_NAME(X)    BASE_ADDR_STRING(X)
  110.  
  111. #define COMMON_CPP_SPEC \
  112. "%{mshort:-D__MSHORT__} %{mint:-D__MINT__} "\
  113. "%{mbaserel:-D__MBASE__=" BASE_ADDR_NAME (BASE_ADDR_REG)\
  114.   " -D__MBASESTR__=\"" BASE_ADDR_NAME (BASE_ADDR_REG) "\"}"
  115.  
  116. #if (TARGET_DEFAULT & 5)
  117. #if (TARGET_DEFAULT & 2)
  118. #define CPP_SPEC \
  119.  "%{!msoft-float:-D__M68881__} "\
  120.  "%{!m68000:%{!mc68000:-D__M68020__ -D__mc68020__ %{!ansi:-Dmc68020}}} "\
  121.  COMMON_CPP_SPEC
  122. #else
  123. #define CPP_SPEC \
  124.  "%{m68881:-D__M68881__} "\
  125.  "%{!m68000:%{!mc68000:-D__M68020__ -D__mc68020__ %{!ansi:-Dmc68020}}} "\
  126.  COMMON_CPP_SPEC
  127. #endif
  128. #else
  129. #if (TARGET_DEFAULT & 2)
  130. #define CPP_SPEC \
  131.  "%{!msoft-float:-D__M68881__} "\
  132.  "%{m68020*:-D__M68020__ -D__mc68020__ %{!ansi:-Dmc68020}} "\
  133.  "%{mc68020:-D__M68020__ -D__mc68020__ %{!ansi:-Dmc68020}} "\
  134.  "%{m68030:-D__M68020__ -D__mc68020__ %{!ansi:-Dmc68020}} "\
  135.  "%{m68040:-D__M68020__ -D__mc68020__ %{!ansi:-Dmc68020}} "\
  136.  COMMON_CPP_SPEC
  137. #else
  138. #define CPP_SPEC \
  139.  "%{m68881:-D__M68881__} "\
  140.  "%{m68020*:-D__M68020__ -D__mc68020__ %{!ansi:-Dmc68020}} "\
  141.  "%{mc68020:-D__M68020__ -D__mc68020__ %{!ansi:-Dmc68020}} "\
  142.  "%{m68030:-D__M68020__ -D__mc68020__ %{!ansi:-Dmc68020}} "\
  143.  "%{m68040:-D__M68020__ -D__mc68020__ %{!ansi:-Dmc68020}} "\
  144.  COMMON_CPP_SPEC
  145. #endif
  146. #endif
  147.  
  148. /* Names to predefine in the preprocessor for this target machine.  */
  149.  
  150. #define CPP_PREDEFINES "-Datarist -Dgem -Dmc68000"
  151.  
  152. #define PTRDIFF_TYPE "long int"
  153. #define SIZE_TYPE "long unsigned int"
  154.  
  155. /* default exec dir */
  156. #ifndef STANDARD_EXEC_PREFIX
  157. #  ifdef MINIX
  158. #    define STANDARD_EXEC_PREFIX CROSSDIR "/lib/gcc-"
  159. #  else
  160. #    ifdef atariminix
  161. #      define STANDARD_EXEC_PREFIX "/usr/local/lib/gcc-"
  162. #    else
  163. #      define STANDARD_EXEC_PREFIX CROSSDIR "/lib/gcc-"
  164. #    endif
  165. #  endif
  166. #endif
  167.  
  168. #define STANDARD_STARTFILE_PREFIX ""
  169. #define EXECUTABLE_SUFFIX ".ttp"
  170.  
  171. /* Alignment of field after `int : 0' in a structure.  */
  172. /* recent gcc's have this as 16, this is left in for the benfit of */
  173.  /* older gcc */
  174. #undef EMPTY_FIELD_BOUNDARY
  175. #define EMPTY_FIELD_BOUNDARY 16
  176.  
  177. /* Every structure or union's size must be a multiple of 2 bytes.  */
  178.  
  179. #undef STRUCTURE_SIZE_BOUNDARY
  180. #define STRUCTURE_SIZE_BOUNDARY 16
  181.  
  182. #define DBX_DEBUGGING_INFO 1
  183.  
  184. #ifdef abort
  185. #undef abort
  186. #define abort fancy_abort
  187. #endif
  188.  
  189. /* Allow folding division by zero.  */
  190. #define REAL_INFINITY
  191.  
  192. /* Generate calls to memcpy, memcmp and memset.  */
  193. #define TARGET_MEM_FUNCTIONS
  194.  
  195. /* The value of `EDOM' on the target machine.  */
  196. #define TARGET_EDOM 89
  197.  
  198. /* This is how to create a rtl expression that refers to the global
  199.    "variable" `errno'.  */
  200. #define GEN_ERRNO_RTX \
  201.   gen_rtx (MEM, word_mode, gen_rtx (SYMBOL_REF, Pmode, "errno"))
  202.  
  203. #define FUNCTION_VALUEX(MODE)                            \
  204.   gen_rtx (REG, (MODE),                                \
  205.        ((TARGET_68881                            \
  206.          && ((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode)) \
  207.         ? 16 : 0))
  208.  
  209. #undef FUNCTION_VALUE
  210. #define FUNCTION_VALUE(VALTYPE,FUNC) FUNCTION_VALUEX (TYPE_MODE (VALTYPE))
  211.  
  212. /* This is how to output an assembler line defining a `double' constant.  */
  213.  
  214. #undef ASM_OUTPUT_DOUBLE
  215. #define ASM_OUTPUT_DOUBLE(FILE,VALUE)                \
  216.   {                                \
  217.     if (REAL_VALUE_ISINF (VALUE))                \
  218.       {                                \
  219.         if (REAL_VALUE_NEGATIVE (VALUE))            \
  220.           fprintf (FILE, "\t.double 0r-99e999\n");        \
  221.         else                            \
  222.           fprintf (FILE, "\t.double 0r99e999\n");        \
  223.       }                                \
  224.     else if (REAL_VALUE_ISNAN (VALUE))                \
  225.       { long l[2];                        \
  226.         REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), l);        \
  227.     fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", l[0], l[1]); \
  228.       }                                \
  229.     else                            \
  230.       { char dstr[30];                        \
  231.         REAL_VALUE_TO_DECIMAL ((VALUE), "%.17g", dstr);        \
  232.         fprintf (FILE, "\t.double 0r%s\n", dstr);        \
  233.       }                                \
  234.     }
  235.  
  236. /* This is how to output an assembler line defining a `float' constant.  */
  237.  
  238. #undef ASM_OUTPUT_FLOAT
  239. #define ASM_OUTPUT_FLOAT(FILE,VALUE)                \
  240.   {                                \
  241.     if (REAL_VALUE_ISINF (VALUE))                \
  242.       {                                \
  243.         if (REAL_VALUE_NEGATIVE (VALUE))            \
  244.           fprintf (FILE, "\t.single 0r-99e999\n");        \
  245.         else                            \
  246.           fprintf (FILE, "\t.single 0r99e999\n");            \
  247.       }                                \
  248.     else if (REAL_VALUE_ISNAN (VALUE))                \
  249.       { long l;                            \
  250.         REAL_VALUE_TO_TARGET_SINGLE ((VALUE), l);        \
  251.         fprintf (FILE, "\t.long 0x%lx\n", l);            \
  252.       }                                \
  253.     else                            \
  254.       { char dstr[30];                        \
  255.         REAL_VALUE_TO_DECIMAL ((VALUE), "%.9g", dstr);        \
  256.         fprintf (FILE, "\t.single 0r%s\n", dstr);        \
  257.       }                                \
  258.     }
  259.  
  260. /* This is how to output an assembler lines defining floating operands.
  261.    There's no way to output a NaN's fraction, so we lose it.  */
  262.   
  263. #undef ASM_OUTPUT_FLOAT_OPERAND
  264. #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE)        \
  265.  do {                                 \
  266.       if (CODE != 'f')                        \
  267.         {                            \
  268.           long l;                        \
  269.           REAL_VALUE_TO_TARGET_SINGLE (VALUE, l);        \
  270.           if (sizeof (int) == sizeof (long))            \
  271.             asm_fprintf ((FILE), "%I0x%x", l);            \
  272.           else                            \
  273.             asm_fprintf ((FILE), "%I0x%lx", l);            \
  274.         }                            \
  275.       else if (REAL_VALUE_ISINF (VALUE))            \
  276.         {                            \
  277.           if (REAL_VALUE_NEGATIVE (VALUE))            \
  278.             asm_fprintf (FILE, "%I0r-99e999");            \
  279.           else                            \
  280.             asm_fprintf (FILE, "%I0r99e999");            \
  281.         }                            \
  282.       else if (REAL_VALUE_MINUS_ZERO (VALUE))            \
  283.         {                            \
  284.           asm_fprintf (FILE, "%I0r-0.0");            \
  285.         }                            \
  286.       else                            \
  287.         { char dstr[30];                    \
  288.           REAL_VALUE_TO_DECIMAL ((VALUE), "%.9g", dstr);    \
  289.           asm_fprintf (FILE, "%I0r%s", dstr);            \
  290.         }                            \
  291.     } while (0)
  292.  
  293. #undef ASM_OUTPUT_DOUBLE_OPERAND
  294. #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE)                \
  295.  do { if (REAL_VALUE_ISINF (VALUE))                    \
  296.         {                                \
  297.           if (REAL_VALUE_NEGATIVE (VALUE))                \
  298.             asm_fprintf (FILE, "%I0r-99e999");                \
  299.           else                                \
  300.             asm_fprintf (FILE, "%I0r99e999");                \
  301.         }                                \
  302.       else if (REAL_VALUE_MINUS_ZERO (VALUE))                \
  303.         {                                \
  304.           asm_fprintf (FILE, "%I0r-0.0");                \
  305.         }                                \
  306.       else                                \
  307.         { char dstr[30];                        \
  308.           REAL_VALUE_TO_DECIMAL ((VALUE), "%.17g", dstr);        \
  309.           asm_fprintf (FILE, "%I0r%s", dstr);                \
  310.         }                                \
  311.     } while (0)
  312.  
  313. #ifndef ASM_COMMENT_START
  314. #define ASM_COMMENT_START " | "
  315. #endif
  316.  
  317. /* given that symbolic_operand(X), return TRUE if no special
  318.    base relative relocation is necessary */
  319.  
  320. #define LEGITIMATE_BASEREL_OPERAND_P(X) \
  321.   (flag_pic == 3 && read_only_operand (X))
  322.  
  323. #undef LEGITIMATE_PIC_OPERAND_P
  324. #define LEGITIMATE_PIC_OPERAND_P(X) \
  325.   (! symbolic_operand (X, VOIDmode) || LEGITIMATE_BASEREL_OPERAND_P (X))
  326.  
  327.  
  328. /* Define this macro if references to a symbol must be treated
  329.    differently depending on something about the variable or
  330.    function named by the symbol (such as what section it is in).
  331.  
  332.    The macro definition, if any, is executed immediately after the
  333.    rtl for DECL or other node is created.
  334.    The value of the rtl will be a `mem' whose address is a
  335.    `symbol_ref'.
  336.  
  337.    The usual thing for this macro to do is to a flag in the
  338.    `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
  339.    name string in the `symbol_ref' (if one bit is not enough
  340.    information).
  341.  
  342.    On the Atari we use this to indicate if a symbol is in text or
  343.    data space, as well as to distinguish functions from data. */
  344.  
  345. #define ENCODE_SECTION_INFO(DECL)\
  346. do                                    \
  347.   {                                    \
  348.     if (TREE_CODE (DECL) == FUNCTION_DECL)                \
  349.       {                                    \
  350.         SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;        \
  351.     SYMBOL_REF_USED (XEXP (DECL_RTL (DECL), 0)) = 1;        \
  352.       }                                    \
  353.     else                                \
  354.       {                                    \
  355.     rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd'        \
  356.            ? TREE_CST_RTL (DECL) : DECL_RTL (DECL));        \
  357.     if (RTX_UNCHANGING_P (rtl) && !MEM_VOLATILE_P (rtl))        \
  358.       SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;                \
  359.       }                                    \
  360.   }                                    \
  361. while (0)
  362.  
  363. #if 0
  364. #undef SELECT_RTX_SECTION
  365. #define SELECT_RTX_SECTION(MODE, X)                    \
  366. {                                    \
  367.   if (!flag_pic || LEGITIMATE_BASEREL_OPERAND_P (X))            \
  368.     readonly_data_section();                        \
  369.   else if (LEGITIMATE_PIC_OPERAND_P (X))                \
  370.     readonly_data_section();                        \
  371.   else                                    \
  372.     data_section();                            \
  373. }
  374. #else
  375. #undef SELECT_RTX_SECTION
  376. #define SELECT_RTX_SECTION(MODE, X) readonly_data_section ();
  377. #endif
  378.  
  379. /* according to varasm.c, RELOC referrs *only* to whether constants (!)
  380.    are addressed by address. This doesn't matter in baserelative code,
  381.    so we allow (inspite of flag_pic) readonly_data_section() in that
  382.    case */
  383.  
  384. #undef SELECT_SECTION
  385. #define SELECT_SECTION(DECL, RELOC)                    \
  386. {                                    \
  387.   if (TREE_CODE (DECL) == STRING_CST)                    \
  388.     {                                    \
  389.       if (! flag_writable_strings)                    \
  390.     readonly_data_section ();                    \
  391.       else                                \
  392.     data_section ();                        \
  393.     }                                    \
  394.   else if (TREE_CODE (DECL) == VAR_DECL)                \
  395.     {                                    \
  396.       if ((flag_pic && flag_pic != 3 && RELOC)                \
  397.       || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL))        \
  398.     data_section ();                        \
  399.       else                                \
  400.     readonly_data_section ();                    \
  401.     }                                    \
  402.   else                                    \
  403.     readonly_data_section ();                        \
  404. }
  405.  
  406. #define ASM_OUTPUT_EXTERNAL_LIBCALL(asm_out_file,fun)
  407.  
  408. /* Don't default to pcc-struct-return, because gcc is the only compiler, and
  409.    we want to retain compatibility with older gcc versions.  */
  410. #define DEFAULT_PCC_STRUCT_RETURN 0
  411.  
  412. /* specs for start file and link specs */
  413.  
  414. #ifndef CROSSATARI
  415.  
  416. #ifdef atariminix
  417. #define STARTFILE_SPEC  \
  418.   "%{pg:/usr/local/lib/gcrtso.o%s}\
  419.    %{!pg:\
  420.          %{p:/usr/local/lib/mcrtso.o%s}\
  421.          %{!p:/usr/local/lib/crtso.o%s}}"
  422. #else /* atarist */
  423. #define STARTFILE_SPEC  \
  424.  "$GNULIB$\\%{mbaserel:b}%{mint:m}%{pg:g}%{p:m}crt0.o%s"
  425. #endif
  426.  
  427. #else    /* CROSSATARI */
  428.  
  429. #ifdef MINIX
  430. #define STARTFILE_SPEC  \
  431.   "%{pg:" CROSSDIR "/lib/gcrtso.o%s}\
  432.    %{!pg:\
  433.          %{p:" CROSSDIR "/lib/mcrtso.o%s}\
  434.          %{!p:" CROSSDIR "/lib/crtso.o%s}}"
  435. #else
  436. #define STARTFILE_SPEC  \
  437.   CROSSDIR "/lib/%{mbaserel:b}%{mint:m}%{pg:g}%{p:m}crt0.o%s"
  438. #endif
  439. #endif /* CROSSATARI */
  440.  
  441. /* NOTE: for ataris we dont need to do anything special for -a or -tcov
  442.    as bb_* routines will automatically be pulled in from the libraries
  443.    as required when they are referenced by the generated code.
  444.  */
  445.  
  446. #ifdef MINIX
  447. #define LIB_SPEC \
  448.   "%{mshort:" CROSSDIR "/lib/libc.a}\
  449.    %{!mshort:" CROSSDIR "/lib/libc32.a}"
  450. #else
  451. #ifdef atariminix
  452. #define LIB_SPEC \
  453.   "%{mshort:/usr/local/lib/libc.a}\
  454.    %{!mshort:/usr/local/lib/libc32.a}"
  455. #else /* atarist cross or native */
  456.  
  457. #ifndef __GPLUSPLUS__
  458. #define LIB_SPEC \
  459.  "%{mint:-l%{mbaserel:b}mint%{gg:g}%{mshort:16}}\
  460.  -l%{mbaserel:b}gnu%{gg:g}%{mshort:16}"
  461. #else /* atariSt g++ */
  462. #define LIB_SPEC \
  463.  "%{mint:-l%{mbaserel:b}mint%{gg:g}%{mshort:16}}\
  464.  -l%{mbaserel:b}g++%{gg:g}%{mshort:16}\
  465.  -l%{mbaserel:b}gnu%{gg:g}%{mshort:16}"
  466. #endif
  467.  
  468. #endif
  469. #endif
  470.  
  471. /* Tell linker to make sharable text executable */
  472.  
  473. #define LINK_SPEC "%{mbaserel:-n}"
  474.  
  475. /* add -mint : meanining
  476.    pre-procees with -D__MINT__
  477.    compile with -mint    (target_flags & 010000) (this flag is
  478.      currently not used by cc1, but maybe later)
  479.    link with mcrt0.o and -lmint -lgnu
  480.    
  481.  */
  482.  
  483. #undef TARGET_SWITCHES
  484. #define TARGET_SWITCHES  \
  485.   { { "68020", 5},                \
  486.     { "c68020", 5},                \
  487.     { "68881", 2},                \
  488.     { "bitfield", 4},                \
  489.     { "68000", -5},                \
  490.     { "c68000", -5},                \
  491.     { "soft-float", -0102},            \
  492.     { "nobitfield", -4},            \
  493.     { "rtd", 8},                \
  494.     { "nortd", -8},                \
  495.     { "short", 040},                \
  496.     { "noshort", -040},                \
  497.     { "fpa", 0100},                \
  498.     { "nofpa", -0100},                \
  499.     { "sky", 0200},                \
  500.     { "nosky", -0200},                \
  501.     { "68020-40", 0407},                \
  502.     { "68030", -01400},                \
  503.     { "68030", 5},                \
  504.     { "68040", 01007},            \
  505.     { "pcrel", 02000},                \
  506.     { "nopcrel", -02000},            \
  507.     { "baserel", 04000},            \
  508.     { "nobaserel", -04000},            \
  509.     { "int", 010000},                \
  510.     { "noint", -010000},            \
  511.     { "", TARGET_DEFAULT}}
  512.  
  513. /* these two should never be used, #define them here so they are'nt
  514.    in cccp.c
  515. */
  516. #define STANDARD_INCLUDE_DIR    8086_sucks
  517. #define LOCAL_INCLUDE_DIR    80486_sucks
  518.  
  519. /* all the INCLUDE_DEFAULTS */
  520. #ifdef CROSSATARI    /* TOS or MINIX cross compiler */
  521. #ifndef SYSTEM_INCLUDE_DIR
  522. #  define SYSTEM_INCLUDE_DIR        CROSSINC
  523. #endif
  524. #ifndef SYSTEM_GPLUSPLUS_INCLUDE_DIR
  525. #  define SYSTEM_GPLUSPLUS_INCLUDE_DIR    GPLUSPLUS_INCLUDE_DIR
  526. #endif
  527. #endif
  528.  
  529. #ifdef atarist        /* TOS native compiler */
  530. #ifndef SYSTEM_INCLUDE_DIR
  531. #  define SYSTEM_INCLUDE_DIR        "\\gnu\\lib"
  532. #endif
  533. #ifndef SYSTEM_GPLUSPLUS_INCLUDE_DIR
  534. #  define SYSTEM_GPLUSPLUS_INCLUDE_DIR    "\\gnu\\g++-inc"
  535. #endif
  536. #endif
  537.  
  538. #ifdef atariminix    /* MINIX native compiler */
  539. #ifndef SYSTEM_INCLUDE_DIR
  540. #  define SYSTEM_INCLUDE_DIR        "/usr/local/gcc-include"
  541. #endif
  542. #ifndef SYSTEM_GPLUSPLUS_INCLUDE_DIR
  543. #  define SYSTEM_GPLUSPLUS_INCLUDE_DIR    "/usr/local/g++-inc"
  544. #endif
  545. #endif
  546.  
  547. #define INCLUDE_DEFAULTS            \
  548.     {                        \
  549.           { SYSTEM_INCLUDE_DIR, 0 },        \
  550.           { SYSTEM_GPLUSPLUS_INCLUDE_DIR, 1 },  \
  551.           { 0, 0 }                \
  552.     }
  553.  
  554. #ifdef atarist
  555. void atari_output_filename();
  556.  
  557. #define FILE_NAME_NONDIRECTORY(X)        \
  558.     atari_filename_nondirectory(X);
  559. extern char *atari_filename_nondirectory();
  560.  
  561. #define DBX_OUTPUT_MAIN_SOURCE_DIRECTORY(file,cwd) \
  562.     fprintf (file, "%s \"", ASM_STABS_OP);    \
  563.     atari_output_filename (file, cwd);    \
  564.     fprintf( file, "\\\\\",%d,0,0,%s\n", N_SO, <ext_label_name[1])
  565.  
  566. #define DBX_OUTPUT_MAIN_SOURCE_FILENAME(file,name) \
  567.     fprintf (file, "%s \"", ASM_STABS_OP);    \
  568.     atari_output_filename (file, name);    \
  569.     fprintf (file, "\",%d,0,0,%s\n", N_SO, <ext_label_name[1]);    \
  570.     text_section();                \
  571.     ASM_OUTPUT_INTERNAL_LABEL (file, "Ltext", 0)
  572.  
  573. #define DBX_OUTPUT_SOURCE_FILENAME(file,name)    \
  574.     ASM_GENERATE_INTERNAL_LABEL (ltext_label_name, "Ltext", 0);    \
  575.     fprintf (file, "%s \"", ASM_STABS_OP);    \
  576.     atari_output_filename (file, name);    \
  577.     fprintf (file, "\",%d,0,0,%s\n", N_SOL, <ext_label_name[1])
  578.  
  579. #undef  PATH_SEPARATOR
  580. #define PATH_SEPARATOR    ','
  581. #define PATH_SEP_STR    ","
  582. #else
  583. #define PATH_SEP_STR    ":"
  584. #endif
  585.