]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/rs6000/aix43.h
gcc/
[thirdparty/gcc.git] / gcc / config / rs6000 / aix43.h
CommitLineData
8cda90b9 1/* Definitions of target machine for GNU compiler,
2 for IBM RS/6000 POWER running AIX version 4.3.
038d1e19 3 Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
4 2007 Free Software Foundation, Inc.
bbe0a756 5 Contributed by David Edelsohn (edelsohn@gnu.org).
8cda90b9 6
3a5a28e2 7 This file is part of GCC.
8cda90b9 8
3a5a28e2 9 GCC is free software; you can redistribute it and/or modify it
10 under the terms of the GNU General Public License as published
038d1e19 11 by the Free Software Foundation; either version 3, or (at your
3a5a28e2 12 option) any later version.
8cda90b9 13
3a5a28e2 14 GCC is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 License for more details.
8cda90b9 18
3a5a28e2 19 You should have received a copy of the GNU General Public License
038d1e19 20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
8cda90b9 22
8cda90b9 23/* Sometimes certain combinations of command options do not make sense
24 on a particular target machine. You can define a macro
25 `OVERRIDE_OPTIONS' to take account of this. This macro, if
26 defined, is executed once just after all the command options have
27 been parsed.
28
29 The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to
30 get control. */
31
f0c730df 32#define NON_POWERPC_MASKS (MASK_POWER | MASK_POWER2)
8cda90b9 33#define SUBTARGET_OVERRIDE_OPTIONS \
34do { \
35 if (TARGET_64BIT && (target_flags & NON_POWERPC_MASKS)) \
36 { \
37 target_flags &= ~NON_POWERPC_MASKS; \
c3ceba8e 38 warning (0, "-maix64 and POWER architecture are incompatible"); \
0e2e2a21 39 } \
c1bdf4c1 40 if (TARGET_64BIT && ! TARGET_POWERPC64) \
0e2e2a21 41 { \
42 target_flags |= MASK_POWERPC64; \
c3ceba8e 43 warning (0, "-maix64 requires PowerPC64 architecture remain enabled"); \
8cda90b9 44 } \
2928e077 45 if (TARGET_SOFT_FLOAT && TARGET_LONG_DOUBLE_128) \
46 { \
47 rs6000_long_double_type_size = 64; \
48 if (rs6000_explicit_options.long_double) \
49 warning (0, "soft-float and long-double-128 are incompatible"); \
50 } \
c1bdf4c1 51 if (TARGET_POWERPC64 && ! TARGET_64BIT) \
52 { \
68435912 53 error ("-maix64 required: 64-bit computation with 32-bit addressing not yet supported"); \
c1bdf4c1 54 } \
8cda90b9 55} while (0);
56
8cda90b9 57#undef ASM_SPEC
82a5e7ab 58#define ASM_SPEC "-u %{maix64:-a64 %{!mcpu*:-mppc64}} %(asm_cpu)"
8cda90b9 59
ec065129 60/* Common ASM definitions used by ASM_SPEC amongst the various targets
8cda90b9 61 for handling -mcpu=xxx switches. */
62#undef ASM_CPU_SPEC
63#define ASM_CPU_SPEC \
a737f54e 64"%{!mcpu*: %{!maix64: \
8cda90b9 65 %{mpower: %{!mpower2: -mpwr}} \
66 %{mpower2: -mpwr2} \
67 %{mpowerpc*: %{!mpowerpc64: -mppc}} \
68 %{mpowerpc64: -mppc64} \
69 %{!mpower*: %{!mpowerpc*: %(asm_default)}}}} \
70%{mcpu=common: -mcom} \
71%{mcpu=power: -mpwr} \
72%{mcpu=power2: -mpwr2} \
82a5e7ab 73%{mcpu=power3: -m620} \
74%{mcpu=power4: -m620} \
8cda90b9 75%{mcpu=powerpc: -mppc} \
76%{mcpu=rios: -mpwr} \
77%{mcpu=rios1: -mpwr} \
78%{mcpu=rios2: -mpwr2} \
79%{mcpu=rsc: -mpwr} \
80%{mcpu=rsc1: -mpwr} \
91452706 81%{mcpu=rs64a: -mppc} \
8cda90b9 82%{mcpu=601: -m601} \
83%{mcpu=602: -mppc} \
84%{mcpu=603: -m603} \
85%{mcpu=603e: -m603} \
86%{mcpu=604: -m604} \
bbe0a756 87%{mcpu=604e: -m604} \
82a5e7ab 88%{mcpu=620: -m620} \
89%{mcpu=630: -m620}"
8cda90b9 90
91#undef ASM_DEFAULT_SPEC
92#define ASM_DEFAULT_SPEC "-mcom"
93
5b2c8acb 94#undef TARGET_OS_CPP_BUILTINS
26efa80d 95#define TARGET_OS_CPP_BUILTINS() \
96 do \
97 { \
98 builtin_define ("_AIX43"); \
99 TARGET_OS_AIX_CPP_BUILTINS (); \
100 } \
5b2c8acb 101 while (0)
8cda90b9 102
103#undef CPP_SPEC
104#define CPP_SPEC "%{posix: -D_POSIX_SOURCE}\
0744109f 105 %{ansi: -D_ANSI_C_SOURCE}\
574006c3 106 %{maix64: -D__64BIT__}\
5b69e2e1 107 %{mpe: -I%R/usr/lpp/ppe.poe/include}\
b2d381e8 108 %{pthread: -D_THREAD_SAFE}"
8cda90b9 109
ea298e00 110/* The GNU C++ standard library requires that these macros be
111 defined. */
112#undef CPLUSPLUS_CPP_SPEC
113#define CPLUSPLUS_CPP_SPEC \
2cf1428a 114 "-D_ALL_SOURCE \
574006c3 115 %{maix64: -D__64BIT__} \
5b69e2e1 116 %{mpe: -I%R/usr/lpp/ppe.poe/include} \
b2d381e8 117 %{pthread: -D_THREAD_SAFE}"
8cda90b9 118
119#undef TARGET_DEFAULT
120#define TARGET_DEFAULT MASK_NEW_MNEMONICS
121
122#undef PROCESSOR_DEFAULT
72943b59 123#define PROCESSOR_DEFAULT PROCESSOR_PPC604e
8cda90b9 124
d4115f8c 125/* AIX does not support Altivec. */
126#undef TARGET_ALTIVEC
127#define TARGET_ALTIVEC 0
128#undef TARGET_ALTIVEC_ABI
129#define TARGET_ALTIVEC_ABI 0
130
8cda90b9 131/* Define this macro as a C expression for the initializer of an
132 array of string to tell the driver program which options are
133 defaults for this target and thus do not need to be handled
134 specially when using `MULTILIB_OPTIONS'.
135
136 Do not define this macro if `MULTILIB_OPTIONS' is not defined in
137 the target makefile fragment or if none of the options listed in
138 `MULTILIB_OPTIONS' are set by default. *Note Target Fragment::. */
139
140#undef MULTILIB_DEFAULTS
141#define MULTILIB_DEFAULTS { "mcpu=common" }
142
8cda90b9 143#undef LIB_SPEC
5b69e2e1 144#define LIB_SPEC "%{pg:-L%R/lib/profiled -L%R/usr/lib/profiled}\
145 %{p:-L%R/lib/profiled -L%R/usr/lib/profiled}\
a737f54e 146 %{!maix64:%{!shared:%{g*:-lg}}}\
5b69e2e1 147 %{mpe:-L%R/usr/lpp/ppe.poe/lib -lmpi -lvtd}\
148 %{pthread:-L%R/usr/lib/threads -lpthreads -lc_r %R/usr/lib/libc.a}\
7802daa5 149 %{!pthread:-lc}"
8cda90b9 150
151#undef LINK_SPEC
152#define LINK_SPEC "-bpT:0x10000000 -bpD:0x20000000 %{!r:-btextro} -bnodelcsect\
a737f54e 153 %{static:-bnso %(link_syscalls) } %{shared:-bM:SRE %{!e:-bnoentry}}\
17fb2af4 154 %{!maix64:%{!shared:%{g*: %(link_libg) }}} %{maix64:-b64}\
155 %{mpe:-binitfini:poe_remote_main}"
8cda90b9 156
157#undef STARTFILE_SPEC
158#define STARTFILE_SPEC "%{!shared:\
17fb2af4 159 %{maix64:%{pg:gcrt0_64%O%s}%{!pg:%{p:mcrt0_64%O%s}%{!p:crt0_64%O%s}}}\
160 %{!maix64:\
161 %{pthread:%{pg:gcrt0_r%O%s}%{!pg:%{p:mcrt0_r%O%s}%{!p:crt0_r%O%s}}}\
162 %{!pthread:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O%s}%{!p:crt0%O%s}}}}}"
8cda90b9 163
164/* AIX 4.3 typedefs ptrdiff_t as "long" while earlier releases used "int". */
165
166#undef PTRDIFF_TYPE
167#define PTRDIFF_TYPE "long int"
168
1270d073 169/* AIX 4 uses PowerPC nop (ori 0,0,0) instruction as call glue for PowerPC
170 and "cror 31,31,31" for POWER architecture. */
171
172#undef RS6000_CALL_GLUE
173#define RS6000_CALL_GLUE "{cror 31,31,31|nop}"
a737f54e 174
a737f54e 175/* AIX 4.2 and above provides initialization and finalization function
176 support from linker command line. */
177#undef HAS_INIT_SECTION
178#define HAS_INIT_SECTION
179
180#undef LD_INIT_SWITCH
181#define LD_INIT_SWITCH "-binitfini"
137900fa 182
183/* The IBM AIX 4.x assembler doesn't support forward references in
184 .set directives. We handle this by deferring the output of .set
185 directives to the end of the compilation unit. */
186#define TARGET_DEFERRED_OUTPUT_DEFS(DECL,TARGET) true
16ac04e7 187
188/* This target uses the aix64.opt file. */
189#define TARGET_USES_AIX64_OPT 1