]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/rs6000/aix51.h
aix.h: Convert CPP_PREDEFINES to TARGET_OS_CPP_BUILTINS.
[thirdparty/gcc.git] / gcc / config / rs6000 / aix51.h
CommitLineData
05dba9ee
DE
1/* Definitions of target machine for GNU compiler,
2 for IBM RS/6000 POWER running AIX V5.
3 Copyright (C) 2001 Free Software Foundation, Inc.
4 Contributed by David Edelsohn (edelsohn@gnu.org).
5
6This file is part of GNU CC.
7
8GNU CC is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2, or (at your option)
11any later version.
12
13GNU CC is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with GNU CC; see the file COPYING. If not, write to
20the Free Software Foundation, 59 Temple Place - Suite 330,
21Boston, MA 02111-1307, USA. */
22
23
05dba9ee
DE
24/* AIX V5 and above support 64-bit executables. */
25#undef SUBSUBTARGET_SWITCHES
26#define SUBSUBTARGET_SWITCHES \
27 {"aix64", MASK_64BIT | MASK_POWERPC64 | MASK_POWERPC, \
28 N_("Compile for 64-bit pointers") }, \
29 {"aix32", - (MASK_64BIT | MASK_POWERPC64), \
30 N_("Compile for 32-bit pointers") }, \
31 {"pe", 0, \
32 N_("Support message passing with the Parallel Environment") },
33
34/* Sometimes certain combinations of command options do not make sense
35 on a particular target machine. You can define a macro
36 `OVERRIDE_OPTIONS' to take account of this. This macro, if
37 defined, is executed once just after all the command options have
38 been parsed.
39
40 The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to
41 get control. */
42
09a625f7 43#define NON_POWERPC_MASKS (MASK_POWER | MASK_POWER2)
05dba9ee
DE
44#define SUBTARGET_OVERRIDE_OPTIONS \
45do { \
46 if (TARGET_64BIT && (target_flags & NON_POWERPC_MASKS)) \
47 { \
48 target_flags &= ~NON_POWERPC_MASKS; \
c725bd79 49 warning ("-maix64 and POWER architecture are incompatible"); \
05dba9ee
DE
50 } \
51 if (TARGET_64BIT && ! TARGET_POWERPC64) \
52 { \
53 target_flags |= MASK_POWERPC64; \
c725bd79 54 warning ("-maix64 requires PowerPC64 architecture remain enabled"); \
05dba9ee
DE
55 } \
56 if (TARGET_POWERPC64 && ! TARGET_64BIT) \
57 { \
c725bd79 58 error ("-maix64 required: 64-bit computation with 32-bit addressing not yet supported"); \
05dba9ee
DE
59 } \
60} while (0);
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} \
309323c2
DE
78%{mcpu=power3: -m604} \
79%{mcpu=power4: -m604} \
05dba9ee
DE
80%{mcpu=powerpc: -mppc} \
81%{mcpu=rios: -mpwr} \
82%{mcpu=rios1: -mpwr} \
83%{mcpu=rios2: -mpwr2} \
84%{mcpu=rsc: -mpwr} \
85%{mcpu=rsc1: -mpwr} \
86%{mcpu=rs64a: -mppc} \
05dba9ee
DE
87%{mcpu=601: -m601} \
88%{mcpu=602: -mppc} \
89%{mcpu=603: -m603} \
90%{mcpu=603e: -m603} \
91%{mcpu=604: -m604} \
92%{mcpu=604e: -m604} \
93%{mcpu=620: -mppc} \
309323c2 94%{mcpu=630: -m604}"
05dba9ee
DE
95
96#undef ASM_DEFAULT_SPEC
97#define ASM_DEFAULT_SPEC "-mcom"
98
7990b46f
MK
99#undef TARGET_OS_CPP_BUILTINS
100#define TARGET_OS_CPP_BUILTINS() \
101 do \
102 { \
103 builtin_define ("_IBMR2"); \
104 builtin_define ("_POWER"); \
105 builtin_define ("_LONG_LONG"); \
106 builtin_define ("_AIX"); \
107 builtin_define ("_AIX32"); \
108 builtin_define ("_AIX41"); \
109 builtin_define ("_AIX43"); \
110 builtin_define ("_AIX51"); \
111 builtin_assert ("system=unix"); \
112 builtin_assert ("system=aix"); \
113 } \
114 while (0)
05dba9ee
DE
115
116#undef CPP_SPEC
676997cf
RH
117#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \
118 %{ansi: -D_ANSI_C_SOURCE} \
119 %{maix64: -D__64BIT__} \
120 %{mpe: -I/usr/lpp/ppe.poe/include} \
4c4eb375 121 %{pthread: -D_THREAD_SAFE}"
05dba9ee 122
7841642f
DE
123/* The GNU C++ standard library requires that these macros be
124 defined. */
125#undef CPLUSPLUS_CPP_SPEC
676997cf
RH
126#define CPLUSPLUS_CPP_SPEC \
127 "-D_XOPEN_SOURCE=500 \
128 -D_XOPEN_SOURCE_EXTENDED=1 \
129 -D_LARGE_FILE_API \
130 -D_ALL_SOURCE \
131 %{maix64: -D__64BIT__} \
132 %{mpe: -I/usr/lpp/ppe.poe/include} \
4c4eb375 133 %{pthread: -D_THREAD_SAFE}"
05dba9ee
DE
134
135#undef TARGET_DEFAULT
136#define TARGET_DEFAULT MASK_NEW_MNEMONICS
137
138#undef PROCESSOR_DEFAULT
309323c2 139#define PROCESSOR_DEFAULT PROCESSOR_PPC604e
05dba9ee
DE
140
141/* Define this macro as a C expression for the initializer of an
142 array of string to tell the driver program which options are
143 defaults for this target and thus do not need to be handled
144 specially when using `MULTILIB_OPTIONS'.
145
146 Do not define this macro if `MULTILIB_OPTIONS' is not defined in
147 the target makefile fragment or if none of the options listed in
148 `MULTILIB_OPTIONS' are set by default. *Note Target Fragment::. */
149
150#undef MULTILIB_DEFAULTS
151#define MULTILIB_DEFAULTS { "mcpu=common" }
152
153#undef LIB_SPEC
154#define LIB_SPEC "%{pg:-L/lib/profiled -L/usr/lib/profiled}\
155 %{p:-L/lib/profiled -L/usr/lib/profiled}\
156 %{!maix64:%{!shared:%{g*:-lg}}}\
157 %{mpe:-L/usr/lpp/ppe.poe/lib -lmpi -lvtd}\
158 %{pthread:-lpthreads} -lc"
159
160#undef LINK_SPEC
161#define LINK_SPEC "-bpT:0x10000000 -bpD:0x20000000 %{!r:-btextro} -bnodelcsect\
162 %{static:-bnso %(link_syscalls) } %{shared:-bM:SRE %{!e:-bnoentry}}\
cbaaba19
DE
163 %{!maix64:%{!shared:%{g*: %(link_libg) }}} %{maix64:-b64}\
164 %{mpe:-binitfini:poe_remote_main}"
05dba9ee
DE
165
166#undef STARTFILE_SPEC
167#define STARTFILE_SPEC "%{!shared:\
cbaaba19
DE
168 %{maix64:%{pg:gcrt0_64%O%s}%{!pg:%{p:mcrt0_64%O%s}%{!p:crt0_64%O%s}}}\
169 %{!maix64:\
170 %{pthread:%{pg:gcrt0_r%O%s}%{!pg:%{p:mcrt0_r%O%s}%{!p:crt0_r%O%s}}}\
171 %{!pthread:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O%s}%{!p:crt0%O%s}}}}}"
05dba9ee
DE
172
173/* AIX V5 typedefs ptrdiff_t as "long" while earlier releases used "int". */
174
175#undef PTRDIFF_TYPE
176#define PTRDIFF_TYPE "long int"
177
7032923b
DE
178/* Type used for wchar_t, as a string used in a declaration. */
179#undef WCHAR_TYPE
180#define WCHAR_TYPE (!TARGET_64BIT ? "short unsigned int" : "unsigned int")
05dba9ee
DE
181
182/* Width of wchar_t in bits. */
7032923b 183#undef WCHAR_TYPE_SIZE
05dba9ee
DE
184#define WCHAR_TYPE_SIZE (!TARGET_64BIT ? 16 : 32)
185#define MAX_WCHAR_TYPE_SIZE 32
186
187/* AIX V5 uses PowerPC nop (ori 0,0,0) instruction as call glue for PowerPC
188 and "cror 31,31,31" for POWER architecture. */
189
190#undef RS6000_CALL_GLUE
191#define RS6000_CALL_GLUE "{cror 31,31,31|nop}"
192
193/* AIX 4.2 and above provides initialization and finalization function
194 support from linker command line. */
195#undef HAS_INIT_SECTION
196#define HAS_INIT_SECTION
197
198#undef LD_INIT_SWITCH
199#define LD_INIT_SWITCH "-binitfini"