pa.h revision 1.1 1 1.1 mrg /* Definitions of target machine for GNU compiler, for the HP Spectrum.
2 1.1 mrg Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
3 1.1 mrg 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4 1.1 mrg Free Software Foundation, Inc.
5 1.1 mrg Contributed by Michael Tiemann (tiemann (at) cygnus.com) of Cygnus Support
6 1.1 mrg and Tim Moore (moore (at) defmacro.cs.utah.edu) of the Center for
7 1.1 mrg Software Science at the University of Utah.
8 1.1 mrg
9 1.1 mrg This file is part of GCC.
10 1.1 mrg
11 1.1 mrg GCC is free software; you can redistribute it and/or modify
12 1.1 mrg it under the terms of the GNU General Public License as published by
13 1.1 mrg the Free Software Foundation; either version 3, or (at your option)
14 1.1 mrg any later version.
15 1.1 mrg
16 1.1 mrg GCC is distributed in the hope that it will be useful,
17 1.1 mrg but WITHOUT ANY WARRANTY; without even the implied warranty of
18 1.1 mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 1.1 mrg GNU General Public License for more details.
20 1.1 mrg
21 1.1 mrg You should have received a copy of the GNU General Public License
22 1.1 mrg along with GCC; see the file COPYING3. If not see
23 1.1 mrg <http://www.gnu.org/licenses/>. */
24 1.1 mrg
25 1.1 mrg /* For long call handling. */
26 1.1 mrg extern unsigned long total_code_bytes;
27 1.1 mrg
28 1.1 mrg /* Which processor to schedule for. */
29 1.1 mrg
30 1.1 mrg enum processor_type
31 1.1 mrg {
32 1.1 mrg PROCESSOR_700,
33 1.1 mrg PROCESSOR_7100,
34 1.1 mrg PROCESSOR_7100LC,
35 1.1 mrg PROCESSOR_7200,
36 1.1 mrg PROCESSOR_7300,
37 1.1 mrg PROCESSOR_8000
38 1.1 mrg };
39 1.1 mrg
40 1.1 mrg /* For -mschedule= option. */
41 1.1 mrg extern enum processor_type pa_cpu;
42 1.1 mrg
43 1.1 mrg /* For -munix= option. */
44 1.1 mrg extern int flag_pa_unix;
45 1.1 mrg
46 1.1 mrg #define pa_cpu_attr ((enum attr_cpu)pa_cpu)
47 1.1 mrg
48 1.1 mrg /* Print subsidiary information on the compiler version in use. */
49 1.1 mrg
50 1.1 mrg #define TARGET_VERSION fputs (" (hppa)", stderr);
51 1.1 mrg
52 1.1 mrg #define TARGET_PA_10 (!TARGET_PA_11 && !TARGET_PA_20)
53 1.1 mrg
54 1.1 mrg /* Generate code for the HPPA 2.0 architecture in 64bit mode. */
55 1.1 mrg #ifndef TARGET_64BIT
56 1.1 mrg #define TARGET_64BIT 0
57 1.1 mrg #endif
58 1.1 mrg
59 1.1 mrg /* Generate code for ELF32 ABI. */
60 1.1 mrg #ifndef TARGET_ELF32
61 1.1 mrg #define TARGET_ELF32 0
62 1.1 mrg #endif
63 1.1 mrg
64 1.1 mrg /* Generate code for SOM 32bit ABI. */
65 1.1 mrg #ifndef TARGET_SOM
66 1.1 mrg #define TARGET_SOM 0
67 1.1 mrg #endif
68 1.1 mrg
69 1.1 mrg /* HP-UX UNIX features. */
70 1.1 mrg #ifndef TARGET_HPUX
71 1.1 mrg #define TARGET_HPUX 0
72 1.1 mrg #endif
73 1.1 mrg
74 1.1 mrg /* HP-UX 10.10 UNIX 95 features. */
75 1.1 mrg #ifndef TARGET_HPUX_10_10
76 1.1 mrg #define TARGET_HPUX_10_10 0
77 1.1 mrg #endif
78 1.1 mrg
79 1.1 mrg /* HP-UX 11.* features (11.00, 11.11, 11.23, etc.) */
80 1.1 mrg #ifndef TARGET_HPUX_11
81 1.1 mrg #define TARGET_HPUX_11 0
82 1.1 mrg #endif
83 1.1 mrg
84 1.1 mrg /* HP-UX 11i multibyte and UNIX 98 extensions. */
85 1.1 mrg #ifndef TARGET_HPUX_11_11
86 1.1 mrg #define TARGET_HPUX_11_11 0
87 1.1 mrg #endif
88 1.1 mrg
89 1.1 mrg /* The following three defines are potential target switches. The current
90 1.1 mrg defines are optimal given the current capabilities of GAS and GNU ld. */
91 1.1 mrg
92 1.1 mrg /* Define to a C expression evaluating to true to use long absolute calls.
93 1.1 mrg Currently, only the HP assembler and SOM linker support long absolute
94 1.1 mrg calls. They are used only in non-pic code. */
95 1.1 mrg #define TARGET_LONG_ABS_CALL (TARGET_SOM && !TARGET_GAS)
96 1.1 mrg
97 1.1 mrg /* Define to a C expression evaluating to true to use long PIC symbol
98 1.1 mrg difference calls. Long PIC symbol difference calls are only used with
99 1.1 mrg the HP assembler and linker. The HP assembler detects this instruction
100 1.1 mrg sequence and treats it as long pc-relative call. Currently, GAS only
101 1.1 mrg allows a difference of two symbols in the same subspace, and it doesn't
102 1.1 mrg detect the sequence as a pc-relative call. */
103 1.1 mrg #define TARGET_LONG_PIC_SDIFF_CALL (!TARGET_GAS && TARGET_HPUX)
104 1.1 mrg
105 1.1 mrg /* Define to a C expression evaluating to true to use long PIC
106 1.1 mrg pc-relative calls. Long PIC pc-relative calls are only used with
107 1.1 mrg GAS. Currently, they are usable for calls which bind local to a
108 1.1 mrg module but not for external calls. */
109 1.1 mrg #define TARGET_LONG_PIC_PCREL_CALL 0
110 1.1 mrg
111 1.1 mrg /* Define to a C expression evaluating to true to use SOM secondary
112 1.1 mrg definition symbols for weak support. Linker support for secondary
113 1.1 mrg definition symbols is buggy prior to HP-UX 11.X. */
114 1.1 mrg #define TARGET_SOM_SDEF 0
115 1.1 mrg
116 1.1 mrg /* Define to a C expression evaluating to true to save the entry value
117 1.1 mrg of SP in the current frame marker. This is normally unnecessary.
118 1.1 mrg However, the HP-UX unwind library looks at the SAVE_SP callinfo flag.
119 1.1 mrg HP compilers don't use this flag but it is supported by the assembler.
120 1.1 mrg We set this flag to indicate that register %r3 has been saved at the
121 1.1 mrg start of the frame. Thus, when the HP unwind library is used, we
122 1.1 mrg need to generate additional code to save SP into the frame marker. */
123 1.1 mrg #define TARGET_HPUX_UNWIND_LIBRARY 0
124 1.1 mrg
125 1.1 mrg #ifndef TARGET_DEFAULT
126 1.1 mrg #define TARGET_DEFAULT (MASK_GAS | MASK_JUMP_IN_DELAY | MASK_BIG_SWITCH)
127 1.1 mrg #endif
128 1.1 mrg
129 1.1 mrg #ifndef TARGET_CPU_DEFAULT
130 1.1 mrg #define TARGET_CPU_DEFAULT 0
131 1.1 mrg #endif
132 1.1 mrg
133 1.1 mrg #ifndef TARGET_SCHED_DEFAULT
134 1.1 mrg #define TARGET_SCHED_DEFAULT PROCESSOR_8000
135 1.1 mrg #endif
136 1.1 mrg
137 1.1 mrg /* Support for a compile-time default CPU, et cetera. The rules are:
138 1.1 mrg --with-schedule is ignored if -mschedule is specified.
139 1.1 mrg --with-arch is ignored if -march is specified. */
140 1.1 mrg #define OPTION_DEFAULT_SPECS \
141 1.1 mrg {"arch", "%{!march=*:-march=%(VALUE)}" }, \
142 1.1 mrg {"schedule", "%{!mschedule=*:-mschedule=%(VALUE)}" }
143 1.1 mrg
144 1.1 mrg /* Specify the dialect of assembler to use. New mnemonics is dialect one
145 1.1 mrg and the old mnemonics are dialect zero. */
146 1.1 mrg #define ASSEMBLER_DIALECT (TARGET_PA_20 ? 1 : 0)
147 1.1 mrg
148 1.1 mrg #define OVERRIDE_OPTIONS override_options ()
149 1.1 mrg
150 1.1 mrg /* Override some settings from dbxelf.h. */
151 1.1 mrg
152 1.1 mrg /* We do not have to be compatible with dbx, so we enable gdb extensions
153 1.1 mrg by default. */
154 1.1 mrg #define DEFAULT_GDB_EXTENSIONS 1
155 1.1 mrg
156 1.1 mrg /* This used to be zero (no max length), but big enums and such can
157 1.1 mrg cause huge strings which killed gas.
158 1.1 mrg
159 1.1 mrg We also have to avoid lossage in dbxout.c -- it does not compute the
160 1.1 mrg string size accurately, so we are real conservative here. */
161 1.1 mrg #undef DBX_CONTIN_LENGTH
162 1.1 mrg #define DBX_CONTIN_LENGTH 3000
163 1.1 mrg
164 1.1 mrg /* GDB always assumes the current function's frame begins at the value
165 1.1 mrg of the stack pointer upon entry to the current function. Accessing
166 1.1 mrg local variables and parameters passed on the stack is done using the
167 1.1 mrg base of the frame + an offset provided by GCC.
168 1.1 mrg
169 1.1 mrg For functions which have frame pointers this method works fine;
170 1.1 mrg the (frame pointer) == (stack pointer at function entry) and GCC provides
171 1.1 mrg an offset relative to the frame pointer.
172 1.1 mrg
173 1.1 mrg This loses for functions without a frame pointer; GCC provides an offset
174 1.1 mrg which is relative to the stack pointer after adjusting for the function's
175 1.1 mrg frame size. GDB would prefer the offset to be relative to the value of
176 1.1 mrg the stack pointer at the function's entry. Yuk! */
177 1.1 mrg #define DEBUGGER_AUTO_OFFSET(X) \
178 1.1 mrg ((GET_CODE (X) == PLUS ? INTVAL (XEXP (X, 1)) : 0) \
179 1.1 mrg + (frame_pointer_needed ? 0 : compute_frame_size (get_frame_size (), 0)))
180 1.1 mrg
181 1.1 mrg #define DEBUGGER_ARG_OFFSET(OFFSET, X) \
182 1.1 mrg ((GET_CODE (X) == PLUS ? OFFSET : 0) \
183 1.1 mrg + (frame_pointer_needed ? 0 : compute_frame_size (get_frame_size (), 0)))
184 1.1 mrg
185 1.1 mrg #define TARGET_CPU_CPP_BUILTINS() \
186 1.1 mrg do { \
187 1.1 mrg builtin_assert("cpu=hppa"); \
188 1.1 mrg builtin_assert("machine=hppa"); \
189 1.1 mrg builtin_define("__hppa"); \
190 1.1 mrg builtin_define("__hppa__"); \
191 1.1 mrg if (TARGET_PA_20) \
192 1.1 mrg builtin_define("_PA_RISC2_0"); \
193 1.1 mrg else if (TARGET_PA_11) \
194 1.1 mrg builtin_define("_PA_RISC1_1"); \
195 1.1 mrg else \
196 1.1 mrg builtin_define("_PA_RISC1_0"); \
197 1.1 mrg } while (0)
198 1.1 mrg
199 1.1 mrg /* An old set of OS defines for various BSD-like systems. */
200 1.1 mrg #define TARGET_OS_CPP_BUILTINS() \
201 1.1 mrg do \
202 1.1 mrg { \
203 1.1 mrg builtin_define_std ("REVARGV"); \
204 1.1 mrg builtin_define_std ("hp800"); \
205 1.1 mrg builtin_define_std ("hp9000"); \
206 1.1 mrg builtin_define_std ("hp9k8"); \
207 1.1 mrg if (!c_dialect_cxx () && !flag_iso) \
208 1.1 mrg builtin_define ("hppa"); \
209 1.1 mrg builtin_define_std ("spectrum"); \
210 1.1 mrg builtin_define_std ("unix"); \
211 1.1 mrg builtin_assert ("system=bsd"); \
212 1.1 mrg builtin_assert ("system=unix"); \
213 1.1 mrg } \
214 1.1 mrg while (0)
215 1.1 mrg
216 1.1 mrg #define CC1_SPEC "%{pg:} %{p:}"
217 1.1 mrg
218 1.1 mrg #define LINK_SPEC "%{mlinker-opt:-O} %{!shared:-u main} %{shared:-b}"
219 1.1 mrg
220 1.1 mrg /* We don't want -lg. */
221 1.1 mrg #ifndef LIB_SPEC
222 1.1 mrg #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
223 1.1 mrg #endif
224 1.1 mrg
225 1.1 mrg /* This macro defines command-line switches that modify the default
226 1.1 mrg target name.
227 1.1 mrg
228 1.1 mrg The definition is be an initializer for an array of structures. Each
229 1.1 mrg array element has have three elements: the switch name, one of the
230 1.1 mrg enumeration codes ADD or DELETE to indicate whether the string should be
231 1.1 mrg inserted or deleted, and the string to be inserted or deleted. */
232 1.1 mrg #define MODIFY_TARGET_NAME {{"-32", DELETE, "64"}, {"-64", ADD, "64"}}
233 1.1 mrg
234 1.1 mrg /* Make gcc agree with <machine/ansi.h> */
235 1.1 mrg
236 1.1 mrg #define SIZE_TYPE "unsigned int"
237 1.1 mrg #define PTRDIFF_TYPE "int"
238 1.1 mrg #define WCHAR_TYPE "unsigned int"
239 1.1 mrg #define WCHAR_TYPE_SIZE 32
240 1.1 mrg
241 1.1 mrg /* Show we can debug even without a frame pointer. */
242 1.1 mrg #define CAN_DEBUG_WITHOUT_FP
243 1.1 mrg
244 1.1 mrg /* target machine storage layout */
246 1.1 mrg typedef struct GTY(()) machine_function
247 1.1 mrg {
248 1.1 mrg /* Flag indicating that a .NSUBSPA directive has been output for
249 1.1 mrg this function. */
250 1.1 mrg int in_nsubspa;
251 1.1 mrg } machine_function;
252 1.1 mrg
253 1.1 mrg /* Define this macro if it is advisable to hold scalars in registers
254 1.1 mrg in a wider mode than that declared by the program. In such cases,
255 1.1 mrg the value is constrained to be within the bounds of the declared
256 1.1 mrg type, but kept valid in the wider mode. The signedness of the
257 1.1 mrg extension may differ from that of the type. */
258 1.1 mrg
259 1.1 mrg #define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \
260 1.1 mrg if (GET_MODE_CLASS (MODE) == MODE_INT \
261 1.1 mrg && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
262 1.1 mrg (MODE) = word_mode;
263 1.1 mrg
264 1.1 mrg /* Define this if most significant bit is lowest numbered
265 1.1 mrg in instructions that operate on numbered bit-fields. */
266 1.1 mrg #define BITS_BIG_ENDIAN 1
267 1.1 mrg
268 1.1 mrg /* Define this if most significant byte of a word is the lowest numbered. */
269 1.1 mrg /* That is true on the HP-PA. */
270 1.1 mrg #define BYTES_BIG_ENDIAN 1
271 1.1 mrg
272 1.1 mrg /* Define this if most significant word of a multiword number is lowest
273 1.1 mrg numbered. */
274 1.1 mrg #define WORDS_BIG_ENDIAN 1
275 1.1 mrg
276 1.1 mrg #define MAX_BITS_PER_WORD 64
277 1.1 mrg
278 1.1 mrg /* Width of a word, in units (bytes). */
279 1.1 mrg #define UNITS_PER_WORD (TARGET_64BIT ? 8 : 4)
280 1.1 mrg
281 1.1 mrg /* Minimum number of units in a word. If this is undefined, the default
282 1.1 mrg is UNITS_PER_WORD. Otherwise, it is the constant value that is the
283 1.1 mrg smallest value that UNITS_PER_WORD can have at run-time.
284 1.1 mrg
285 1.1 mrg FIXME: This needs to be 4 when TARGET_64BIT is true to suppress the
286 1.1 mrg building of various TImode routines in libgcc. The HP runtime
287 1.1 mrg specification doesn't provide the alignment requirements and calling
288 1.1 mrg conventions for TImode variables. */
289 1.1 mrg #define MIN_UNITS_PER_WORD 4
290 1.1 mrg
291 1.1 mrg /* The widest floating point format supported by the hardware. Note that
292 1.1 mrg setting this influences some Ada floating point type sizes, currently
293 1.1 mrg required for GNAT to operate properly. */
294 1.1 mrg #define WIDEST_HARDWARE_FP_SIZE 64
295 1.1 mrg
296 1.1 mrg /* Allocation boundary (in *bits*) for storing arguments in argument list. */
297 1.1 mrg #define PARM_BOUNDARY BITS_PER_WORD
298 1.1 mrg
299 1.1 mrg /* Largest alignment required for any stack parameter, in bits.
300 1.1 mrg Don't define this if it is equal to PARM_BOUNDARY */
301 1.1 mrg #define MAX_PARM_BOUNDARY BIGGEST_ALIGNMENT
302 1.1 mrg
303 1.1 mrg /* Boundary (in *bits*) on which stack pointer is always aligned;
304 1.1 mrg certain optimizations in combine depend on this.
305 1.1 mrg
306 1.1 mrg The HP-UX runtime documents mandate 64-byte and 16-byte alignment for
307 1.1 mrg the stack on the 32 and 64-bit ports, respectively. However, we
308 1.1 mrg are only guaranteed that the stack is aligned to BIGGEST_ALIGNMENT
309 1.1 mrg in main. Thus, we treat the former as the preferred alignment. */
310 1.1 mrg #define STACK_BOUNDARY BIGGEST_ALIGNMENT
311 1.1 mrg #define PREFERRED_STACK_BOUNDARY (TARGET_64BIT ? 128 : 512)
312 1.1 mrg
313 1.1 mrg /* Allocation boundary (in *bits*) for the code of a function. */
314 1.1 mrg #define FUNCTION_BOUNDARY BITS_PER_WORD
315 1.1 mrg
316 1.1 mrg /* Alignment of field after `int : 0' in a structure. */
317 1.1 mrg #define EMPTY_FIELD_BOUNDARY 32
318 1.1 mrg
319 1.1 mrg /* Every structure's size must be a multiple of this. */
320 1.1 mrg #define STRUCTURE_SIZE_BOUNDARY 8
321 1.1 mrg
322 1.1 mrg /* A bit-field declared as `int' forces `int' alignment for the struct. */
323 1.1 mrg #define PCC_BITFIELD_TYPE_MATTERS 1
324 1.1 mrg
325 1.1 mrg /* No data type wants to be aligned rounder than this. */
326 1.1 mrg #define BIGGEST_ALIGNMENT (2 * BITS_PER_WORD)
327 1.1 mrg
328 1.1 mrg /* Get around hp-ux assembler bug, and make strcpy of constants fast. */
329 1.1 mrg #define CONSTANT_ALIGNMENT(EXP, ALIGN) \
330 1.1 mrg (TREE_CODE (EXP) == STRING_CST \
331 1.1 mrg && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
332 1.1 mrg
333 1.1 mrg /* Make arrays of chars word-aligned for the same reasons. */
334 1.1 mrg #define DATA_ALIGNMENT(TYPE, ALIGN) \
335 1.1 mrg (TREE_CODE (TYPE) == ARRAY_TYPE \
336 1.1 mrg && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
337 1.1 mrg && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
338 1.1 mrg
339 1.1 mrg /* Set this nonzero if move instructions will actually fail to work
340 1.1 mrg when given unaligned data. */
341 1.1 mrg #define STRICT_ALIGNMENT 1
342 1.1 mrg
343 1.1 mrg /* Value is 1 if it is a good idea to tie two pseudo registers
344 1.1 mrg when one has mode MODE1 and one has mode MODE2.
345 1.1 mrg If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
346 1.1 mrg for any hard reg, then this must be 0 for correct output. */
347 1.1 mrg #define MODES_TIEABLE_P(MODE1, MODE2) \
348 1.1 mrg pa_modes_tieable_p (MODE1, MODE2)
349 1.1 mrg
350 1.1 mrg /* Specify the registers used for certain standard purposes.
351 1.1 mrg The values of these macros are register numbers. */
352 1.1 mrg
353 1.1 mrg /* The HP-PA pc isn't overloaded on a register that the compiler knows about. */
354 1.1 mrg /* #define PC_REGNUM */
355 1.1 mrg
356 1.1 mrg /* Register to use for pushing function arguments. */
357 1.1 mrg #define STACK_POINTER_REGNUM 30
358 1.1 mrg
359 1.1 mrg /* Base register for access to local variables of the function. */
360 1.1 mrg #define FRAME_POINTER_REGNUM 3
361 1.1 mrg
362 1.1 mrg /* Don't allow hard registers to be renamed into r2 unless r2
363 1.1 mrg is already live or already being saved (due to eh). */
364 1.1 mrg
365 1.1 mrg #define HARD_REGNO_RENAME_OK(OLD_REG, NEW_REG) \
366 1.1 mrg ((NEW_REG) != 2 || df_regs_ever_live_p (2) || crtl->calls_eh_return)
367 1.1 mrg
368 1.1 mrg /* C statement to store the difference between the frame pointer
369 1.1 mrg and the stack pointer values immediately after the function prologue.
370 1.1 mrg
371 1.1 mrg Note, we always pretend that this is a leaf function because if
372 1.1 mrg it's not, there's no point in trying to eliminate the
373 1.1 mrg frame pointer. If it is a leaf function, we guessed right! */
374 1.1 mrg #define INITIAL_FRAME_POINTER_OFFSET(VAR) \
375 1.1 mrg do {(VAR) = - compute_frame_size (get_frame_size (), 0);} while (0)
376 1.1 mrg
377 1.1 mrg /* Base register for access to arguments of the function. */
378 1.1 mrg #define ARG_POINTER_REGNUM (TARGET_64BIT ? 29 : 3)
379 1.1 mrg
380 1.1 mrg /* Register in which static-chain is passed to a function. */
381 1.1 mrg #define STATIC_CHAIN_REGNUM (TARGET_64BIT ? 31 : 29)
382 1.1 mrg
383 1.1 mrg /* Register used to address the offset table for position-independent
384 1.1 mrg data references. */
385 1.1 mrg #define PIC_OFFSET_TABLE_REGNUM \
386 1.1 mrg (flag_pic ? (TARGET_64BIT ? 27 : 19) : INVALID_REGNUM)
387 1.1 mrg
388 1.1 mrg #define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED 1
389 1.1 mrg
390 1.1 mrg /* Function to return the rtx used to save the pic offset table register
391 1.1 mrg across function calls. */
392 1.1 mrg extern struct rtx_def *hppa_pic_save_rtx (void);
393 1.1 mrg
394 1.1 mrg #define DEFAULT_PCC_STRUCT_RETURN 0
395 1.1 mrg
396 1.1 mrg /* Register in which address to store a structure value
397 1.1 mrg is passed to a function. */
398 1.1 mrg #define PA_STRUCT_VALUE_REGNUM 28
399 1.1 mrg
400 1.1 mrg /* Describe how we implement __builtin_eh_return. */
401 1.1 mrg #define EH_RETURN_DATA_REGNO(N) \
402 1.1 mrg ((N) < 3 ? (N) + 20 : (N) == 3 ? 31 : INVALID_REGNUM)
403 1.1 mrg #define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 29)
404 1.1 mrg #define EH_RETURN_HANDLER_RTX pa_eh_return_handler_rtx ()
405 1.1 mrg
406 1.1 mrg /* Offset from the frame pointer register value to the top of stack. */
407 1.1 mrg #define FRAME_POINTER_CFA_OFFSET(FNDECL) 0
408 1.1 mrg
409 1.1 mrg /* A C expression whose value is RTL representing the location of the
410 1.1 mrg incoming return address at the beginning of any function, before the
411 1.1 mrg prologue. You only need to define this macro if you want to support
412 1.1 mrg call frame debugging information like that provided by DWARF 2. */
413 1.1 mrg #define INCOMING_RETURN_ADDR_RTX (gen_rtx_REG (word_mode, 2))
414 1.1 mrg #define DWARF_FRAME_RETURN_COLUMN (DWARF_FRAME_REGNUM (2))
415 1.1 mrg
416 1.1 mrg /* A C expression whose value is an integer giving a DWARF 2 column
417 1.1 mrg number that may be used as an alternate return column. This should
418 1.1 mrg be defined only if DWARF_FRAME_RETURN_COLUMN is set to a general
419 1.1 mrg register, but an alternate column needs to be used for signal frames.
420 1.1 mrg
421 1.1 mrg Column 0 is not used but unfortunately its register size is set to
422 1.1 mrg 4 bytes (sizeof CCmode) so it can't be used on 64-bit targets. */
423 1.1 mrg #define DWARF_ALT_FRAME_RETURN_COLUMN FIRST_PSEUDO_REGISTER
424 1.1 mrg
425 1.1 mrg /* This macro chooses the encoding of pointers embedded in the exception
426 1.1 mrg handling sections. If at all possible, this should be defined such
427 1.1 mrg that the exception handling section will not require dynamic relocations,
428 1.1 mrg and so may be read-only.
429 1.1 mrg
430 1.1 mrg Because the HP assembler auto aligns, it is necessary to use
431 1.1 mrg DW_EH_PE_aligned. It's not possible to make the data read-only
432 1.1 mrg on the HP-UX SOM port since the linker requires fixups for label
433 1.1 mrg differences in different sections to be word aligned. However,
434 1.1 mrg the SOM linker can do unaligned fixups for absolute pointers.
435 1.1 mrg We also need aligned pointers for global and function pointers.
436 1.1 mrg
437 1.1 mrg Although the HP-UX 64-bit ELF linker can handle unaligned pc-relative
438 1.1 mrg fixups, the runtime doesn't have a consistent relationship between
439 1.1 mrg text and data for dynamically loaded objects. Thus, it's not possible
440 1.1 mrg to use pc-relative encoding for pointers on this target. It may be
441 1.1 mrg possible to use segment relative encodings but GAS doesn't currently
442 1.1 mrg have a mechanism to generate these encodings. For other targets, we
443 1.1 mrg use pc-relative encoding for pointers. If the pointer might require
444 1.1 mrg dynamic relocation, we make it indirect. */
445 1.1 mrg #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \
446 1.1 mrg (TARGET_GAS && !TARGET_HPUX \
447 1.1 mrg ? (DW_EH_PE_pcrel \
448 1.1 mrg | ((GLOBAL) || (CODE) == 2 ? DW_EH_PE_indirect : 0) \
449 1.1 mrg | (TARGET_64BIT ? DW_EH_PE_sdata8 : DW_EH_PE_sdata4)) \
450 1.1 mrg : (!TARGET_GAS || (GLOBAL) || (CODE) == 2 \
451 1.1 mrg ? DW_EH_PE_aligned : DW_EH_PE_absptr))
452 1.1 mrg
453 1.1 mrg /* Handle special EH pointer encodings. Absolute, pc-relative, and
454 1.1 mrg indirect are handled automatically. We output pc-relative, and
455 1.1 mrg indirect pc-relative ourself since we need some special magic to
456 1.1 mrg generate pc-relative relocations, and to handle indirect function
457 1.1 mrg pointers. */
458 1.1 mrg #define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(FILE, ENCODING, SIZE, ADDR, DONE) \
459 1.1 mrg do { \
460 1.1 mrg if (((ENCODING) & 0x70) == DW_EH_PE_pcrel) \
461 1.1 mrg { \
462 1.1 mrg fputs (integer_asm_op (SIZE, FALSE), FILE); \
463 1.1 mrg if ((ENCODING) & DW_EH_PE_indirect) \
464 1.1 mrg output_addr_const (FILE, get_deferred_plabel (ADDR)); \
465 1.1 mrg else \
466 1.1 mrg assemble_name (FILE, XSTR ((ADDR), 0)); \
467 1.1 mrg fputs ("+8-$PIC_pcrel$0", FILE); \
468 1.1 mrg goto DONE; \
469 1.1 mrg } \
470 1.1 mrg } while (0)
471 1.1 mrg
472 1.1 mrg
474 1.1 mrg /* The class value for index registers, and the one for base regs. */
475 1.1 mrg #define INDEX_REG_CLASS GENERAL_REGS
476 1.1 mrg #define BASE_REG_CLASS GENERAL_REGS
477 1.1 mrg
478 1.1 mrg #define FP_REG_CLASS_P(CLASS) \
479 1.1 mrg ((CLASS) == FP_REGS || (CLASS) == FPUPPER_REGS)
480 1.1 mrg
481 1.1 mrg /* True if register is floating-point. */
482 1.1 mrg #define FP_REGNO_P(N) ((N) >= FP_REG_FIRST && (N) <= FP_REG_LAST)
483 1.1 mrg
484 1.1 mrg /* Given an rtx X being reloaded into a reg required to be
485 1.1 mrg in class CLASS, return the class of reg to actually use.
486 1.1 mrg In general this is just CLASS; but on some machines
487 1.1 mrg in some cases it is preferable to use a more restrictive class. */
488 1.1 mrg #define PREFERRED_RELOAD_CLASS(X,CLASS) (CLASS)
489 1.1 mrg
490 1.1 mrg #define MAYBE_FP_REG_CLASS_P(CLASS) \
491 1.1 mrg reg_classes_intersect_p ((CLASS), FP_REGS)
492 1.1 mrg
493 1.1 mrg
494 1.1 mrg /* Stack layout; function entry, exit and calling. */
496 1.1 mrg
497 1.1 mrg /* Define this if pushing a word on the stack
498 1.1 mrg makes the stack pointer a smaller address. */
499 1.1 mrg /* #define STACK_GROWS_DOWNWARD */
500 1.1 mrg
501 1.1 mrg /* Believe it or not. */
502 1.1 mrg #define ARGS_GROW_DOWNWARD
503 1.1 mrg
504 1.1 mrg /* Define this to nonzero if the nominal address of the stack frame
505 1.1 mrg is at the high-address end of the local variables;
506 1.1 mrg that is, each additional local variable allocated
507 1.1 mrg goes at a more negative offset in the frame. */
508 1.1 mrg #define FRAME_GROWS_DOWNWARD 0
509 1.1 mrg
510 1.1 mrg /* Offset within stack frame to start allocating local variables at.
511 1.1 mrg If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
512 1.1 mrg first local allocated. Otherwise, it is the offset to the BEGINNING
513 1.1 mrg of the first local allocated.
514 1.1 mrg
515 1.1 mrg On the 32-bit ports, we reserve one slot for the previous frame
516 1.1 mrg pointer and one fill slot. The fill slot is for compatibility
517 1.1 mrg with HP compiled programs. On the 64-bit ports, we reserve one
518 1.1 mrg slot for the previous frame pointer. */
519 1.1 mrg #define STARTING_FRAME_OFFSET 8
520 1.1 mrg
521 1.1 mrg /* Define STACK_ALIGNMENT_NEEDED to zero to disable final alignment
522 1.1 mrg of the stack. The default is to align it to STACK_BOUNDARY. */
523 1.1 mrg #define STACK_ALIGNMENT_NEEDED 0
524 1.1 mrg
525 1.1 mrg /* If we generate an insn to push BYTES bytes,
526 1.1 mrg this says how many the stack pointer really advances by.
527 1.1 mrg On the HP-PA, don't define this because there are no push insns. */
528 1.1 mrg /* #define PUSH_ROUNDING(BYTES) */
529 1.1 mrg
530 1.1 mrg /* Offset of first parameter from the argument pointer register value.
531 1.1 mrg This value will be negated because the arguments grow down.
532 1.1 mrg Also note that on STACK_GROWS_UPWARD machines (such as this one)
533 1.1 mrg this is the distance from the frame pointer to the end of the first
534 1.1 mrg argument, not it's beginning. To get the real offset of the first
535 1.1 mrg argument, the size of the argument must be added. */
536 1.1 mrg
537 1.1 mrg #define FIRST_PARM_OFFSET(FNDECL) (TARGET_64BIT ? -64 : -32)
538 1.1 mrg
539 1.1 mrg /* When a parameter is passed in a register, stack space is still
540 1.1 mrg allocated for it. */
541 1.1 mrg #define REG_PARM_STACK_SPACE(DECL) (TARGET_64BIT ? 64 : 16)
542 1.1 mrg
543 1.1 mrg /* Define this if the above stack space is to be considered part of the
544 1.1 mrg space allocated by the caller. */
545 1.1 mrg #define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1
546 1.1 mrg
547 1.1 mrg /* Keep the stack pointer constant throughout the function.
548 1.1 mrg This is both an optimization and a necessity: longjmp
549 1.1 mrg doesn't behave itself when the stack pointer moves within
550 1.1 mrg the function! */
551 1.1 mrg #define ACCUMULATE_OUTGOING_ARGS 1
552 1.1 mrg
553 1.1 mrg /* The weird HPPA calling conventions require a minimum of 48 bytes on
554 1.1 mrg the stack: 16 bytes for register saves, and 32 bytes for magic.
555 1.1 mrg This is the difference between the logical top of stack and the
556 1.1 mrg actual sp.
557 1.1 mrg
558 1.1 mrg On the 64-bit port, the HP C compiler allocates a 48-byte frame
559 1.1 mrg marker, although the runtime documentation only describes a 16
560 1.1 mrg byte marker. For compatibility, we allocate 48 bytes. */
561 1.1 mrg #define STACK_POINTER_OFFSET \
562 1.1 mrg (TARGET_64BIT ? -(crtl->outgoing_args_size + 48): -32)
563 1.1 mrg
564 1.1 mrg #define STACK_DYNAMIC_OFFSET(FNDECL) \
565 1.1 mrg (TARGET_64BIT \
566 1.1 mrg ? (STACK_POINTER_OFFSET) \
567 1.1 mrg : ((STACK_POINTER_OFFSET) - crtl->outgoing_args_size))
568 1.1 mrg
569 1.1 mrg /* Value is 1 if returning from a function call automatically
570 1.1 mrg pops the arguments described by the number-of-args field in the call.
571 1.1 mrg FUNDECL is the declaration node of the function (as a tree),
572 1.1 mrg FUNTYPE is the data type of the function (as a tree),
573 1.1 mrg or for a library call it is an identifier node for the subroutine name. */
574 1.1 mrg
575 1.1 mrg #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0
576 1.1 mrg
577 1.1 mrg /* Define how to find the value returned by a library function
578 1.1 mrg assuming the value has mode MODE. */
579 1.1 mrg
580 1.1 mrg #define LIBCALL_VALUE(MODE) \
581 1.1 mrg gen_rtx_REG (MODE, \
582 1.1 mrg (! TARGET_SOFT_FLOAT \
583 1.1 mrg && ((MODE) == SFmode || (MODE) == DFmode) ? 32 : 28))
584 1.1 mrg
585 1.1 mrg /* 1 if N is a possible register number for a function value
586 1.1 mrg as seen by the caller. */
587 1.1 mrg
588 1.1 mrg #define FUNCTION_VALUE_REGNO_P(N) \
589 1.1 mrg ((N) == 28 || (! TARGET_SOFT_FLOAT && (N) == 32))
590 1.1 mrg
591 1.1 mrg
592 1.1 mrg /* Define a data type for recording info about an argument list
594 1.1 mrg during the scan of that argument list. This data type should
595 1.1 mrg hold all necessary information about the function itself
596 1.1 mrg and about the args processed so far, enough to enable macros
597 1.1 mrg such as FUNCTION_ARG to determine where the next arg should go.
598 1.1 mrg
599 1.1 mrg On the HP-PA, the WORDS field holds the number of words
600 1.1 mrg of arguments scanned so far (including the invisible argument,
601 1.1 mrg if any, which holds the structure-value-address). Thus, 4 or
602 1.1 mrg more means all following args should go on the stack.
603 1.1 mrg
604 1.1 mrg The INCOMING field tracks whether this is an "incoming" or
605 1.1 mrg "outgoing" argument.
606 1.1 mrg
607 1.1 mrg The INDIRECT field indicates whether this is is an indirect
608 1.1 mrg call or not.
609 1.1 mrg
610 1.1 mrg The NARGS_PROTOTYPE field indicates that an argument does not
611 1.1 mrg have a prototype when it less than or equal to 0. */
612 1.1 mrg
613 1.1 mrg struct hppa_args {int words, nargs_prototype, incoming, indirect; };
614 1.1 mrg
615 1.1 mrg #define CUMULATIVE_ARGS struct hppa_args
616 1.1 mrg
617 1.1 mrg /* Initialize a variable CUM of type CUMULATIVE_ARGS
618 1.1 mrg for a call to a function whose data type is FNTYPE.
619 1.1 mrg For a library call, FNTYPE is 0. */
620 1.1 mrg
621 1.1 mrg #define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
622 1.1 mrg (CUM).words = 0, \
623 1.1 mrg (CUM).incoming = 0, \
624 1.1 mrg (CUM).indirect = (FNTYPE) && !(FNDECL), \
625 1.1 mrg (CUM).nargs_prototype = (FNTYPE && TYPE_ARG_TYPES (FNTYPE) \
626 1.1 mrg ? (list_length (TYPE_ARG_TYPES (FNTYPE)) - 1 \
627 1.1 mrg + (TYPE_MODE (TREE_TYPE (FNTYPE)) == BLKmode \
628 1.1 mrg || pa_return_in_memory (TREE_TYPE (FNTYPE), 0))) \
629 1.1 mrg : 0)
630 1.1 mrg
631 1.1 mrg
632 1.1 mrg
633 1.1 mrg /* Similar, but when scanning the definition of a procedure. We always
634 1.1 mrg set NARGS_PROTOTYPE large so we never return a PARALLEL. */
635 1.1 mrg
636 1.1 mrg #define INIT_CUMULATIVE_INCOMING_ARGS(CUM,FNTYPE,IGNORE) \
637 1.1 mrg (CUM).words = 0, \
638 1.1 mrg (CUM).incoming = 1, \
639 1.1 mrg (CUM).indirect = 0, \
640 1.1 mrg (CUM).nargs_prototype = 1000
641 1.1 mrg
642 1.1 mrg /* Figure out the size in words of the function argument. The size
643 1.1 mrg returned by this macro should always be greater than zero because
644 1.1 mrg we pass variable and zero sized objects by reference. */
645 1.1 mrg
646 1.1 mrg #define FUNCTION_ARG_SIZE(MODE, TYPE) \
647 1.1 mrg ((((MODE) != BLKmode \
648 1.1 mrg ? (HOST_WIDE_INT) GET_MODE_SIZE (MODE) \
649 1.1 mrg : int_size_in_bytes (TYPE)) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
650 1.1 mrg
651 1.1 mrg /* Update the data in CUM to advance over an argument
652 1.1 mrg of mode MODE and data type TYPE.
653 1.1 mrg (TYPE is null for libcalls where that information may not be available.) */
654 1.1 mrg
655 1.1 mrg #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
656 1.1 mrg { (CUM).nargs_prototype--; \
657 1.1 mrg (CUM).words += FUNCTION_ARG_SIZE(MODE, TYPE) \
658 1.1 mrg + (((CUM).words & 01) && (TYPE) != 0 \
659 1.1 mrg && FUNCTION_ARG_SIZE(MODE, TYPE) > 1); \
660 1.1 mrg }
661 1.1 mrg
662 1.1 mrg /* Determine where to put an argument to a function.
663 1.1 mrg Value is zero to push the argument on the stack,
664 1.1 mrg or a hard register in which to store the argument.
665 1.1 mrg
666 1.1 mrg MODE is the argument's machine mode.
667 1.1 mrg TYPE is the data type of the argument (as a tree).
668 1.1 mrg This is null for libcalls where that information may
669 1.1 mrg not be available.
670 1.1 mrg CUM is a variable of type CUMULATIVE_ARGS which gives info about
671 1.1 mrg the preceding args and about the function being called.
672 1.1 mrg NAMED is nonzero if this argument is a named parameter
673 1.1 mrg (otherwise it is an extra parameter matching an ellipsis).
674 1.1 mrg
675 1.1 mrg On the HP-PA the first four words of args are normally in registers
676 1.1 mrg and the rest are pushed. But any arg that won't entirely fit in regs
677 1.1 mrg is pushed.
678 1.1 mrg
679 1.1 mrg Arguments passed in registers are either 1 or 2 words long.
680 1.1 mrg
681 1.1 mrg The caller must make a distinction between calls to explicitly named
682 1.1 mrg functions and calls through pointers to functions -- the conventions
683 1.1 mrg are different! Calls through pointers to functions only use general
684 1.1 mrg registers for the first four argument words.
685 1.1 mrg
686 1.1 mrg Of course all this is different for the portable runtime model
687 1.1 mrg HP wants everyone to use for ELF. Ugh. Here's a quick description
688 1.1 mrg of how it's supposed to work.
689 1.1 mrg
690 1.1 mrg 1) callee side remains unchanged. It expects integer args to be
691 1.1 mrg in the integer registers, float args in the float registers and
692 1.1 mrg unnamed args in integer registers.
693 1.1 mrg
694 1.1 mrg 2) caller side now depends on if the function being called has
695 1.1 mrg a prototype in scope (rather than if it's being called indirectly).
696 1.1 mrg
697 1.1 mrg 2a) If there is a prototype in scope, then arguments are passed
698 1.1 mrg according to their type (ints in integer registers, floats in float
699 1.1 mrg registers, unnamed args in integer registers.
700 1.1 mrg
701 1.1 mrg 2b) If there is no prototype in scope, then floating point arguments
702 1.1 mrg are passed in both integer and float registers. egad.
703 1.1 mrg
704 1.1 mrg FYI: The portable parameter passing conventions are almost exactly like
705 1.1 mrg the standard parameter passing conventions on the RS6000. That's why
706 1.1 mrg you'll see lots of similar code in rs6000.h. */
707 1.1 mrg
708 1.1 mrg /* If defined, a C expression which determines whether, and in which
709 1.1 mrg direction, to pad out an argument with extra space. */
710 1.1 mrg #define FUNCTION_ARG_PADDING(MODE, TYPE) function_arg_padding ((MODE), (TYPE))
711 1.1 mrg
712 1.1 mrg /* Specify padding for the last element of a block move between registers
713 1.1 mrg and memory.
714 1.1 mrg
715 1.1 mrg The 64-bit runtime specifies that objects need to be left justified
716 1.1 mrg (i.e., the normal justification for a big endian target). The 32-bit
717 1.1 mrg runtime specifies right justification for objects smaller than 64 bits.
718 1.1 mrg We use a DImode register in the parallel for 5 to 7 byte structures
719 1.1 mrg so that there is only one element. This allows the object to be
720 1.1 mrg correctly padded. */
721 1.1 mrg #define BLOCK_REG_PADDING(MODE, TYPE, FIRST) \
722 1.1 mrg function_arg_padding ((MODE), (TYPE))
723 1.1 mrg
724 1.1 mrg /* Do not expect to understand this without reading it several times. I'm
725 1.1 mrg tempted to try and simply it, but I worry about breaking something. */
726 1.1 mrg
727 1.1 mrg #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
728 1.1 mrg function_arg (&CUM, MODE, TYPE, NAMED)
729 1.1 mrg
730 1.1 mrg /* If defined, a C expression that gives the alignment boundary, in
731 1.1 mrg bits, of an argument with the specified mode and type. If it is
732 1.1 mrg not defined, `PARM_BOUNDARY' is used for all arguments. */
733 1.1 mrg
734 1.1 mrg /* Arguments larger than one word are double word aligned. */
735 1.1 mrg
736 1.1 mrg #define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \
737 1.1 mrg (((TYPE) \
738 1.1 mrg ? (integer_zerop (TYPE_SIZE (TYPE)) \
739 1.1 mrg || !TREE_CONSTANT (TYPE_SIZE (TYPE)) \
740 1.1 mrg || int_size_in_bytes (TYPE) <= UNITS_PER_WORD) \
741 1.1 mrg : GET_MODE_SIZE(MODE) <= UNITS_PER_WORD) \
742 1.1 mrg ? PARM_BOUNDARY : MAX_PARM_BOUNDARY)
743 1.1 mrg
744 1.1 mrg
745 1.1 mrg /* On HPPA, we emit profiling code as rtl via PROFILE_HOOK rather than
747 1.1 mrg as assembly via FUNCTION_PROFILER. Just output a local label.
748 1.1 mrg We can't use the function label because the GAS SOM target can't
749 1.1 mrg handle the difference of a global symbol and a local symbol. */
750 1.1 mrg
751 1.1 mrg #ifndef FUNC_BEGIN_PROLOG_LABEL
752 1.1 mrg #define FUNC_BEGIN_PROLOG_LABEL "LFBP"
753 1.1 mrg #endif
754 1.1 mrg
755 1.1 mrg #define FUNCTION_PROFILER(FILE, LABEL) \
756 1.1 mrg (*targetm.asm_out.internal_label) (FILE, FUNC_BEGIN_PROLOG_LABEL, LABEL)
757 1.1 mrg
758 1.1 mrg #define PROFILE_HOOK(label_no) hppa_profile_hook (label_no)
759 1.1 mrg void hppa_profile_hook (int label_no);
760 1.1 mrg
761 1.1 mrg /* The profile counter if emitted must come before the prologue. */
762 1.1 mrg #define PROFILE_BEFORE_PROLOGUE 1
763 1.1 mrg
764 1.1 mrg /* We never want final.c to emit profile counters. When profile
765 1.1 mrg counters are required, we have to defer emitting them to the end
766 1.1 mrg of the current file. */
767 1.1 mrg #define NO_PROFILE_COUNTERS 1
768 1.1 mrg
769 1.1 mrg /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
770 1.1 mrg the stack pointer does not matter. The value is tested only in
771 1.1 mrg functions that have frame pointers.
772 1.1 mrg No definition is equivalent to always zero. */
773 1.1 mrg
774 1.1 mrg extern int may_call_alloca;
775 1.1 mrg
776 1.1 mrg #define EXIT_IGNORE_STACK \
777 1.1 mrg (get_frame_size () != 0 \
778 1.1 mrg || cfun->calls_alloca || crtl->outgoing_args_size)
779 1.1 mrg
780 1.1 mrg /* Length in units of the trampoline for entering a nested function. */
781 1.1 mrg
782 1.1 mrg #define TRAMPOLINE_SIZE (TARGET_64BIT ? 72 : 52)
783 1.1 mrg
784 1.1 mrg /* Alignment required by the trampoline. */
785 1.1 mrg
786 1.1 mrg #define TRAMPOLINE_ALIGNMENT BITS_PER_WORD
787 1.1 mrg
788 1.1 mrg /* Minimum length of a cache line. A length of 16 will work on all
789 1.1 mrg PA-RISC processors. All PA 1.1 processors have a cache line of
790 1.1 mrg 32 bytes. Most but not all PA 2.0 processors have a cache line
791 1.1 mrg of 64 bytes. As cache flushes are expensive and we don't support
792 1.1 mrg PA 1.0, we use a minimum length of 32. */
793 1.1 mrg
794 1.1 mrg #define MIN_CACHELINE_SIZE 32
795 1.1 mrg
796 1.1 mrg
797 1.1 mrg /* Addressing modes, and classification of registers for them.
799 1.1 mrg
800 1.1 mrg Using autoincrement addressing modes on PA8000 class machines is
801 1.1 mrg not profitable. */
802 1.1 mrg
803 1.1 mrg #define HAVE_POST_INCREMENT (pa_cpu < PROCESSOR_8000)
804 1.1 mrg #define HAVE_POST_DECREMENT (pa_cpu < PROCESSOR_8000)
805 1.1 mrg
806 1.1 mrg #define HAVE_PRE_DECREMENT (pa_cpu < PROCESSOR_8000)
807 1.1 mrg #define HAVE_PRE_INCREMENT (pa_cpu < PROCESSOR_8000)
808 1.1 mrg
809 1.1 mrg /* Macros to check register numbers against specific register classes. */
810 1.1 mrg
811 1.1 mrg /* The following macros assume that X is a hard or pseudo reg number.
812 1.1 mrg They give nonzero only if X is a hard reg of the suitable class
813 1.1 mrg or a pseudo reg currently allocated to a suitable hard reg.
814 1.1 mrg Since they use reg_renumber, they are safe only once reg_renumber
815 1.1 mrg has been allocated, which happens in local-alloc.c. */
816 1.1 mrg
817 1.1 mrg #define REGNO_OK_FOR_INDEX_P(X) \
818 1.1 mrg ((X) && ((X) < 32 \
819 1.1 mrg || (X >= FIRST_PSEUDO_REGISTER \
820 1.1 mrg && reg_renumber \
821 1.1 mrg && (unsigned) reg_renumber[X] < 32)))
822 1.1 mrg #define REGNO_OK_FOR_BASE_P(X) \
823 1.1 mrg ((X) && ((X) < 32 \
824 1.1 mrg || (X >= FIRST_PSEUDO_REGISTER \
825 1.1 mrg && reg_renumber \
826 1.1 mrg && (unsigned) reg_renumber[X] < 32)))
827 1.1 mrg #define REGNO_OK_FOR_FP_P(X) \
828 1.1 mrg (FP_REGNO_P (X) \
829 1.1 mrg || (X >= FIRST_PSEUDO_REGISTER \
830 1.1 mrg && reg_renumber \
831 1.1 mrg && FP_REGNO_P (reg_renumber[X])))
832 1.1 mrg
833 1.1 mrg /* Now macros that check whether X is a register and also,
834 1.1 mrg strictly, whether it is in a specified class.
835 1.1 mrg
836 1.1 mrg These macros are specific to the HP-PA, and may be used only
837 1.1 mrg in code for printing assembler insns and in conditions for
838 1.1 mrg define_optimization. */
839 1.1 mrg
840 1.1 mrg /* 1 if X is an fp register. */
841 1.1 mrg
842 1.1 mrg #define FP_REG_P(X) (REG_P (X) && REGNO_OK_FOR_FP_P (REGNO (X)))
843 1.1 mrg
844 1.1 mrg /* Maximum number of registers that can appear in a valid memory address. */
846 1.1 mrg
847 1.1 mrg #define MAX_REGS_PER_ADDRESS 2
848 1.1 mrg
849 1.1 mrg /* Non-TLS symbolic references. */
850 1.1 mrg #define PA_SYMBOL_REF_TLS_P(RTX) \
851 1.1 mrg (GET_CODE (RTX) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (RTX) != 0)
852 1.1 mrg
853 1.1 mrg /* Recognize any constant value that is a valid address except
854 1.1 mrg for symbolic addresses. We get better CSE by rejecting them
855 1.1 mrg here and allowing hppa_legitimize_address to break them up. We
856 1.1 mrg use most of the constants accepted by CONSTANT_P, except CONST_DOUBLE. */
857 1.1 mrg
858 1.1 mrg #define CONSTANT_ADDRESS_P(X) \
859 1.1 mrg ((GET_CODE (X) == LABEL_REF \
860 1.1 mrg || (GET_CODE (X) == SYMBOL_REF && !SYMBOL_REF_TLS_MODEL (X)) \
861 1.1 mrg || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST \
862 1.1 mrg || GET_CODE (X) == HIGH) \
863 1.1 mrg && (reload_in_progress || reload_completed || ! symbolic_expression_p (X)))
864 1.1 mrg
865 1.1 mrg /* A C expression that is nonzero if we are using the new HP assembler. */
866 1.1 mrg
867 1.1 mrg #ifndef NEW_HP_ASSEMBLER
868 1.1 mrg #define NEW_HP_ASSEMBLER 0
869 1.1 mrg #endif
870 1.1 mrg
871 1.1 mrg /* The macros below define the immediate range for CONST_INTS on
872 1.1 mrg the 64-bit port. Constants in this range can be loaded in three
873 1.1 mrg instructions using a ldil/ldo/depdi sequence. Constants outside
874 1.1 mrg this range are forced to the constant pool prior to reload. */
875 1.1 mrg
876 1.1 mrg #define MAX_LEGIT_64BIT_CONST_INT ((HOST_WIDE_INT) 32 << 31)
877 1.1 mrg #define MIN_LEGIT_64BIT_CONST_INT ((HOST_WIDE_INT) -32 << 31)
878 1.1 mrg #define LEGITIMATE_64BIT_CONST_INT_P(X) \
879 1.1 mrg ((X) >= MIN_LEGIT_64BIT_CONST_INT && (X) < MAX_LEGIT_64BIT_CONST_INT)
880 1.1 mrg
881 1.1 mrg /* A C expression that is nonzero if X is a legitimate constant for an
882 1.1 mrg immediate operand.
883 1.1 mrg
884 1.1 mrg We include all constant integers and constant doubles, but not
885 1.1 mrg floating-point, except for floating-point zero. We reject LABEL_REFs
886 1.1 mrg if we're not using gas or the new HP assembler.
887 1.1 mrg
888 1.1 mrg In 64-bit mode, we reject CONST_DOUBLES. We also reject CONST_INTS
889 1.1 mrg that need more than three instructions to load prior to reload. This
890 1.1 mrg limit is somewhat arbitrary. It takes three instructions to load a
891 1.1 mrg CONST_INT from memory but two are memory accesses. It may be better
892 1.1 mrg to increase the allowed range for CONST_INTS. We may also be able
893 1.1 mrg to handle CONST_DOUBLES. */
894 1.1 mrg
895 1.1 mrg #define LEGITIMATE_CONSTANT_P(X) \
896 1.1 mrg ((GET_MODE_CLASS (GET_MODE (X)) != MODE_FLOAT \
897 1.1 mrg || (X) == CONST0_RTX (GET_MODE (X))) \
898 1.1 mrg && (NEW_HP_ASSEMBLER \
899 1.1 mrg || TARGET_GAS \
900 1.1 mrg || GET_CODE (X) != LABEL_REF) \
901 1.1 mrg && (!PA_SYMBOL_REF_TLS_P (X) \
902 1.1 mrg || (SYMBOL_REF_TLS_MODEL (X) != TLS_MODEL_GLOBAL_DYNAMIC \
903 1.1 mrg && SYMBOL_REF_TLS_MODEL (X) != TLS_MODEL_LOCAL_DYNAMIC)) \
904 1.1 mrg && (!TARGET_64BIT \
905 1.1 mrg || GET_CODE (X) != CONST_DOUBLE) \
906 1.1 mrg && (!TARGET_64BIT \
907 1.1 mrg || HOST_BITS_PER_WIDE_INT <= 32 \
908 1.1 mrg || GET_CODE (X) != CONST_INT \
909 1.1 mrg || reload_in_progress \
910 1.1 mrg || reload_completed \
911 1.1 mrg || LEGITIMATE_64BIT_CONST_INT_P (INTVAL (X)) \
912 1.1 mrg || cint_ok_for_move (INTVAL (X))) \
913 1.1 mrg && !function_label_operand (X, VOIDmode))
914 1.1 mrg
915 1.1 mrg /* Target flags set on a symbol_ref. */
916 1.1 mrg
917 1.1 mrg /* Set by ASM_OUTPUT_SYMBOL_REF when a symbol_ref is output. */
918 1.1 mrg #define SYMBOL_FLAG_REFERENCED (1 << SYMBOL_FLAG_MACH_DEP_SHIFT)
919 1.1 mrg #define SYMBOL_REF_REFERENCED_P(RTX) \
920 1.1 mrg ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_REFERENCED) != 0)
921 1.1 mrg
922 1.1 mrg /* Defines for constraints.md. */
923 1.1 mrg
924 1.1 mrg /* Return 1 iff OP is a scaled or unscaled index address. */
925 1.1 mrg #define IS_INDEX_ADDR_P(OP) \
926 1.1 mrg (GET_CODE (OP) == PLUS \
927 1.1 mrg && GET_MODE (OP) == Pmode \
928 1.1 mrg && (GET_CODE (XEXP (OP, 0)) == MULT \
929 1.1 mrg || GET_CODE (XEXP (OP, 1)) == MULT \
930 1.1 mrg || (REG_P (XEXP (OP, 0)) \
931 1.1 mrg && REG_P (XEXP (OP, 1)))))
932 1.1 mrg
933 1.1 mrg /* Return 1 iff OP is a LO_SUM DLT address. */
934 1.1 mrg #define IS_LO_SUM_DLT_ADDR_P(OP) \
935 1.1 mrg (GET_CODE (OP) == LO_SUM \
936 1.1 mrg && GET_MODE (OP) == Pmode \
937 1.1 mrg && REG_P (XEXP (OP, 0)) \
938 1.1 mrg && REG_OK_FOR_BASE_P (XEXP (OP, 0)) \
939 1.1 mrg && GET_CODE (XEXP (OP, 1)) == UNSPEC)
940 1.1 mrg
941 1.1 mrg /* Nonzero if 14-bit offsets can be used for all loads and stores.
942 1.1 mrg This is not possible when generating PA 1.x code as floating point
943 1.1 mrg loads and stores only support 5-bit offsets. Note that we do not
944 1.1 mrg forbid the use of 14-bit offsets in GO_IF_LEGITIMATE_ADDRESS.
945 1.1 mrg Instead, we use pa_secondary_reload() to reload integer mode
946 1.1 mrg REG+D memory addresses used in floating point loads and stores.
947 1.1 mrg
948 1.1 mrg FIXME: the ELF32 linker clobbers the LSB of the FP register number
949 1.1 mrg in PA 2.0 floating-point insns with long displacements. This is
950 1.1 mrg because R_PARISC_DPREL14WR and other relocations like it are not
951 1.1 mrg yet supported by GNU ld. For now, we reject long displacements
952 1.1 mrg on this target. */
953 1.1 mrg
954 1.1 mrg #define INT14_OK_STRICT \
955 1.1 mrg (TARGET_SOFT_FLOAT \
956 1.1 mrg || TARGET_DISABLE_FPREGS \
957 1.1 mrg || (TARGET_PA_20 && !TARGET_ELF32))
958 1.1 mrg
959 1.1 mrg /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
960 1.1 mrg and check its validity for a certain class.
961 1.1 mrg We have two alternate definitions for each of them.
962 1.1 mrg The usual definition accepts all pseudo regs; the other rejects
963 1.1 mrg them unless they have been allocated suitable hard regs.
964 1.1 mrg The symbol REG_OK_STRICT causes the latter definition to be used.
965 1.1 mrg
966 1.1 mrg Most source files want to accept pseudo regs in the hope that
967 1.1 mrg they will get allocated to the class that the insn wants them to be in.
968 1.1 mrg Source files for reload pass need to be strict.
969 1.1 mrg After reload, it makes no difference, since pseudo regs have
970 1.1 mrg been eliminated by then. */
971 1.1 mrg
972 1.1 mrg #ifndef REG_OK_STRICT
973 1.1 mrg
974 1.1 mrg /* Nonzero if X is a hard reg that can be used as an index
975 1.1 mrg or if it is a pseudo reg. */
976 1.1 mrg #define REG_OK_FOR_INDEX_P(X) \
977 1.1 mrg (REGNO (X) && (REGNO (X) < 32 || REGNO (X) >= FIRST_PSEUDO_REGISTER))
978 1.1 mrg
979 1.1 mrg /* Nonzero if X is a hard reg that can be used as a base reg
980 1.1 mrg or if it is a pseudo reg. */
981 1.1 mrg #define REG_OK_FOR_BASE_P(X) \
982 1.1 mrg (REGNO (X) && (REGNO (X) < 32 || REGNO (X) >= FIRST_PSEUDO_REGISTER))
983 1.1 mrg
984 1.1 mrg #else
985 1.1 mrg
986 1.1 mrg /* Nonzero if X is a hard reg that can be used as an index. */
987 1.1 mrg #define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
988 1.1 mrg
989 1.1 mrg /* Nonzero if X is a hard reg that can be used as a base reg. */
990 1.1 mrg #define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
991 1.1 mrg
992 1.1 mrg #endif
993 1.1 mrg
994 1.1 mrg /* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression that is a
996 1.1 mrg valid memory address for an instruction. The MODE argument is the
997 1.1 mrg machine mode for the MEM expression that wants to use this address.
998 1.1 mrg
999 1.1 mrg On HP PA-RISC, the legitimate address forms are REG+SMALLINT,
1000 1.1 mrg REG+REG, and REG+(REG*SCALE). The indexed address forms are only
1001 1.1 mrg available with floating point loads and stores, and integer loads.
1002 1.1 mrg We get better code by allowing indexed addresses in the initial
1003 1.1 mrg RTL generation.
1004 1.1 mrg
1005 1.1 mrg The acceptance of indexed addresses as legitimate implies that we
1006 1.1 mrg must provide patterns for doing indexed integer stores, or the move
1007 1.1 mrg expanders must force the address of an indexed store to a register.
1008 1.1 mrg We have adopted the latter approach.
1009 1.1 mrg
1010 1.1 mrg Another function of GO_IF_LEGITIMATE_ADDRESS is to ensure that
1011 1.1 mrg the base register is a valid pointer for indexed instructions.
1012 1.1 mrg On targets that have non-equivalent space registers, we have to
1013 1.1 mrg know at the time of assembler output which register in a REG+REG
1014 1.1 mrg pair is the base register. The REG_POINTER flag is sometimes lost
1015 1.1 mrg in reload and the following passes, so it can't be relied on during
1016 1.1 mrg code generation. Thus, we either have to canonicalize the order
1017 1.1 mrg of the registers in REG+REG indexed addresses, or treat REG+REG
1018 1.1 mrg addresses separately and provide patterns for both permutations.
1019 1.1 mrg
1020 1.1 mrg The latter approach requires several hundred additional lines of
1021 1.1 mrg code in pa.md. The downside to canonicalizing is that a PLUS
1022 1.1 mrg in the wrong order can't combine to form to make a scaled indexed
1023 1.1 mrg memory operand. As we won't need to canonicalize the operands if
1024 1.1 mrg the REG_POINTER lossage can be fixed, it seems better canonicalize.
1025 1.1 mrg
1026 1.1 mrg We initially break out scaled indexed addresses in canonical order
1027 1.1 mrg in emit_move_sequence. LEGITIMIZE_ADDRESS also canonicalizes
1028 1.1 mrg scaled indexed addresses during RTL generation. However, fold_rtx
1029 1.1 mrg has its own opinion on how the operands of a PLUS should be ordered.
1030 1.1 mrg If one of the operands is equivalent to a constant, it will make
1031 1.1 mrg that operand the second operand. As the base register is likely to
1032 1.1 mrg be equivalent to a SYMBOL_REF, we have made it the second operand.
1033 1.1 mrg
1034 1.1 mrg GO_IF_LEGITIMATE_ADDRESS accepts REG+REG as legitimate when the
1035 1.1 mrg operands are in the order INDEX+BASE on targets with non-equivalent
1036 1.1 mrg space registers, and in any order on targets with equivalent space
1037 1.1 mrg registers. It accepts both MULT+BASE and BASE+MULT for scaled indexing.
1038 1.1 mrg
1039 1.1 mrg We treat a SYMBOL_REF as legitimate if it is part of the current
1040 1.1 mrg function's constant-pool, because such addresses can actually be
1041 1.1 mrg output as REG+SMALLINT. */
1042 1.1 mrg
1043 1.1 mrg #define VAL_5_BITS_P(X) ((unsigned HOST_WIDE_INT)(X) + 0x10 < 0x20)
1044 1.1 mrg #define INT_5_BITS(X) VAL_5_BITS_P (INTVAL (X))
1045 1.1 mrg
1046 1.1 mrg #define VAL_U5_BITS_P(X) ((unsigned HOST_WIDE_INT)(X) < 0x20)
1047 1.1 mrg #define INT_U5_BITS(X) VAL_U5_BITS_P (INTVAL (X))
1048 1.1 mrg
1049 1.1 mrg #define VAL_11_BITS_P(X) ((unsigned HOST_WIDE_INT)(X) + 0x400 < 0x800)
1050 1.1 mrg #define INT_11_BITS(X) VAL_11_BITS_P (INTVAL (X))
1051 1.1 mrg
1052 1.1 mrg #define VAL_14_BITS_P(X) ((unsigned HOST_WIDE_INT)(X) + 0x2000 < 0x4000)
1053 1.1 mrg #define INT_14_BITS(X) VAL_14_BITS_P (INTVAL (X))
1054 1.1 mrg
1055 1.1 mrg #if HOST_BITS_PER_WIDE_INT > 32
1056 1.1 mrg #define VAL_32_BITS_P(X) \
1057 1.1 mrg ((unsigned HOST_WIDE_INT)(X) + ((unsigned HOST_WIDE_INT) 1 << 31) \
1058 1.1 mrg < (unsigned HOST_WIDE_INT) 2 << 31)
1059 1.1 mrg #else
1060 1.1 mrg #define VAL_32_BITS_P(X) 1
1061 1.1 mrg #endif
1062 1.1 mrg #define INT_32_BITS(X) VAL_32_BITS_P (INTVAL (X))
1063 1.1 mrg
1064 1.1 mrg /* These are the modes that we allow for scaled indexing. */
1065 1.1 mrg #define MODE_OK_FOR_SCALED_INDEXING_P(MODE) \
1066 1.1 mrg ((TARGET_64BIT && (MODE) == DImode) \
1067 1.1 mrg || (MODE) == SImode \
1068 1.1 mrg || (MODE) == HImode \
1069 1.1 mrg || (MODE) == SFmode \
1070 1.1 mrg || (MODE) == DFmode)
1071 1.1 mrg
1072 1.1 mrg /* These are the modes that we allow for unscaled indexing. */
1073 1.1 mrg #define MODE_OK_FOR_UNSCALED_INDEXING_P(MODE) \
1074 1.1 mrg ((TARGET_64BIT && (MODE) == DImode) \
1075 1.1 mrg || (MODE) == SImode \
1076 1.1 mrg || (MODE) == HImode \
1077 1.1 mrg || (MODE) == QImode \
1078 1.1 mrg || (MODE) == SFmode \
1079 1.1 mrg || (MODE) == DFmode)
1080 1.1 mrg
1081 1.1 mrg #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
1082 1.1 mrg { \
1083 1.1 mrg if ((REG_P (X) && REG_OK_FOR_BASE_P (X)) \
1084 1.1 mrg || ((GET_CODE (X) == PRE_DEC || GET_CODE (X) == POST_DEC \
1085 1.1 mrg || GET_CODE (X) == PRE_INC || GET_CODE (X) == POST_INC) \
1086 1.1 mrg && REG_P (XEXP (X, 0)) \
1087 1.1 mrg && REG_OK_FOR_BASE_P (XEXP (X, 0)))) \
1088 1.1 mrg goto ADDR; \
1089 1.1 mrg else if (GET_CODE (X) == PLUS) \
1090 1.1 mrg { \
1091 1.1 mrg rtx base = 0, index = 0; \
1092 1.1 mrg if (REG_P (XEXP (X, 1)) \
1093 1.1 mrg && REG_OK_FOR_BASE_P (XEXP (X, 1))) \
1094 1.1 mrg base = XEXP (X, 1), index = XEXP (X, 0); \
1095 1.1 mrg else if (REG_P (XEXP (X, 0)) \
1096 1.1 mrg && REG_OK_FOR_BASE_P (XEXP (X, 0))) \
1097 1.1 mrg base = XEXP (X, 0), index = XEXP (X, 1); \
1098 1.1 mrg if (base \
1099 1.1 mrg && GET_CODE (index) == CONST_INT \
1100 1.1 mrg && ((INT_14_BITS (index) \
1101 1.1 mrg && (((MODE) != DImode \
1102 1.1 mrg && (MODE) != SFmode \
1103 1.1 mrg && (MODE) != DFmode) \
1104 1.1 mrg /* The base register for DImode loads and stores \
1105 1.1 mrg with long displacements must be aligned because \
1106 1.1 mrg the lower three bits in the displacement are \
1107 1.1 mrg assumed to be zero. */ \
1108 1.1 mrg || ((MODE) == DImode \
1109 1.1 mrg && (!TARGET_64BIT \
1110 1.1 mrg || (INTVAL (index) % 8) == 0)) \
1111 1.1 mrg /* Similarly, the base register for SFmode/DFmode \
1112 1.1 mrg loads and stores with long displacements must \
1113 1.1 mrg be aligned. */ \
1114 1.1 mrg || (((MODE) == SFmode || (MODE) == DFmode) \
1115 1.1 mrg && INT14_OK_STRICT \
1116 1.1 mrg && (INTVAL (index) % GET_MODE_SIZE (MODE)) == 0))) \
1117 1.1 mrg || INT_5_BITS (index))) \
1118 1.1 mrg goto ADDR; \
1119 1.1 mrg if (!TARGET_DISABLE_INDEXING \
1120 1.1 mrg /* Only accept the "canonical" INDEX+BASE operand order \
1121 1.1 mrg on targets with non-equivalent space registers. */ \
1122 1.1 mrg && (TARGET_NO_SPACE_REGS \
1123 1.1 mrg ? (base && REG_P (index)) \
1124 1.1 mrg : (base == XEXP (X, 1) && REG_P (index) \
1125 1.1 mrg && (reload_completed \
1126 1.1 mrg || (reload_in_progress && HARD_REGISTER_P (base)) \
1127 1.1 mrg || REG_POINTER (base)) \
1128 1.1 mrg && (reload_completed \
1129 1.1 mrg || (reload_in_progress && HARD_REGISTER_P (index)) \
1130 1.1 mrg || !REG_POINTER (index)))) \
1131 1.1 mrg && MODE_OK_FOR_UNSCALED_INDEXING_P (MODE) \
1132 1.1 mrg && REG_OK_FOR_INDEX_P (index) \
1133 1.1 mrg && borx_reg_operand (base, Pmode) \
1134 1.1 mrg && borx_reg_operand (index, Pmode)) \
1135 1.1 mrg goto ADDR; \
1136 1.1 mrg if (!TARGET_DISABLE_INDEXING \
1137 1.1 mrg && base \
1138 1.1 mrg && GET_CODE (index) == MULT \
1139 1.1 mrg && MODE_OK_FOR_SCALED_INDEXING_P (MODE) \
1140 1.1 mrg && REG_P (XEXP (index, 0)) \
1141 1.1 mrg && GET_MODE (XEXP (index, 0)) == Pmode \
1142 1.1 mrg && REG_OK_FOR_INDEX_P (XEXP (index, 0)) \
1143 1.1 mrg && GET_CODE (XEXP (index, 1)) == CONST_INT \
1144 1.1 mrg && INTVAL (XEXP (index, 1)) \
1145 1.1 mrg == (HOST_WIDE_INT) GET_MODE_SIZE (MODE) \
1146 1.1 mrg && borx_reg_operand (base, Pmode)) \
1147 1.1 mrg goto ADDR; \
1148 1.1 mrg } \
1149 1.1 mrg else if (GET_CODE (X) == LO_SUM \
1150 1.1 mrg && GET_CODE (XEXP (X, 0)) == REG \
1151 1.1 mrg && REG_OK_FOR_BASE_P (XEXP (X, 0)) \
1152 1.1 mrg && CONSTANT_P (XEXP (X, 1)) \
1153 1.1 mrg && (TARGET_SOFT_FLOAT \
1154 1.1 mrg /* We can allow symbolic LO_SUM addresses for PA2.0. */ \
1155 1.1 mrg || (TARGET_PA_20 \
1156 1.1 mrg && !TARGET_ELF32 \
1157 1.1 mrg && GET_CODE (XEXP (X, 1)) != CONST_INT) \
1158 1.1 mrg || ((MODE) != SFmode \
1159 1.1 mrg && (MODE) != DFmode))) \
1160 1.1 mrg goto ADDR; \
1161 1.1 mrg else if (GET_CODE (X) == LO_SUM \
1162 1.1 mrg && GET_CODE (XEXP (X, 0)) == SUBREG \
1163 1.1 mrg && GET_CODE (SUBREG_REG (XEXP (X, 0))) == REG \
1164 1.1 mrg && REG_OK_FOR_BASE_P (SUBREG_REG (XEXP (X, 0))) \
1165 1.1 mrg && CONSTANT_P (XEXP (X, 1)) \
1166 1.1 mrg && (TARGET_SOFT_FLOAT \
1167 1.1 mrg /* We can allow symbolic LO_SUM addresses for PA2.0. */ \
1168 1.1 mrg || (TARGET_PA_20 \
1169 1.1 mrg && !TARGET_ELF32 \
1170 1.1 mrg && GET_CODE (XEXP (X, 1)) != CONST_INT) \
1171 1.1 mrg || ((MODE) != SFmode \
1172 1.1 mrg && (MODE) != DFmode))) \
1173 1.1 mrg goto ADDR; \
1174 1.1 mrg else if (GET_CODE (X) == CONST_INT && INT_5_BITS (X)) \
1175 1.1 mrg goto ADDR; \
1176 1.1 mrg /* Needed for -fPIC */ \
1177 1.1 mrg else if (GET_CODE (X) == LO_SUM \
1178 1.1 mrg && GET_CODE (XEXP (X, 0)) == REG \
1179 1.1 mrg && REG_OK_FOR_BASE_P (XEXP (X, 0)) \
1180 1.1 mrg && GET_CODE (XEXP (X, 1)) == UNSPEC \
1181 1.1 mrg && (TARGET_SOFT_FLOAT \
1182 1.1 mrg || (TARGET_PA_20 && !TARGET_ELF32) \
1183 1.1 mrg || ((MODE) != SFmode \
1184 1.1 mrg && (MODE) != DFmode))) \
1185 1.1 mrg goto ADDR; \
1186 1.1 mrg }
1187 1.1 mrg
1188 1.1 mrg /* Look for machine dependent ways to make the invalid address AD a
1189 1.1 mrg valid address.
1190 1.1 mrg
1191 1.1 mrg For the PA, transform:
1192 1.1 mrg
1193 1.1 mrg memory(X + <large int>)
1194 1.1 mrg
1195 1.1 mrg into:
1196 1.1 mrg
1197 1.1 mrg if (<large int> & mask) >= 16
1198 1.1 mrg Y = (<large int> & ~mask) + mask + 1 Round up.
1199 1.1 mrg else
1200 1.1 mrg Y = (<large int> & ~mask) Round down.
1201 1.1 mrg Z = X + Y
1202 1.1 mrg memory (Z + (<large int> - Y));
1203 1.1 mrg
1204 1.1 mrg This makes reload inheritance and reload_cse work better since Z
1205 1.1 mrg can be reused.
1206 1.1 mrg
1207 1.1 mrg There may be more opportunities to improve code with this hook. */
1208 1.1 mrg #define LEGITIMIZE_RELOAD_ADDRESS(AD, MODE, OPNUM, TYPE, IND, WIN) \
1209 1.1 mrg do { \
1210 1.1 mrg HOST_WIDE_INT offset, newoffset, mask; \
1211 1.1 mrg rtx new_rtx, temp = NULL_RTX; \
1212 1.1 mrg \
1213 1.1 mrg mask = (GET_MODE_CLASS (MODE) == MODE_FLOAT \
1214 1.1 mrg ? (INT14_OK_STRICT ? 0x3fff : 0x1f) : 0x3fff); \
1215 1.1 mrg \
1216 1.1 mrg if (optimize && GET_CODE (AD) == PLUS) \
1217 1.1 mrg temp = simplify_binary_operation (PLUS, Pmode, \
1218 1.1 mrg XEXP (AD, 0), XEXP (AD, 1)); \
1219 1.1 mrg \
1220 1.1 mrg new_rtx = temp ? temp : AD; \
1221 1.1 mrg \
1222 1.1 mrg if (optimize \
1223 1.1 mrg && GET_CODE (new_rtx) == PLUS \
1224 1.1 mrg && GET_CODE (XEXP (new_rtx, 0)) == REG \
1225 1.1 mrg && GET_CODE (XEXP (new_rtx, 1)) == CONST_INT) \
1226 1.1 mrg { \
1227 1.1 mrg offset = INTVAL (XEXP ((new_rtx), 1)); \
1228 1.1 mrg \
1229 1.1 mrg /* Choose rounding direction. Round up if we are >= halfway. */ \
1230 1.1 mrg if ((offset & mask) >= ((mask + 1) / 2)) \
1231 1.1 mrg newoffset = (offset & ~mask) + mask + 1; \
1232 1.1 mrg else \
1233 1.1 mrg newoffset = offset & ~mask; \
1234 1.1 mrg \
1235 1.1 mrg /* Ensure that long displacements are aligned. */ \
1236 1.1 mrg if (mask == 0x3fff \
1237 1.1 mrg && (GET_MODE_CLASS (MODE) == MODE_FLOAT \
1238 1.1 mrg || (TARGET_64BIT && (MODE) == DImode))) \
1239 1.1 mrg newoffset &= ~(GET_MODE_SIZE (MODE) - 1); \
1240 1.1 mrg \
1241 1.1 mrg if (newoffset != 0 && VAL_14_BITS_P (newoffset)) \
1242 1.1 mrg { \
1243 1.1 mrg temp = gen_rtx_PLUS (Pmode, XEXP (new_rtx, 0), \
1244 1.1 mrg GEN_INT (newoffset)); \
1245 1.1 mrg AD = gen_rtx_PLUS (Pmode, temp, GEN_INT (offset - newoffset));\
1246 1.1 mrg push_reload (XEXP (AD, 0), 0, &XEXP (AD, 0), 0, \
1247 1.1 mrg BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, \
1248 1.1 mrg (OPNUM), (TYPE)); \
1249 1.1 mrg goto WIN; \
1250 1.1 mrg } \
1251 1.1 mrg } \
1252 1.1 mrg } while (0)
1253 1.1 mrg
1254 1.1 mrg
1255 1.1 mrg
1256 1.1 mrg #define TARGET_ASM_SELECT_SECTION pa_select_section
1258 1.1 mrg
1259 1.1 mrg /* Return a nonzero value if DECL has a section attribute. */
1260 1.1 mrg #define IN_NAMED_SECTION_P(DECL) \
1261 1.1 mrg ((TREE_CODE (DECL) == FUNCTION_DECL || TREE_CODE (DECL) == VAR_DECL) \
1262 1.1 mrg && DECL_SECTION_NAME (DECL) != NULL_TREE)
1263 1.1 mrg
1264 1.1 mrg /* Define this macro if references to a symbol must be treated
1265 1.1 mrg differently depending on something about the variable or
1266 1.1 mrg function named by the symbol (such as what section it is in).
1267 1.1 mrg
1268 1.1 mrg The macro definition, if any, is executed immediately after the
1269 1.1 mrg rtl for DECL or other node is created.
1270 1.1 mrg The value of the rtl will be a `mem' whose address is a
1271 1.1 mrg `symbol_ref'.
1272 1.1 mrg
1273 1.1 mrg The usual thing for this macro to do is to a flag in the
1274 1.1 mrg `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
1275 1.1 mrg name string in the `symbol_ref' (if one bit is not enough
1276 1.1 mrg information).
1277 1.1 mrg
1278 1.1 mrg On the HP-PA we use this to indicate if a symbol is in text or
1279 1.1 mrg data space. Also, function labels need special treatment. */
1280 1.1 mrg
1281 1.1 mrg #define TEXT_SPACE_P(DECL)\
1282 1.1 mrg (TREE_CODE (DECL) == FUNCTION_DECL \
1283 1.1 mrg || (TREE_CODE (DECL) == VAR_DECL \
1284 1.1 mrg && TREE_READONLY (DECL) && ! TREE_SIDE_EFFECTS (DECL) \
1285 1.1 mrg && (! DECL_INITIAL (DECL) || ! reloc_needed (DECL_INITIAL (DECL))) \
1286 1.1 mrg && !flag_pic) \
1287 1.1 mrg || CONSTANT_CLASS_P (DECL))
1288 1.1 mrg
1289 1.1 mrg #define FUNCTION_NAME_P(NAME) (*(NAME) == '@')
1290 1.1 mrg
1291 1.1 mrg /* Specify the machine mode that this machine uses for the index in the
1292 1.1 mrg tablejump instruction. For small tables, an element consists of a
1293 1.1 mrg ia-relative branch and its delay slot. When -mbig-switch is specified,
1294 1.1 mrg we use a 32-bit absolute address for non-pic code, and a 32-bit offset
1295 1.1 mrg for both 32 and 64-bit pic code. */
1296 1.1 mrg #define CASE_VECTOR_MODE (TARGET_BIG_SWITCH ? SImode : DImode)
1297 1.1 mrg
1298 1.1 mrg /* Jump tables must be 32-bit aligned, no matter the size of the element. */
1299 1.1 mrg #define ADDR_VEC_ALIGN(ADDR_VEC) 2
1300 1.1 mrg
1301 1.1 mrg /* Define this as 1 if `char' should by default be signed; else as 0. */
1302 1.1 mrg #define DEFAULT_SIGNED_CHAR 1
1303 1.1 mrg
1304 1.1 mrg /* Max number of bytes we can move from memory to memory
1305 1.1 mrg in one reasonably fast instruction. */
1306 1.1 mrg #define MOVE_MAX 8
1307 1.1 mrg
1308 1.1 mrg /* Higher than the default as we prefer to use simple move insns
1309 1.1 mrg (better scheduling and delay slot filling) and because our
1310 1.1 mrg built-in block move is really a 2X unrolled loop.
1311 1.1 mrg
1312 1.1 mrg Believe it or not, this has to be big enough to allow for copying all
1313 1.1 mrg arguments passed in registers to avoid infinite recursion during argument
1314 1.1 mrg setup for a function call. Why? Consider how we copy the stack slots
1315 1.1 mrg reserved for parameters when they may be trashed by a call. */
1316 1.1 mrg #define MOVE_RATIO(speed) (TARGET_64BIT ? 8 : 4)
1317 1.1 mrg
1318 1.1 mrg /* Define if operations between registers always perform the operation
1319 1.1 mrg on the full register even if a narrower mode is specified. */
1320 1.1 mrg #define WORD_REGISTER_OPERATIONS
1321 1.1 mrg
1322 1.1 mrg /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
1323 1.1 mrg will either zero-extend or sign-extend. The value of this macro should
1324 1.1 mrg be the code that says which one of the two operations is implicitly
1325 1.1 mrg done, UNKNOWN if none. */
1326 1.1 mrg #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
1327 1.1 mrg
1328 1.1 mrg /* Nonzero if access to memory by bytes is slow and undesirable. */
1329 1.1 mrg #define SLOW_BYTE_ACCESS 1
1330 1.1 mrg
1331 1.1 mrg /* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
1332 1.1 mrg is done just by pretending it is already truncated. */
1333 1.1 mrg #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
1334 1.1 mrg
1335 1.1 mrg /* Specify the machine mode that pointers have.
1336 1.1 mrg After generation of rtl, the compiler makes no further distinction
1337 1.1 mrg between pointers and any other objects of this machine mode. */
1338 1.1 mrg #define Pmode word_mode
1339 1.1 mrg
1340 1.1 mrg /* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
1341 1.1 mrg return the mode to be used for the comparison. For floating-point, CCFPmode
1342 1.1 mrg should be used. CC_NOOVmode should be used when the first operand is a
1343 1.1 mrg PLUS, MINUS, or NEG. CCmode should be used when no special processing is
1344 1.1 mrg needed. */
1345 1.1 mrg #define SELECT_CC_MODE(OP,X,Y) \
1346 1.1 mrg (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT ? CCFPmode : CCmode) \
1347 1.1 mrg
1348 1.1 mrg /* A function address in a call instruction
1349 1.1 mrg is a byte address (for indexing purposes)
1350 1.1 mrg so give the MEM rtx a byte's mode. */
1351 1.1 mrg #define FUNCTION_MODE SImode
1352 1.1 mrg
1353 1.1 mrg /* Define this if addresses of constant functions
1354 1.1 mrg shouldn't be put through pseudo regs where they can be cse'd.
1355 1.1 mrg Desirable on machines where ordinary constants are expensive
1356 1.1 mrg but a CALL with constant address is cheap. */
1357 1.1 mrg #define NO_FUNCTION_CSE
1358 1.1 mrg
1359 1.1 mrg /* Define this to be nonzero if shift instructions ignore all but the low-order
1360 1.1 mrg few bits. */
1361 1.1 mrg #define SHIFT_COUNT_TRUNCATED 1
1362 1.1 mrg
1363 1.1 mrg /* Compute extra cost of moving data between one register class
1364 1.1 mrg and another.
1365 1.1 mrg
1366 1.1 mrg Make moves from SAR so expensive they should never happen. We used to
1367 1.1 mrg have 0xffff here, but that generates overflow in rare cases.
1368 1.1 mrg
1369 1.1 mrg Copies involving a FP register and a non-FP register are relatively
1370 1.1 mrg expensive because they must go through memory.
1371 1.1 mrg
1372 1.1 mrg Other copies are reasonably cheap. */
1373 1.1 mrg #define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \
1374 1.1 mrg (CLASS1 == SHIFT_REGS ? 0x100 \
1375 1.1 mrg : CLASS2 == SHIFT_REGS && FP_REG_CLASS_P (CLASS1) ? 18 \
1376 1.1 mrg : FP_REG_CLASS_P (CLASS1) && ! FP_REG_CLASS_P (CLASS2) ? 16 \
1377 1.1 mrg : FP_REG_CLASS_P (CLASS2) && ! FP_REG_CLASS_P (CLASS1) ? 16 \
1378 1.1 mrg : 2)
1379 1.1 mrg
1380 1.1 mrg /* Adjust the cost of branches. */
1381 1.1 mrg #define BRANCH_COST(speed_p, predictable_p) (pa_cpu == PROCESSOR_8000 ? 2 : 1)
1382 1.1 mrg
1383 1.1 mrg /* Handling the special cases is going to get too complicated for a macro,
1384 1.1 mrg just call `pa_adjust_insn_length' to do the real work. */
1385 1.1 mrg #define ADJUST_INSN_LENGTH(INSN, LENGTH) \
1386 1.1 mrg LENGTH += pa_adjust_insn_length (INSN, LENGTH);
1387 1.1 mrg
1388 1.1 mrg /* Millicode insns are actually function calls with some special
1389 1.1 mrg constraints on arguments and register usage.
1390 1.1 mrg
1391 1.1 mrg Millicode calls always expect their arguments in the integer argument
1392 1.1 mrg registers, and always return their result in %r29 (ret1). They
1393 1.1 mrg are expected to clobber their arguments, %r1, %r29, and the return
1394 1.1 mrg pointer which is %r31 on 32-bit and %r2 on 64-bit, and nothing else.
1395 1.1 mrg
1396 1.1 mrg This macro tells reorg that the references to arguments and
1397 1.1 mrg millicode calls do not appear to happen until after the millicode call.
1398 1.1 mrg This allows reorg to put insns which set the argument registers into the
1399 1.1 mrg delay slot of the millicode call -- thus they act more like traditional
1400 1.1 mrg CALL_INSNs.
1401 1.1 mrg
1402 1.1 mrg Note we cannot consider side effects of the insn to be delayed because
1403 1.1 mrg the branch and link insn will clobber the return pointer. If we happened
1404 1.1 mrg to use the return pointer in the delay slot of the call, then we lose.
1405 1.1 mrg
1406 1.1 mrg get_attr_type will try to recognize the given insn, so make sure to
1407 1.1 mrg filter out things it will not accept -- SEQUENCE, USE and CLOBBER insns
1408 1.1 mrg in particular. */
1409 1.1 mrg #define INSN_REFERENCES_ARE_DELAYED(X) (insn_refs_are_delayed (X))
1410 1.1 mrg
1411 1.1 mrg
1412 1.1 mrg /* Control the assembler format that we output. */
1414 1.1 mrg
1415 1.1 mrg /* A C string constant describing how to begin a comment in the target
1416 1.1 mrg assembler language. The compiler assumes that the comment will end at
1417 1.1 mrg the end of the line. */
1418 1.1 mrg
1419 1.1 mrg #define ASM_COMMENT_START ";"
1420 1.1 mrg
1421 1.1 mrg /* Output to assembler file text saying following lines
1422 1.1 mrg may contain character constants, extra white space, comments, etc. */
1423 1.1 mrg
1424 1.1 mrg #define ASM_APP_ON ""
1425 1.1 mrg
1426 1.1 mrg /* Output to assembler file text saying following lines
1427 1.1 mrg no longer contain unusual constructs. */
1428 1.1 mrg
1429 1.1 mrg #define ASM_APP_OFF ""
1430 1.1 mrg
1431 1.1 mrg /* This is how to output the definition of a user-level label named NAME,
1432 1.1 mrg such as the label on a static function or variable NAME. */
1433 1.1 mrg
1434 1.1 mrg #define ASM_OUTPUT_LABEL(FILE,NAME) \
1435 1.1 mrg do { \
1436 1.1 mrg assemble_name ((FILE), (NAME)); \
1437 1.1 mrg if (TARGET_GAS) \
1438 1.1 mrg fputs (":\n", (FILE)); \
1439 1.1 mrg else \
1440 1.1 mrg fputc ('\n', (FILE)); \
1441 1.1 mrg } while (0)
1442 1.1 mrg
1443 1.1 mrg /* This is how to output a reference to a user-level label named NAME.
1444 1.1 mrg `assemble_name' uses this. */
1445 1.1 mrg
1446 1.1 mrg #define ASM_OUTPUT_LABELREF(FILE,NAME) \
1447 1.1 mrg do { \
1448 1.1 mrg const char *xname = (NAME); \
1449 1.1 mrg if (FUNCTION_NAME_P (NAME)) \
1450 1.1 mrg xname += 1; \
1451 1.1 mrg if (xname[0] == '*') \
1452 1.1 mrg xname += 1; \
1453 1.1 mrg else \
1454 1.1 mrg fputs (user_label_prefix, FILE); \
1455 1.1 mrg fputs (xname, FILE); \
1456 1.1 mrg } while (0)
1457 1.1 mrg
1458 1.1 mrg /* This how we output the symbol_ref X. */
1459 1.1 mrg
1460 1.1 mrg #define ASM_OUTPUT_SYMBOL_REF(FILE,X) \
1461 1.1 mrg do { \
1462 1.1 mrg SYMBOL_REF_FLAGS (X) |= SYMBOL_FLAG_REFERENCED; \
1463 1.1 mrg assemble_name (FILE, XSTR (X, 0)); \
1464 1.1 mrg } while (0)
1465 1.1 mrg
1466 1.1 mrg /* This is how to store into the string LABEL
1467 1.1 mrg the symbol_ref name of an internal numbered label where
1468 1.1 mrg PREFIX is the class of label and NUM is the number within the class.
1469 1.1 mrg This is suitable for output with `assemble_name'. */
1470 1.1 mrg
1471 1.1 mrg #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
1472 1.1 mrg sprintf (LABEL, "*%c$%s%04ld", (PREFIX)[0], (PREFIX) + 1, (long)(NUM))
1473 1.1 mrg
1474 1.1 mrg /* Output the definition of a compiler-generated label named NAME. */
1475 1.1 mrg
1476 1.1 mrg #define ASM_OUTPUT_INTERNAL_LABEL(FILE,NAME) \
1477 1.1 mrg do { \
1478 1.1 mrg assemble_name_raw ((FILE), (NAME)); \
1479 1.1 mrg if (TARGET_GAS) \
1480 1.1 mrg fputs (":\n", (FILE)); \
1481 1.1 mrg else \
1482 1.1 mrg fputc ('\n', (FILE)); \
1483 1.1 mrg } while (0)
1484 1.1 mrg
1485 1.1 mrg #define TARGET_ASM_GLOBALIZE_LABEL pa_globalize_label
1486 1.1 mrg
1487 1.1 mrg #define ASM_OUTPUT_ASCII(FILE, P, SIZE) \
1488 1.1 mrg output_ascii ((FILE), (P), (SIZE))
1489 1.1 mrg
1490 1.1 mrg /* Jump tables are always placed in the text section. Technically, it
1491 1.1 mrg is possible to put them in the readonly data section when -mbig-switch
1492 1.1 mrg is specified. This has the benefit of getting the table out of .text
1493 1.1 mrg and reducing branch lengths as a result. The downside is that an
1494 1.1 mrg additional insn (addil) is needed to access the table when generating
1495 1.1 mrg PIC code. The address difference table also has to use 32-bit
1496 1.1 mrg pc-relative relocations. Currently, GAS does not support these
1497 1.1 mrg relocations, although it is easily modified to do this operation.
1498 1.1 mrg The table entries need to look like "$L1+(.+8-$L0)-$PIC_pcrel$0"
1499 1.1 mrg when using ELF GAS. A simple difference can be used when using
1500 1.1 mrg SOM GAS or the HP assembler. The final downside is GDB complains
1501 1.1 mrg about the nesting of the label for the table when debugging. */
1502 1.1 mrg
1503 1.1 mrg #define JUMP_TABLES_IN_TEXT_SECTION 1
1504 1.1 mrg
1505 1.1 mrg /* This is how to output an element of a case-vector that is absolute. */
1506 1.1 mrg
1507 1.1 mrg #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
1508 1.1 mrg if (TARGET_BIG_SWITCH) \
1509 1.1 mrg fprintf (FILE, "\t.word L$%04d\n", VALUE); \
1510 1.1 mrg else \
1511 1.1 mrg fprintf (FILE, "\tb L$%04d\n\tnop\n", VALUE)
1512 1.1 mrg
1513 1.1 mrg /* This is how to output an element of a case-vector that is relative.
1514 1.1 mrg Since we always place jump tables in the text section, the difference
1515 1.1 mrg is absolute and requires no relocation. */
1516 1.1 mrg
1517 1.1 mrg #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
1518 1.1 mrg if (TARGET_BIG_SWITCH) \
1519 1.1 mrg fprintf (FILE, "\t.word L$%04d-L$%04d\n", VALUE, REL); \
1520 1.1 mrg else \
1521 1.1 mrg fprintf (FILE, "\tb L$%04d\n\tnop\n", VALUE)
1522 1.1 mrg
1523 1.1 mrg /* This is how to output an assembler line that says to advance the
1524 1.1 mrg location counter to a multiple of 2**LOG bytes. */
1525 1.1 mrg
1526 1.1 mrg #define ASM_OUTPUT_ALIGN(FILE,LOG) \
1527 1.1 mrg fprintf (FILE, "\t.align %d\n", (1<<(LOG)))
1528 1.1 mrg
1529 1.1 mrg #define ASM_OUTPUT_SKIP(FILE,SIZE) \
1530 1.1 mrg fprintf (FILE, "\t.blockz "HOST_WIDE_INT_PRINT_UNSIGNED"\n", \
1531 1.1 mrg (unsigned HOST_WIDE_INT)(SIZE))
1532 1.1 mrg
1533 1.1 mrg /* This says how to output an assembler line to define an uninitialized
1534 1.1 mrg global variable with size SIZE (in bytes) and alignment ALIGN (in bits).
1535 1.1 mrg This macro exists to properly support languages like C++ which do not
1536 1.1 mrg have common data. */
1537 1.1 mrg
1538 1.1 mrg #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
1539 1.1 mrg pa_asm_output_aligned_bss (FILE, NAME, SIZE, ALIGN)
1540 1.1 mrg
1541 1.1 mrg /* This says how to output an assembler line to define a global common symbol
1542 1.1 mrg with size SIZE (in bytes) and alignment ALIGN (in bits). */
1543 1.1 mrg
1544 1.1 mrg #define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \
1545 1.1 mrg pa_asm_output_aligned_common (FILE, NAME, SIZE, ALIGN)
1546 1.1 mrg
1547 1.1 mrg /* This says how to output an assembler line to define a local common symbol
1548 1.1 mrg with size SIZE (in bytes) and alignment ALIGN (in bits). This macro
1549 1.1 mrg controls how the assembler definitions of uninitialized static variables
1550 1.1 mrg are output. */
1551 1.1 mrg
1552 1.1 mrg #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
1553 1.1 mrg pa_asm_output_aligned_local (FILE, NAME, SIZE, ALIGN)
1554 1.1 mrg
1555 1.1 mrg /* All HP assemblers use "!" to separate logical lines. */
1556 1.1 mrg #define IS_ASM_LOGICAL_LINE_SEPARATOR(C, STR) ((C) == '!')
1557 1.1 mrg
1558 1.1 mrg #define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \
1559 1.1 mrg ((CHAR) == '@' || (CHAR) == '#' || (CHAR) == '*' || (CHAR) == '^')
1560 1.1 mrg
1561 1.1 mrg /* Print operand X (an rtx) in assembler syntax to file FILE.
1562 1.1 mrg CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
1563 1.1 mrg For `%' followed by punctuation, CODE is the punctuation and X is null.
1564 1.1 mrg
1565 1.1 mrg On the HP-PA, the CODE can be `r', meaning this is a register-only operand
1566 1.1 mrg and an immediate zero should be represented as `r0'.
1567 1.1 mrg
1568 1.1 mrg Several % codes are defined:
1569 1.1 mrg O an operation
1570 1.1 mrg C compare conditions
1571 1.1 mrg N extract conditions
1572 1.1 mrg M modifier to handle preincrement addressing for memory refs.
1573 1.1 mrg F modifier to handle preincrement addressing for fp memory refs */
1574 1.1 mrg
1575 1.1 mrg #define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
1576 1.1 mrg
1577 1.1 mrg
1578 1.1 mrg /* Print a memory address as an operand to reference that memory location. */
1580 1.1 mrg
1581 1.1 mrg #define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
1582 1.1 mrg { rtx addr = ADDR; \
1583 1.1 mrg switch (GET_CODE (addr)) \
1584 1.1 mrg { \
1585 1.1 mrg case REG: \
1586 1.1 mrg fprintf (FILE, "0(%s)", reg_names [REGNO (addr)]); \
1587 1.1 mrg break; \
1588 1.1 mrg case PLUS: \
1589 1.1 mrg gcc_assert (GET_CODE (XEXP (addr, 1)) == CONST_INT); \
1590 1.1 mrg fprintf (FILE, "%d(%s)", (int)INTVAL (XEXP (addr, 1)), \
1591 1.1 mrg reg_names [REGNO (XEXP (addr, 0))]); \
1592 1.1 mrg break; \
1593 1.1 mrg case LO_SUM: \
1594 1.1 mrg if (!symbolic_operand (XEXP (addr, 1), VOIDmode)) \
1595 1.1 mrg fputs ("R'", FILE); \
1596 1.1 mrg else if (flag_pic == 0) \
1597 1.1 mrg fputs ("RR'", FILE); \
1598 1.1 mrg else \
1599 1.1 mrg fputs ("RT'", FILE); \
1600 1.1 mrg output_global_address (FILE, XEXP (addr, 1), 0); \
1601 1.1 mrg fputs ("(", FILE); \
1602 1.1 mrg output_operand (XEXP (addr, 0), 0); \
1603 1.1 mrg fputs (")", FILE); \
1604 1.1 mrg break; \
1605 1.1 mrg case CONST_INT: \
1606 1.1 mrg fprintf (FILE, HOST_WIDE_INT_PRINT_DEC "(%%r0)", INTVAL (addr)); \
1607 1.1 mrg break; \
1608 1.1 mrg default: \
1609 1.1 mrg output_addr_const (FILE, addr); \
1610 1.1 mrg }}
1611 1.1 mrg
1612 1.1 mrg
1613 1.1 mrg /* Find the return address associated with the frame given by
1615 1.1 mrg FRAMEADDR. */
1616 1.1 mrg #define RETURN_ADDR_RTX(COUNT, FRAMEADDR) \
1617 1.1 mrg (return_addr_rtx (COUNT, FRAMEADDR))
1618 1.1 mrg
1619 1.1 mrg /* Used to mask out junk bits from the return address, such as
1620 1.1 mrg processor state, interrupt status, condition codes and the like. */
1621 1.1 mrg #define MASK_RETURN_ADDR \
1622 1.1 mrg /* The privilege level is in the two low order bits, mask em out \
1623 1.1 mrg of the return address. */ \
1624 1.1 mrg (GEN_INT (-4))
1625
1626 /* The number of Pmode words for the setjmp buffer. */
1627 #define JMP_BUF_SIZE 50
1628
1629 /* We need a libcall to canonicalize function pointers on TARGET_ELF32. */
1630 #define CANONICALIZE_FUNCPTR_FOR_COMPARE_LIBCALL \
1631 "__canonicalize_funcptr_for_compare"
1632
1633 #ifdef HAVE_AS_TLS
1634 #undef TARGET_HAVE_TLS
1635 #define TARGET_HAVE_TLS true
1636 #endif
1637