]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/alpha/alpha.h
(end_final,profile_function): Profiling variables are size of pointer,
[thirdparty/gcc.git] / gcc / config / alpha / alpha.h
CommitLineData
1a94ca49 1/* Definitions of target machine for GNU compiler, for DEC Alpha.
34fa88ab 2 Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
1e6c6f11 3 Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
1a94ca49
RK
4
5This file is part of GNU CC.
6
7GNU CC is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12GNU CC is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU CC; see the file COPYING. If not, write to
19the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
20
21
22/* Names to predefine in the preprocessor for this target machine. */
23
24#define CPP_PREDEFINES "\
25-Dunix -D__osf__ -D__alpha -D__alpha__ -D_LONGLONG -DSYSTYPE_BSD \
65c42379 26-D_SYSTYPE_BSD -Asystem(unix) -Asystem(xpg4) -Acpu(alpha) -Amachine(alpha)"
1a94ca49 27
21798cd8
RK
28/* Write out the correct language type definition for the header files.
29 Unless we have assembler language, write out the symbols for C. */
1a94ca49 30#define CPP_SPEC "\
21798cd8 31%{!.S: -D__LANGUAGE_C__ -D__LANGUAGE_C %{!ansi:-DLANGUAGE_C}} \
1a94ca49 32%{.S: -D__LANGUAGE_ASSEMBLY__ -D__LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \
21798cd8
RK
33%{.cc: -D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus} \
34%{.cxx: -D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus} \
35%{.C: -D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus} \
1a94ca49
RK
36%{.m: -D__LANGUAGE_OBJECTIVE_C__ -D__LANGUAGE_OBJECTIVE_C}"
37
38/* Set the spec to use for signed char. The default tests the above macro
39 but DEC's compiler can't handle the conditional in a "constant"
40 operand. */
41
42#define SIGNED_CHAR_SPEC "%{funsigned-char:-D__CHAR_UNSIGNED__}"
43
7981384f
RK
44/* No point in running CPP on our assembler output. */
45#define ASM_SPEC "-nocpp"
46
d621c38b 47/* Right now Alpha OSF/1 doesn't seem to have debugging libraries. */
1a94ca49 48
917fecc0 49#define LIB_SPEC "%{p:-lprof1} -lc"
1a94ca49 50
65823178 51/* Pass "-G 8" to ld because Alpha's CC does. Pass -O3 if we are optimizing,
8877eb00
RK
52 -O1 if we are not. Pass -non_shared or -call_shared as appropriate. */
53#define LINK_SPEC \
65823178 54 "-G 8 %{O*:-O3} %{!O*:-O1} %{static:-non_shared} %{!static:-call_shared}"
8877eb00 55
1a94ca49
RK
56/* Print subsidiary information on the compiler version in use. */
57#define TARGET_VERSION
58
59/* Define the location for the startup file on OSF/1 for Alpha. */
60
61#define MD_STARTFILE_PREFIX "/usr/lib/cmplrs/cc/"
62
63/* Run-time compilation parameters selecting different hardware subsets. */
64
65extern int target_flags;
66
67/* This means that floating-point support exists in the target implementation
68 of the Alpha architecture. This is usually the default. */
69
70#define TARGET_FP (target_flags & 1)
71
72/* This means that floating-point registers are allowed to be used. Note
73 that Alpha implementations without FP operations are required to
74 provide the FP registers. */
75
03f8c4cc
RK
76#define TARGET_FPREGS (target_flags & 2)
77
78/* This means that gas is used to process the assembler file. */
79
80#define MASK_GAS 4
81#define TARGET_GAS (target_flags & MASK_GAS)
1a94ca49
RK
82
83/* Macro to define tables used to set the flags.
84 This is a list in braces of pairs in braces,
85 each pair being { "NAME", VALUE }
86 where VALUE is the bits to set or minus the bits to clear.
87 An empty string NAME is used to identify the default VALUE. */
88
89#define TARGET_SWITCHES \
90 { {"no-soft-float", 1}, \
91 {"soft-float", -1}, \
92 {"fp-regs", 2}, \
93 {"no-fp-regs", -3}, \
03f8c4cc
RK
94 {"alpha-as", -MASK_GAS}, \
95 {"gas", MASK_GAS}, \
88681624 96 {"", TARGET_DEFAULT | TARGET_CPU_DEFAULT} }
1a94ca49
RK
97
98#define TARGET_DEFAULT 3
99
88681624
ILT
100#ifndef TARGET_CPU_DEFAULT
101#define TARGET_CPU_DEFAULT 0
102#endif
103
1a94ca49
RK
104/* Define this macro to change register usage conditional on target flags.
105
106 On the Alpha, we use this to disable the floating-point registers when
107 they don't exist. */
108
109#define CONDITIONAL_REGISTER_USAGE \
110 if (! TARGET_FPREGS) \
52a69200 111 for (i = 32; i < 63; i++) \
1a94ca49
RK
112 fixed_regs[i] = call_used_regs[i] = 1;
113
4f074454
RK
114/* Show we can debug even without a frame pointer. */
115#define CAN_DEBUG_WITHOUT_FP
1a94ca49
RK
116\f
117/* target machine storage layout */
118
2700ac93
RS
119/* Define to enable software floating point emulation. */
120#define REAL_ARITHMETIC
121
1a94ca49
RK
122/* Define the size of `int'. The default is the same as the word size. */
123#define INT_TYPE_SIZE 32
124
125/* Define the size of `long long'. The default is the twice the word size. */
126#define LONG_LONG_TYPE_SIZE 64
127
128/* The two floating-point formats we support are S-floating, which is
129 4 bytes, and T-floating, which is 8 bytes. `float' is S and `double'
130 and `long double' are T. */
131
132#define FLOAT_TYPE_SIZE 32
133#define DOUBLE_TYPE_SIZE 64
134#define LONG_DOUBLE_TYPE_SIZE 64
135
136#define WCHAR_TYPE "short unsigned int"
137#define WCHAR_TYPE_SIZE 16
138
13d39dbc 139/* Define this macro if it is advisable to hold scalars in registers
1a94ca49
RK
140 in a wider mode than that declared by the program. In such cases,
141 the value is constrained to be within the bounds of the declared
142 type, but kept valid in the wider mode. The signedness of the
143 extension may differ from that of the type.
144
145 For Alpha, we always store objects in a full register. 32-bit objects
146 are always sign-extended, but smaller objects retain their signedness. */
147
148#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \
149 if (GET_MODE_CLASS (MODE) == MODE_INT \
150 && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
151 { \
152 if ((MODE) == SImode) \
153 (UNSIGNEDP) = 0; \
154 (MODE) = DImode; \
155 }
156
157/* Define this if function arguments should also be promoted using the above
158 procedure. */
159
160#define PROMOTE_FUNCTION_ARGS
161
162/* Likewise, if the function return value is promoted. */
163
164#define PROMOTE_FUNCTION_RETURN
165
166/* Define this if most significant bit is lowest numbered
167 in instructions that operate on numbered bit-fields.
168
169 There are no such instructions on the Alpha, but the documentation
170 is little endian. */
171#define BITS_BIG_ENDIAN 0
172
173/* Define this if most significant byte of a word is the lowest numbered.
174 This is false on the Alpha. */
175#define BYTES_BIG_ENDIAN 0
176
177/* Define this if most significant word of a multiword number is lowest
178 numbered.
179
180 For Alpha we can decide arbitrarily since there are no machine instructions
181 for them. Might as well be consistent with bytes. */
182#define WORDS_BIG_ENDIAN 0
183
184/* number of bits in an addressable storage unit */
185#define BITS_PER_UNIT 8
186
187/* Width in bits of a "word", which is the contents of a machine register.
188 Note that this is not necessarily the width of data type `int';
189 if using 16-bit ints on a 68000, this would still be 32.
190 But on a machine with 16-bit registers, this would be 16. */
191#define BITS_PER_WORD 64
192
193/* Width of a word, in units (bytes). */
194#define UNITS_PER_WORD 8
195
196/* Width in bits of a pointer.
197 See also the macro `Pmode' defined below. */
198#define POINTER_SIZE 64
199
200/* Allocation boundary (in *bits*) for storing arguments in argument list. */
201#define PARM_BOUNDARY 64
202
203/* Boundary (in *bits*) on which stack pointer should be aligned. */
204#define STACK_BOUNDARY 64
205
206/* Allocation boundary (in *bits*) for the code of a function. */
207#define FUNCTION_BOUNDARY 64
208
209/* Alignment of field after `int : 0' in a structure. */
210#define EMPTY_FIELD_BOUNDARY 64
211
212/* Every structure's size must be a multiple of this. */
213#define STRUCTURE_SIZE_BOUNDARY 8
214
215/* A bitfield declared as `int' forces `int' alignment for the struct. */
216#define PCC_BITFIELD_TYPE_MATTERS 1
217
65823178
RK
218/* Align loop starts for optimal branching.
219
220 ??? Kludge this and the next macro for the moment by not doing anything if
221 we don't optimize and also if we are writing ECOFF symbols to work around
222 a bug in DEC's assembler. */
1a94ca49 223
130d2d72 224#define ASM_OUTPUT_LOOP_ALIGN(FILE) \
65823178
RK
225 if (optimize > 0 && write_symbols != SDB_DEBUG) \
226 ASM_OUTPUT_ALIGN (FILE, 5)
1a94ca49
RK
227
228/* This is how to align an instruction for optimal branching.
229 On Alpha we'll get better performance by aligning on a quadword
230 boundary. */
130d2d72 231
1a94ca49 232#define ASM_OUTPUT_ALIGN_CODE(FILE) \
65823178
RK
233 if (optimize > 0 && write_symbols != SDB_DEBUG) \
234 ASM_OUTPUT_ALIGN ((FILE), 4)
1a94ca49
RK
235
236/* No data type wants to be aligned rounder than this. */
237#define BIGGEST_ALIGNMENT 64
238
239/* Make strings word-aligned so strcpy from constants will be faster. */
240#define CONSTANT_ALIGNMENT(EXP, ALIGN) \
241 (TREE_CODE (EXP) == STRING_CST \
242 && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
243
244/* Make arrays of chars word-aligned for the same reasons. */
245#define DATA_ALIGNMENT(TYPE, ALIGN) \
246 (TREE_CODE (TYPE) == ARRAY_TYPE \
247 && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
248 && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
249
250/* Set this non-zero if move instructions will actually fail to work
251 when given unaligned data.
252
253 Since we get an error message when we do one, call them invalid. */
254
255#define STRICT_ALIGNMENT 1
256
257/* Set this non-zero if unaligned move instructions are extremely slow.
258
259 On the Alpha, they trap. */
130d2d72
RK
260
261#define SLOW_UNALIGNED_ACCESS 1
1a94ca49
RK
262\f
263/* Standard register usage. */
264
265/* Number of actual hardware registers.
266 The hardware registers are assigned numbers for the compiler
267 from 0 to just below FIRST_PSEUDO_REGISTER.
268 All registers that the compiler knows about must be given numbers,
269 even those that are not normally considered general registers.
270
271 We define all 32 integer registers, even though $31 is always zero,
272 and all 32 floating-point registers, even though $f31 is also
273 always zero. We do not bother defining the FP status register and
130d2d72
RK
274 there are no other registers.
275
276 Since $31 is always zero, we will use register number 31 as the
277 argument pointer. It will never appear in the generated code
278 because we will always be eliminating it in favor of the stack
52a69200
RK
279 pointer or hardware frame pointer.
280
281 Likewise, we use $f31 for the frame pointer, which will always
282 be eliminated in favor of the hardware frame pointer or the
283 stack pointer. */
1a94ca49
RK
284
285#define FIRST_PSEUDO_REGISTER 64
286
287/* 1 for registers that have pervasive standard uses
288 and are not available for the register allocator. */
289
290#define FIXED_REGISTERS \
291 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, \
293 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
294 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }
295
296/* 1 for registers not available across function calls.
297 These must include the FIXED_REGISTERS and also any
298 registers that can be used without being saved.
299 The latter must include the registers where values are returned
300 and the register where structure-value addresses are passed.
301 Aside from that, you can include as many other registers as you like. */
302#define CALL_USED_REGISTERS \
303 {1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \
304 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, \
305 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, \
306 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
307
308/* List the order in which to allocate registers. Each register must be
309 listed once, even those in FIXED_REGISTERS.
310
311 We allocate in the following order:
312 $f1 (nonsaved floating-point register)
313 $f10-$f15 (likewise)
314 $f22-$f30 (likewise)
315 $f21-$f16 (likewise, but input args)
316 $f0 (nonsaved, but return value)
317 $f2-$f9 (saved floating-point registers)
318 $1-$8 (nonsaved integer registers)
319 $22-$25 (likewise)
320 $28 (likewise)
321 $0 (likewise, but return value)
322 $21-$16 (likewise, but input args)
323 $27 (procedure value)
324 $9-$14 (saved integer registers)
325 $26 (return PC)
326 $15 (frame pointer)
327 $29 (global pointer)
52a69200 328 $30, $31, $f31 (stack pointer and always zero/ap & fp) */
1a94ca49
RK
329
330#define REG_ALLOC_ORDER \
331 {33, \
da01bc2c 332 42, 43, 44, 45, 46, 47, \
1a94ca49
RK
333 54, 55, 56, 57, 58, 59, 60, 61, 62, \
334 53, 52, 51, 50, 49, 48, \
335 32, \
336 34, 35, 36, 37, 38, 39, 40, 41, \
337 1, 2, 3, 4, 5, 6, 7, 8, \
338 22, 23, 24, 25, \
339 28, \
340 0, \
341 21, 20, 19, 18, 17, 16, \
342 27, \
343 9, 10, 11, 12, 13, 14, \
344 26, \
345 15, \
346 29, \
347 30, 31, 63 }
348
349/* Return number of consecutive hard regs needed starting at reg REGNO
350 to hold something of mode MODE.
351 This is ordinarily the length in words of a value of mode MODE
352 but can be less for certain modes in special long registers. */
353
354#define HARD_REGNO_NREGS(REGNO, MODE) \
355 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
356
357/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
358 On Alpha, the integer registers can hold any mode. The floating-point
359 registers can hold 32-bit and 64-bit integers as well, but not 16-bit
360 or 8-bit values. If we only allowed the larger integers into FP registers,
361 we'd have to say that QImode and SImode aren't tiable, which is a
362 pain. So say all registers can hold everything and see how that works. */
363
364#define HARD_REGNO_MODE_OK(REGNO, MODE) 1
365
366/* Value is 1 if it is a good idea to tie two pseudo registers
367 when one has mode MODE1 and one has mode MODE2.
368 If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
369 for any hard reg, then this must be 0 for correct output. */
370
371#define MODES_TIEABLE_P(MODE1, MODE2) 1
372
373/* Specify the registers used for certain standard purposes.
374 The values of these macros are register numbers. */
375
376/* Alpha pc isn't overloaded on a register that the compiler knows about. */
377/* #define PC_REGNUM */
378
379/* Register to use for pushing function arguments. */
380#define STACK_POINTER_REGNUM 30
381
382/* Base register for access to local variables of the function. */
52a69200 383#define HARD_FRAME_POINTER_REGNUM 15
1a94ca49
RK
384
385/* Value should be nonzero if functions must have frame pointers.
386 Zero means the frame pointer need not be set up (and parms
387 may be accessed via the stack pointer) in functions that seem suitable.
388 This is computed in `reload', in reload1.c. */
389#define FRAME_POINTER_REQUIRED 0
390
391/* Base register for access to arguments of the function. */
130d2d72 392#define ARG_POINTER_REGNUM 31
1a94ca49 393
52a69200
RK
394/* Base register for access to local variables of function. */
395#define FRAME_POINTER_REGNUM 63
396
1a94ca49
RK
397/* Register in which static-chain is passed to a function.
398
399 For the Alpha, this is based on an example; the calling sequence
400 doesn't seem to specify this. */
401#define STATIC_CHAIN_REGNUM 1
402
403/* Register in which address to store a structure value
404 arrives in the function. On the Alpha, the address is passed
405 as a hidden argument. */
406#define STRUCT_VALUE 0
407\f
408/* Define the classes of registers for register constraints in the
409 machine description. Also define ranges of constants.
410
411 One of the classes must always be named ALL_REGS and include all hard regs.
412 If there is more than one class, another class must be named NO_REGS
413 and contain no registers.
414
415 The name GENERAL_REGS must be the name of a class (or an alias for
416 another name such as ALL_REGS). This is the class of registers
417 that is allowed by "g" or "r" in a register constraint.
418 Also, registers outside this class are allocated only when
419 instructions express preferences for them.
420
421 The classes must be numbered in nondecreasing order; that is,
422 a larger-numbered class must never be contained completely
423 in a smaller-numbered class.
424
425 For any two classes, it is very desirable that there be another
426 class that represents their union. */
427
428enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS,
429 LIM_REG_CLASSES };
430
431#define N_REG_CLASSES (int) LIM_REG_CLASSES
432
433/* Give names of register classes as strings for dump file. */
434
435#define REG_CLASS_NAMES \
436 {"NO_REGS", "GENERAL_REGS", "FLOAT_REGS", "ALL_REGS" }
437
438/* Define which registers fit in which classes.
439 This is an initializer for a vector of HARD_REG_SET
440 of length N_REG_CLASSES. */
441
442#define REG_CLASS_CONTENTS \
52a69200 443 { {0, 0}, {~0, 0x80000000}, {0, 0x7fffffff}, {~0, ~0} }
1a94ca49
RK
444
445/* The same information, inverted:
446 Return the class number of the smallest class containing
447 reg number REGNO. This could be a conditional expression
448 or could index an array. */
449
52a69200
RK
450#define REGNO_REG_CLASS(REGNO) \
451 ((REGNO) >= 32 && (REGNO) <= 62 ? FLOAT_REGS : GENERAL_REGS)
1a94ca49
RK
452
453/* The class value for index registers, and the one for base regs. */
454#define INDEX_REG_CLASS NO_REGS
455#define BASE_REG_CLASS GENERAL_REGS
456
457/* Get reg_class from a letter such as appears in the machine description. */
458
459#define REG_CLASS_FROM_LETTER(C) \
460 ((C) == 'f' ? FLOAT_REGS : NO_REGS)
461
462/* Define this macro to change register usage conditional on target flags. */
463/* #define CONDITIONAL_REGISTER_USAGE */
464
465/* The letters I, J, K, L, M, N, O, and P in a register constraint string
466 can be used to stand for particular ranges of immediate operands.
467 This macro defines what the ranges are.
468 C is the letter, and VALUE is a constant value.
469 Return 1 if VALUE is in the range specified by C.
470
471 For Alpha:
472 `I' is used for the range of constants most insns can contain.
473 `J' is the constant zero.
474 `K' is used for the constant in an LDA insn.
475 `L' is used for the constant in a LDAH insn.
476 `M' is used for the constants that can be AND'ed with using a ZAP insn.
477 `N' is used for complemented 8-bit constants.
478 `O' is used for negated 8-bit constants.
479 `P' is used for the constants 1, 2 and 3. */
480
481#define CONST_OK_FOR_LETTER_P(VALUE, C) \
482 ((C) == 'I' ? (unsigned HOST_WIDE_INT) (VALUE) < 0x100 \
483 : (C) == 'J' ? (VALUE) == 0 \
484 : (C) == 'K' ? (unsigned HOST_WIDE_INT) ((VALUE) + 0x8000) < 0x10000 \
485 : (C) == 'L' ? (((VALUE) & 0xffff) == 0 \
486 && (((VALUE)) >> 31 == -1 || (VALUE) >> 31 == 0)) \
487 : (C) == 'M' ? zap_mask (VALUE) \
488 : (C) == 'N' ? (unsigned HOST_WIDE_INT) (~ (VALUE)) < 0x100 \
489 : (C) == 'O' ? (unsigned HOST_WIDE_INT) (- (VALUE)) < 0x100 \
490 : (C) == 'P' ? (VALUE) == 1 || (VALUE) == 2 || (VALUE) == 3 \
491 : 0)
492
493/* Similar, but for floating or large integer constants, and defining letters
494 G and H. Here VALUE is the CONST_DOUBLE rtx itself.
495
496 For Alpha, `G' is the floating-point constant zero. `H' is a CONST_DOUBLE
497 that is the operand of a ZAP insn. */
498
499#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
500 ((C) == 'G' ? (GET_MODE_CLASS (GET_MODE (VALUE)) == MODE_FLOAT \
501 && (VALUE) == CONST0_RTX (GET_MODE (VALUE))) \
502 : (C) == 'H' ? (GET_MODE (VALUE) == VOIDmode \
503 && zap_mask (CONST_DOUBLE_LOW (VALUE)) \
504 && zap_mask (CONST_DOUBLE_HIGH (VALUE))) \
505 : 0)
506
e560f226
RK
507/* Optional extra constraints for this machine.
508
509 For the Alpha, `Q' means that this is a memory operand but not a
510 reference to an unaligned location. */
511
512#define EXTRA_CONSTRAINT(OP, C) \
513 ((C) == 'Q' ? GET_CODE (OP) == MEM && GET_CODE (XEXP (OP, 0)) != AND \
514 : 0)
515
1a94ca49
RK
516/* Given an rtx X being reloaded into a reg required to be
517 in class CLASS, return the class of reg to actually use.
518 In general this is just CLASS; but on some machines
519 in some cases it is preferable to use a more restrictive class.
520
521 On the Alpha, all constants except zero go into a floating-point
522 register via memory. */
523
524#define PREFERRED_RELOAD_CLASS(X, CLASS) \
525 (CONSTANT_P (X) && (X) != const0_rtx && (X) != CONST0_RTX (GET_MODE (X)) \
526 ? ((CLASS) == FLOAT_REGS ? NO_REGS : GENERAL_REGS) \
527 : (CLASS))
528
529/* Loading and storing HImode or QImode values to and from memory
530 usually requires a scratch register. The exceptions are loading
e560f226
RK
531 QImode and HImode from an aligned address to a general register.
532 We also cannot load an unaligned address into an FP register. */
1a94ca49
RK
533
534#define SECONDARY_INPUT_RELOAD_CLASS(CLASS,MODE,IN) \
535(((GET_CODE (IN) == MEM \
536 || (GET_CODE (IN) == REG && REGNO (IN) >= FIRST_PSEUDO_REGISTER) \
537 || (GET_CODE (IN) == SUBREG \
538 && (GET_CODE (SUBREG_REG (IN)) == MEM \
539 || (GET_CODE (SUBREG_REG (IN)) == REG \
540 && REGNO (SUBREG_REG (IN)) >= FIRST_PSEUDO_REGISTER)))) \
541 && (((CLASS) == FLOAT_REGS \
542 && ((MODE) == SImode || (MODE) == HImode || (MODE) == QImode)) \
543 || (((MODE) == QImode || (MODE) == HImode) \
544 && unaligned_memory_operand (IN, MODE)))) \
e560f226
RK
545 ? GENERAL_REGS \
546 : ((CLASS) == FLOAT_REGS && GET_CODE (IN) == MEM \
547 && GET_CODE (XEXP (IN, 0)) == AND) ? GENERAL_REGS \
548 : NO_REGS)
1a94ca49
RK
549
550#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS,MODE,OUT) \
551(((GET_CODE (OUT) == MEM \
552 || (GET_CODE (OUT) == REG && REGNO (OUT) >= FIRST_PSEUDO_REGISTER) \
553 || (GET_CODE (OUT) == SUBREG \
554 && (GET_CODE (SUBREG_REG (OUT)) == MEM \
555 || (GET_CODE (SUBREG_REG (OUT)) == REG \
556 && REGNO (SUBREG_REG (OUT)) >= FIRST_PSEUDO_REGISTER)))) \
557 && (((MODE) == HImode || (MODE) == QImode \
558 || ((MODE) == SImode && (CLASS) == FLOAT_REGS)))) \
e560f226
RK
559 ? GENERAL_REGS \
560 : ((CLASS) == FLOAT_REGS && GET_CODE (OUT) == MEM \
561 && GET_CODE (XEXP (OUT, 0)) == AND) ? GENERAL_REGS \
562 : NO_REGS)
1a94ca49
RK
563
564/* If we are copying between general and FP registers, we need a memory
565 location. */
566
567#define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) ((CLASS1) != (CLASS2))
568
acd94aaf
RK
569/* Specify the mode to be used for memory when a secondary memory
570 location is needed. If MODE is floating-point, use it. Otherwise,
571 widen to a word like the default. This is needed because we always
572 store integers in FP registers in quadword format. This whole
573 area is very tricky! */
574#define SECONDARY_MEMORY_NEEDED_MODE(MODE) \
575 (GET_MODE_CLASS (MODE) == MODE_FLOAT ? (MODE) \
576 : mode_for_size (BITS_PER_WORD, GET_MODE_CLASS (MODE), 0))
577
1a94ca49
RK
578/* Return the maximum number of consecutive registers
579 needed to represent mode MODE in a register of class CLASS. */
580
581#define CLASS_MAX_NREGS(CLASS, MODE) \
582 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
583
584/* Define the cost of moving between registers of various classes. Moving
585 between FLOAT_REGS and anything else except float regs is expensive.
586 In fact, we make it quite expensive because we really don't want to
587 do these moves unless it is clearly worth it. Optimizations may
588 reduce the impact of not being able to allocate a pseudo to a
589 hard register. */
590
591#define REGISTER_MOVE_COST(CLASS1, CLASS2) \
592 (((CLASS1) == FLOAT_REGS) == ((CLASS2) == FLOAT_REGS) ? 2 : 20)
593
594/* A C expressions returning the cost of moving data of MODE from a register to
595 or from memory.
596
597 On the Alpha, bump this up a bit. */
598
599#define MEMORY_MOVE_COST(MODE) 6
600
601/* Provide the cost of a branch. Exact meaning under development. */
602#define BRANCH_COST 5
603
604/* Adjust the cost of dependencies. */
605
606#define ADJUST_COST(INSN,LINK,DEP,COST) \
607 (COST) = alpha_adjust_cost (INSN, LINK, DEP, COST)
608\f
609/* Stack layout; function entry, exit and calling. */
610
611/* Define this if pushing a word on the stack
612 makes the stack pointer a smaller address. */
613#define STACK_GROWS_DOWNWARD
614
615/* Define this if the nominal address of the stack frame
616 is at the high-address end of the local variables;
617 that is, each additional local variable allocated
618 goes at a more negative offset in the frame. */
130d2d72 619/* #define FRAME_GROWS_DOWNWARD */
1a94ca49
RK
620
621/* Offset within stack frame to start allocating local variables at.
622 If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
623 first local allocated. Otherwise, it is the offset to the BEGINNING
624 of the first local allocated. */
625
52a69200 626#define STARTING_FRAME_OFFSET 0
1a94ca49
RK
627
628/* If we generate an insn to push BYTES bytes,
629 this says how many the stack pointer really advances by.
630 On Alpha, don't define this because there are no push insns. */
631/* #define PUSH_ROUNDING(BYTES) */
632
633/* Define this if the maximum size of all the outgoing args is to be
634 accumulated and pushed during the prologue. The amount can be
635 found in the variable current_function_outgoing_args_size. */
636#define ACCUMULATE_OUTGOING_ARGS
637
638/* Offset of first parameter from the argument pointer register value. */
639
130d2d72 640#define FIRST_PARM_OFFSET(FNDECL) 0
1a94ca49
RK
641
642/* Definitions for register eliminations.
643
978e8952 644 We have two registers that can be eliminated on the Alpha. First, the
1a94ca49 645 frame pointer register can often be eliminated in favor of the stack
130d2d72
RK
646 pointer register. Secondly, the argument pointer register can always be
647 eliminated; it is replaced with either the stack or frame pointer. */
1a94ca49
RK
648
649/* This is an array of structures. Each structure initializes one pair
650 of eliminable registers. The "from" register number is given first,
651 followed by "to". Eliminations of the same "from" register are listed
652 in order of preference. */
653
52a69200
RK
654#define ELIMINABLE_REGS \
655{{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
656 { ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \
657 { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
658 { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}}
1a94ca49
RK
659
660/* Given FROM and TO register numbers, say whether this elimination is allowed.
661 Frame pointer elimination is automatically handled.
662
130d2d72 663 All eliminations are valid since the cases where FP can't be
1a94ca49
RK
664 eliminated are already handled. */
665
130d2d72 666#define CAN_ELIMINATE(FROM, TO) 1
1a94ca49 667
52a69200
RK
668/* Round up to a multiple of 16 bytes. */
669#define ALPHA_ROUND(X) (((X) + 15) & ~ 15)
670
1a94ca49
RK
671/* Define the offset between two registers, one to be eliminated, and the other
672 its replacement, at the start of a routine. */
673#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
52a69200
RK
674{ if ((FROM) == FRAME_POINTER_REGNUM) \
675 (OFFSET) = (ALPHA_ROUND (current_function_outgoing_args_size) \
676 + alpha_sa_size ()); \
677 else if ((FROM) == ARG_POINTER_REGNUM) \
678 (OFFSET) = (ALPHA_ROUND (current_function_outgoing_args_size) \
679 + alpha_sa_size () \
680 + ALPHA_ROUND (get_frame_size ())); \
1a94ca49
RK
681}
682
683/* Define this if stack space is still allocated for a parameter passed
684 in a register. */
685/* #define REG_PARM_STACK_SPACE */
686
687/* Value is the number of bytes of arguments automatically
688 popped when returning from a subroutine call.
689 FUNTYPE is the data type of the function (as a tree),
690 or for a library call it is an identifier node for the subroutine name.
691 SIZE is the number of bytes of arguments passed on the stack. */
692
693#define RETURN_POPS_ARGS(FUNTYPE,SIZE) 0
694
695/* Define how to find the value returned by a function.
696 VALTYPE is the data type of the value (as a tree).
697 If the precise function being called is known, FUNC is its FUNCTION_DECL;
698 otherwise, FUNC is 0.
699
700 On Alpha the value is found in $0 for integer functions and
701 $f0 for floating-point functions. */
702
703#define FUNCTION_VALUE(VALTYPE, FUNC) \
704 gen_rtx (REG, \
705 ((TREE_CODE (VALTYPE) == INTEGER_TYPE \
706 || TREE_CODE (VALTYPE) == ENUMERAL_TYPE \
707 || TREE_CODE (VALTYPE) == BOOLEAN_TYPE \
708 || TREE_CODE (VALTYPE) == CHAR_TYPE \
709 || TREE_CODE (VALTYPE) == POINTER_TYPE \
710 || TREE_CODE (VALTYPE) == OFFSET_TYPE) \
711 && TYPE_PRECISION (VALTYPE) < BITS_PER_WORD) \
712 ? word_mode : TYPE_MODE (VALTYPE), \
713 TARGET_FPREGS && TREE_CODE (VALTYPE) == REAL_TYPE ? 32 : 0)
714
715/* Define how to find the value returned by a library function
716 assuming the value has mode MODE. */
717
718#define LIBCALL_VALUE(MODE) \
719 gen_rtx (REG, MODE, \
720 TARGET_FPREGS && GET_MODE_CLASS (MODE) == MODE_FLOAT ? 32 : 0)
721
130d2d72
RK
722/* The definition of this macro implies that there are cases where
723 a scalar value cannot be returned in registers.
724
725 For the Alpha, any structure or union type is returned in memory, as
726 are integers whose size is larger than 64 bits. */
727
728#define RETURN_IN_MEMORY(TYPE) \
e14fa9c4 729 (TYPE_MODE (TYPE) == BLKmode \
130d2d72
RK
730 || (TREE_CODE (TYPE) == INTEGER_TYPE && TYPE_PRECISION (TYPE) > 64))
731
1a94ca49
RK
732/* 1 if N is a possible register number for a function value
733 as seen by the caller. */
734
735#define FUNCTION_VALUE_REGNO_P(N) ((N) == 0 || (N) == 32)
736
737/* 1 if N is a possible register number for function argument passing.
738 On Alpha, these are $16-$21 and $f16-$f21. */
739
740#define FUNCTION_ARG_REGNO_P(N) \
741 (((N) >= 16 && (N) <= 21) || ((N) >= 16 + 32 && (N) <= 21 + 32))
742\f
743/* Define a data type for recording info about an argument list
744 during the scan of that argument list. This data type should
745 hold all necessary information about the function itself
746 and about the args processed so far, enough to enable macros
747 such as FUNCTION_ARG to determine where the next arg should go.
748
749 On Alpha, this is a single integer, which is a number of words
750 of arguments scanned so far.
751 Thus 6 or more means all following args should go on the stack. */
752
753#define CUMULATIVE_ARGS int
754
755/* Initialize a variable CUM of type CUMULATIVE_ARGS
756 for a call to a function whose data type is FNTYPE.
757 For a library call, FNTYPE is 0. */
758
759#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME) (CUM) = 0
760
761/* Define intermediate macro to compute the size (in registers) of an argument
762 for the Alpha. */
763
764#define ALPHA_ARG_SIZE(MODE, TYPE, NAMED) \
765((MODE) != BLKmode \
766 ? (GET_MODE_SIZE (MODE) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD \
767 : (int_size_in_bytes (TYPE) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
768
769/* Update the data in CUM to advance over an argument
770 of mode MODE and data type TYPE.
771 (TYPE is null for libcalls where that information may not be available.) */
772
773#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
774 if (MUST_PASS_IN_STACK (MODE, TYPE)) \
775 (CUM) = 6; \
776 else \
777 (CUM) += ALPHA_ARG_SIZE (MODE, TYPE, NAMED)
778
779/* Determine where to put an argument to a function.
780 Value is zero to push the argument on the stack,
781 or a hard register in which to store the argument.
782
783 MODE is the argument's machine mode.
784 TYPE is the data type of the argument (as a tree).
785 This is null for libcalls where that information may
786 not be available.
787 CUM is a variable of type CUMULATIVE_ARGS which gives info about
788 the preceding args and about the function being called.
789 NAMED is nonzero if this argument is a named parameter
790 (otherwise it is an extra parameter matching an ellipsis).
791
792 On Alpha the first 6 words of args are normally in registers
793 and the rest are pushed. */
794
795#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
796((CUM) < 6 && ! MUST_PASS_IN_STACK (MODE, TYPE) \
797 ? gen_rtx(REG, (MODE), \
14d4a67a
RK
798 (CUM) + 16 + ((TARGET_FPREGS \
799 && (GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT \
800 || GET_MODE_CLASS (MODE) == MODE_FLOAT)) \
801 * 32)) \
802 : 0)
1a94ca49 803
1a94ca49
RK
804/* Specify the padding direction of arguments.
805
806 On the Alpha, we must pad upwards in order to be able to pass args in
807 registers. */
808
809#define FUNCTION_ARG_PADDING(MODE, TYPE) upward
810
811/* For an arg passed partly in registers and partly in memory,
812 this is the number of registers used.
813 For args passed entirely in registers or entirely in memory, zero. */
814
815#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
816((CUM) < 6 && 6 < (CUM) + ALPHA_ARG_SIZE (MODE, TYPE, NAMED) \
817 ? 6 - (CUM) : 0)
818
130d2d72
RK
819/* Perform any needed actions needed for a function that is receiving a
820 variable number of arguments.
821
822 CUM is as above.
823
824 MODE and TYPE are the mode and type of the current parameter.
825
826 PRETEND_SIZE is a variable that should be set to the amount of stack
827 that must be pushed by the prolog to pretend that our caller pushed
828 it.
829
830 Normally, this macro will push all remaining incoming registers on the
831 stack and set PRETEND_SIZE to the length of the registers pushed.
832
833 On the Alpha, we allocate space for all 12 arg registers, but only
834 push those that are remaining.
835
836 However, if NO registers need to be saved, don't allocate any space.
837 This is not only because we won't need the space, but because AP includes
838 the current_pretend_args_size and we don't want to mess up any
7a92339b
RK
839 ap-relative addresses already made.
840
841 If we are not to use the floating-point registers, save the integer
842 registers where we would put the floating-point registers. This is
843 not the most efficient way to implement varargs with just one register
844 class, but it isn't worth doing anything more efficient in this rare
845 case. */
846
130d2d72
RK
847
848#define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL) \
849{ if ((CUM) < 6) \
850 { \
851 if (! (NO_RTL)) \
852 { \
853 move_block_from_reg \
854 (16 + CUM, \
855 gen_rtx (MEM, BLKmode, \
856 plus_constant (virtual_incoming_args_rtx, \
7f5bd4ff 857 ((CUM) + 6)* UNITS_PER_WORD)), \
02892e06 858 6 - (CUM), (6 - (CUM)) * UNITS_PER_WORD); \
130d2d72 859 move_block_from_reg \
7a92339b 860 (16 + (TARGET_FPREGS ? 32 : 0) + CUM, \
130d2d72
RK
861 gen_rtx (MEM, BLKmode, \
862 plus_constant (virtual_incoming_args_rtx, \
7f5bd4ff 863 (CUM) * UNITS_PER_WORD)), \
02892e06 864 6 - (CUM), (6 - (CUM)) * UNITS_PER_WORD); \
130d2d72
RK
865 } \
866 PRETEND_SIZE = 12 * UNITS_PER_WORD; \
867 } \
868}
869
1a94ca49
RK
870/* Generate necessary RTL for __builtin_saveregs().
871 ARGLIST is the argument list; see expr.c. */
872extern struct rtx_def *alpha_builtin_saveregs ();
873#define EXPAND_BUILTIN_SAVEREGS(ARGLIST) alpha_builtin_saveregs (ARGLIST)
874
875/* Define the information needed to generate branch and scc insns. This is
876 stored from the compare operation. Note that we can't use "rtx" here
877 since it hasn't been defined! */
878
879extern struct rtx_def *alpha_compare_op0, *alpha_compare_op1;
880extern int alpha_compare_fp_p;
881
882/* This macro produces the initial definition of a function name. On the
03f8c4cc 883 Alpha, we need to save the function name for the prologue and epilogue. */
1a94ca49
RK
884
885extern char *alpha_function_name;
886
887#define ASM_DECLARE_FUNCTION_NAME(FILE,NAME,DECL) \
03f8c4cc 888{ \
1a94ca49
RK
889 alpha_function_name = NAME; \
890}
891
892/* This macro generates the assembly code for function entry.
893 FILE is a stdio stream to output the code to.
894 SIZE is an int: how many units of temporary storage to allocate.
895 Refer to the array `regs_ever_live' to determine which registers
896 to save; `regs_ever_live[I]' is nonzero if register number I
897 is ever used in the function. This macro is responsible for
898 knowing which registers should not be saved even if used. */
899
900#define FUNCTION_PROLOGUE(FILE, SIZE) output_prolog (FILE, SIZE)
901
902/* Output assembler code to FILE to increment profiler label # LABELNO
903 for profiling a function entry. */
904
905#define FUNCTION_PROFILER(FILE, LABELNO)
906
907/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
908 the stack pointer does not matter. The value is tested only in
909 functions that have frame pointers.
910 No definition is equivalent to always zero. */
911
912#define EXIT_IGNORE_STACK 1
913
914/* This macro generates the assembly code for function exit,
915 on machines that need it. If FUNCTION_EPILOGUE is not defined
916 then individual return instructions are generated for each
917 return statement. Args are same as for FUNCTION_PROLOGUE.
918
919 The function epilogue should not depend on the current stack pointer!
920 It should use the frame pointer only. This is mandatory because
921 of alloca; we also take advantage of it to omit stack adjustments
922 before returning. */
923
924#define FUNCTION_EPILOGUE(FILE, SIZE) output_epilog (FILE, SIZE)
925
926\f
927/* Output assembler code for a block containing the constant parts
928 of a trampoline, leaving space for the variable parts.
929
930 The trampoline should set the static chain pointer to value placed
7981384f
RK
931 into the trampoline and should branch to the specified routine.
932 Note that $27 has been set to the address of the trampoline, so we can
933 use it for addressability of the two data items. Trampolines are always
934 aligned to FUNCTION_BOUNDARY, which is 64 bits. */
1a94ca49
RK
935
936#define TRAMPOLINE_TEMPLATE(FILE) \
937{ \
7981384f 938 fprintf (FILE, "\tldq $1,24($27)\n"); \
1a94ca49 939 fprintf (FILE, "\tldq $27,16($27)\n"); \
7981384f
RK
940 fprintf (FILE, "\tjmp $31,($27),0\n"); \
941 fprintf (FILE, "\tnop\n"); \
1a94ca49
RK
942 fprintf (FILE, "\t.quad 0,0\n"); \
943}
944
3a523eeb
RS
945/* Section in which to place the trampoline. On Alpha, instructions
946 may only be placed in a text segment. */
947
948#define TRAMPOLINE_SECTION text_section
949
1a94ca49
RK
950/* Length in units of the trampoline for entering a nested function. */
951
7981384f 952#define TRAMPOLINE_SIZE 32
1a94ca49
RK
953
954/* Emit RTL insns to initialize the variable parts of a trampoline.
955 FNADDR is an RTX for the address of the function's pure code.
956 CXT is an RTX for the static chain value for the function. We assume
957 here that a function will be called many more times than its address
958 is taken (e.g., it might be passed to qsort), so we take the trouble
7981384f
RK
959 to initialize the "hint" field in the JMP insn. Note that the hint
960 field is PC (new) + 4 * bits 13:0. */
1a94ca49
RK
961
962#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
963{ \
964 rtx _temp, _temp1, _addr; \
965 \
966 _addr = memory_address (Pmode, plus_constant ((TRAMP), 16)); \
967 emit_move_insn (gen_rtx (MEM, Pmode, _addr), (FNADDR)); \
7981384f 968 _addr = memory_address (Pmode, plus_constant ((TRAMP), 24)); \
1a94ca49
RK
969 emit_move_insn (gen_rtx (MEM, Pmode, _addr), (CXT)); \
970 \
7981384f
RK
971 _temp = force_operand (plus_constant ((TRAMP), 12), NULL_RTX); \
972 _temp = expand_binop (DImode, sub_optab, (FNADDR), _temp, _temp, 1, \
973 OPTAB_WIDEN); \
974 _temp = expand_shift (RSHIFT_EXPR, Pmode, _temp, \
1a94ca49 975 build_int_2 (2, 0), NULL_RTX, 1); \
7981384f
RK
976 _temp = expand_and (gen_lowpart (SImode, _temp), \
977 GEN_INT (0x3fff), 0); \
1a94ca49 978 \
7981384f 979 _addr = memory_address (SImode, plus_constant ((TRAMP), 8)); \
1a94ca49 980 _temp1 = force_reg (SImode, gen_rtx (MEM, SImode, _addr)); \
7981384f 981 _temp1 = expand_and (_temp1, GEN_INT (0xffffc000), NULL_RTX); \
1a94ca49
RK
982 _temp1 = expand_binop (SImode, ior_optab, _temp1, _temp, _temp1, 1, \
983 OPTAB_WIDEN); \
984 \
985 emit_move_insn (gen_rtx (MEM, SImode, _addr), _temp1); \
7981384f
RK
986 \
987 emit_library_call (gen_rtx (SYMBOL_REF, Pmode, \
988 "__enable_execute_stack"), \
989 0, VOIDmode, 1,_addr, Pmode); \
990 \
991 emit_insn (gen_rtx (UNSPEC_VOLATILE, VOIDmode, \
992 gen_rtvec (1, const0_rtx), 0)); \
993}
994
995/* Attempt to turn on access permissions for the stack. */
996
997#define TRANSFER_FROM_TRAMPOLINE \
998 \
999void \
1000__enable_execute_stack (addr) \
1001 void *addr; \
1002{ \
1003 long size = getpagesize (); \
1004 long mask = ~(size-1); \
1005 char *page = (char *) (((long) addr) & mask); \
1006 char *end = (char *) ((((long) (addr + TRAMPOLINE_SIZE)) & mask) + size); \
1007 \
1008 /* 7 is PROT_READ | PROT_WRITE | PROT_EXEC */ \
1009 if (mprotect (page, end - page, 7) < 0) \
1010 perror ("mprotect of trampoline code"); \
1a94ca49
RK
1011}
1012\f
1013/* Addressing modes, and classification of registers for them. */
1014
1015/* #define HAVE_POST_INCREMENT */
1016/* #define HAVE_POST_DECREMENT */
1017
1018/* #define HAVE_PRE_DECREMENT */
1019/* #define HAVE_PRE_INCREMENT */
1020
1021/* Macros to check register numbers against specific register classes. */
1022
1023/* These assume that REGNO is a hard or pseudo reg number.
1024 They give nonzero only if REGNO is a hard reg of the suitable class
1025 or a pseudo reg currently allocated to a suitable hard reg.
1026 Since they use reg_renumber, they are safe only once reg_renumber
1027 has been allocated, which happens in local-alloc.c. */
1028
1029#define REGNO_OK_FOR_INDEX_P(REGNO) 0
1030#define REGNO_OK_FOR_BASE_P(REGNO) \
52a69200
RK
1031((REGNO) < 32 || (unsigned) reg_renumber[REGNO] < 32 \
1032 || (REGNO) == 63 || reg_renumber[REGNO] == 63)
1a94ca49
RK
1033\f
1034/* Maximum number of registers that can appear in a valid memory address. */
1035#define MAX_REGS_PER_ADDRESS 1
1036
1037/* Recognize any constant value that is a valid address. For the Alpha,
1038 there are only constants none since we want to use LDA to load any
1039 symbolic addresses into registers. */
1040
1041#define CONSTANT_ADDRESS_P(X) \
1042 (GET_CODE (X) == CONST_INT \
1043 && (unsigned HOST_WIDE_INT) (INTVAL (X) + 0x8000) < 0x10000)
1044
1045/* Include all constant integers and constant doubles, but not
1046 floating-point, except for floating-point zero. */
1047
1048#define LEGITIMATE_CONSTANT_P(X) \
1049 (GET_MODE_CLASS (GET_MODE (X)) != MODE_FLOAT \
1050 || (X) == CONST0_RTX (GET_MODE (X)))
1051
1052/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
1053 and check its validity for a certain class.
1054 We have two alternate definitions for each of them.
1055 The usual definition accepts all pseudo regs; the other rejects
1056 them unless they have been allocated suitable hard regs.
1057 The symbol REG_OK_STRICT causes the latter definition to be used.
1058
1059 Most source files want to accept pseudo regs in the hope that
1060 they will get allocated to the class that the insn wants them to be in.
1061 Source files for reload pass need to be strict.
1062 After reload, it makes no difference, since pseudo regs have
1063 been eliminated by then. */
1064
1065#ifndef REG_OK_STRICT
1066
1067/* Nonzero if X is a hard reg that can be used as an index
1068 or if it is a pseudo reg. */
1069#define REG_OK_FOR_INDEX_P(X) 0
1070/* Nonzero if X is a hard reg that can be used as a base reg
1071 or if it is a pseudo reg. */
1072#define REG_OK_FOR_BASE_P(X) \
52a69200 1073 (REGNO (X) < 32 || REGNO (X) == 63 || REGNO (X) >= FIRST_PSEUDO_REGISTER)
1a94ca49
RK
1074
1075#else
1076
1077/* Nonzero if X is a hard reg that can be used as an index. */
1078#define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
1079/* Nonzero if X is a hard reg that can be used as a base reg. */
1080#define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
1081
1082#endif
1083\f
1084/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
1085 that is a valid memory address for an instruction.
1086 The MODE argument is the machine mode for the MEM expression
1087 that wants to use this address.
1088
1089 For Alpha, we have either a constant address or the sum of a register
1090 and a constant address, or just a register. For DImode, any of those
1091 forms can be surrounded with an AND that clear the low-order three bits;
1092 this is an "unaligned" access.
1093
1094 We also allow a SYMBOL_REF that is the name of the current function as
1095 valid address. This is for CALL_INSNs. It cannot be used in any other
1096 context.
1097
1098 First define the basic valid address. */
1099
1100#define GO_IF_LEGITIMATE_SIMPLE_ADDRESS(MODE, X, ADDR) \
1101{ if (REG_P (X) && REG_OK_FOR_BASE_P (X)) \
1102 goto ADDR; \
1103 if (CONSTANT_ADDRESS_P (X)) \
1104 goto ADDR; \
1105 if (GET_CODE (X) == PLUS \
1106 && REG_P (XEXP (X, 0)) \
1107 && REG_OK_FOR_BASE_P (XEXP (X, 0)) \
1108 && CONSTANT_ADDRESS_P (XEXP (X, 1))) \
1109 goto ADDR; \
1110}
1111
1112/* Now accept the simple address, or, for DImode only, an AND of a simple
1113 address that turns off the low three bits. */
1114
1115extern char *current_function_name;
1116
1117#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
1118{ GO_IF_LEGITIMATE_SIMPLE_ADDRESS (MODE, X, ADDR); \
1119 if ((MODE) == DImode \
1120 && GET_CODE (X) == AND \
1121 && GET_CODE (XEXP (X, 1)) == CONST_INT \
1122 && INTVAL (XEXP (X, 1)) == -8) \
1123 GO_IF_LEGITIMATE_SIMPLE_ADDRESS (MODE, XEXP (X, 0), ADDR); \
1124 if ((MODE) == Pmode && GET_CODE (X) == SYMBOL_REF \
1125 && ! strcmp (XSTR (X, 0), current_function_name)) \
1126 goto ADDR; \
1127}
1128
1129/* Try machine-dependent ways of modifying an illegitimate address
1130 to be legitimate. If we find one, return the new, valid address.
1131 This macro is used in only one place: `memory_address' in explow.c.
1132
1133 OLDX is the address as it was before break_out_memory_refs was called.
1134 In some cases it is useful to look at this to decide what needs to be done.
1135
1136 MODE and WIN are passed so that this macro can use
1137 GO_IF_LEGITIMATE_ADDRESS.
1138
1139 It is always safe for this macro to do nothing. It exists to recognize
1140 opportunities to optimize the output.
1141
1142 For the Alpha, there are three cases we handle:
1143
1144 (1) If the address is (plus reg const_int) and the CONST_INT is not a
1145 valid offset, compute the high part of the constant and add it to the
1146 register. Then our address is (plus temp low-part-const).
1147 (2) If the address is (const (plus FOO const_int)), find the low-order
1148 part of the CONST_INT. Then load FOO plus any high-order part of the
1149 CONST_INT into a register. Our address is (plus reg low-part-const).
1150 This is done to reduce the number of GOT entries.
1151 (3) If we have a (plus reg const), emit the load as in (2), then add
1152 the two registers, and finally generate (plus reg low-part-const) as
1153 our address. */
1154
1155#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) \
1156{ if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == REG \
1157 && GET_CODE (XEXP (X, 1)) == CONST_INT \
1158 && ! CONSTANT_ADDRESS_P (XEXP (X, 1))) \
1159 { \
1160 HOST_WIDE_INT val = INTVAL (XEXP (X, 1)); \
1161 HOST_WIDE_INT lowpart = (val & 0xffff) - 2 * (val & 0x8000); \
1162 HOST_WIDE_INT highpart = val - lowpart; \
1163 rtx high = GEN_INT (highpart); \
1164 rtx temp = expand_binop (Pmode, add_optab, XEXP (x, 0), \
80f251fe 1165 high, NULL_RTX, 1, OPTAB_LIB_WIDEN); \
1a94ca49
RK
1166 \
1167 (X) = plus_constant (temp, lowpart); \
1168 goto WIN; \
1169 } \
1170 else if (GET_CODE (X) == CONST \
1171 && GET_CODE (XEXP (X, 0)) == PLUS \
1172 && GET_CODE (XEXP (XEXP (X, 0), 1)) == CONST_INT) \
1173 { \
1174 HOST_WIDE_INT val = INTVAL (XEXP (XEXP (X, 0), 1)); \
1175 HOST_WIDE_INT lowpart = (val & 0xffff) - 2 * (val & 0x8000); \
1176 HOST_WIDE_INT highpart = val - lowpart; \
1177 rtx high = XEXP (XEXP (X, 0), 0); \
1178 \
1179 if (highpart) \
1180 high = plus_constant (high, highpart); \
1181 \
1182 (X) = plus_constant (force_reg (Pmode, high), lowpart); \
1183 goto WIN; \
1184 } \
1185 else if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == REG \
1186 && GET_CODE (XEXP (X, 1)) == CONST \
1187 && GET_CODE (XEXP (XEXP (X, 1), 0)) == PLUS \
1188 && GET_CODE (XEXP (XEXP (XEXP (X, 1), 0), 1)) == CONST_INT) \
1189 { \
1190 HOST_WIDE_INT val = INTVAL (XEXP (XEXP (XEXP (X, 1), 0), 1)); \
1191 HOST_WIDE_INT lowpart = (val & 0xffff) - 2 * (val & 0x8000); \
1192 HOST_WIDE_INT highpart = val - lowpart; \
1193 rtx high = XEXP (XEXP (XEXP (X, 1), 0), 0); \
1194 \
1195 if (highpart) \
1196 high = plus_constant (high, highpart); \
1197 \
1198 high = expand_binop (Pmode, add_optab, XEXP (X, 0), \
1199 force_reg (Pmode, high), \
80f251fe 1200 high, 1, OPTAB_LIB_WIDEN); \
1a94ca49
RK
1201 (X) = plus_constant (high, lowpart); \
1202 goto WIN; \
1203 } \
1204}
1205
1206/* Go to LABEL if ADDR (a legitimate address expression)
1207 has an effect that depends on the machine mode it is used for.
1208 On the Alpha this is true only for the unaligned modes. We can
1209 simplify this test since we know that the address must be valid. */
1210
1211#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
1212{ if (GET_CODE (ADDR) == AND) goto LABEL; }
1213
1214/* Compute the cost of an address. For the Alpha, all valid addresses are
1215 the same cost. */
1216
1217#define ADDRESS_COST(X) 0
1218
1219/* Define this if some processing needs to be done immediately before
1220 emitting code for an insn. */
1221
1222/* #define FINAL_PRESCAN_INSN(INSN,OPERANDS,NOPERANDS) */
1223\f
1224/* Specify the machine mode that this machine uses
1225 for the index in the tablejump instruction. */
1226#define CASE_VECTOR_MODE SImode
1227
1228/* Define this if the tablejump instruction expects the table
1229 to contain offsets from the address of the table.
1230 Do not define this if the table should contain absolute addresses. */
1231/* #define CASE_VECTOR_PC_RELATIVE */
1232
1233/* Specify the tree operation to be used to convert reals to integers. */
1234#define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR
1235
1236/* This is the kind of divide that is easiest to do in the general case. */
1237#define EASY_DIV_EXPR TRUNC_DIV_EXPR
1238
1239/* Define this as 1 if `char' should by default be signed; else as 0. */
1240#define DEFAULT_SIGNED_CHAR 1
1241
1242/* This flag, if defined, says the same insns that convert to a signed fixnum
1243 also convert validly to an unsigned one.
1244
1245 We actually lie a bit here as overflow conditions are different. But
1246 they aren't being checked anyway. */
1247
1248#define FIXUNS_TRUNC_LIKE_FIX_TRUNC
1249
1250/* Max number of bytes we can move to or from memory
1251 in one reasonably fast instruction. */
1252
1253#define MOVE_MAX 8
1254
1255/* Largest number of bytes of an object that can be placed in a register.
1256 On the Alpha we have plenty of registers, so use TImode. */
1257#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TImode)
1258
1259/* Nonzero if access to memory by bytes is no faster than for words.
1260 Also non-zero if doing byte operations (specifically shifts) in registers
1261 is undesirable.
1262
1263 On the Alpha, we want to not use the byte operation and instead use
1264 masking operations to access fields; these will save instructions. */
1265
1266#define SLOW_BYTE_ACCESS 1
1267
9a63901f
RK
1268/* Define if operations between registers always perform the operation
1269 on the full register even if a narrower mode is specified. */
1270#define WORD_REGISTER_OPERATIONS
1271
1272/* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
1273 will either zero-extend or sign-extend. The value of this macro should
1274 be the code that says which one of the two operations is implicitly
1275 done, NIL if none. */
1276#define LOAD_EXTEND_OP(MODE) SIGN_EXTEND
1a94ca49 1277
225211e2
RK
1278/* Define if loading short immediate values into registers sign extends. */
1279#define SHORT_IMMEDIATES_SIGN_EXTEND
1280
1a94ca49
RK
1281/* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
1282 is done just by pretending it is already truncated. */
1283#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
1284
1285/* We assume that the store-condition-codes instructions store 0 for false
1286 and some other value for true. This is the value stored for true. */
1287
1288#define STORE_FLAG_VALUE 1
1289
1290/* Define the value returned by a floating-point comparison instruction. */
1291
1292#define FLOAT_STORE_FLAG_VALUE 0.5
1293
35bb77fd
RK
1294/* Canonicalize a comparison from one we don't have to one we do have. */
1295
1296#define CANONICALIZE_COMPARISON(CODE,OP0,OP1) \
1297 do { \
1298 if (((CODE) == GE || (CODE) == GT || (CODE) == GEU || (CODE) == GTU) \
1299 && (GET_CODE (OP1) == REG || (OP1) == const0_rtx)) \
1300 { \
1301 rtx tem = (OP0); \
1302 (OP0) = (OP1); \
1303 (OP1) = tem; \
1304 (CODE) = swap_condition (CODE); \
1305 } \
1306 if (((CODE) == LT || (CODE) == LTU) \
1307 && GET_CODE (OP1) == CONST_INT && INTVAL (OP1) == 256) \
1308 { \
1309 (CODE) = (CODE) == LT ? LE : LEU; \
1310 (OP1) = GEN_INT (255); \
1311 } \
1312 } while (0)
1313
1a94ca49
RK
1314/* Specify the machine mode that pointers have.
1315 After generation of rtl, the compiler makes no further distinction
1316 between pointers and any other objects of this machine mode. */
1317#define Pmode DImode
1318
1319/* Mode of a function address in a call instruction (for indexing purposes). */
1320
1321#define FUNCTION_MODE Pmode
1322
1323/* Define this if addresses of constant functions
1324 shouldn't be put through pseudo regs where they can be cse'd.
1325 Desirable on machines where ordinary constants are expensive
1326 but a CALL with constant address is cheap.
1327
1328 We define this on the Alpha so that gen_call and gen_call_value
1329 get to see the SYMBOL_REF (for the hint field of the jsr). It will
1330 then copy it into a register, thus actually letting the address be
1331 cse'ed. */
1332
1333#define NO_FUNCTION_CSE
1334
d969caf8 1335/* Define this to be nonzero if shift instructions ignore all but the low-order
1a94ca49 1336 few bits. */
d969caf8 1337#define SHIFT_COUNT_TRUNCATED 1
1a94ca49 1338
d721b776
RK
1339/* Use atexit for static constructors/destructors, instead of defining
1340 our own exit function. */
1341#define HAVE_ATEXIT
1342
1a94ca49
RK
1343/* Compute the cost of computing a constant rtl expression RTX
1344 whose rtx-code is CODE. The body of this macro is a portion
1345 of a switch statement. If the code is computed here,
1346 return it with a return statement. Otherwise, break from the switch.
1347
8b7b2e36
RK
1348 If this is an 8-bit constant, return zero since it can be used
1349 nearly anywhere with no cost. If it is a valid operand for an
1350 ADD or AND, likewise return 0 if we know it will be used in that
1351 context. Otherwise, return 2 since it might be used there later.
1352 All other constants take at least two insns. */
1a94ca49
RK
1353
1354#define CONST_COSTS(RTX,CODE,OUTER_CODE) \
1355 case CONST_INT: \
06eb8e92 1356 if (INTVAL (RTX) >= 0 && INTVAL (RTX) < 256) \
8b7b2e36 1357 return 0; \
1a94ca49 1358 case CONST_DOUBLE: \
8b7b2e36
RK
1359 if (((OUTER_CODE) == PLUS && add_operand (RTX, VOIDmode)) \
1360 || ((OUTER_CODE) == AND && and_operand (RTX, VOIDmode))) \
1361 return 0; \
1362 else if (add_operand (RTX, VOIDmode) || and_operand (RTX, VOIDmode)) \
1363 return 2; \
1364 else \
1365 return COSTS_N_INSNS (2); \
1a94ca49
RK
1366 case CONST: \
1367 case SYMBOL_REF: \
1368 case LABEL_REF: \
8b7b2e36 1369 return COSTS_N_INSNS (3);
1a94ca49
RK
1370
1371/* Provide the costs of a rtl expression. This is in the body of a
1372 switch on CODE. */
1373
1374#define RTX_COSTS(X,CODE,OUTER_CODE) \
1375 case PLUS: \
1376 case MINUS: \
1377 if (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT) \
1378 return COSTS_N_INSNS (6); \
b49e978e
RK
1379 else if (GET_CODE (XEXP (X, 0)) == MULT \
1380 && const48_operand (XEXP (XEXP (X, 0), 1), VOIDmode)) \
a5da0afe
RK
1381 return (2 + rtx_cost (XEXP (XEXP (X, 0), 0), OUTER_CODE) \
1382 + rtx_cost (XEXP (X, 1), OUTER_CODE)); \
1a94ca49
RK
1383 break; \
1384 case MULT: \
1385 if (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT) \
1386 return COSTS_N_INSNS (6); \
919ea6a5 1387 return COSTS_N_INSNS (23); \
b49e978e
RK
1388 case ASHIFT: \
1389 if (GET_CODE (XEXP (X, 1)) == CONST_INT \
1390 && INTVAL (XEXP (X, 1)) <= 3) \
1391 break; \
1392 /* ... fall through ... */ \
1393 case ASHIFTRT: case LSHIFTRT: case IF_THEN_ELSE: \
1394 return COSTS_N_INSNS (2); \
1a94ca49
RK
1395 case DIV: \
1396 case UDIV: \
1397 case MOD: \
1398 case UMOD: \
1399 if (GET_MODE (X) == SFmode) \
1400 return COSTS_N_INSNS (34); \
1401 else if (GET_MODE (X) == DFmode) \
1402 return COSTS_N_INSNS (63); \
1403 else \
1404 return COSTS_N_INSNS (70); \
1405 case MEM: \
1406 return COSTS_N_INSNS (3);
1407\f
1408/* Control the assembler format that we output. */
1409
1410/* Output at beginning of assembler file. */
1411
1412#define ASM_FILE_START(FILE) \
03f8c4cc 1413{ \
130d2d72
RK
1414 alpha_write_verstamp (FILE); \
1415 fprintf (FILE, "\t.set noreorder\n"); \
1a94ca49 1416 fprintf (FILE, "\t.set noat\n"); \
03f8c4cc 1417 ASM_OUTPUT_SOURCE_FILENAME (FILE, main_input_filename); \
1a94ca49
RK
1418}
1419
1420/* Output to assembler file text saying following lines
1421 may contain character constants, extra white space, comments, etc. */
1422
1423#define ASM_APP_ON ""
1424
1425/* Output to assembler file text saying following lines
1426 no longer contain unusual constructs. */
1427
1428#define ASM_APP_OFF ""
1429
1430#define TEXT_SECTION_ASM_OP ".text"
1431
1432/* Output before read-only data. */
1433
1434#define READONLY_DATA_SECTION_ASM_OP ".rdata"
1435
1436/* Output before writable data. */
1437
1438#define DATA_SECTION_ASM_OP ".data"
1439
1440/* Define an extra section for read-only data, a routine to enter it, and
1441 indicate that it is for read-only data. */
1442
1443#define EXTRA_SECTIONS readonly_data
1444
1445#define EXTRA_SECTION_FUNCTIONS \
1446void \
1447literal_section () \
1448{ \
1449 if (in_section != readonly_data) \
1450 { \
1451 fprintf (asm_out_file, "%s\n", READONLY_DATA_SECTION_ASM_OP); \
1452 in_section = readonly_data; \
1453 } \
1454} \
1455
1456#define READONLY_DATA_SECTION literal_section
1457
130d2d72
RK
1458/* If we are referencing a function that is static or is known to be
1459 in this file, make the SYMBOL_REF special. We can use this to see
1460 indicate that we can branch to this function without setting PV or
1461 restoring GP. */
1462
1463#define ENCODE_SECTION_INFO(DECL) \
1464 if (TREE_CODE (DECL) == FUNCTION_DECL \
1465 && (TREE_ASM_WRITTEN (DECL) || ! TREE_PUBLIC (DECL))) \
1466 SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;
1467
1a94ca49
RK
1468/* How to refer to registers in assembler output.
1469 This sequence is indexed by compiler's hard-register-number (see above). */
1470
1471#define REGISTER_NAMES \
1472{"$0", "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", \
1473 "$9", "$10", "$11", "$12", "$13", "$14", "$15", \
1474 "$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23", \
130d2d72 1475 "$24", "$25", "$26", "$27", "$28", "$29", "$30", "AP", \
1a94ca49
RK
1476 "$f0", "$f1", "$f2", "$f3", "$f4", "$f5", "$f6", "$f7", "$f8", \
1477 "$f9", "$f10", "$f11", "$f12", "$f13", "$f14", "$f15", \
1478 "$f16", "$f17", "$f18", "$f19", "$f20", "$f21", "$f22", "$f23",\
52a69200 1479 "$f24", "$f25", "$f26", "$f27", "$f28", "$f29", "$f30", "FP"}
1a94ca49
RK
1480
1481/* How to renumber registers for dbx and gdb. */
1482
1483#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
1484
1485/* This is how to output the definition of a user-level label named NAME,
1486 such as the label on a static function or variable NAME. */
1487
1488#define ASM_OUTPUT_LABEL(FILE,NAME) \
1489 do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
1490
1491/* This is how to output a command to make the user-level label named NAME
1492 defined for reference from other files. */
1493
1494#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
1495 do { fputs ("\t.globl ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0)
1496
1497/* This is how to output a reference to a user-level label named NAME.
1498 `assemble_name' uses this. */
1499
1500#define ASM_OUTPUT_LABELREF(FILE,NAME) \
1501 fprintf (FILE, "%s", NAME)
1502
1503/* This is how to output an internal numbered label where
1504 PREFIX is the class of label and NUM is the number within the class. */
1505
1506#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
1507 if ((PREFIX)[0] == 'L') \
1508 fprintf (FILE, "$%s%d:\n", & (PREFIX)[1], NUM + 32); \
1509 else \
1510 fprintf (FILE, "%s%d:\n", PREFIX, NUM);
1511
1512/* This is how to output a label for a jump table. Arguments are the same as
1513 for ASM_OUTPUT_INTERNAL_LABEL, except the insn for the jump table is
1514 passed. */
1515
1516#define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \
1517{ ASM_OUTPUT_ALIGN (FILE, 2); ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); }
1518
1519/* This is how to store into the string LABEL
1520 the symbol_ref name of an internal numbered label where
1521 PREFIX is the class of label and NUM is the number within the class.
1522 This is suitable for output with `assemble_name'. */
1523
1524#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
1525 if ((PREFIX)[0] == 'L') \
1526 sprintf (LABEL, "*$%s%d", & (PREFIX)[1], NUM + 32); \
1527 else \
1528 sprintf (LABEL, "*%s%d", PREFIX, NUM)
1529
1530/* This is how to output an assembler line defining a `double' constant. */
1531
e99300f1
RS
1532#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
1533 { \
1534 if (REAL_VALUE_ISINF (VALUE) \
1535 || REAL_VALUE_ISNAN (VALUE) \
1536 || REAL_VALUE_MINUS_ZERO (VALUE)) \
1537 { \
1538 long t[2]; \
1539 REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \
1540 fprintf (FILE, "\t.quad 0x%lx%08lx\n", \
1541 t[1] & 0xffffffff, t[0] & 0xffffffff); \
1542 } \
1543 else \
1544 { \
1545 char str[30]; \
1546 REAL_VALUE_TO_DECIMAL (VALUE, "%.20e", str); \
1547 fprintf (FILE, "\t.t_floating %s\n", str); \
1548 } \
1549 }
1a94ca49
RK
1550
1551/* This is how to output an assembler line defining a `float' constant. */
1552
e99300f1
RS
1553#define ASM_OUTPUT_FLOAT(FILE,VALUE) \
1554 { \
1555 if (REAL_VALUE_ISINF (VALUE) \
1556 || REAL_VALUE_ISNAN (VALUE) \
1557 || REAL_VALUE_MINUS_ZERO (VALUE)) \
1558 { \
1559 long t; \
1560 REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \
1561 fprintf (FILE, "\t.long 0x%lx\n", t & 0xffffffff); \
1562 } \
1563 else \
1564 { \
1565 char str[30]; \
1566 REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \
1567 fprintf (FILE, "\t.s_floating %s\n", str); \
1568 } \
1569 }
2700ac93 1570
1a94ca49
RK
1571/* This is how to output an assembler line defining an `int' constant. */
1572
1573#define ASM_OUTPUT_INT(FILE,VALUE) \
45c45e79
RK
1574 fprintf (FILE, "\t.long %d\n", \
1575 (GET_CODE (VALUE) == CONST_INT \
1576 ? INTVAL (VALUE) & 0xffffffff : (abort (), 0)))
1a94ca49
RK
1577
1578/* This is how to output an assembler line defining a `long' constant. */
1579
1580#define ASM_OUTPUT_DOUBLE_INT(FILE,VALUE) \
1581( fprintf (FILE, "\t.quad "), \
1582 output_addr_const (FILE, (VALUE)), \
1583 fprintf (FILE, "\n"))
1584
1585/* Likewise for `char' and `short' constants. */
1586
1587#define ASM_OUTPUT_SHORT(FILE,VALUE) \
690ef02f 1588 fprintf (FILE, "\t.word %d\n", \
45c45e79
RK
1589 (GET_CODE (VALUE) == CONST_INT \
1590 ? INTVAL (VALUE) & 0xffff : (abort (), 0)))
1a94ca49
RK
1591
1592#define ASM_OUTPUT_CHAR(FILE,VALUE) \
45c45e79
RK
1593 fprintf (FILE, "\t.byte %d\n", \
1594 (GET_CODE (VALUE) == CONST_INT \
1595 ? INTVAL (VALUE) & 0xff : (abort (), 0)))
1a94ca49
RK
1596
1597/* We use the default ASCII-output routine, except that we don't write more
1598 than 50 characters since the assembler doesn't support very long lines. */
1599
1600#define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \
1601 do { \
1602 FILE *_hide_asm_out_file = (MYFILE); \
1603 unsigned char *_hide_p = (unsigned char *) (MYSTRING); \
1604 int _hide_thissize = (MYLENGTH); \
1605 int _size_so_far = 0; \
1606 { \
1607 FILE *asm_out_file = _hide_asm_out_file; \
1608 unsigned char *p = _hide_p; \
1609 int thissize = _hide_thissize; \
1610 int i; \
1611 fprintf (asm_out_file, "\t.ascii \""); \
1612 \
1613 for (i = 0; i < thissize; i++) \
1614 { \
1615 register int c = p[i]; \
1616 \
1617 if (_size_so_far ++ > 50 && i < thissize - 4) \
1618 _size_so_far = 0, fprintf (asm_out_file, "\"\n\t.ascii \""); \
1619 \
1620 if (c == '\"' || c == '\\') \
1621 putc ('\\', asm_out_file); \
1622 if (c >= ' ' && c < 0177) \
1623 putc (c, asm_out_file); \
1624 else \
1625 { \
1626 fprintf (asm_out_file, "\\%o", c); \
1627 /* After an octal-escape, if a digit follows, \
1628 terminate one string constant and start another. \
1629 The Vax assembler fails to stop reading the escape \
1630 after three digits, so this is the only way we \
1631 can get it to parse the data properly. */ \
1632 if (i < thissize - 1 \
1633 && p[i + 1] >= '0' && p[i + 1] <= '9') \
1634 fprintf (asm_out_file, "\"\n\t.ascii \""); \
1635 } \
1636 } \
1637 fprintf (asm_out_file, "\"\n"); \
1638 } \
1639 } \
1640 while (0)
52a69200 1641
1a94ca49
RK
1642/* This is how to output an insn to push a register on the stack.
1643 It need not be very fast code. */
1644
1645#define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \
1646 fprintf (FILE, "\tsubq $30,8,$30\n\tst%s $%s%d,0($30)\n", \
1647 (REGNO) > 32 ? "t" : "q", (REGNO) > 32 ? "f" : "", \
1648 (REGNO) & 31);
1649
1650/* This is how to output an insn to pop a register from the stack.
1651 It need not be very fast code. */
1652
1653#define ASM_OUTPUT_REG_POP(FILE,REGNO) \
1654 fprintf (FILE, "\tld%s $%s%d,0($30)\n\taddq $30,8,$30\n", \
1655 (REGNO) > 32 ? "t" : "q", (REGNO) > 32 ? "f" : "", \
1656 (REGNO) & 31);
1657
1658/* This is how to output an assembler line for a numeric constant byte. */
1659
1660#define ASM_OUTPUT_BYTE(FILE,VALUE) \
45c45e79 1661 fprintf (FILE, "\t.byte 0x%x\n", (VALUE) & 0xff)
1a94ca49
RK
1662
1663/* This is how to output an element of a case-vector that is absolute. */
1664
1665#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
1666 fprintf (FILE, "\t.gprel32 $%d\n", (VALUE) + 32)
1667
1668/* This is how to output an element of a case-vector that is relative.
1669 (Alpha does not use such vectors, but we must define this macro anyway.) */
1670
1671#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) abort ()
1672
1673/* This is how to output an assembler line
1674 that says to advance the location counter
1675 to a multiple of 2**LOG bytes. */
1676
1677#define ASM_OUTPUT_ALIGN(FILE,LOG) \
1678 if ((LOG) != 0) \
1679 fprintf (FILE, "\t.align %d\n", LOG);
1680
1681/* This is how to advance the location counter by SIZE bytes. */
1682
1683#define ASM_OUTPUT_SKIP(FILE,SIZE) \
1684 fprintf (FILE, "\t.space %d\n", (SIZE))
1685
1686/* This says how to output an assembler line
1687 to define a global common symbol. */
1688
1689#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
1690( fputs ("\t.comm ", (FILE)), \
1691 assemble_name ((FILE), (NAME)), \
1692 fprintf ((FILE), ",%d\n", (SIZE)))
1693
1694/* This says how to output an assembler line
1695 to define a local common symbol. */
1696
1697#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE,ROUNDED) \
1698( fputs ("\t.lcomm ", (FILE)), \
1699 assemble_name ((FILE), (NAME)), \
1700 fprintf ((FILE), ",%d\n", (SIZE)))
1701
1702/* Store in OUTPUT a string (made with alloca) containing
1703 an assembler-name for a local static variable named NAME.
1704 LABELNO is an integer which is different for each call. */
1705
1706#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
1707( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \
1708 sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)))
1709
1710/* Define the parentheses used to group arithmetic operations
1711 in assembler code. */
1712
1713#define ASM_OPEN_PAREN "("
1714#define ASM_CLOSE_PAREN ")"
1715
1716/* Define results of standard character escape sequences. */
1717#define TARGET_BELL 007
1718#define TARGET_BS 010
1719#define TARGET_TAB 011
1720#define TARGET_NEWLINE 012
1721#define TARGET_VT 013
1722#define TARGET_FF 014
1723#define TARGET_CR 015
1724
1725/* Print operand X (an rtx) in assembler syntax to file FILE.
1726 CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
1727 For `%' followed by punctuation, CODE is the punctuation and X is null. */
1728
1729#define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
1730
1731/* Determine which codes are valid without a following integer. These must
1732 not be alphabetic. */
1733
1734#define PRINT_OPERAND_PUNCT_VALID_P(CODE) 0
1735\f
1736/* Print a memory address as an operand to reference that memory location. */
1737
1738#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
1739{ rtx addr = (ADDR); \
1740 int basereg = 31; \
1741 HOST_WIDE_INT offset = 0; \
1742 \
1743 if (GET_CODE (addr) == AND) \
1744 addr = XEXP (addr, 0); \
1745 \
1746 if (GET_CODE (addr) == REG) \
1747 basereg = REGNO (addr); \
1748 else if (GET_CODE (addr) == CONST_INT) \
1749 offset = INTVAL (addr); \
1750 else if (GET_CODE (addr) == PLUS \
1751 && GET_CODE (XEXP (addr, 0)) == REG \
1752 && GET_CODE (XEXP (addr, 1)) == CONST_INT) \
1753 basereg = REGNO (XEXP (addr, 0)), offset = INTVAL (XEXP (addr, 1)); \
1754 else \
1755 abort (); \
1756 \
1757 fprintf (FILE, "%d($%d)", offset, basereg); \
1758}
1759/* Define the codes that are matched by predicates in alpha.c. */
1760
1761#define PREDICATE_CODES \
1762 {"reg_or_0_operand", {SUBREG, REG, CONST_INT}}, \
4a1d2a46 1763 {"reg_or_6bit_operand", {SUBREG, REG, CONST_INT}}, \
1a94ca49
RK
1764 {"reg_or_8bit_operand", {SUBREG, REG, CONST_INT}}, \
1765 {"reg_or_cint_operand", {SUBREG, REG, CONST_INT}}, \
1766 {"add_operand", {SUBREG, REG, CONST_INT}}, \
1767 {"sext_add_operand", {SUBREG, REG, CONST_INT}}, \
1768 {"const48_operand", {CONST_INT}}, \
1769 {"and_operand", {SUBREG, REG, CONST_INT}}, \
8395de26 1770 {"or_operand", {SUBREG, REG, CONST_INT}}, \
1a94ca49
RK
1771 {"mode_mask_operand", {CONST_INT}}, \
1772 {"mul8_operand", {CONST_INT}}, \
1773 {"mode_width_operand", {CONST_INT}}, \
1774 {"reg_or_fp0_operand", {SUBREG, REG, CONST_DOUBLE}}, \
1775 {"alpha_comparison_operator", {EQ, LE, LT, LEU, LTU}}, \
1776 {"signed_comparison_operator", {EQ, NE, LE, LT, GE, GT}}, \
f8634644 1777 {"divmod_operator", {DIV, MOD, UDIV, UMOD}}, \
1a94ca49 1778 {"fp0_operand", {CONST_DOUBLE}}, \
f8634644 1779 {"current_file_function_operand", {SYMBOL_REF}}, \
1a94ca49
RK
1780 {"input_operand", {SUBREG, REG, MEM, CONST_INT, CONST_DOUBLE, \
1781 SYMBOL_REF, CONST, LABEL_REF}}, \
1782 {"aligned_memory_operand", {MEM}}, \
1783 {"unaligned_memory_operand", {MEM}}, \
1784 {"any_memory_operand", {MEM}},
03f8c4cc 1785\f
34fa88ab
RK
1786/* Tell collect that the object format is ECOFF. */
1787#define OBJECT_FORMAT_COFF
1788#define EXTENDED_COFF
1789
1790/* If we use NM, pass -g to it so it only lists globals. */
1791#define NM_FLAGS "-pg"
1792
03f8c4cc
RK
1793/* Definitions for debugging. */
1794
1795#define SDB_DEBUGGING_INFO /* generate info for mips-tfile */
1796#define DBX_DEBUGGING_INFO /* generate embedded stabs */
1797#define MIPS_DEBUGGING_INFO /* MIPS specific debugging info */
1798
1799#ifndef PREFERRED_DEBUGGING_TYPE /* assume SDB_DEBUGGING_INFO */
52a69200
RK
1800#define PREFERRED_DEBUGGING_TYPE \
1801 ((len > 1 && !strncmp (str, "ggdb", len)) ? DBX_DEBUG : SDB_DEBUG)
03f8c4cc
RK
1802#endif
1803
1804
1805/* Correct the offset of automatic variables and arguments. Note that
1806 the Alpha debug format wants all automatic variables and arguments
1807 to be in terms of two different offsets from the virtual frame pointer,
1808 which is the stack pointer before any adjustment in the function.
1809 The offset for the argument pointer is fixed for the native compiler,
1810 it is either zero (for the no arguments case) or large enough to hold
1811 all argument registers.
1812 The offset for the auto pointer is the fourth argument to the .frame
1813 directive (local_offset).
1814 To stay compatible with the native tools we use the same offsets
1815 from the virtual frame pointer and adjust the debugger arg/auto offsets
1816 accordingly. These debugger offsets are set up in output_prolog. */
1817
1818long alpha_arg_offset;
1819long alpha_auto_offset;
1820#define DEBUGGER_AUTO_OFFSET(X) \
1821 ((GET_CODE (X) == PLUS ? INTVAL (XEXP (X, 1)) : 0) + alpha_auto_offset)
1822#define DEBUGGER_ARG_OFFSET(OFFSET, X) (OFFSET + alpha_arg_offset)
1823
1824
1825#define ASM_OUTPUT_SOURCE_LINE(STREAM, LINE) \
1826 alpha_output_lineno (STREAM, LINE)
1827extern void alpha_output_lineno ();
1828
1829#define ASM_OUTPUT_SOURCE_FILENAME(STREAM, NAME) \
1830 alpha_output_filename (STREAM, NAME)
1831extern void alpha_output_filename ();
1832
1833
ab8b8941
RK
1834/* mips-tfile.c limits us to strings of one page. */
1835#define DBX_CONTIN_LENGTH 4000
03f8c4cc
RK
1836
1837/* By default, turn on GDB extensions. */
1838#define DEFAULT_GDB_EXTENSIONS 1
1839
1840/* If we are smuggling stabs through the ALPHA ECOFF object
1841 format, put a comment in front of the .stab<x> operation so
1842 that the ALPHA assembler does not choke. The mips-tfile program
1843 will correctly put the stab into the object file. */
1844
1845#define ASM_STABS_OP ((TARGET_GAS) ? ".stabs" : " #.stabs")
1846#define ASM_STABN_OP ((TARGET_GAS) ? ".stabn" : " #.stabn")
1847#define ASM_STABD_OP ((TARGET_GAS) ? ".stabd" : " #.stabd")
1848
1849/* Forward references to tags are allowed. */
1850#define SDB_ALLOW_FORWARD_REFERENCES
1851
1852/* Unknown tags are also allowed. */
1853#define SDB_ALLOW_UNKNOWN_REFERENCES
1854
1855#define PUT_SDB_DEF(a) \
1856do { \
1857 fprintf (asm_out_file, "\t%s.def\t", \
1858 (TARGET_GAS) ? "" : "#"); \
1859 ASM_OUTPUT_LABELREF (asm_out_file, a); \
1860 fputc (';', asm_out_file); \
1861} while (0)
1862
1863#define PUT_SDB_PLAIN_DEF(a) \
1864do { \
1865 fprintf (asm_out_file, "\t%s.def\t.%s;", \
1866 (TARGET_GAS) ? "" : "#", (a)); \
1867} while (0)
1868
1869#define PUT_SDB_TYPE(a) \
1870do { \
1871 fprintf (asm_out_file, "\t.type\t0x%x;", (a)); \
1872} while (0)
1873
1874/* For block start and end, we create labels, so that
1875 later we can figure out where the correct offset is.
1876 The normal .ent/.end serve well enough for functions,
1877 so those are just commented out. */
1878
1879extern int sdb_label_count; /* block start/end next label # */
1880
1881#define PUT_SDB_BLOCK_START(LINE) \
1882do { \
1883 fprintf (asm_out_file, \
1884 "$Lb%d:\n\t%s.begin\t$Lb%d\t%d\n", \
1885 sdb_label_count, \
1886 (TARGET_GAS) ? "" : "#", \
1887 sdb_label_count, \
1888 (LINE)); \
1889 sdb_label_count++; \
1890} while (0)
1891
1892#define PUT_SDB_BLOCK_END(LINE) \
1893do { \
1894 fprintf (asm_out_file, \
1895 "$Le%d:\n\t%s.bend\t$Le%d\t%d\n", \
1896 sdb_label_count, \
1897 (TARGET_GAS) ? "" : "#", \
1898 sdb_label_count, \
1899 (LINE)); \
1900 sdb_label_count++; \
1901} while (0)
1902
1903#define PUT_SDB_FUNCTION_START(LINE)
1904
1905#define PUT_SDB_FUNCTION_END(LINE)
1906
1907#define PUT_SDB_EPILOGUE_END(NAME)
1908
1909/* Specify to run a post-processor, mips-tfile after the assembler
1910 has run to stuff the ecoff debug information into the object file.
1911 This is needed because the Alpha assembler provides no way
1912 of specifying such information in the assembly file. */
1913
88681624 1914#if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_GAS) != 0
03f8c4cc
RK
1915
1916#define ASM_FINAL_SPEC "\
1917%{malpha-as: %{!mno-mips-tfile: \
1918 \n mips-tfile %{v*: -v} \
1919 %{K: -I %b.o~} \
1920 %{!K: %{save-temps: -I %b.o~}} \
1921 %{c:%W{o*}%{!o*:-o %b.o}}%{!c:-o %U.o} \
1922 %{.s:%i} %{!.s:%g.s}}}"
1923
1924#else
1925#define ASM_FINAL_SPEC "\
1926%{!mgas: %{!mno-mips-tfile: \
1927 \n mips-tfile %{v*: -v} \
1928 %{K: -I %b.o~} \
1929 %{!K: %{save-temps: -I %b.o~}} \
1930 %{c:%W{o*}%{!o*:-o %b.o}}%{!c:-o %U.o} \
1931 %{.s:%i} %{!.s:%g.s}}}"
1932
1933#endif
1934
1935/* Macros for mips-tfile.c to encapsulate stabs in ECOFF, and for
1936 mips-tdump.c to print them out.
1937
1938 These must match the corresponding definitions in gdb/mipsread.c.
1939 Unfortunately, gcc and gdb do not currently share any directories. */
1940
1941#define CODE_MASK 0x8F300
1942#define MIPS_IS_STAB(sym) (((sym)->index & 0xFFF00) == CODE_MASK)
1943#define MIPS_MARK_STAB(code) ((code)+CODE_MASK)
1944#define MIPS_UNMARK_STAB(code) ((code)-CODE_MASK)
1945
1946/* Override some mips-tfile definitions. */
1947
1948#define SHASH_SIZE 511
1949#define THASH_SIZE 55
1e6c6f11
RK
1950
1951/* Align ecoff symbol tables to avoid OSF1/1.3 nm complaints. */
1952
1953#define ALIGN_SYMTABLE_OFFSET(OFFSET) (((OFFSET) + 7) & ~7)