stdio.h not needed
[fw/sdcc] / support / cpp / i386 / isc.h
1 /* Assembler-independent definitions for an Intel 386 running
2    Interactive Unix System V. Specifically, this is for recent versions
3    that support POSIX.  */
4
5 /* Use crt1.o, not crt0.o, as a startup file, and crtn.o as a closing file. */
6 #undef STARTFILE_SPEC
7 #define STARTFILE_SPEC \
8   "%{!shlib:%{posix:%{pg:mcrtp1.o%s}%{!pg:%{p:mcrtp1.o%s}%{!p:crtp1.o%s}}}\
9    %{Xp:%{pg:mcrtp1.o%s}%{!pg:%{p:mcrtp1.o%s}%{!p:crtp1.o%s}}}\
10    %{!posix:%{!Xp:%{pg:mcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}\
11    %{p:-L/lib/libp} %{pg:-L/lib/libp}}}}\
12    %{shlib:%{Xp:crtp1.o%s}%{posix:crtp1.o%s}%{!posix:%{!Xp:crt1.o%s}}}\
13    crtbegin.o%s"
14   
15 #define ENDFILE_SPEC "crtend.o%s crtn.o%s"
16
17 /* Library spec */
18 #undef LIB_SPEC
19 #define LIB_SPEC "%{shlib:-lc_s} %{posix:-lcposix} %{Xp:-lcposix} -lc -lg"
20
21 #undef CPP_SPEC
22 #define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{Xp:-D_POSIX_SOURCE}"
23
24 /* ISC 2.2 uses `char' for `wchar_t'.  */
25 #undef WCHAR_TYPE
26 #define WCHAR_TYPE "char"
27
28 #undef WCHAR_TYPE_SIZE
29 #define WCHAR_TYPE_SIZE BITS_PER_UNIT
30
31 #if 0
32 /* This is apparently not true: ISC versions up to 3.0, at least, use
33    the standard calling sequence in which the called function pops the
34    extra arg.  */
35 /* caller has to pop the extra argument passed to functions that return
36    structures. */
37
38 #undef RETURN_POPS_ARGS
39 #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE)   \
40   (TREE_CODE (FUNTYPE) == IDENTIFIER_NODE ? 0                   \
41    : (TARGET_RTD                                                \
42       && (TYPE_ARG_TYPES (FUNTYPE) == 0                         \
43           || (TREE_VALUE (tree_last (TYPE_ARG_TYPES (FUNTYPE))) \
44               == void_type_node))) ? (SIZE)                     \
45    : 0)
46 /* On other 386 systems, the last line looks like this:
47    : (aggregate_value_p (TREE_TYPE (FUNTYPE))) ? GET_MODE_SIZE (Pmode) : 0)  */
48 #endif
49
50 /* Handle #pragma pack and #pragma weak.  */
51 #define HANDLE_SYSV_PRAGMA
52
53 /* By default, target has a 80387, uses IEEE compatible arithmetic,
54    and returns float values in the 387, ie,
55    (TARGET_80387 | TARGET_FLOAT_RETURNS_IN_80387)
56
57    ISC's software emulation of a 387 fails to handle the `fucomp'
58    opcode.  fucomp is only used when generating IEEE compliant code.
59    So don't make TARGET_IEEE_FP default for ISC. */
60
61 #undef TARGET_DEFAULT
62 #define TARGET_DEFAULT 0201
63
64 /* The ISC 2.0.2 software FPU emulator apparently can't handle
65    80-bit XFmode insns, so don't generate them.  */
66 #undef LONG_DOUBLE_TYPE_SIZE
67 #define LONG_DOUBLE_TYPE_SIZE 64
68
69 /* The ISC assembler does not like a .file directive with a name
70    longer than 14 characters.  Truncating it will not permit
71    debugging to work properly, but at least we won't get an error
72    message.  */
73
74 #undef ASM_FILE_START
75 #define ASM_FILE_START(FILE)                     \
76   do {                                           \
77    char c;                                       \
78    int max = 0;                                  \
79    char *string = dump_base_name;                \
80                                                  \
81     fputs ("\t.file\t\"", FILE);                                 \
82                                                  \
83     while ((c = *string++) != 0 && max++ < 14) { \
84        if (c == '\"' || c == '\\')               \
85          putc ('\\', FILE);                      \
86        putc (c, FILE);                           \
87     }                                            \
88     fputs ("\"\n", FILE);                        \
89   } while (0)