aix52.h revision 146895
150276Speter/* Definitions of target machine for GNU compiler,
250276Speter   for IBM RS/6000 POWER running AIX V5.2.
350276Speter   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
450276Speter   Contributed by David Edelsohn (edelsohn@gnu.org).
550276Speter
650276Speter   This file is part of GCC.
750276Speter
850276Speter   GCC is free software; you can redistribute it and/or modify it
950276Speter   under the terms of the GNU General Public License as published
1050276Speter   by the Free Software Foundation; either version 2, or (at your
1150276Speter   option) any later version.
1250276Speter
1350276Speter   GCC is distributed in the hope that it will be useful, but WITHOUT
1450276Speter   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
1550276Speter   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
1650276Speter   License for more details.
1750276Speter
1850276Speter   You should have received a copy of the GNU General Public License
1950276Speter   along with GCC; see the file COPYING.  If not, write to the
2050276Speter   Free Software Foundation, 59 Temple Place - Suite 330, Boston,
2150276Speter   MA 02111-1307, USA.  */
2250276Speter
2350276Speter/* AIX V5 and above support 64-bit executables.  */
2450276Speter#undef  SUBSUBTARGET_SWITCHES
2550276Speter#define SUBSUBTARGET_SWITCHES					\
2650276Speter  {"aix64", 		MASK_64BIT | MASK_POWERPC64 | MASK_POWERPC,	\
2750276Speter   N_("Compile for 64-bit pointers") },					\
2850276Speter  {"aix32",		- (MASK_64BIT | MASK_POWERPC64),		\
2950276Speter   N_("Compile for 32-bit pointers") },					\
3050276Speter  {"pe",		0,						\
3150276Speter   N_("Support message passing with the Parallel Environment") },
3250276Speter
3350276Speter/* Sometimes certain combinations of command options do not make sense
3450276Speter   on a particular target machine.  You can define a macro
3550276Speter   `OVERRIDE_OPTIONS' to take account of this.  This macro, if
3650276Speter   defined, is executed once just after all the command options have
3750276Speter   been parsed.
3850276Speter
3950276Speter   The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to
4050276Speter   get control.  */
4150276Speter
4250276Speter#define NON_POWERPC_MASKS (MASK_POWER | MASK_POWER2)
4350276Speter#define SUBTARGET_OVERRIDE_OPTIONS					\
4450276Speterdo {									\
4550276Speter  if (TARGET_64BIT && (target_flags & NON_POWERPC_MASKS))		\
4650276Speter    {									\
4750276Speter      target_flags &= ~NON_POWERPC_MASKS;				\
4850276Speter      warning ("-maix64 and POWER architecture are incompatible");	\
4950276Speter    }									\
5050276Speter  if (TARGET_64BIT && ! TARGET_POWERPC64)				\
5150276Speter    {									\
5250276Speter      target_flags |= MASK_POWERPC64;					\
5350276Speter      warning ("-maix64 requires PowerPC64 architecture remain enabled"); \
54    }									\
55  if (TARGET_POWERPC64 && ! TARGET_64BIT)				\
56    {									\
57      error ("-maix64 required: 64-bit computation with 32-bit addressing not yet supported"); \
58    }									\
59} while (0);
60
61#undef ASM_SPEC
62#define ASM_SPEC "-u %{maix64:-a64 %{!mcpu*:-mppc64}} %(asm_cpu)"
63
64/* Common ASM definitions used by ASM_SPEC amongst the various targets
65   for handling -mcpu=xxx switches.  */
66#undef ASM_CPU_SPEC
67#define ASM_CPU_SPEC \
68"%{!mcpu*: %{!maix64: \
69  %{mpowerpc64: -mppc64} \
70  %{!mpower64: %(asm_default)}}} \
71%{mcpu=power3: -m620} \
72%{mcpu=power4: -m620} \
73%{mcpu=powerpc: -mppc} \
74%{mcpu=rs64a: -mppc} \
75%{mcpu=603: -m603} \
76%{mcpu=603e: -m603} \
77%{mcpu=604: -m604} \
78%{mcpu=604e: -m604} \
79%{mcpu=620: -m620} \
80%{mcpu=630: -m620}"
81
82#undef	ASM_DEFAULT_SPEC
83#define ASM_DEFAULT_SPEC "-mppc"
84
85#undef TARGET_OS_CPP_BUILTINS
86#define TARGET_OS_CPP_BUILTINS()      \
87  do                                  \
88    {                                 \
89      builtin_define ("_IBMR2");      \
90      builtin_define ("_POWER");      \
91      builtin_define ("_LONG_LONG");  \
92      builtin_define ("_AIX");        \
93      builtin_define ("_AIX32");      \
94      builtin_define ("_AIX41");      \
95      builtin_define ("_AIX43");      \
96      builtin_define ("_AIX51");      \
97      builtin_define ("_AIX52");      \
98      builtin_assert ("system=unix"); \
99      builtin_assert ("system=aix");  \
100    }                                 \
101  while (0)
102
103#undef CPP_SPEC
104#define CPP_SPEC "%{posix: -D_POSIX_SOURCE}	\
105  %{ansi: -D_ANSI_C_SOURCE}			\
106  %{maix64: -D__64BIT__}			\
107  %{mpe: -I/usr/lpp/ppe.poe/include}		\
108  %{pthread: -D_THREAD_SAFE}"
109
110/* The GNU C++ standard library requires that these macros be
111   defined.  */
112#undef CPLUSPLUS_CPP_SPEC
113#define CPLUSPLUS_CPP_SPEC			\
114  "-D_XOPEN_SOURCE=500				\
115   -D_XOPEN_SOURCE_EXTENDED=1			\
116   -D_LARGE_FILE_API				\
117   -D_ALL_SOURCE				\
118   %{maix64: -D__64BIT__}			\
119   %{mpe: -I/usr/lpp/ppe.poe/include}		\
120   %{pthread: -D_THREAD_SAFE}"
121
122#undef  TARGET_DEFAULT
123#define TARGET_DEFAULT (MASK_POWERPC | MASK_NEW_MNEMONICS)
124
125#undef  PROCESSOR_DEFAULT
126#define PROCESSOR_DEFAULT PROCESSOR_PPC630
127#undef  PROCESSOR_DEFAULT64
128#define PROCESSOR_DEFAULT64 PROCESSOR_POWER4
129
130#undef  TARGET_POWER
131#define TARGET_POWER 0
132
133/* Define this macro as a C expression for the initializer of an
134   array of string to tell the driver program which options are
135   defaults for this target and thus do not need to be handled
136   specially when using `MULTILIB_OPTIONS'.
137
138   Do not define this macro if `MULTILIB_OPTIONS' is not defined in
139   the target makefile fragment or if none of the options listed in
140   `MULTILIB_OPTIONS' are set by default.  *Note Target Fragment::.  */
141
142#undef	MULTILIB_DEFAULTS
143
144#undef LIB_SPEC
145#define LIB_SPEC "%{pg:-L/lib/profiled -L/usr/lib/profiled}\
146   %{p:-L/lib/profiled -L/usr/lib/profiled}\
147   %{!maix64:%{!shared:%{g*:-lg}}}\
148   %{mpe:-L/usr/lpp/ppe.poe/lib -lmpi -lvtd}\
149   %{pthread:-lpthreads} -lc"
150
151#undef LINK_SPEC
152#define LINK_SPEC "-bpT:0x10000000 -bpD:0x20000000 %{!r:-btextro} -bnodelcsect\
153   %{static:-bnso %(link_syscalls) } %{shared:-bM:SRE %{!e:-bnoentry}}\
154   %{!maix64:%{!shared:%{g*: %(link_libg) }}} %{maix64:-b64}\
155   %{mpe:-binitfini:poe_remote_main}"
156
157#undef STARTFILE_SPEC
158#define STARTFILE_SPEC "%{!shared:\
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}}}}}"
163
164/* AIX V5 typedefs ptrdiff_t as "long" while earlier releases used "int".  */
165
166#undef PTRDIFF_TYPE
167#define PTRDIFF_TYPE "long int"
168
169/* Type used for wchar_t, as a string used in a declaration.  */
170#undef  WCHAR_TYPE
171#define WCHAR_TYPE (!TARGET_64BIT ? "short unsigned int" : "unsigned int")
172
173/* Width of wchar_t in bits.  */
174#undef  WCHAR_TYPE_SIZE
175#define WCHAR_TYPE_SIZE (!TARGET_64BIT ? 16 : 32)
176#define MAX_WCHAR_TYPE_SIZE 32
177
178/* AIX V5 uses PowerPC nop (ori 0,0,0) instruction as call glue for PowerPC
179   and "cror 31,31,31" for POWER architecture.  */
180
181#undef RS6000_CALL_GLUE
182#define RS6000_CALL_GLUE "{cror 31,31,31|nop}"
183
184/* AIX 4.2 and above provides initialization and finalization function
185   support from linker command line.  */
186#undef HAS_INIT_SECTION
187#define HAS_INIT_SECTION
188
189#undef LD_INIT_SWITCH
190#define LD_INIT_SWITCH "-binitfini"
191
192/* AIX 5.2 has the float and long double forms of math functions.  */
193#undef TARGET_C99_FUNCTIONS
194#define TARGET_C99_FUNCTIONS  1
195
196#ifndef _AIX52
197extern long long int    atoll(const char *);
198#endif
199
200