]> gcc.gnu.org Git - gcc.git/blob - gcc/config/m68k/sun3.h
Initial revision
[gcc.git] / gcc / config / m68k / sun3.h
1 /* Definitions of target machine for GNU compiler. Sun 68000/68020 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 /* This comment is here to see if it will keep Sun's cpp from dying. */
21
22 /* If you do not need to generate floating point code for the optional
23 Sun FPA board, you can safely comment out the SUPPORT_SUN_FPA define
24 to gain a little speed and code size. */
25
26 #define SUPPORT_SUN_FPA
27
28 #include "m68k.h"
29
30 /* See m68k.h. 7 means 68020 with 68881. */
31
32 #ifndef TARGET_DEFAULT
33 #define TARGET_DEFAULT 7
34 #endif
35
36 /* Define __HAVE_FPA__ or __HAVE_68881__ in preprocessor,
37 according to the -m flags.
38 This will control the use of inline 68881 insns in certain macros.
39 Also inform the program which CPU this is for. */
40
41 #if TARGET_DEFAULT & 02
42
43 /* -m68881 is the default */
44 #define CPP_SPEC \
45 "%{!msoft-float:%{mfpa:-D__HAVE_FPA__ }%{!mfpa:-D__HAVE_68881__ }}\
46 %{!ansi:%{m68000:-Dmc68010}%{mc68000:-Dmc68010}%{!mc68000:%{!m68000:-Dmc68020}}}"
47
48 #else
49 #if TARGET_DEFAULT & 0100
50
51 /* -mfpa is the default */
52 #define CPP_SPEC \
53 "%{!msoft-float:%{m68881:-D__HAVE_68881__ }%{!m68881:-D__HAVE_FPA__ }}\
54 %{!ansi:%{m68000:-Dmc68010}%{mc68000:-Dmc68010}%{!mc68000:%{!m68000:-Dmc68020}}}"
55
56 #else
57
58 /* -msoft-float is the default */
59 #define CPP_SPEC \
60 "%{m68881:-D__HAVE_68881__ }%{mfpa:-D__HAVE_FPA__ }\
61 %{!ansi:%{m68000:-Dmc68010}%{mc68000:-Dmc68010}%{!mc68000:%{!m68000:-Dmc68020}}}"
62
63 #endif
64 #endif
65
66 /* Prevent error on `-sun3' and `-target sun3' options. */
67
68 #define CC1_SPEC "%{sun3:} %{target:}"
69
70 #define PTRDIFF_TYPE "int"
71 #define SIZE_TYPE "int"
72
73 /* We must override m68k.h. */
74 #undef WCHAR_TYPE
75 #undef WCHAR_TYPE_SIZE
76 #define WCHAR_TYPE "short unsigned int"
77 #define WCHAR_TYPE_SIZE 16
78
79 /* These compiler options take an argument. We ignore -target for now. */
80
81 #define WORD_SWITCH_TAKES_ARG(STR) \
82 (!strcmp (STR, "Tdata") || !strcmp (STR, "include") \
83 || !strcmp (STR, "imacros") || !strcmp (STR, "target") \
84 || !strcmp (STR, "assert"))
85
86 /* -m68000 requires special flags to the assembler. */
87
88 #define ASM_SPEC \
89 "%{m68000:-mc68010}%{mc68000:-mc68010}%{!mc68000:%{!m68000:-mc68020}} \
90 %{fpic:-k} %{fPIC:-k}"
91
92 /* Names to predefine in the preprocessor for this target machine. */
93
94 #define CPP_PREDEFINES "-Dmc68000 -Dsun -Dunix"
95
96 /* STARTFILE_SPEC to include sun floating point initialization
97 This is necessary (tr: Sun does it) for both the m68881 and the fpa
98 routines.
99 Note that includes knowledge of the default specs for gcc, ie. no
100 args translates to the same effect as -m68881
101 I'm not sure what would happen below if people gave contradictory
102 arguments (eg. -msoft-float -mfpa) */
103
104 #if TARGET_DEFAULT & 0100
105 /* -mfpa is the default */
106 #define STARTFILE_SPEC \
107 "%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}} \
108 %{m68881:Mcrt1.o%s} \
109 %{msoft-float:Fcrt1.o%s} \
110 %{!m68881:%{!msoft-float:Wcrt1.o%s}}"
111 #else
112 #if TARGET_DEFAULT & 2
113 /* -m68881 is the default */
114 #define STARTFILE_SPEC \
115 "%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}} \
116 %{mfpa:Wcrt1.o%s} \
117 %{msoft-float:Fcrt1.o%s} \
118 %{!mfpa:%{!msoft-float:Mcrt1.o%s}}"
119 #else
120 /* -msoft-float is the default */
121 #define STARTFILE_SPEC \
122 "%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}} \
123 %{m68881:Mcrt1.o%s} \
124 %{mfpa:Wcrt1.o%s} \
125 %{!m68881:%{!mfpa:Fcrt1.o%s}}"
126 #endif
127 #endif
128
129 /* Specify library to handle `-a' basic block profiling.
130 Control choice of libm.a (if user says -lm)
131 based on fp arith default and options. */
132
133 #if TARGET_DEFAULT & 0100
134 /* -mfpa is the default */
135 #define LIB_SPEC "%{g:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} \
136 %{a:/usr/lib/bb_link.o} %{g:-lg} \
137 %{msoft-float:-L/usr/lib/fsoft}%{m68881:-L/usr/lib/f68881}\
138 %{!msoft_float:%{!m68881:-L/usr/lib/ffpa}}"
139 #else
140 #if TARGET_DEFAULT & 2
141 /* -m68881 is the default */
142 #define LIB_SPEC "%{g:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} \
143 %{a:/usr/lib/bb_link.o} %{g:-lg} \
144 %{msoft-float:-L/usr/lib/fsoft}%{!msoft-float:%{!mfpa:-L/usr/lib/f68881}}\
145 %{mfpa:-L/usr/lib/ffpa}"
146 #else
147 /* -msoft-float is the default */
148 #define LIB_SPEC "%{g:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} \
149 %{a:/usr/lib/bb_link.o} %{g:-lg} \
150 %{!m68881:%{!mfpa:-L/usr/lib/fsoft}}%{m68881:-L/usr/lib/f68881}\
151 %{mfpa:-L/usr/lib/ffpa}"
152 #endif
153 #endif
154
155 /* Provide required defaults for linker -e and -d switches.
156 Also, it is hard to debug with shared libraries,
157 so don't use them if going to debug. */
158
159 #define LINK_SPEC "%{!e*:-e start} -dc -dp %{g:-Bstatic} %{static:-Bstatic} \
160 %{assert*}"
161
162 /* Every structure or union's size must be a multiple of 2 bytes. */
163
164 #define STRUCTURE_SIZE_BOUNDARY 16
165
166 /* This is BSD, so it wants DBX format. */
167
168 #define DBX_DEBUGGING_INFO
169
170 /* Allow folding division by zero. */
171 #define REAL_INFINITY
172
173 /* This is how to output an assembler line defining a `double' constant. */
174
175 #undef ASM_OUTPUT_DOUBLE
176 #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
177 { \
178 if (REAL_VALUE_ISINF (VALUE)) \
179 fprintf (FILE, "\t.double 0r%s99e999\n", (VALUE) > 0 ? "" : "-"); \
180 else if (isnan (VALUE)) \
181 { \
182 union { double d; long l[2];} t; \
183 t.d = (VALUE); \
184 fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", t.l[0], t.l[1]); \
185 } \
186 else \
187 fprintf (FILE, "\t.double 0r%.17g\n", VALUE); \
188 }
189
190 /* This is how to output an assembler line defining a `float' constant. */
191
192 #undef ASM_OUTPUT_FLOAT
193 #define ASM_OUTPUT_FLOAT(FILE,VALUE) \
194 { \
195 if (REAL_VALUE_ISINF (VALUE)) \
196 fprintf (FILE, "\t.single 0r%s99e999\n", (VALUE) > 0 ? "" : "-"); \
197 else if (isnan (VALUE)) \
198 { \
199 union { float f; long l;} t; \
200 t.f = (VALUE); \
201 fprintf (FILE, "\t.long 0x%lx\n", t.l); \
202 } \
203 else \
204 fprintf (FILE, "\t.single 0r%.9g\n", VALUE); \
205 }
206
207 /* This is how to output an assembler lines defining floating operands.
208 There's no way to output a NaN's fraction, so we lose it. */
209
210 #undef ASM_OUTPUT_FLOAT_OPERAND
211 #define ASM_OUTPUT_FLOAT_OPERAND(FILE,VALUE) \
212 (REAL_VALUE_ISINF ((VALUE)) \
213 ? (asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")), 0) \
214 : (VALUE) == -0.0 \
215 ? (asm_fprintf (FILE, "%I0r-0.0"), 0) \
216 : (asm_fprintf (FILE, "%I0r%.9g", (VALUE)), 0))
217
218 #undef ASM_OUTPUT_DOUBLE_OPERAND
219 #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \
220 (REAL_VALUE_ISINF ((VALUE)) \
221 ? (asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")), 0) \
222 : (VALUE) == -0.0 \
223 ? (asm_fprintf (FILE, "%I0r-0.0"), 0) \
224 : (asm_fprintf (FILE, "%I0r%.17g", (VALUE)), 0))
This page took 0.04945 seconds and 5 git commands to generate.