* rtl.h (rtunion_def): Constify member `rtstr'.
[official-gcc.git] / gcc / config / i860 / paragon.h
blob7517f4b55ca112ee1ef7f4cc20853f9e736209bc
1 /* Target definitions for GNU compiler for Intel 80860 running OSF/1AD
2 Copyright (C) 1991, 1996, 1999 Free Software Foundation, Inc.
3 Based upon original work of Ron Guilmette (rfg@monkeys.com).
4 Contributed by Andy Pfiffer (andyp@ssd.intel.com).
5 Partially inspired by
6 Pete Beckman of Indiana University (beckman@cs.indiana.edu)
7 Harry Dolan of Intel Corporation (dolan@ssd.intel.com)
9 This file is part of GNU CC.
11 GNU CC is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2, or (at your option)
14 any later version.
16 GNU CC is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with GNU CC; see the file COPYING. If not, write to
23 the Free Software Foundation, 59 Temple Place - Suite 330,
24 Boston, MA 02111-1307, USA. */
26 #undef TARGET_SWITCHES
27 #define TARGET_SWITCHES \
28 { {"xp", 1, "Generate code which uses the FPU"}, \
29 {"noxp", -1, "Do not generate code which uses the FPU"}, \
30 {"xr", -1, "Do not generate code which uses the FPU"}, \
31 {"noieee", -1, "Do not generate code which uses the FPU"}, \
32 {"nx", 2, NULL}, \
33 { "", TARGET_DEFAULT, NULL}}
35 #undef TARGET_DEFAULT
36 #define TARGET_DEFAULT 1
38 /* The Intel as860 assembler does not understand .stabs, must use COFF */
39 #define PREFERRED_DEBUGGING_TYPE SDB_DEBUG
41 #undef TARGET_VERSION
42 #define TARGET_VERSION fprintf (stderr, " (i860 OSF/1AD)");
44 #undef CPP_PREDEFINES
45 #define CPP_PREDEFINES "-Di860 -D__i860 -D__i860__ -D__PARAGON__ -D__OSF1__ -D_COFF -Dunix -DMACH -DCMU"
47 #define CPP_SPEC "%{mnx:-D__NODE}"
49 /* autoinit.o autolaunches NX applications */
50 #define STARTFILE_SPEC "crt0.o%s %{mnx:-yoptions/autoinit.o%s}"
52 /* libic.a is the PGI intrinsic library */
53 /* libpm.o and guard.o are for the performance monitoring modules (ignored) */
54 /* /usr/lib/noieee contains non-IEEE compliant (but faster) math routines */
55 #if HAVE_DASH_G
56 #define LIB_SPEC \
57 "%{mnoieee:-L/usr/lib/noieee} %{mnx:-lnx} %{g*:-lg} -lc -lmach -lc -lic"
58 #else /* HAVE_DASH_G */
59 /* can't use -g for -lg; libg.a doesn't have a symbol table and ld complains */
60 #define LIB_SPEC "%{mnoieee:-L/usr/lib/noieee} %{mnx:-lnx} -lc -lmach -lc -lic"
61 #endif /* HAVE_DASH_G */
63 /* Get rid of definition from svr3.h. */
64 #undef SIZE_TYPE
66 #undef I860_REG_PREFIX
68 #undef ASM_COMMENT_START
69 #define ASM_COMMENT_START "//"
71 #undef TYPE_OPERAND_FMT
72 #define TYPE_OPERAND_FMT "\"%s\""
74 #define DBX_REGISTER_NUMBER(REGNO) (REGNO)
76 #undef ASCII_DATA_ASM_OP
77 #define ASCII_DATA_ASM_OP ".byte"
80 * the assembler we're using doesn't grok .ident...
82 #undef ASM_OUTPUT_IDENT
83 #define ASM_OUTPUT_IDENT(FILE, NAME) \
84 fprintf (FILE, "//\t.ident \"%s\"\n", NAME);
87 * the assembler doesn't grok .double INF and the like
88 * but does understand .long with hex numbers, so special
89 * case the "symbolic" IEEE numbers.
91 #undef ASM_OUTPUT_DOUBLE
92 #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
93 { \
94 if (REAL_VALUE_ISINF (VALUE) \
95 || REAL_VALUE_ISNAN (VALUE) \
96 || REAL_VALUE_MINUS_ZERO (VALUE)) \
97 { \
98 long t[2]; \
99 REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \
100 fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", t[0], t[1]); \
102 else \
103 fprintf (FILE, "\t.double %.20e\n", VALUE); \
106 #undef ASM_OUTPUT_FLOAT
107 #define ASM_OUTPUT_FLOAT(FILE,VALUE) \
109 if (REAL_VALUE_ISINF (VALUE) \
110 || REAL_VALUE_ISNAN (VALUE) \
111 || REAL_VALUE_MINUS_ZERO (VALUE)) \
113 long t; \
114 REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \
115 fprintf (FILE, "\t.long 0x%lx\n", t); \
117 else \
118 fprintf (FILE, "\t.float %.12e\n", VALUE); \
121 #undef ASM_OUTPUT_ASCII
122 #define ASM_OUTPUT_ASCII(FILE, STR, LENGTH) \
123 do \
125 register const unsigned char *str = (const unsigned char *) (STR); \
126 register const unsigned char *limit = str + (LENGTH); \
127 register unsigned bytes_in_chunk = 0; \
128 for (; str < limit; str++) \
130 register unsigned ch = *str; \
131 if (ch < 32 || ch == '\\' || ch == '"' || ch >= 127) \
133 if (bytes_in_chunk > 0) \
135 fprintf ((FILE), "\"\n"); \
136 bytes_in_chunk = 0; \
138 fprintf ((FILE), "\t%s\t%d\n", ASM_BYTE_OP, ch); \
140 else \
142 if (bytes_in_chunk >= 60) \
144 fprintf ((FILE), "\"\n"); \
145 bytes_in_chunk = 0; \
147 if (bytes_in_chunk == 0) \
148 fprintf ((FILE), "\t%s\t\"", ASCII_DATA_ASM_OP);\
149 putc (ch, (FILE)); \
150 bytes_in_chunk++; \
153 if (bytes_in_chunk > 0) \
154 fprintf ((FILE), "\"\n"); \
156 while (0)
159 /* This says how to output an assembler line
160 to define a local common symbol. */
162 #undef ASM_OUTPUT_LOCAL
163 #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
164 ( fputs (".lcomm ", (FILE)), \
165 assemble_name ((FILE), (NAME)), \
166 fprintf ((FILE), ",%u\n", (ROUNDED)))
169 * not defining ASM_STABS_OP yields .stabs in the .s file
170 * when using g++ -- so, I'll define it.
172 #define ASM_STABS_OP "//.stabs"
174 /* Define this macro if an instruction to load a value narrower
175 than a word from memory into a register also zero-extends the
176 value to the whole register. */
177 /*#define BYTE_LOADS_ZERO_EXTEND*/
179 /* Define this macro as a C expression which is nonzero if
180 accessing less than a word of memory (i.e. a `char' or a
181 `short') is no faster than accessing a word of memory, i.e., if
182 such access require more than one instruction or if there is no
183 difference in cost between byte and (aligned) word loads.
185 On RISC machines, it tends to generate better code to define
186 this as 1, since it avoids making a QI or HI mode register. */
188 #undef SLOW_BYTE_ACCESS
189 #define SLOW_BYTE_ACCESS 1
192 /* Define if shifts truncate the shift count
193 which implies one can omit a sign-extension or zero-extension
194 of a shift count. */
195 #define SHIFT_COUNT_TRUNCATED 1
198 #define FASTEST_ALIGNMENT 32
200 /* Make strings word-aligned so strcpy from constants will be faster. */
201 #define CONSTANT_ALIGNMENT(EXP, ALIGN) \
202 (TREE_CODE (EXP) == STRING_CST \
203 && (ALIGN) < FASTEST_ALIGNMENT ? FASTEST_ALIGNMENT : (ALIGN))
205 /* Make arrays of chars word-aligned for the same reasons. */
206 #define DATA_ALIGNMENT(TYPE, ALIGN) \
207 (TREE_CODE (TYPE) == ARRAY_TYPE \
208 && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
209 && (ALIGN) < FASTEST_ALIGNMENT ? FASTEST_ALIGNMENT : (ALIGN))
212 * disable a few things picked up from svr3.h
214 #undef INIT_SECTION_ASM_OP
215 #undef FINI_SECTION_ASM_OP
216 #undef CONST_SECTION_ASM_OP
217 #undef CTORS_SECTION_ASM_OP
218 #undef DTORS_SECTION_ASM_OP
219 #undef DO_GLOBAL_CTORS_BODY
220 #undef ASM_OUTPUT_DESTRUCTOR
221 #undef SELECT_SECTION
222 #undef SELECT_RTX_SECTION
223 #undef READONLY_DATA_SECTION
225 #define BSS_SECTION_ASM_OP ".bss" /* XXX */
226 #undef EXTRA_SECTIONS
227 #undef EXTRA_SECTION_FUNCTIONS