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