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