home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: Alpha / Whiteline Alpha.iso / progtool / c / gcc / gcc258s.zoo / tm.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-01-30  |  17.0 KB  |  578 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 -Acpu(m68k) -Amachine(m68k)"
  151.  
  152. /* default exec dir */
  153. #ifndef STANDARD_EXEC_PREFIX
  154. #  ifdef MINIX
  155. #    define STANDARD_EXEC_PREFIX CROSSDIR "/lib/gcc-"
  156. #  else
  157. #    ifdef atariminix
  158. #      define STANDARD_EXEC_PREFIX "/usr/local/lib/gcc-"
  159. #    else
  160. #      define STANDARD_EXEC_PREFIX CROSSDIR "/lib/gcc-"
  161. #    endif
  162. #  endif
  163. #endif
  164.  
  165. #define STANDARD_STARTFILE_PREFIX ""
  166. #define EXECUTABLE_SUFFIX ".ttp"
  167.  
  168. #define PTRDIFF_TYPE "long int"
  169. #define SIZE_TYPE "long unsigned int"
  170.  
  171. /* We must override m68k.h.  */
  172. #undef WCHAR_TYPE
  173. #undef WCHAR_TYPE_SIZE
  174. #define WCHAR_TYPE "short unsigned int"
  175. #define WCHAR_TYPE_SIZE 16
  176.  
  177. #if 1
  178. /* Don't try using XFmode.  */
  179. #undef LONG_DOUBLE_TYPE_SIZE
  180. #define LONG_DOUBLE_TYPE_SIZE 64
  181. #endif
  182.  
  183. /* Alignment of field after `int : 0' in a structure.  */
  184. /* recent gcc's have this as 16, this is left in for the benfit of */
  185.  /* older gcc */
  186. #undef EMPTY_FIELD_BOUNDARY
  187. #define EMPTY_FIELD_BOUNDARY 16
  188.  
  189. /* Every structure or union's size must be a multiple of 2 bytes.  */
  190.  
  191. #undef STRUCTURE_SIZE_BOUNDARY
  192. #define STRUCTURE_SIZE_BOUNDARY 16
  193.  
  194.  
  195. #define DBX_DEBUGGING_INFO 1
  196.  
  197. #ifdef abort
  198. #undef abort
  199. #define abort fancy_abort
  200. #endif
  201.  
  202. /* Allow folding division by zero.  */
  203. #define REAL_INFINITY
  204.  
  205. /* Generate calls to memcpy, memcmp and memset.  */
  206. #define TARGET_MEM_FUNCTIONS
  207.  
  208. /* The value of `EDOM' on the target machine.  */
  209. #define TARGET_EDOM 89
  210.  
  211. /* This is how to create a rtl expression that refers to the global
  212.    "variable" `errno'.  */
  213. #define GEN_ERRNO_RTX \
  214.   gen_rtx (MEM, word_mode, gen_rtx (SYMBOL_REF, Pmode, "errno"))
  215.  
  216. #define FUNCTION_VALUEX(MODE)                            \
  217.   gen_rtx (REG, (MODE),                                \
  218.        ((TARGET_68881                            \
  219.          && ((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode)) \
  220.         ? 16 : 0))
  221.  
  222. #undef FUNCTION_VALUE
  223. #define FUNCTION_VALUE(VALTYPE,FUNC) FUNCTION_VALUEX (TYPE_MODE (VALTYPE))
  224. #undef LIBCALL_VALUE
  225. #define LIBCALL_VALUE(MODE) FUNCTION_VALUEX (MODE)
  226.  
  227. /* 1 if N is a possible register number for a function value.  */
  228.  
  229. #undef FUNCTION_VALUE_REGNO_P
  230. #define FUNCTION_VALUE_REGNO_P(N) (((N) == 0) || (TARGET_68881 && ((N) == 16)))
  231.  
  232. /* Define this to be true when FUNCTION_VALUE_REGNO_P is true for
  233.    more than one register.  */
  234.  
  235. #undef NEEDS_UNTYPED_CALL
  236. #define NEEDS_UNTYPED_CALL (TARGET_68881)
  237.  
  238. /* This is how to output an assembler line defining a `double' constant.  */
  239.  
  240. #undef ASM_OUTPUT_DOUBLE
  241. #define ASM_OUTPUT_DOUBLE(FILE,VALUE)                \
  242.   {                                \
  243.     if (REAL_VALUE_ISINF (VALUE))                \
  244.       {                                \
  245.     if (REAL_VALUE_NEGATIVE (VALUE))            \
  246.       fprintf (FILE, "\t.double 0r-Inf\n");            \
  247.     else                            \
  248.       fprintf (FILE, "\t.double 0rInf\n");            \
  249.       }                                \
  250.     else if (REAL_VALUE_ISNAN (VALUE))                \
  251.       { long l[2];                        \
  252.     REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l);            \
  253.     fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", l[0], l[1]); \
  254.       }                                \
  255.     else if (REAL_VALUE_MINUS_ZERO (VALUE))            \
  256.       {                                \
  257.     fprintf (FILE, "\t.double 0r-0.0\n");            \
  258.       }                                \
  259.     else                            \
  260.       { char dstr[30];                        \
  261.     REAL_VALUE_TO_DECIMAL (VALUE, "%.17g", dstr);        \
  262.     fprintf (FILE, "\t.double 0r%s\n", dstr);        \
  263.       }                                \
  264.     }
  265.  
  266. /* This is how to output an assembler line defining a `float' constant.  */
  267.  
  268. #undef ASM_OUTPUT_FLOAT
  269. #define ASM_OUTPUT_FLOAT(FILE,VALUE)                \
  270.   {                                \
  271.     if (REAL_VALUE_ISINF (VALUE))                \
  272.       {                                \
  273.     if (REAL_VALUE_NEGATIVE (VALUE))            \
  274.       fprintf (FILE, "\t.single 0r-Inf\n");            \
  275.     else                            \
  276.       fprintf (FILE, "\t.single 0rInf\n");            \
  277.       }                                \
  278.     else if (REAL_VALUE_ISNAN (VALUE))                \
  279.       { long l;                            \
  280.     REAL_VALUE_TO_TARGET_SINGLE (VALUE, l);            \
  281.     fprintf (FILE, "\t.long 0x%lx\n", l);            \
  282.       }                                \
  283.     else if (REAL_VALUE_MINUS_ZERO (VALUE))            \
  284.       {                                \
  285.     fprintf (FILE, "\t.single 0r-0.0\n");            \
  286.       }                                \
  287.     else                            \
  288.       { char dstr[30];                        \
  289.     REAL_VALUE_TO_DECIMAL (VALUE, "%.9g", dstr);        \
  290.     fprintf (FILE, "\t.single 0r%s\n", dstr);        \
  291.       }                                \
  292.     }
  293.  
  294. /* This is how to output an assembler lines defining floating operands.  */
  295.   
  296. #undef ASM_OUTPUT_FLOAT_OPERAND
  297. #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE)        \
  298.  do {                                \
  299.       if (CODE != 'f' || REAL_VALUE_ISNAN (VALUE))        \
  300.     {                            \
  301.       long l;                        \
  302.       REAL_VALUE_TO_TARGET_SINGLE (VALUE, l);        \
  303.       asm_fprintf (FILE, "%I");                \
  304.       fprintf (FILE, "0x%lx", l);                \
  305.     }                            \
  306.       else if (REAL_VALUE_ISINF (VALUE))            \
  307.     {                            \
  308.       if (REAL_VALUE_NEGATIVE (VALUE))            \
  309.         asm_fprintf (FILE, "%I0r-Inf");            \
  310.       else                            \
  311.         asm_fprintf (FILE, "%I0rInf");            \
  312.     }                            \
  313.       else if (REAL_VALUE_MINUS_ZERO (VALUE))            \
  314.     {                            \
  315.       asm_fprintf (FILE, "%I0r-0.0");            \
  316.     }                            \
  317.       else                            \
  318.     { char dstr[30];                    \
  319.       REAL_VALUE_TO_DECIMAL (VALUE, "%.9g", dstr);        \
  320.       asm_fprintf (FILE, "%I0r%s", dstr);            \
  321.     }                            \
  322.     } while (0)
  323.  
  324. #undef ASM_OUTPUT_DOUBLE_OPERAND
  325. #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE)                \
  326.  do { if (REAL_VALUE_ISINF (VALUE))                    \
  327.     {                                \
  328.       if (REAL_VALUE_NEGATIVE (VALUE))                \
  329.         asm_fprintf (FILE, "%I0r-Inf");                \
  330.       else                                \
  331.         asm_fprintf (FILE, "%I0rInf");                \
  332.     }                                \
  333.       else if (REAL_VALUE_ISNAN (VALUE))                \
  334.     {                                \
  335.       long l[2];                            \
  336.       REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l);            \
  337.       asm_fprintf (FILE, "%I");                    \
  338.       fprintf (FILE, "0x%lx%08lx", l[0], l[1]);            \
  339.     }                                \
  340.       else if (REAL_VALUE_MINUS_ZERO (VALUE))                \
  341.     {                                \
  342.       asm_fprintf (FILE, "%I0r-0.0");                \
  343.     }                                \
  344.       else                                \
  345.     { char dstr[30];                        \
  346.       REAL_VALUE_TO_DECIMAL (VALUE, "%.17g", dstr);            \
  347.       asm_fprintf (FILE, "%I0r%s", dstr);                \
  348.     }                                \
  349.     } while (0)
  350.  
  351. #ifndef ASM_COMMENT_START
  352. #define ASM_COMMENT_START " | "
  353. #endif
  354.  
  355. /* given that symbolic_operand(X), return TRUE if no special
  356.    base relative relocation is necessary */
  357.  
  358. #define LEGITIMATE_BASEREL_OPERAND_P(X) \
  359.   (flag_pic == 3 && read_only_operand (X))
  360.  
  361. #undef LEGITIMATE_PIC_OPERAND_P
  362. #define LEGITIMATE_PIC_OPERAND_P(X) \
  363.   (! symbolic_operand (X, VOIDmode) || LEGITIMATE_BASEREL_OPERAND_P (X))
  364.  
  365. /* Define this macro if references to a symbol must be treated
  366.    differently depending on something about the variable or
  367.    function named by the symbol (such as what section it is in).
  368.  
  369.    The macro definition, if any, is executed immediately after the
  370.    rtl for DECL or other node is created.
  371.    The value of the rtl will be a `mem' whose address is a
  372.    `symbol_ref'.
  373.  
  374.    The usual thing for this macro to do is to a flag in the
  375.    `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
  376.    name string in the `symbol_ref' (if one bit is not enough
  377.    information).
  378.  
  379.    On the Atari we use this to indicate if a symbol is in text or
  380.    data space, as well as to distinguish functions from data. */
  381.  
  382. #define ENCODE_SECTION_INFO(DECL)\
  383. do                                    \
  384.   {                                    \
  385.     if (TREE_CODE (DECL) == FUNCTION_DECL)                \
  386.       {                                    \
  387.         SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;        \
  388.     SYMBOL_REF_USED (XEXP (DECL_RTL (DECL), 0)) = 1;        \
  389.       }                                    \
  390.     else                                \
  391.       {                                    \
  392.     rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd'        \
  393.            ? TREE_CST_RTL (DECL) : DECL_RTL (DECL));        \
  394.     if (RTX_UNCHANGING_P (rtl) && !MEM_VOLATILE_P (rtl))        \
  395.       SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;                \
  396.       }                                    \
  397.   }                                    \
  398. while (0)
  399.  
  400. #if 0
  401. #undef SELECT_RTX_SECTION
  402. #define SELECT_RTX_SECTION(MODE, X)                    \
  403. {                                    \
  404.   if (!flag_pic || LEGITIMATE_BASEREL_OPERAND_P (X))            \
  405.     readonly_data_section();                        \
  406.   else if (LEGITIMATE_PIC_OPERAND_P (X))                \
  407.     readonly_data_section();                        \
  408.   else                                    \
  409.     data_section();                            \
  410. }
  411. #else
  412. #undef SELECT_RTX_SECTION
  413. #define SELECT_RTX_SECTION(MODE, X) readonly_data_section ();
  414. #endif
  415.  
  416. /* according to varasm.c, RELOC referrs *only* to whether constants (!)
  417.    are addressed by address. This doesn't matter in baserelative code,
  418.    so we allow (inspite of flag_pic) readonly_data_section() in that
  419.    case */
  420.  
  421. #undef SELECT_SECTION
  422. #define SELECT_SECTION(DECL, RELOC)                    \
  423. {                                    \
  424.   if (TREE_CODE (DECL) == STRING_CST)                    \
  425.     {                                    \
  426.       if (! flag_writable_strings)                    \
  427.     readonly_data_section ();                    \
  428.       else                                \
  429.     data_section ();                        \
  430.     }                                    \
  431.   else if (TREE_CODE (DECL) == VAR_DECL)                \
  432.     {                                    \
  433.       if ((flag_pic && flag_pic != 3 && RELOC)                \
  434.       || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL))        \
  435.     data_section ();                        \
  436.       else                                \
  437.     readonly_data_section ();                    \
  438.     }                                    \
  439.   else                                    \
  440.     readonly_data_section ();                        \
  441. }
  442.  
  443. #define ASM_OUTPUT_EXTERNAL_LIBCALL(asm_out_file,fun)
  444.  
  445. /* Don't default to pcc-struct-return, because gcc is the only compiler, and
  446.    we want to retain compatibility with older gcc versions.  */
  447. #undef PCC_STATIC_STRUCT_RETURN
  448. #define DEFAULT_PCC_STRUCT_RETURN 0
  449.  
  450. /* specs for start file and link specs */
  451.  
  452. #ifndef CROSSATARI
  453.  
  454. #ifdef atariminix
  455. #define STARTFILE_SPEC  \
  456.   "%{pg:/usr/local/lib/gcrtso.o%s}\
  457.    %{!pg:\
  458.          %{p:/usr/local/lib/mcrtso.o%s}\
  459.          %{!p:/usr/local/lib/crtso.o%s}}"
  460. #else /* atarist */
  461. #define STARTFILE_SPEC  \
  462.  "$GNULIB$\\%{mbaserel:b}%{mint:m}%{pg:g}%{p:m}crt0.o%s"
  463. #endif
  464.  
  465. #else    /* CROSSATARI */
  466.  
  467. #ifdef MINIX
  468. #define STARTFILE_SPEC  \
  469.   "%{pg:" CROSSDIR "/lib/gcrtso.o%s}\
  470.    %{!pg:\
  471.          %{p:" CROSSDIR "/lib/mcrtso.o%s}\
  472.          %{!p:" CROSSDIR "/lib/crtso.o%s}}"
  473. #else
  474. #define STARTFILE_SPEC  \
  475.   CROSSDIR "/lib/%{mbaserel:b}%{mint:m}%{pg:g}%{p:m}crt0.o%s"
  476. #endif
  477. #endif /* CROSSATARI */
  478.  
  479. /* NOTE: for ataris we dont need to do anything special for -a or -tcov
  480.    as bb_* routines will automatically be pulled in from the libraries
  481.    as required when they are referenced by the generated code.
  482.  */
  483.  
  484. #ifdef MINIX
  485. #define LIB_SPEC \
  486.   "%{mshort:" CROSSDIR "/lib/libc.a}\
  487.    %{!mshort:" CROSSDIR "/lib/libc32.a}"
  488. #else
  489. #ifdef atariminix
  490. #define LIB_SPEC \
  491.   "%{mshort:/usr/local/lib/libc.a}\
  492.    %{!mshort:/usr/local/lib/libc32.a}"
  493. #else /* atarist cross or native */
  494.  
  495. #ifndef __GPLUSPLUS__
  496. #define LIB_SPEC \
  497.  "%{mint:-l%{mbaserel:b}mint%{gg:g}%{mshort:16}}\
  498.  -l%{mbaserel:b}gnu%{gg:g}%{mshort:16}"
  499. #else /* atariSt g++ */
  500. #define LIB_SPEC \
  501.  "%{mint:-l%{mbaserel:b}mint%{gg:g}%{mshort:16}}\
  502.  -l%{mbaserel:b}g++%{gg:g}%{mshort:16}\
  503.  -l%{mbaserel:b}gnu%{gg:g}%{mshort:16}"
  504. #endif
  505.  
  506. #endif
  507. #endif
  508.  
  509. /* Tell linker to make sharable text executable */
  510.  
  511. #define LINK_SPEC "%{mbaserel:-n}"
  512.  
  513. /* add -mint : meanining
  514.    pre-procees with -D__MINT__
  515.    compile with -mint    (target_flags & 010000) (this flag is
  516.      currently not used by cc1, but maybe later)
  517.    link with mcrt0.o and -lmint -lgnu
  518.    
  519.  */
  520.  
  521. #undef SUBTARGET_SWITCHES
  522. #define SUBTARGET_SWITCHES \
  523.     { "int", 010000},                \
  524.     { "noint", -010000},
  525.  
  526. /* these two should never be used, #define them here so they are'nt
  527.    in cccp.c
  528. */
  529. #define STANDARD_INCLUDE_DIR    8086_sucks
  530. #define LOCAL_INCLUDE_DIR    80486_sucks
  531.  
  532. /* all the INCLUDE_DEFAULTS */
  533. #ifdef CROSSATARI    /* TOS or MINIX cross compiler */
  534. #ifndef SYSTEM_INCLUDE_DIR
  535. #  define SYSTEM_INCLUDE_DIR        CROSSINC
  536. #endif
  537. #ifndef SYSTEM_GPLUSPLUS_INCLUDE_DIR
  538. #  define SYSTEM_GPLUSPLUS_INCLUDE_DIR    GPLUSPLUS_INCLUDE_DIR
  539. #endif
  540. #endif
  541.  
  542. #ifdef atarist        /* TOS native compiler */
  543. #ifndef SYSTEM_INCLUDE_DIR
  544. #  define SYSTEM_INCLUDE_DIR        "\\gnu\\lib"
  545. #endif
  546. #ifndef SYSTEM_GPLUSPLUS_INCLUDE_DIR
  547. #  define SYSTEM_GPLUSPLUS_INCLUDE_DIR    "\\gnu\\g++-inc"
  548. #endif
  549. #endif
  550.  
  551. #ifdef atariminix    /* MINIX native compiler */
  552. #ifndef SYSTEM_INCLUDE_DIR
  553. #  define SYSTEM_INCLUDE_DIR        "/usr/local/gcc-include"
  554. #endif
  555. #ifndef SYSTEM_GPLUSPLUS_INCLUDE_DIR
  556. #  define SYSTEM_GPLUSPLUS_INCLUDE_DIR    "/usr/local/g++-inc"
  557. #endif
  558. #endif
  559.  
  560. #define INCLUDE_DEFAULTS            \
  561.     {                        \
  562.           { SYSTEM_INCLUDE_DIR, 0 },        \
  563.           { SYSTEM_GPLUSPLUS_INCLUDE_DIR, 1 },  \
  564.           { 0, 0 }                \
  565.     }
  566.  
  567. #ifdef atarist
  568. #define FILE_NAME_NONDIRECTORY(X)        \
  569.     atari_filename_nondirectory(X);
  570. extern char *atari_filename_nondirectory();
  571.  
  572. #undef  PATH_SEPARATOR
  573. #define PATH_SEPARATOR    ','
  574. #define PATH_SEP_STR    ","
  575. #else
  576. #define PATH_SEP_STR    ":"
  577. #endif
  578.