]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/config/alpha/alpha.h
optc-gen.awk: Generate global_options initializer instead of individual variables.
[thirdparty/gcc.git] / gcc / config / alpha / alpha.h
1 /* Definitions of target machine for GNU compiler, for DEC Alpha.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3 2000, 2001, 2002, 2004, 2005, 2007, 2008, 2009
4 Free Software Foundation, Inc.
5 Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
22
23 /* Target CPU builtins. */
24 #define TARGET_CPU_CPP_BUILTINS() \
25 do \
26 { \
27 builtin_define ("__alpha"); \
28 builtin_define ("__alpha__"); \
29 builtin_assert ("cpu=alpha"); \
30 builtin_assert ("machine=alpha"); \
31 if (TARGET_CIX) \
32 { \
33 builtin_define ("__alpha_cix__"); \
34 builtin_assert ("cpu=cix"); \
35 } \
36 if (TARGET_FIX) \
37 { \
38 builtin_define ("__alpha_fix__"); \
39 builtin_assert ("cpu=fix"); \
40 } \
41 if (TARGET_BWX) \
42 { \
43 builtin_define ("__alpha_bwx__"); \
44 builtin_assert ("cpu=bwx"); \
45 } \
46 if (TARGET_MAX) \
47 { \
48 builtin_define ("__alpha_max__"); \
49 builtin_assert ("cpu=max"); \
50 } \
51 if (alpha_cpu == PROCESSOR_EV6) \
52 { \
53 builtin_define ("__alpha_ev6__"); \
54 builtin_assert ("cpu=ev6"); \
55 } \
56 else if (alpha_cpu == PROCESSOR_EV5) \
57 { \
58 builtin_define ("__alpha_ev5__"); \
59 builtin_assert ("cpu=ev5"); \
60 } \
61 else /* Presumably ev4. */ \
62 { \
63 builtin_define ("__alpha_ev4__"); \
64 builtin_assert ("cpu=ev4"); \
65 } \
66 if (TARGET_IEEE || TARGET_IEEE_WITH_INEXACT) \
67 builtin_define ("_IEEE_FP"); \
68 if (TARGET_IEEE_WITH_INEXACT) \
69 builtin_define ("_IEEE_FP_INEXACT"); \
70 if (TARGET_LONG_DOUBLE_128) \
71 builtin_define ("__LONG_DOUBLE_128__"); \
72 \
73 /* Macros dependent on the C dialect. */ \
74 SUBTARGET_LANGUAGE_CPP_BUILTINS(); \
75 } while (0)
76
77 #ifndef SUBTARGET_LANGUAGE_CPP_BUILTINS
78 #define SUBTARGET_LANGUAGE_CPP_BUILTINS() \
79 do \
80 { \
81 if (preprocessing_asm_p ()) \
82 builtin_define_std ("LANGUAGE_ASSEMBLY"); \
83 else if (c_dialect_cxx ()) \
84 { \
85 builtin_define ("__LANGUAGE_C_PLUS_PLUS"); \
86 builtin_define ("__LANGUAGE_C_PLUS_PLUS__"); \
87 } \
88 else \
89 builtin_define_std ("LANGUAGE_C"); \
90 if (c_dialect_objc ()) \
91 { \
92 builtin_define ("__LANGUAGE_OBJECTIVE_C"); \
93 builtin_define ("__LANGUAGE_OBJECTIVE_C__"); \
94 } \
95 } \
96 while (0)
97 #endif
98
99 #define SWITCH_TAKES_ARG(CHAR) \
100 (DEFAULT_SWITCH_TAKES_ARG (CHAR) || (CHAR) == 'G')
101
102 #define WORD_SWITCH_TAKES_ARG(STR) \
103 (!strcmp (STR, "rpath") || DEFAULT_WORD_SWITCH_TAKES_ARG(STR))
104
105 /* Print subsidiary information on the compiler version in use. */
106 #define TARGET_VERSION
107
108 /* Run-time compilation parameters selecting different hardware subsets. */
109
110 /* Which processor to schedule for. The cpu attribute defines a list that
111 mirrors this list, so changes to alpha.md must be made at the same time. */
112
113 enum processor_type
114 {
115 PROCESSOR_EV4, /* 2106[46]{a,} */
116 PROCESSOR_EV5, /* 21164{a,pc,} */
117 PROCESSOR_EV6, /* 21264 */
118 PROCESSOR_MAX
119 };
120
121 extern enum processor_type alpha_cpu;
122 extern enum processor_type alpha_tune;
123
124 enum alpha_trap_precision
125 {
126 ALPHA_TP_PROG, /* No precision (default). */
127 ALPHA_TP_FUNC, /* Trap contained within originating function. */
128 ALPHA_TP_INSN /* Instruction accuracy and code is resumption safe. */
129 };
130
131 enum alpha_fp_rounding_mode
132 {
133 ALPHA_FPRM_NORM, /* Normal rounding mode. */
134 ALPHA_FPRM_MINF, /* Round towards minus-infinity. */
135 ALPHA_FPRM_CHOP, /* Chopped rounding mode (towards 0). */
136 ALPHA_FPRM_DYN /* Dynamic rounding mode. */
137 };
138
139 enum alpha_fp_trap_mode
140 {
141 ALPHA_FPTM_N, /* Normal trap mode. */
142 ALPHA_FPTM_U, /* Underflow traps enabled. */
143 ALPHA_FPTM_SU, /* Software completion, w/underflow traps */
144 ALPHA_FPTM_SUI /* Software completion, w/underflow & inexact traps */
145 };
146
147 extern enum alpha_trap_precision alpha_tp;
148 extern enum alpha_fp_rounding_mode alpha_fprm;
149 extern enum alpha_fp_trap_mode alpha_fptm;
150
151 /* Invert the easy way to make options work. */
152 #define TARGET_FP (!TARGET_SOFT_FP)
153
154 /* These are for target os support and cannot be changed at runtime. */
155 #define TARGET_ABI_WINDOWS_NT 0
156 #define TARGET_ABI_OPEN_VMS 0
157 #define TARGET_ABI_UNICOSMK 0
158 #define TARGET_ABI_OSF (!TARGET_ABI_WINDOWS_NT \
159 && !TARGET_ABI_OPEN_VMS \
160 && !TARGET_ABI_UNICOSMK)
161
162 #ifndef TARGET_AS_CAN_SUBTRACT_LABELS
163 #define TARGET_AS_CAN_SUBTRACT_LABELS TARGET_GAS
164 #endif
165 #ifndef TARGET_AS_SLASH_BEFORE_SUFFIX
166 #define TARGET_AS_SLASH_BEFORE_SUFFIX TARGET_GAS
167 #endif
168 #ifndef TARGET_CAN_FAULT_IN_PROLOGUE
169 #define TARGET_CAN_FAULT_IN_PROLOGUE 0
170 #endif
171 #ifndef TARGET_HAS_XFLOATING_LIBS
172 #define TARGET_HAS_XFLOATING_LIBS TARGET_LONG_DOUBLE_128
173 #endif
174 #ifndef TARGET_PROFILING_NEEDS_GP
175 #define TARGET_PROFILING_NEEDS_GP 0
176 #endif
177 #ifndef TARGET_LD_BUGGY_LDGP
178 #define TARGET_LD_BUGGY_LDGP 0
179 #endif
180 #ifndef TARGET_FIXUP_EV5_PREFETCH
181 #define TARGET_FIXUP_EV5_PREFETCH 0
182 #endif
183 #ifndef HAVE_AS_TLS
184 #define HAVE_AS_TLS 0
185 #endif
186
187 #define TARGET_DEFAULT MASK_FPREGS
188
189 #ifndef TARGET_CPU_DEFAULT
190 #define TARGET_CPU_DEFAULT 0
191 #endif
192
193 #ifndef TARGET_DEFAULT_EXPLICIT_RELOCS
194 #ifdef HAVE_AS_EXPLICIT_RELOCS
195 #define TARGET_DEFAULT_EXPLICIT_RELOCS MASK_EXPLICIT_RELOCS
196 #define TARGET_SUPPORT_ARCH 1
197 #else
198 #define TARGET_DEFAULT_EXPLICIT_RELOCS 0
199 #endif
200 #endif
201
202 #ifndef TARGET_SUPPORT_ARCH
203 #define TARGET_SUPPORT_ARCH 0
204 #endif
205
206 /* Support for a compile-time default CPU, et cetera. The rules are:
207 --with-cpu is ignored if -mcpu is specified.
208 --with-tune is ignored if -mtune is specified. */
209 #define OPTION_DEFAULT_SPECS \
210 {"cpu", "%{!mcpu=*:-mcpu=%(VALUE)}" }, \
211 {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }
212
213
214 /* Define this macro to change register usage conditional on target flags.
215
216 On the Alpha, we use this to disable the floating-point registers when
217 they don't exist. */
218
219 #define CONDITIONAL_REGISTER_USAGE \
220 { \
221 int i; \
222 if (! TARGET_FPREGS) \
223 for (i = 32; i < 63; i++) \
224 fixed_regs[i] = call_used_regs[i] = 1; \
225 }
226
227
228 /* Show we can debug even without a frame pointer. */
229 #define CAN_DEBUG_WITHOUT_FP
230 \f
231 /* target machine storage layout */
232
233 /* Define the size of `int'. The default is the same as the word size. */
234 #define INT_TYPE_SIZE 32
235
236 /* Define the size of `long long'. The default is the twice the word size. */
237 #define LONG_LONG_TYPE_SIZE 64
238
239 /* The two floating-point formats we support are S-floating, which is
240 4 bytes, and T-floating, which is 8 bytes. `float' is S and `double'
241 and `long double' are T. */
242
243 #define FLOAT_TYPE_SIZE 32
244 #define DOUBLE_TYPE_SIZE 64
245 #define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_128 ? 128 : 64)
246
247 /* Define this to set long double type size to use in libgcc2.c, which can
248 not depend on target_flags. */
249 #ifdef __LONG_DOUBLE_128__
250 #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128
251 #else
252 #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
253 #endif
254
255 /* Work around target_flags dependency in ada/targtyps.c. */
256 #define WIDEST_HARDWARE_FP_SIZE 64
257
258 #define WCHAR_TYPE "unsigned int"
259 #define WCHAR_TYPE_SIZE 32
260
261 /* Define this macro if it is advisable to hold scalars in registers
262 in a wider mode than that declared by the program. In such cases,
263 the value is constrained to be within the bounds of the declared
264 type, but kept valid in the wider mode. The signedness of the
265 extension may differ from that of the type.
266
267 For Alpha, we always store objects in a full register. 32-bit integers
268 are always sign-extended, but smaller objects retain their signedness.
269
270 Note that small vector types can get mapped onto integer modes at the
271 whim of not appearing in alpha-modes.def. We never promoted these
272 values before; don't do so now that we've trimmed the set of modes to
273 those actually implemented in the backend. */
274
275 #define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \
276 if (GET_MODE_CLASS (MODE) == MODE_INT \
277 && (TYPE == NULL || TREE_CODE (TYPE) != VECTOR_TYPE) \
278 && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
279 { \
280 if ((MODE) == SImode) \
281 (UNSIGNEDP) = 0; \
282 (MODE) = DImode; \
283 }
284
285 /* Define this if most significant bit is lowest numbered
286 in instructions that operate on numbered bit-fields.
287
288 There are no such instructions on the Alpha, but the documentation
289 is little endian. */
290 #define BITS_BIG_ENDIAN 0
291
292 /* Define this if most significant byte of a word is the lowest numbered.
293 This is false on the Alpha. */
294 #define BYTES_BIG_ENDIAN 0
295
296 /* Define this if most significant word of a multiword number is lowest
297 numbered.
298
299 For Alpha we can decide arbitrarily since there are no machine instructions
300 for them. Might as well be consistent with bytes. */
301 #define WORDS_BIG_ENDIAN 0
302
303 /* Width of a word, in units (bytes). */
304 #define UNITS_PER_WORD 8
305
306 /* Width in bits of a pointer.
307 See also the macro `Pmode' defined below. */
308 #define POINTER_SIZE 64
309
310 /* Allocation boundary (in *bits*) for storing arguments in argument list. */
311 #define PARM_BOUNDARY 64
312
313 /* Boundary (in *bits*) on which stack pointer should be aligned. */
314 #define STACK_BOUNDARY 128
315
316 /* Allocation boundary (in *bits*) for the code of a function. */
317 #define FUNCTION_BOUNDARY 32
318
319 /* Alignment of field after `int : 0' in a structure. */
320 #define EMPTY_FIELD_BOUNDARY 64
321
322 /* Every structure's size must be a multiple of this. */
323 #define STRUCTURE_SIZE_BOUNDARY 8
324
325 /* A bit-field declared as `int' forces `int' alignment for the struct. */
326 #define PCC_BITFIELD_TYPE_MATTERS 1
327
328 /* No data type wants to be aligned rounder than this. */
329 #define BIGGEST_ALIGNMENT 128
330
331 /* For atomic access to objects, must have at least 32-bit alignment
332 unless the machine has byte operations. */
333 #define MINIMUM_ATOMIC_ALIGNMENT ((unsigned int) (TARGET_BWX ? 8 : 32))
334
335 /* Align all constants and variables to at least a word boundary so
336 we can pick up pieces of them faster. */
337 /* ??? Only if block-move stuff knows about different source/destination
338 alignment. */
339 #if 0
340 #define CONSTANT_ALIGNMENT(EXP, ALIGN) MAX ((ALIGN), BITS_PER_WORD)
341 #define DATA_ALIGNMENT(EXP, ALIGN) MAX ((ALIGN), BITS_PER_WORD)
342 #endif
343
344 /* Set this nonzero if move instructions will actually fail to work
345 when given unaligned data.
346
347 Since we get an error message when we do one, call them invalid. */
348
349 #define STRICT_ALIGNMENT 1
350
351 /* Set this nonzero if unaligned move instructions are extremely slow.
352
353 On the Alpha, they trap. */
354
355 #define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) 1
356
357 /* Standard register usage. */
358
359 /* Number of actual hardware registers.
360 The hardware registers are assigned numbers for the compiler
361 from 0 to just below FIRST_PSEUDO_REGISTER.
362 All registers that the compiler knows about must be given numbers,
363 even those that are not normally considered general registers.
364
365 We define all 32 integer registers, even though $31 is always zero,
366 and all 32 floating-point registers, even though $f31 is also
367 always zero. We do not bother defining the FP status register and
368 there are no other registers.
369
370 Since $31 is always zero, we will use register number 31 as the
371 argument pointer. It will never appear in the generated code
372 because we will always be eliminating it in favor of the stack
373 pointer or hardware frame pointer.
374
375 Likewise, we use $f31 for the frame pointer, which will always
376 be eliminated in favor of the hardware frame pointer or the
377 stack pointer. */
378
379 #define FIRST_PSEUDO_REGISTER 64
380
381 /* 1 for registers that have pervasive standard uses
382 and are not available for the register allocator. */
383
384 #define FIXED_REGISTERS \
385 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
386 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, \
387 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
388 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }
389
390 /* 1 for registers not available across function calls.
391 These must include the FIXED_REGISTERS and also any
392 registers that can be used without being saved.
393 The latter must include the registers where values are returned
394 and the register where structure-value addresses are passed.
395 Aside from that, you can include as many other registers as you like. */
396 #define CALL_USED_REGISTERS \
397 {1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \
398 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, \
399 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, \
400 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
401
402 /* List the order in which to allocate registers. Each register must be
403 listed once, even those in FIXED_REGISTERS. */
404
405 #define REG_ALLOC_ORDER { \
406 1, 2, 3, 4, 5, 6, 7, 8, /* nonsaved integer registers */ \
407 22, 23, 24, 25, 28, /* likewise */ \
408 0, /* likewise, but return value */ \
409 21, 20, 19, 18, 17, 16, /* likewise, but input args */ \
410 27, /* likewise, but OSF procedure value */ \
411 \
412 42, 43, 44, 45, 46, 47, /* nonsaved floating-point registers */ \
413 54, 55, 56, 57, 58, 59, /* likewise */ \
414 60, 61, 62, /* likewise */ \
415 32, 33, /* likewise, but return values */ \
416 53, 52, 51, 50, 49, 48, /* likewise, but input args */ \
417 \
418 9, 10, 11, 12, 13, 14, /* saved integer registers */ \
419 26, /* return address */ \
420 15, /* hard frame pointer */ \
421 \
422 34, 35, 36, 37, 38, 39, /* saved floating-point registers */ \
423 40, 41, /* likewise */ \
424 \
425 29, 30, 31, 63 /* gp, sp, ap, sfp */ \
426 }
427
428 /* Return number of consecutive hard regs needed starting at reg REGNO
429 to hold something of mode MODE.
430 This is ordinarily the length in words of a value of mode MODE
431 but can be less for certain modes in special long registers. */
432
433 #define HARD_REGNO_NREGS(REGNO, MODE) \
434 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
435
436 /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
437 On Alpha, the integer registers can hold any mode. The floating-point
438 registers can hold 64-bit integers as well, but not smaller values. */
439
440 #define HARD_REGNO_MODE_OK(REGNO, MODE) \
441 (IN_RANGE ((REGNO), 32, 62) \
442 ? (MODE) == SFmode || (MODE) == DFmode || (MODE) == DImode \
443 || (MODE) == SCmode || (MODE) == DCmode \
444 : 1)
445
446 /* A C expression that is nonzero if a value of mode
447 MODE1 is accessible in mode MODE2 without copying.
448
449 This asymmetric test is true when MODE1 could be put
450 in an FP register but MODE2 could not. */
451
452 #define MODES_TIEABLE_P(MODE1, MODE2) \
453 (HARD_REGNO_MODE_OK (32, (MODE1)) \
454 ? HARD_REGNO_MODE_OK (32, (MODE2)) \
455 : 1)
456
457 /* Specify the registers used for certain standard purposes.
458 The values of these macros are register numbers. */
459
460 /* Alpha pc isn't overloaded on a register that the compiler knows about. */
461 /* #define PC_REGNUM */
462
463 /* Register to use for pushing function arguments. */
464 #define STACK_POINTER_REGNUM 30
465
466 /* Base register for access to local variables of the function. */
467 #define HARD_FRAME_POINTER_REGNUM 15
468
469 /* Base register for access to arguments of the function. */
470 #define ARG_POINTER_REGNUM 31
471
472 /* Base register for access to local variables of function. */
473 #define FRAME_POINTER_REGNUM 63
474
475 /* Register in which static-chain is passed to a function.
476
477 For the Alpha, this is based on an example; the calling sequence
478 doesn't seem to specify this. */
479 #define STATIC_CHAIN_REGNUM 1
480
481 /* The register number of the register used to address a table of
482 static data addresses in memory. */
483 #define PIC_OFFSET_TABLE_REGNUM 29
484
485 /* Define this macro if the register defined by `PIC_OFFSET_TABLE_REGNUM'
486 is clobbered by calls. */
487 /* ??? It is and it isn't. It's required to be valid for a given
488 function when the function returns. It isn't clobbered by
489 current_file functions. Moreover, we do not expose the ldgp
490 until after reload, so we're probably safe. */
491 /* #define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED */
492 \f
493 /* Define the classes of registers for register constraints in the
494 machine description. Also define ranges of constants.
495
496 One of the classes must always be named ALL_REGS and include all hard regs.
497 If there is more than one class, another class must be named NO_REGS
498 and contain no registers.
499
500 The name GENERAL_REGS must be the name of a class (or an alias for
501 another name such as ALL_REGS). This is the class of registers
502 that is allowed by "g" or "r" in a register constraint.
503 Also, registers outside this class are allocated only when
504 instructions express preferences for them.
505
506 The classes must be numbered in nondecreasing order; that is,
507 a larger-numbered class must never be contained completely
508 in a smaller-numbered class.
509
510 For any two classes, it is very desirable that there be another
511 class that represents their union. */
512
513 enum reg_class {
514 NO_REGS, R0_REG, R24_REG, R25_REG, R27_REG,
515 GENERAL_REGS, FLOAT_REGS, ALL_REGS,
516 LIM_REG_CLASSES
517 };
518
519 #define N_REG_CLASSES (int) LIM_REG_CLASSES
520
521 /* Give names of register classes as strings for dump file. */
522
523 #define REG_CLASS_NAMES \
524 {"NO_REGS", "R0_REG", "R24_REG", "R25_REG", "R27_REG", \
525 "GENERAL_REGS", "FLOAT_REGS", "ALL_REGS" }
526
527 /* Define which registers fit in which classes.
528 This is an initializer for a vector of HARD_REG_SET
529 of length N_REG_CLASSES. */
530
531 #define REG_CLASS_CONTENTS \
532 { {0x00000000, 0x00000000}, /* NO_REGS */ \
533 {0x00000001, 0x00000000}, /* R0_REG */ \
534 {0x01000000, 0x00000000}, /* R24_REG */ \
535 {0x02000000, 0x00000000}, /* R25_REG */ \
536 {0x08000000, 0x00000000}, /* R27_REG */ \
537 {0xffffffff, 0x80000000}, /* GENERAL_REGS */ \
538 {0x00000000, 0x7fffffff}, /* FLOAT_REGS */ \
539 {0xffffffff, 0xffffffff} }
540
541 /* The following macro defines cover classes for Integrated Register
542 Allocator. Cover classes is a set of non-intersected register
543 classes covering all hard registers used for register allocation
544 purpose. Any move between two registers of a cover class should be
545 cheaper than load or store of the registers. The macro value is
546 array of register classes with LIM_REG_CLASSES used as the end
547 marker. */
548
549 #define IRA_COVER_CLASSES \
550 { \
551 GENERAL_REGS, FLOAT_REGS, LIM_REG_CLASSES \
552 }
553
554 /* The same information, inverted:
555 Return the class number of the smallest class containing
556 reg number REGNO. This could be a conditional expression
557 or could index an array. */
558
559 #define REGNO_REG_CLASS(REGNO) \
560 ((REGNO) == 0 ? R0_REG \
561 : (REGNO) == 24 ? R24_REG \
562 : (REGNO) == 25 ? R25_REG \
563 : (REGNO) == 27 ? R27_REG \
564 : IN_RANGE ((REGNO), 32, 62) ? FLOAT_REGS \
565 : GENERAL_REGS)
566
567 /* The class value for index registers, and the one for base regs. */
568 #define INDEX_REG_CLASS NO_REGS
569 #define BASE_REG_CLASS GENERAL_REGS
570
571 /* Given an rtx X being reloaded into a reg required to be
572 in class CLASS, return the class of reg to actually use.
573 In general this is just CLASS; but on some machines
574 in some cases it is preferable to use a more restrictive class. */
575
576 #define PREFERRED_RELOAD_CLASS alpha_preferred_reload_class
577
578 /* If we are copying between general and FP registers, we need a memory
579 location unless the FIX extension is available. */
580
581 #define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) \
582 (! TARGET_FIX && (((CLASS1) == FLOAT_REGS && (CLASS2) != FLOAT_REGS) \
583 || ((CLASS2) == FLOAT_REGS && (CLASS1) != FLOAT_REGS)))
584
585 /* Specify the mode to be used for memory when a secondary memory
586 location is needed. If MODE is floating-point, use it. Otherwise,
587 widen to a word like the default. This is needed because we always
588 store integers in FP registers in quadword format. This whole
589 area is very tricky! */
590 #define SECONDARY_MEMORY_NEEDED_MODE(MODE) \
591 (GET_MODE_CLASS (MODE) == MODE_FLOAT ? (MODE) \
592 : GET_MODE_SIZE (MODE) >= 4 ? (MODE) \
593 : mode_for_size (BITS_PER_WORD, GET_MODE_CLASS (MODE), 0))
594
595 /* Return the maximum number of consecutive registers
596 needed to represent mode MODE in a register of class CLASS. */
597
598 #define CLASS_MAX_NREGS(CLASS, MODE) \
599 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
600
601 /* Return the class of registers that cannot change mode from FROM to TO. */
602
603 #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
604 (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
605 ? reg_classes_intersect_p (FLOAT_REGS, CLASS) : 0)
606
607 /* Define the cost of moving between registers of various classes. Moving
608 between FLOAT_REGS and anything else except float regs is expensive.
609 In fact, we make it quite expensive because we really don't want to
610 do these moves unless it is clearly worth it. Optimizations may
611 reduce the impact of not being able to allocate a pseudo to a
612 hard register. */
613
614 #define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \
615 (((CLASS1) == FLOAT_REGS) == ((CLASS2) == FLOAT_REGS) ? 2 \
616 : TARGET_FIX ? ((CLASS1) == FLOAT_REGS ? 6 : 8) \
617 : 4+2*alpha_memory_latency)
618
619 /* A C expressions returning the cost of moving data of MODE from a register to
620 or from memory.
621
622 On the Alpha, bump this up a bit. */
623
624 extern int alpha_memory_latency;
625 #define MEMORY_MOVE_COST(MODE,CLASS,IN) (2*alpha_memory_latency)
626
627 /* Provide the cost of a branch. Exact meaning under development. */
628 #define BRANCH_COST(speed_p, predictable_p) 5
629 \f
630 /* Stack layout; function entry, exit and calling. */
631
632 /* Define this if pushing a word on the stack
633 makes the stack pointer a smaller address. */
634 #define STACK_GROWS_DOWNWARD
635
636 /* Define this to nonzero if the nominal address of the stack frame
637 is at the high-address end of the local variables;
638 that is, each additional local variable allocated
639 goes at a more negative offset in the frame. */
640 /* #define FRAME_GROWS_DOWNWARD 0 */
641
642 /* Offset within stack frame to start allocating local variables at.
643 If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
644 first local allocated. Otherwise, it is the offset to the BEGINNING
645 of the first local allocated. */
646
647 #define STARTING_FRAME_OFFSET 0
648
649 /* If we generate an insn to push BYTES bytes,
650 this says how many the stack pointer really advances by.
651 On Alpha, don't define this because there are no push insns. */
652 /* #define PUSH_ROUNDING(BYTES) */
653
654 /* Define this to be nonzero if stack checking is built into the ABI. */
655 #define STACK_CHECK_BUILTIN 1
656
657 /* Define this if the maximum size of all the outgoing args is to be
658 accumulated and pushed during the prologue. The amount can be
659 found in the variable crtl->outgoing_args_size. */
660 #define ACCUMULATE_OUTGOING_ARGS 1
661
662 /* Offset of first parameter from the argument pointer register value. */
663
664 #define FIRST_PARM_OFFSET(FNDECL) 0
665
666 /* Definitions for register eliminations.
667
668 We have two registers that can be eliminated on the Alpha. First, the
669 frame pointer register can often be eliminated in favor of the stack
670 pointer register. Secondly, the argument pointer register can always be
671 eliminated; it is replaced with either the stack or frame pointer. */
672
673 /* This is an array of structures. Each structure initializes one pair
674 of eliminable registers. The "from" register number is given first,
675 followed by "to". Eliminations of the same "from" register are listed
676 in order of preference. */
677
678 #define ELIMINABLE_REGS \
679 {{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
680 { ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \
681 { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
682 { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}}
683
684 /* Round up to a multiple of 16 bytes. */
685 #define ALPHA_ROUND(X) (((X) + 15) & ~ 15)
686
687 /* Define the offset between two registers, one to be eliminated, and the other
688 its replacement, at the start of a routine. */
689 #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
690 ((OFFSET) = alpha_initial_elimination_offset(FROM, TO))
691
692 /* Define this if stack space is still allocated for a parameter passed
693 in a register. */
694 /* #define REG_PARM_STACK_SPACE */
695
696 /* Define how to find the value returned by a function.
697 VALTYPE is the data type of the value (as a tree).
698 If the precise function being called is known, FUNC is its FUNCTION_DECL;
699 otherwise, FUNC is 0.
700
701 On Alpha the value is found in $0 for integer functions and
702 $f0 for floating-point functions. */
703
704 #define FUNCTION_VALUE(VALTYPE, FUNC) \
705 function_value (VALTYPE, FUNC, VOIDmode)
706
707 /* Define how to find the value returned by a library function
708 assuming the value has mode MODE. */
709
710 #define LIBCALL_VALUE(MODE) \
711 function_value (NULL, NULL, MODE)
712
713 /* 1 if N is a possible register number for a function value
714 as seen by the caller. */
715
716 #define FUNCTION_VALUE_REGNO_P(N) \
717 ((N) == 0 || (N) == 1 || (N) == 32 || (N) == 33)
718
719 /* 1 if N is a possible register number for function argument passing.
720 On Alpha, these are $16-$21 and $f16-$f21. */
721
722 #define FUNCTION_ARG_REGNO_P(N) \
723 (IN_RANGE ((N), 16, 21) || ((N) >= 16 + 32 && (N) <= 21 + 32))
724 \f
725 /* Define a data type for recording info about an argument list
726 during the scan of that argument list. This data type should
727 hold all necessary information about the function itself
728 and about the args processed so far, enough to enable macros
729 such as FUNCTION_ARG to determine where the next arg should go.
730
731 On Alpha, this is a single integer, which is a number of words
732 of arguments scanned so far.
733 Thus 6 or more means all following args should go on the stack. */
734
735 #define CUMULATIVE_ARGS int
736
737 /* Initialize a variable CUM of type CUMULATIVE_ARGS
738 for a call to a function whose data type is FNTYPE.
739 For a library call, FNTYPE is 0. */
740
741 #define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
742 (CUM) = 0
743
744 /* Define intermediate macro to compute the size (in registers) of an argument
745 for the Alpha. */
746
747 #define ALPHA_ARG_SIZE(MODE, TYPE, NAMED) \
748 ((MODE) == TFmode || (MODE) == TCmode ? 1 \
749 : (((MODE) == BLKmode ? int_size_in_bytes (TYPE) : GET_MODE_SIZE (MODE)) \
750 + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
751
752 /* Update the data in CUM to advance over an argument
753 of mode MODE and data type TYPE.
754 (TYPE is null for libcalls where that information may not be available.) */
755
756 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
757 ((CUM) += \
758 (targetm.calls.must_pass_in_stack (MODE, TYPE)) \
759 ? 6 : ALPHA_ARG_SIZE (MODE, TYPE, NAMED))
760
761 /* Determine where to put an argument to a function.
762 Value is zero to push the argument on the stack,
763 or a hard register in which to store the argument.
764
765 MODE is the argument's machine mode.
766 TYPE is the data type of the argument (as a tree).
767 This is null for libcalls where that information may
768 not be available.
769 CUM is a variable of type CUMULATIVE_ARGS which gives info about
770 the preceding args and about the function being called.
771 NAMED is nonzero if this argument is a named parameter
772 (otherwise it is an extra parameter matching an ellipsis).
773
774 On Alpha the first 6 words of args are normally in registers
775 and the rest are pushed. */
776
777 #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
778 function_arg((CUM), (MODE), (TYPE), (NAMED))
779
780 /* Make (or fake) .linkage entry for function call.
781 IS_LOCAL is 0 if name is used in call, 1 if name is used in definition. */
782
783 /* This macro defines the start of an assembly comment. */
784
785 #define ASM_COMMENT_START " #"
786
787 /* This macro produces the initial definition of a function. */
788
789 #define ASM_DECLARE_FUNCTION_NAME(FILE,NAME,DECL) \
790 alpha_start_function(FILE,NAME,DECL);
791
792 /* This macro closes up a function definition for the assembler. */
793
794 #define ASM_DECLARE_FUNCTION_SIZE(FILE,NAME,DECL) \
795 alpha_end_function(FILE,NAME,DECL)
796
797 /* Output any profiling code before the prologue. */
798
799 #define PROFILE_BEFORE_PROLOGUE 1
800
801 /* Never use profile counters. */
802
803 #define NO_PROFILE_COUNTERS 1
804
805 /* Output assembler code to FILE to increment profiler label # LABELNO
806 for profiling a function entry. Under OSF/1, profiling is enabled
807 by simply passing -pg to the assembler and linker. */
808
809 #define FUNCTION_PROFILER(FILE, LABELNO)
810
811 /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
812 the stack pointer does not matter. The value is tested only in
813 functions that have frame pointers.
814 No definition is equivalent to always zero. */
815
816 #define EXIT_IGNORE_STACK 1
817
818 /* Define registers used by the epilogue and return instruction. */
819
820 #define EPILOGUE_USES(REGNO) ((REGNO) == 26)
821 \f
822 /* Length in units of the trampoline for entering a nested function. */
823
824 #define TRAMPOLINE_SIZE 32
825
826 /* The alignment of a trampoline, in bits. */
827
828 #define TRAMPOLINE_ALIGNMENT 64
829
830 /* A C expression whose value is RTL representing the value of the return
831 address for the frame COUNT steps up from the current frame.
832 FRAMEADDR is the frame pointer of the COUNT frame, or the frame pointer of
833 the COUNT-1 frame if RETURN_ADDR_IN_PREVIOUS_FRAME is defined. */
834
835 #define RETURN_ADDR_RTX alpha_return_addr
836
837 /* Provide a definition of DWARF_FRAME_REGNUM here so that fallback unwinders
838 can use DWARF_ALT_FRAME_RETURN_COLUMN defined below. This is just the same
839 as the default definition in dwarf2out.c. */
840 #undef DWARF_FRAME_REGNUM
841 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
842
843 /* Before the prologue, RA lives in $26. */
844 #define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, 26)
845 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (26)
846 #define DWARF_ALT_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (64)
847 #define DWARF_ZERO_REG 31
848
849 /* Describe how we implement __builtin_eh_return. */
850 #define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N) + 16 : INVALID_REGNUM)
851 #define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 28)
852 #define EH_RETURN_HANDLER_RTX \
853 gen_rtx_MEM (Pmode, plus_constant (stack_pointer_rtx, \
854 crtl->outgoing_args_size))
855 \f
856 /* Addressing modes, and classification of registers for them. */
857
858 /* Macros to check register numbers against specific register classes. */
859
860 /* These assume that REGNO is a hard or pseudo reg number.
861 They give nonzero only if REGNO is a hard reg of the suitable class
862 or a pseudo reg currently allocated to a suitable hard reg.
863 Since they use reg_renumber, they are safe only once reg_renumber
864 has been allocated, which happens in local-alloc.c. */
865
866 #define REGNO_OK_FOR_INDEX_P(REGNO) 0
867 #define REGNO_OK_FOR_BASE_P(REGNO) \
868 ((REGNO) < 32 || (unsigned) reg_renumber[REGNO] < 32 \
869 || (REGNO) == 63 || reg_renumber[REGNO] == 63)
870 \f
871 /* Maximum number of registers that can appear in a valid memory address. */
872 #define MAX_REGS_PER_ADDRESS 1
873
874 /* Recognize any constant value that is a valid address. For the Alpha,
875 there are only constants none since we want to use LDA to load any
876 symbolic addresses into registers. */
877
878 #define CONSTANT_ADDRESS_P(X) \
879 (CONST_INT_P (X) \
880 && (unsigned HOST_WIDE_INT) (INTVAL (X) + 0x8000) < 0x10000)
881
882 /* Include all constant integers and constant doubles, but not
883 floating-point, except for floating-point zero. */
884
885 #define LEGITIMATE_CONSTANT_P alpha_legitimate_constant_p
886
887 /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
888 and check its validity for a certain class.
889 We have two alternate definitions for each of them.
890 The usual definition accepts all pseudo regs; the other rejects
891 them unless they have been allocated suitable hard regs.
892 The symbol REG_OK_STRICT causes the latter definition to be used.
893
894 Most source files want to accept pseudo regs in the hope that
895 they will get allocated to the class that the insn wants them to be in.
896 Source files for reload pass need to be strict.
897 After reload, it makes no difference, since pseudo regs have
898 been eliminated by then. */
899
900 /* Nonzero if X is a hard reg that can be used as an index
901 or if it is a pseudo reg. */
902 #define REG_OK_FOR_INDEX_P(X) 0
903
904 /* Nonzero if X is a hard reg that can be used as a base reg
905 or if it is a pseudo reg. */
906 #define NONSTRICT_REG_OK_FOR_BASE_P(X) \
907 (REGNO (X) < 32 || REGNO (X) == 63 || REGNO (X) >= FIRST_PSEUDO_REGISTER)
908
909 /* ??? Nonzero if X is the frame pointer, or some virtual register
910 that may eliminate to the frame pointer. These will be allowed to
911 have offsets greater than 32K. This is done because register
912 elimination offsets will change the hi/lo split, and if we split
913 before reload, we will require additional instructions. */
914 #define NONSTRICT_REG_OK_FP_BASE_P(X) \
915 (REGNO (X) == 31 || REGNO (X) == 63 \
916 || (REGNO (X) >= FIRST_PSEUDO_REGISTER \
917 && REGNO (X) < LAST_VIRTUAL_POINTER_REGISTER))
918
919 /* Nonzero if X is a hard reg that can be used as a base reg. */
920 #define STRICT_REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
921
922 #ifdef REG_OK_STRICT
923 #define REG_OK_FOR_BASE_P(X) STRICT_REG_OK_FOR_BASE_P (X)
924 #else
925 #define REG_OK_FOR_BASE_P(X) NONSTRICT_REG_OK_FOR_BASE_P (X)
926 #endif
927 \f
928 /* Try a machine-dependent way of reloading an illegitimate address
929 operand. If we find one, push the reload and jump to WIN. This
930 macro is used in only one place: `find_reloads_address' in reload.c. */
931
932 #define LEGITIMIZE_RELOAD_ADDRESS(X,MODE,OPNUM,TYPE,IND_L,WIN) \
933 do { \
934 rtx new_x = alpha_legitimize_reload_address (X, MODE, OPNUM, TYPE, IND_L); \
935 if (new_x) \
936 { \
937 X = new_x; \
938 goto WIN; \
939 } \
940 } while (0)
941
942 /* Go to LABEL if ADDR (a legitimate address expression)
943 has an effect that depends on the machine mode it is used for.
944 On the Alpha this is true only for the unaligned modes. We can
945 simplify this test since we know that the address must be valid. */
946
947 #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
948 { if (GET_CODE (ADDR) == AND) goto LABEL; }
949 \f
950 /* Specify the machine mode that this machine uses
951 for the index in the tablejump instruction. */
952 #define CASE_VECTOR_MODE SImode
953
954 /* Define as C expression which evaluates to nonzero if the tablejump
955 instruction expects the table to contain offsets from the address of the
956 table.
957
958 Do not define this if the table should contain absolute addresses.
959 On the Alpha, the table is really GP-relative, not relative to the PC
960 of the table, but we pretend that it is PC-relative; this should be OK,
961 but we should try to find some better way sometime. */
962 #define CASE_VECTOR_PC_RELATIVE 1
963
964 /* Define this as 1 if `char' should by default be signed; else as 0. */
965 #define DEFAULT_SIGNED_CHAR 1
966
967 /* Max number of bytes we can move to or from memory
968 in one reasonably fast instruction. */
969
970 #define MOVE_MAX 8
971
972 /* If a memory-to-memory move would take MOVE_RATIO or more simple
973 move-instruction pairs, we will do a movmem or libcall instead.
974
975 Without byte/word accesses, we want no more than four instructions;
976 with, several single byte accesses are better. */
977
978 #define MOVE_RATIO(speed) (TARGET_BWX ? 7 : 2)
979
980 /* Largest number of bytes of an object that can be placed in a register.
981 On the Alpha we have plenty of registers, so use TImode. */
982 #define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TImode)
983
984 /* Nonzero if access to memory by bytes is no faster than for words.
985 Also nonzero if doing byte operations (specifically shifts) in registers
986 is undesirable.
987
988 On the Alpha, we want to not use the byte operation and instead use
989 masking operations to access fields; these will save instructions. */
990
991 #define SLOW_BYTE_ACCESS 1
992
993 /* Define if operations between registers always perform the operation
994 on the full register even if a narrower mode is specified. */
995 #define WORD_REGISTER_OPERATIONS
996
997 /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
998 will either zero-extend or sign-extend. The value of this macro should
999 be the code that says which one of the two operations is implicitly
1000 done, UNKNOWN if none. */
1001 #define LOAD_EXTEND_OP(MODE) ((MODE) == SImode ? SIGN_EXTEND : ZERO_EXTEND)
1002
1003 /* Define if loading short immediate values into registers sign extends. */
1004 #define SHORT_IMMEDIATES_SIGN_EXTEND
1005
1006 /* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
1007 is done just by pretending it is already truncated. */
1008 #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
1009
1010 /* The CIX ctlz and cttz instructions return 64 for zero. */
1011 #define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 64, TARGET_CIX)
1012 #define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 64, TARGET_CIX)
1013
1014 /* Define the value returned by a floating-point comparison instruction. */
1015
1016 #define FLOAT_STORE_FLAG_VALUE(MODE) \
1017 REAL_VALUE_ATOF ((TARGET_FLOAT_VAX ? "0.5" : "2.0"), (MODE))
1018
1019 /* Canonicalize a comparison from one we don't have to one we do have. */
1020
1021 #define CANONICALIZE_COMPARISON(CODE,OP0,OP1) \
1022 do { \
1023 if (((CODE) == GE || (CODE) == GT || (CODE) == GEU || (CODE) == GTU) \
1024 && (REG_P (OP1) || (OP1) == const0_rtx)) \
1025 { \
1026 rtx tem = (OP0); \
1027 (OP0) = (OP1); \
1028 (OP1) = tem; \
1029 (CODE) = swap_condition (CODE); \
1030 } \
1031 if (((CODE) == LT || (CODE) == LTU) \
1032 && CONST_INT_P (OP1) && INTVAL (OP1) == 256) \
1033 { \
1034 (CODE) = (CODE) == LT ? LE : LEU; \
1035 (OP1) = GEN_INT (255); \
1036 } \
1037 } while (0)
1038
1039 /* Specify the machine mode that pointers have.
1040 After generation of rtl, the compiler makes no further distinction
1041 between pointers and any other objects of this machine mode. */
1042 #define Pmode DImode
1043
1044 /* Mode of a function address in a call instruction (for indexing purposes). */
1045
1046 #define FUNCTION_MODE Pmode
1047
1048 /* Define this if addresses of constant functions
1049 shouldn't be put through pseudo regs where they can be cse'd.
1050 Desirable on machines where ordinary constants are expensive
1051 but a CALL with constant address is cheap.
1052
1053 We define this on the Alpha so that gen_call and gen_call_value
1054 get to see the SYMBOL_REF (for the hint field of the jsr). It will
1055 then copy it into a register, thus actually letting the address be
1056 cse'ed. */
1057
1058 #define NO_FUNCTION_CSE
1059
1060 /* Define this to be nonzero if shift instructions ignore all but the low-order
1061 few bits. */
1062 #define SHIFT_COUNT_TRUNCATED 1
1063 \f
1064 /* Control the assembler format that we output. */
1065
1066 /* Output to assembler file text saying following lines
1067 may contain character constants, extra white space, comments, etc. */
1068 #define ASM_APP_ON (TARGET_EXPLICIT_RELOCS ? "\t.set\tmacro\n" : "")
1069
1070 /* Output to assembler file text saying following lines
1071 no longer contain unusual constructs. */
1072 #define ASM_APP_OFF (TARGET_EXPLICIT_RELOCS ? "\t.set\tnomacro\n" : "")
1073
1074 #define TEXT_SECTION_ASM_OP "\t.text"
1075
1076 /* Output before read-only data. */
1077
1078 #define READONLY_DATA_SECTION_ASM_OP "\t.rdata"
1079
1080 /* Output before writable data. */
1081
1082 #define DATA_SECTION_ASM_OP "\t.data"
1083
1084 /* How to refer to registers in assembler output.
1085 This sequence is indexed by compiler's hard-register-number (see above). */
1086
1087 #define REGISTER_NAMES \
1088 {"$0", "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", \
1089 "$9", "$10", "$11", "$12", "$13", "$14", "$15", \
1090 "$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23", \
1091 "$24", "$25", "$26", "$27", "$28", "$29", "$30", "AP", \
1092 "$f0", "$f1", "$f2", "$f3", "$f4", "$f5", "$f6", "$f7", "$f8", \
1093 "$f9", "$f10", "$f11", "$f12", "$f13", "$f14", "$f15", \
1094 "$f16", "$f17", "$f18", "$f19", "$f20", "$f21", "$f22", "$f23",\
1095 "$f24", "$f25", "$f26", "$f27", "$f28", "$f29", "$f30", "FP"}
1096
1097 /* Strip name encoding when emitting labels. */
1098
1099 #define ASM_OUTPUT_LABELREF(STREAM, NAME) \
1100 do { \
1101 const char *name_ = NAME; \
1102 if (*name_ == '@' || *name_ == '%') \
1103 name_ += 2; \
1104 if (*name_ == '*') \
1105 name_++; \
1106 else \
1107 fputs (user_label_prefix, STREAM); \
1108 fputs (name_, STREAM); \
1109 } while (0)
1110
1111 /* Globalizing directive for a label. */
1112 #define GLOBAL_ASM_OP "\t.globl "
1113
1114 /* The prefix to add to user-visible assembler symbols. */
1115
1116 #define USER_LABEL_PREFIX ""
1117
1118 /* This is how to output a label for a jump table. Arguments are the same as
1119 for (*targetm.asm_out.internal_label), except the insn for the jump table is
1120 passed. */
1121
1122 #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \
1123 { ASM_OUTPUT_ALIGN (FILE, 2); (*targetm.asm_out.internal_label) (FILE, PREFIX, NUM); }
1124
1125 /* This is how to store into the string LABEL
1126 the symbol_ref name of an internal numbered label where
1127 PREFIX is the class of label and NUM is the number within the class.
1128 This is suitable for output with `assemble_name'. */
1129
1130 #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
1131 sprintf ((LABEL), "*$%s%ld", (PREFIX), (long)(NUM))
1132
1133 /* We use the default ASCII-output routine, except that we don't write more
1134 than 50 characters since the assembler doesn't support very long lines. */
1135
1136 #define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \
1137 do { \
1138 FILE *_hide_asm_out_file = (MYFILE); \
1139 const unsigned char *_hide_p = (const unsigned char *) (MYSTRING); \
1140 int _hide_thissize = (MYLENGTH); \
1141 int _size_so_far = 0; \
1142 { \
1143 FILE *asm_out_file = _hide_asm_out_file; \
1144 const unsigned char *p = _hide_p; \
1145 int thissize = _hide_thissize; \
1146 int i; \
1147 fprintf (asm_out_file, "\t.ascii \""); \
1148 \
1149 for (i = 0; i < thissize; i++) \
1150 { \
1151 register int c = p[i]; \
1152 \
1153 if (_size_so_far ++ > 50 && i < thissize - 4) \
1154 _size_so_far = 0, fprintf (asm_out_file, "\"\n\t.ascii \""); \
1155 \
1156 if (c == '\"' || c == '\\') \
1157 putc ('\\', asm_out_file); \
1158 if (c >= ' ' && c < 0177) \
1159 putc (c, asm_out_file); \
1160 else \
1161 { \
1162 fprintf (asm_out_file, "\\%o", c); \
1163 /* After an octal-escape, if a digit follows, \
1164 terminate one string constant and start another. \
1165 The VAX assembler fails to stop reading the escape \
1166 after three digits, so this is the only way we \
1167 can get it to parse the data properly. */ \
1168 if (i < thissize - 1 && ISDIGIT (p[i + 1])) \
1169 _size_so_far = 0, fprintf (asm_out_file, "\"\n\t.ascii \""); \
1170 } \
1171 } \
1172 fprintf (asm_out_file, "\"\n"); \
1173 } \
1174 } \
1175 while (0)
1176
1177 /* This is how to output an element of a case-vector that is relative. */
1178
1179 #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
1180 fprintf (FILE, "\t.%s $L%d\n", TARGET_ABI_WINDOWS_NT ? "long" : "gprel32", \
1181 (VALUE))
1182
1183 /* This is how to output an assembler line
1184 that says to advance the location counter
1185 to a multiple of 2**LOG bytes. */
1186
1187 #define ASM_OUTPUT_ALIGN(FILE,LOG) \
1188 if ((LOG) != 0) \
1189 fprintf (FILE, "\t.align %d\n", LOG);
1190
1191 /* This is how to advance the location counter by SIZE bytes. */
1192
1193 #define ASM_OUTPUT_SKIP(FILE,SIZE) \
1194 fprintf (FILE, "\t.space "HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE))
1195
1196 /* This says how to output an assembler line
1197 to define a global common symbol. */
1198
1199 #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
1200 ( fputs ("\t.comm ", (FILE)), \
1201 assemble_name ((FILE), (NAME)), \
1202 fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE)))
1203
1204 /* This says how to output an assembler line
1205 to define a local common symbol. */
1206
1207 #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE,ROUNDED) \
1208 ( fputs ("\t.lcomm ", (FILE)), \
1209 assemble_name ((FILE), (NAME)), \
1210 fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE)))
1211 \f
1212
1213 /* Print operand X (an rtx) in assembler syntax to file FILE.
1214 CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
1215 For `%' followed by punctuation, CODE is the punctuation and X is null. */
1216
1217 #define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
1218
1219 /* Determine which codes are valid without a following integer. These must
1220 not be alphabetic.
1221
1222 ~ Generates the name of the current function.
1223
1224 / Generates the instruction suffix. The TRAP_SUFFIX and ROUND_SUFFIX
1225 attributes are examined to determine what is appropriate.
1226
1227 , Generates single precision suffix for floating point
1228 instructions (s for IEEE, f for VAX)
1229
1230 - Generates double precision suffix for floating point
1231 instructions (t for IEEE, g for VAX)
1232 */
1233
1234 #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
1235 ((CODE) == '/' || (CODE) == ',' || (CODE) == '-' || (CODE) == '~' \
1236 || (CODE) == '#' || (CODE) == '*' || (CODE) == '&')
1237
1238 /* Print a memory address as an operand to reference that memory location. */
1239
1240 #define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
1241 print_operand_address((FILE), (ADDR))
1242 \f
1243 /* Tell collect that the object format is ECOFF. */
1244 #define OBJECT_FORMAT_COFF
1245 #define EXTENDED_COFF
1246
1247 /* If we use NM, pass -g to it so it only lists globals. */
1248 #define NM_FLAGS "-pg"
1249
1250 /* Definitions for debugging. */
1251
1252 #define SDB_DEBUGGING_INFO 1 /* generate info for mips-tfile */
1253 #define DBX_DEBUGGING_INFO 1 /* generate embedded stabs */
1254 #define MIPS_DEBUGGING_INFO 1 /* MIPS specific debugging info */
1255
1256 #ifndef PREFERRED_DEBUGGING_TYPE /* assume SDB_DEBUGGING_INFO */
1257 #define PREFERRED_DEBUGGING_TYPE SDB_DEBUG
1258 #endif
1259
1260
1261 /* Correct the offset of automatic variables and arguments. Note that
1262 the Alpha debug format wants all automatic variables and arguments
1263 to be in terms of two different offsets from the virtual frame pointer,
1264 which is the stack pointer before any adjustment in the function.
1265 The offset for the argument pointer is fixed for the native compiler,
1266 it is either zero (for the no arguments case) or large enough to hold
1267 all argument registers.
1268 The offset for the auto pointer is the fourth argument to the .frame
1269 directive (local_offset).
1270 To stay compatible with the native tools we use the same offsets
1271 from the virtual frame pointer and adjust the debugger arg/auto offsets
1272 accordingly. These debugger offsets are set up in output_prolog. */
1273
1274 extern long alpha_arg_offset;
1275 extern long alpha_auto_offset;
1276 #define DEBUGGER_AUTO_OFFSET(X) \
1277 ((GET_CODE (X) == PLUS ? INTVAL (XEXP (X, 1)) : 0) + alpha_auto_offset)
1278 #define DEBUGGER_ARG_OFFSET(OFFSET, X) (OFFSET + alpha_arg_offset)
1279
1280 /* mips-tfile doesn't understand .stabd directives. */
1281 #define DBX_OUTPUT_SOURCE_LINE(STREAM, LINE, COUNTER) do { \
1282 dbxout_begin_stabn_sline (LINE); \
1283 dbxout_stab_value_internal_label ("LM", &COUNTER); \
1284 } while (0)
1285
1286 /* We want to use MIPS-style .loc directives for SDB line numbers. */
1287 extern int num_source_filenames;
1288 #define SDB_OUTPUT_SOURCE_LINE(STREAM, LINE) \
1289 fprintf (STREAM, "\t.loc\t%d %d\n", num_source_filenames, LINE)
1290
1291 #define ASM_OUTPUT_SOURCE_FILENAME(STREAM, NAME) \
1292 alpha_output_filename (STREAM, NAME)
1293
1294 /* mips-tfile.c limits us to strings of one page. We must underestimate this
1295 number, because the real length runs past this up to the next
1296 continuation point. This is really a dbxout.c bug. */
1297 #define DBX_CONTIN_LENGTH 3000
1298
1299 /* By default, turn on GDB extensions. */
1300 #define DEFAULT_GDB_EXTENSIONS 1
1301
1302 /* Stabs-in-ECOFF can't handle dbxout_function_end(). */
1303 #define NO_DBX_FUNCTION_END 1
1304
1305 /* If we are smuggling stabs through the ALPHA ECOFF object
1306 format, put a comment in front of the .stab<x> operation so
1307 that the ALPHA assembler does not choke. The mips-tfile program
1308 will correctly put the stab into the object file. */
1309
1310 #define ASM_STABS_OP ((TARGET_GAS) ? "\t.stabs\t" : " #.stabs\t")
1311 #define ASM_STABN_OP ((TARGET_GAS) ? "\t.stabn\t" : " #.stabn\t")
1312 #define ASM_STABD_OP ((TARGET_GAS) ? "\t.stabd\t" : " #.stabd\t")
1313
1314 /* Forward references to tags are allowed. */
1315 #define SDB_ALLOW_FORWARD_REFERENCES
1316
1317 /* Unknown tags are also allowed. */
1318 #define SDB_ALLOW_UNKNOWN_REFERENCES
1319
1320 #define PUT_SDB_DEF(a) \
1321 do { \
1322 fprintf (asm_out_file, "\t%s.def\t", \
1323 (TARGET_GAS) ? "" : "#"); \
1324 ASM_OUTPUT_LABELREF (asm_out_file, a); \
1325 fputc (';', asm_out_file); \
1326 } while (0)
1327
1328 #define PUT_SDB_PLAIN_DEF(a) \
1329 do { \
1330 fprintf (asm_out_file, "\t%s.def\t.%s;", \
1331 (TARGET_GAS) ? "" : "#", (a)); \
1332 } while (0)
1333
1334 #define PUT_SDB_TYPE(a) \
1335 do { \
1336 fprintf (asm_out_file, "\t.type\t0x%x;", (a)); \
1337 } while (0)
1338
1339 /* For block start and end, we create labels, so that
1340 later we can figure out where the correct offset is.
1341 The normal .ent/.end serve well enough for functions,
1342 so those are just commented out. */
1343
1344 extern int sdb_label_count; /* block start/end next label # */
1345
1346 #define PUT_SDB_BLOCK_START(LINE) \
1347 do { \
1348 fprintf (asm_out_file, \
1349 "$Lb%d:\n\t%s.begin\t$Lb%d\t%d\n", \
1350 sdb_label_count, \
1351 (TARGET_GAS) ? "" : "#", \
1352 sdb_label_count, \
1353 (LINE)); \
1354 sdb_label_count++; \
1355 } while (0)
1356
1357 #define PUT_SDB_BLOCK_END(LINE) \
1358 do { \
1359 fprintf (asm_out_file, \
1360 "$Le%d:\n\t%s.bend\t$Le%d\t%d\n", \
1361 sdb_label_count, \
1362 (TARGET_GAS) ? "" : "#", \
1363 sdb_label_count, \
1364 (LINE)); \
1365 sdb_label_count++; \
1366 } while (0)
1367
1368 #define PUT_SDB_FUNCTION_START(LINE)
1369
1370 #define PUT_SDB_FUNCTION_END(LINE)
1371
1372 #define PUT_SDB_EPILOGUE_END(NAME) ((void)(NAME))
1373
1374 /* Macros for mips-tfile.c to encapsulate stabs in ECOFF, and for
1375 mips-tdump.c to print them out.
1376
1377 These must match the corresponding definitions in gdb/mipsread.c.
1378 Unfortunately, gcc and gdb do not currently share any directories. */
1379
1380 #define CODE_MASK 0x8F300
1381 #define MIPS_IS_STAB(sym) (((sym)->index & 0xFFF00) == CODE_MASK)
1382 #define MIPS_MARK_STAB(code) ((code)+CODE_MASK)
1383 #define MIPS_UNMARK_STAB(code) ((code)-CODE_MASK)
1384
1385 /* Override some mips-tfile definitions. */
1386
1387 #define SHASH_SIZE 511
1388 #define THASH_SIZE 55
1389
1390 /* Align ecoff symbol tables to avoid OSF1/1.3 nm complaints. */
1391
1392 #define ALIGN_SYMTABLE_OFFSET(OFFSET) (((OFFSET) + 7) & ~7)
1393
1394 /* The system headers under Alpha systems are generally C++-aware. */
1395 #define NO_IMPLICIT_EXTERN_C