]>
Commit | Line | Data |
---|---|---|
a260abc9 DE |
1 | /* Definitions of target machine for GNU compiler, |
2 | for IBM RS/6000 POWER running AIX version 4.3. | |
b9ae3471 DE |
3 | Copyright (C) 1998, 1999 Free Software Foundation, Inc. |
4 | Contributed by David Edelsohn (edelsohn@gnu.org). | |
a260abc9 DE |
5 | |
6 | This file is part of GNU CC. | |
7 | ||
8 | GNU CC is free software; you can redistribute it and/or modify | |
9 | it under the terms of the GNU General Public License as published by | |
10 | the Free Software Foundation; either version 2, or (at your option) | |
11 | any later version. | |
12 | ||
13 | GNU CC is distributed in the hope that it will be useful, | |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | GNU General Public License for more details. | |
17 | ||
18 | You should have received a copy of the GNU General Public License | |
19 | along with GNU CC; see the file COPYING. If not, write to | |
20 | the Free Software Foundation, 59 Temple Place - Suite 330, | |
21 | Boston, MA 02111-1307, USA. */ | |
22 | ||
23 | ||
24 | /* Enable AIX XL compiler calling convention breakage compatibility. */ | |
25 | #define MASK_XL_CALL 0x40000000 | |
26 | #define TARGET_XL_CALL (target_flags & MASK_XL_CALL) | |
27 | #undef SUBTARGET_SWITCHES | |
28 | #define SUBTARGET_SWITCHES \ | |
29 | {"aix64", MASK_64BIT | MASK_POWERPC64 | MASK_POWERPC}, \ | |
30 | {"aix32", - (MASK_64BIT | MASK_POWERPC64)}, \ | |
31 | {"xl-call", MASK_XL_CALL}, \ | |
32 | {"no-xl-call", - MASK_XL_CALL}, \ | |
33 | {"threads", 0}, \ | |
34 | {"pe", 0}, | |
35 | ||
36 | /* Sometimes certain combinations of command options do not make sense | |
37 | on a particular target machine. You can define a macro | |
38 | `OVERRIDE_OPTIONS' to take account of this. This macro, if | |
39 | defined, is executed once just after all the command options have | |
40 | been parsed. | |
41 | ||
42 | The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to | |
43 | get control. */ | |
44 | ||
45 | #define NON_POWERPC_MASKS (MASK_POWER | MASK_POWER2 | MASK_STRING) | |
46 | #define SUBTARGET_OVERRIDE_OPTIONS \ | |
47 | do { \ | |
48 | if (TARGET_64BIT && (target_flags & NON_POWERPC_MASKS)) \ | |
49 | { \ | |
50 | target_flags &= ~NON_POWERPC_MASKS; \ | |
bf034054 DE |
51 | warning ("-maix64 and POWER architecture are incompatible."); \ |
52 | } \ | |
53 | if (TARGET_64BIT && ! (target_flags & MASK_POWERPC64)) \ | |
54 | { \ | |
55 | target_flags |= MASK_POWERPC64; \ | |
56 | warning ("-maix64 requires PowerPC64 architecture remain enabled."); \ | |
a260abc9 DE |
57 | } \ |
58 | } while (0); | |
59 | ||
60 | #include "rs6000/rs6000.h" | |
61 | ||
62 | #undef ASM_SPEC | |
63 | #define ASM_SPEC "-u %{maix64:-a64 -mppc64} %(asm_cpu)" | |
64 | ||
65 | /* Common ASM definitions used by ASM_SPEC amonst the various targets | |
66 | for handling -mcpu=xxx switches. */ | |
67 | #undef ASM_CPU_SPEC | |
68 | #define ASM_CPU_SPEC \ | |
69 | "%{!mcpu*: %{!maix64: \ | |
70 | %{mpower: %{!mpower2: -mpwr}} \ | |
71 | %{mpower2: -mpwr2} \ | |
72 | %{mpowerpc*: %{!mpowerpc64: -mppc}} \ | |
73 | %{mpowerpc64: -mppc64} \ | |
74 | %{!mpower*: %{!mpowerpc*: %(asm_default)}}}} \ | |
75 | %{mcpu=common: -mcom} \ | |
76 | %{mcpu=power: -mpwr} \ | |
77 | %{mcpu=power2: -mpwr2} \ | |
78 | %{mcpu=powerpc: -mppc} \ | |
79 | %{mcpu=rios: -mpwr} \ | |
80 | %{mcpu=rios1: -mpwr} \ | |
81 | %{mcpu=rios2: -mpwr2} \ | |
82 | %{mcpu=rsc: -mpwr} \ | |
83 | %{mcpu=rsc1: -mpwr} \ | |
84 | %{mcpu=403: -mppc} \ | |
85 | %{mcpu=505: -mppc} \ | |
86 | %{mcpu=601: -m601} \ | |
87 | %{mcpu=602: -mppc} \ | |
88 | %{mcpu=603: -m603} \ | |
89 | %{mcpu=603e: -m603} \ | |
90 | %{mcpu=604: -m604} \ | |
b9ae3471 | 91 | %{mcpu=604e: -m604} \ |
a260abc9 DE |
92 | %{mcpu=620: -mppc} \ |
93 | %{mcpu=821: -mppc} \ | |
94 | %{mcpu=860: -mppc}" | |
95 | ||
96 | #undef ASM_DEFAULT_SPEC | |
97 | #define ASM_DEFAULT_SPEC "-mcom" | |
98 | ||
99 | #undef CPP_PREDEFINES | |
100 | #define CPP_PREDEFINES "-D_IBMR2 -D_POWER -D_AIX -D_AIX32 -D_AIX41 -D_AIX43 \ | |
a238cd8b | 101 | -D_LONG_LONG -Asystem(unix) -Asystem(aix)" |
a260abc9 DE |
102 | |
103 | #undef CPP_SPEC | |
104 | #define CPP_SPEC "%{posix: -D_POSIX_SOURCE}\ | |
105 | %{maix64: -D__64BIT__ -D_ARCH_PPC}\ | |
106 | %{mpe: -I/usr/lpp/ppe.poe/include}\ | |
107 | %{mthreads: -D_THREAD_SAFE}\ | |
108 | %(cpp_cpu)" | |
109 | ||
110 | /* Common CPP definitions used by CPP_SPEC among the various targets | |
111 | for handling -mcpu=xxx switches. */ | |
112 | #undef CPP_CPU_SPEC | |
113 | #define CPP_CPU_SPEC \ | |
114 | "%{!mcpu*: %{!maix64: \ | |
115 | %{mpower: %{!mpower2: -D_ARCH_PWR}} \ | |
116 | %{mpower2: -D_ARCH_PWR2} \ | |
117 | %{mpowerpc*: -D_ARCH_PPC} \ | |
118 | %{!mpower*: %{!mpowerpc*: %(cpp_default)}}}} \ | |
119 | %{mcpu=common: -D_ARCH_COM} \ | |
120 | %{mcpu=power: -D_ARCH_PWR} \ | |
121 | %{mcpu=power2: -D_ARCH_PWR2} \ | |
122 | %{mcpu=powerpc: -D_ARCH_PPC} \ | |
123 | %{mcpu=rios: -D_ARCH_PWR} \ | |
124 | %{mcpu=rios1: -D_ARCH_PWR} \ | |
125 | %{mcpu=rios2: -D_ARCH_PWR2} \ | |
126 | %{mcpu=rsc: -D_ARCH_PWR} \ | |
127 | %{mcpu=rsc1: -D_ARCH_PWR} \ | |
128 | %{mcpu=403: -D_ARCH_PPC} \ | |
129 | %{mcpu=505: -D_ARCH_PPC} \ | |
130 | %{mcpu=601: -D_ARCH_PPC -D_ARCH_PWR} \ | |
131 | %{mcpu=602: -D_ARCH_PPC} \ | |
132 | %{mcpu=603: -D_ARCH_PPC} \ | |
133 | %{mcpu=603e: -D_ARCH_PPC} \ | |
134 | %{mcpu=604: -D_ARCH_PPC} \ | |
135 | %{mcpu=620: -D_ARCH_PPC} \ | |
136 | %{mcpu=821: -D_ARCH_PPC} \ | |
137 | %{mcpu=860: -D_ARCH_PPC}" | |
138 | ||
139 | #undef CPP_DEFAULT_SPEC | |
140 | #define CPP_DEFAULT_SPEC "-D_ARCH_COM" | |
141 | ||
142 | #undef TARGET_DEFAULT | |
143 | #define TARGET_DEFAULT MASK_NEW_MNEMONICS | |
144 | ||
145 | #undef PROCESSOR_DEFAULT | |
146 | #define PROCESSOR_DEFAULT PROCESSOR_PPC604 | |
147 | ||
148 | /* Define this macro as a C expression for the initializer of an | |
149 | array of string to tell the driver program which options are | |
150 | defaults for this target and thus do not need to be handled | |
151 | specially when using `MULTILIB_OPTIONS'. | |
152 | ||
153 | Do not define this macro if `MULTILIB_OPTIONS' is not defined in | |
154 | the target makefile fragment or if none of the options listed in | |
155 | `MULTILIB_OPTIONS' are set by default. *Note Target Fragment::. */ | |
156 | ||
157 | #undef MULTILIB_DEFAULTS | |
158 | #define MULTILIB_DEFAULTS { "mcpu=common" } | |
159 | ||
160 | /* These are not necessary when we pass -u to the assembler, and undefining | |
161 | them saves a great deal of space in object files. */ | |
162 | ||
163 | #undef ASM_OUTPUT_EXTERNAL | |
164 | #undef ASM_OUTPUT_EXTERNAL_LIBCALL | |
165 | #define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \ | |
166 | { rtx _symref = XEXP (DECL_RTL (DECL), 0); \ | |
167 | if ((TREE_CODE (DECL) == VAR_DECL \ | |
168 | || TREE_CODE (DECL) == FUNCTION_DECL) \ | |
169 | && (NAME)[strlen (NAME) - 1] != ']') \ | |
170 | { \ | |
171 | char *_name = (char *) permalloc (strlen (XSTR (_symref, 0)) + 5); \ | |
172 | strcpy (_name, XSTR (_symref, 0)); \ | |
173 | strcat (_name, TREE_CODE (DECL) == FUNCTION_DECL ? "[DS]" : "[RW]"); \ | |
174 | XSTR (_symref, 0) = _name; \ | |
175 | } \ | |
176 | } | |
177 | ||
178 | #undef LIB_SPEC | |
179 | #define LIB_SPEC "%{pg:-L/lib/profiled -L/usr/lib/profiled}\ | |
bf034054 DE |
180 | %{p:-L/lib/profiled -L/usr/lib/profiled}\ |
181 | %{!maix64:%{!shared:%{g*:-lg}}}\ | |
a260abc9 | 182 | %{mpe:-L/usr/lpp/ppe.poe/lib -lmpi -lvtd}\ |
bf034054 DE |
183 | %{mthreads:-L/usr/lib/threads -lpthreads -lc_r /usr/lib/libc.a}\ |
184 | %{!mthreads:-lc}" | |
a260abc9 DE |
185 | |
186 | #undef LINK_SPEC | |
187 | #define LINK_SPEC "-bpT:0x10000000 -bpD:0x20000000 %{!r:-btextro} -bnodelcsect\ | |
bf034054 | 188 | %{static:-bnso %(link_syscalls) } %{!maix64:%{!shared:%{g*: %(link_libg) }}}\ |
a260abc9 DE |
189 | %{shared:-bM:SRE %{!e:-bnoentry}} %{maix64:-b64}" |
190 | ||
191 | #undef STARTFILE_SPEC | |
192 | #define STARTFILE_SPEC "%{!shared:\ | |
193 | %{mpe:%{pg:/usr/lpp/ppe.poe/lib/gcrt0.o}\ | |
194 | %{!pg:%{p:/usr/lpp/ppe.poe/lib/mcrt0.o}\ | |
195 | %{!p:/usr/lpp/ppe.poe/lib/crt0.o}}}\ | |
196 | %{!mpe:\ | |
197 | %{maix64:%{pg:gcrt0_64%O%s}%{!pg:%{p:mcrt0_64%O%s}%{!p:crt0_64%O%s}}}\ | |
198 | %{!maix64:\ | |
199 | %{mthreads:%{pg:gcrt0_r%O%s}%{!pg:%{p:mcrt0_r%O%s}%{!p:crt0_r%O%s}}}\ | |
200 | %{!mthreads:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O%s}%{!p:crt0%O%s}}}}}}" | |
201 | ||
202 | /* AIX 4.3 typedefs ptrdiff_t as "long" while earlier releases used "int". */ | |
203 | ||
204 | #undef PTRDIFF_TYPE | |
205 | #define PTRDIFF_TYPE "long int" | |
206 |