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