Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/fr30/fr30.h @ 0:a06113de4d67
first commit
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2009 14:47:48 +0900 |
parents | |
children | 77e2b8dfacca |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a06113de4d67 |
---|---|
1 /*{{{ Comment. */ | |
2 | |
3 /* Definitions of FR30 target. | |
4 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2007, 2008 | |
5 Free Software Foundation, Inc. | |
6 Contributed by Cygnus Solutions. | |
7 | |
8 This file is part of GCC. | |
9 | |
10 GCC is free software; you can redistribute it and/or modify | |
11 it under the terms of the GNU General Public License as published by | |
12 the Free Software Foundation; either version 3, or (at your option) | |
13 any later version. | |
14 | |
15 GCC is distributed in the hope that it will be useful, | |
16 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 GNU General Public License for more details. | |
19 | |
20 You should have received a copy of the GNU General Public License | |
21 along with GCC; see the file COPYING3. If not see | |
22 <http://www.gnu.org/licenses/>. */ | |
23 | |
24 /*}}}*/ | |
25 /*{{{ Driver configuration. */ | |
26 | |
27 /* Defined in svr4.h. */ | |
28 #undef SWITCH_TAKES_ARG | |
29 | |
30 /* Defined in svr4.h. */ | |
31 #undef WORD_SWITCH_TAKES_ARG | |
32 | |
33 /*}}}*/ | |
34 /*{{{ Run-time target specifications. */ | |
35 | |
36 #undef ASM_SPEC | |
37 #define ASM_SPEC "%{v}" | |
38 | |
39 /* Define this to be a string constant containing `-D' options to define the | |
40 predefined macros that identify this machine and system. These macros will | |
41 be predefined unless the `-ansi' option is specified. */ | |
42 | |
43 #define TARGET_CPU_CPP_BUILTINS() \ | |
44 do \ | |
45 { \ | |
46 builtin_define_std ("fr30"); \ | |
47 builtin_assert ("machine=fr30"); \ | |
48 } \ | |
49 while (0) | |
50 | |
51 #define TARGET_VERSION fprintf (stderr, " (fr30)"); | |
52 | |
53 #define CAN_DEBUG_WITHOUT_FP | |
54 | |
55 #undef STARTFILE_SPEC | |
56 #define STARTFILE_SPEC "crt0.o%s crti.o%s crtbegin.o%s" | |
57 | |
58 /* Include the OS stub library, so that the code can be simulated. | |
59 This is not the right way to do this. Ideally this kind of thing | |
60 should be done in the linker script - but I have not worked out how | |
61 to specify the location of a linker script in a gcc command line yet... */ | |
62 #undef ENDFILE_SPEC | |
63 #define ENDFILE_SPEC "%{!mno-lsim:-lsim} crtend.o%s crtn.o%s" | |
64 | |
65 /*}}}*/ | |
66 /*{{{ Storage Layout. */ | |
67 | |
68 #define BITS_BIG_ENDIAN 1 | |
69 | |
70 #define BYTES_BIG_ENDIAN 1 | |
71 | |
72 #define WORDS_BIG_ENDIAN 1 | |
73 | |
74 #define UNITS_PER_WORD 4 | |
75 | |
76 #define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \ | |
77 do \ | |
78 { \ | |
79 if (GET_MODE_CLASS (MODE) == MODE_INT \ | |
80 && GET_MODE_SIZE (MODE) < 4) \ | |
81 (MODE) = SImode; \ | |
82 } \ | |
83 while (0) | |
84 | |
85 #define PARM_BOUNDARY 32 | |
86 | |
87 #define STACK_BOUNDARY 32 | |
88 | |
89 #define FUNCTION_BOUNDARY 32 | |
90 | |
91 #define BIGGEST_ALIGNMENT 32 | |
92 | |
93 #define DATA_ALIGNMENT(TYPE, ALIGN) \ | |
94 (TREE_CODE (TYPE) == ARRAY_TYPE \ | |
95 && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \ | |
96 && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) | |
97 | |
98 #define CONSTANT_ALIGNMENT(EXP, ALIGN) \ | |
99 (TREE_CODE (EXP) == STRING_CST \ | |
100 && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) | |
101 | |
102 #define STRICT_ALIGNMENT 1 | |
103 | |
104 /* Defined in svr4.h. */ | |
105 #define PCC_BITFIELD_TYPE_MATTERS 1 | |
106 | |
107 /*}}}*/ | |
108 /*{{{ Layout of Source Language Data Types. */ | |
109 | |
110 #define SHORT_TYPE_SIZE 16 | |
111 #define INT_TYPE_SIZE 32 | |
112 #define LONG_TYPE_SIZE 32 | |
113 #define LONG_LONG_TYPE_SIZE 64 | |
114 #define FLOAT_TYPE_SIZE 32 | |
115 #define DOUBLE_TYPE_SIZE 64 | |
116 #define LONG_DOUBLE_TYPE_SIZE 64 | |
117 | |
118 #define DEFAULT_SIGNED_CHAR 1 | |
119 | |
120 /*}}}*/ | |
121 /*{{{ REGISTER BASICS. */ | |
122 | |
123 /* Number of hardware registers known to the compiler. They receive numbers 0 | |
124 through `FIRST_PSEUDO_REGISTER-1'; thus, the first pseudo register's number | |
125 really is assigned the number `FIRST_PSEUDO_REGISTER'. */ | |
126 #define FIRST_PSEUDO_REGISTER 21 | |
127 | |
128 /* Fixed register assignments: */ | |
129 | |
130 /* Here we do a BAD THING - reserve a register for use by the machine | |
131 description file. There are too many places in compiler where it | |
132 assumes that it can issue a branch or jump instruction without | |
133 providing a scratch register for it, and reload just cannot cope, so | |
134 we keep a register back for these situations. */ | |
135 #define COMPILER_SCRATCH_REGISTER 0 | |
136 | |
137 /* The register that contains the result of a function call. */ | |
138 #define RETURN_VALUE_REGNUM 4 | |
139 | |
140 /* The first register that can contain the arguments to a function. */ | |
141 #define FIRST_ARG_REGNUM 4 | |
142 | |
143 /* A call-used register that can be used during the function prologue. */ | |
144 #define PROLOGUE_TMP_REGNUM COMPILER_SCRATCH_REGISTER | |
145 | |
146 /* Register numbers used for passing a function's static chain pointer. If | |
147 register windows are used, the register number as seen by the called | |
148 function is `STATIC_CHAIN_INCOMING_REGNUM', while the register number as | |
149 seen by the calling function is `STATIC_CHAIN_REGNUM'. If these registers | |
150 are the same, `STATIC_CHAIN_INCOMING_REGNUM' need not be defined. | |
151 | |
152 The static chain register need not be a fixed register. | |
153 | |
154 If the static chain is passed in memory, these macros should not be defined; | |
155 instead, the next two macros should be defined. */ | |
156 #define STATIC_CHAIN_REGNUM 12 | |
157 /* #define STATIC_CHAIN_INCOMING_REGNUM */ | |
158 | |
159 /* An FR30 specific hardware register. */ | |
160 #define ACCUMULATOR_REGNUM 13 | |
161 | |
162 /* The register number of the frame pointer register, which is used to access | |
163 automatic variables in the stack frame. On some machines, the hardware | |
164 determines which register this is. On other machines, you can choose any | |
165 register you wish for this purpose. */ | |
166 #define FRAME_POINTER_REGNUM 14 | |
167 | |
168 /* The register number of the stack pointer register, which must also be a | |
169 fixed register according to `FIXED_REGISTERS'. On most machines, the | |
170 hardware determines which register this is. */ | |
171 #define STACK_POINTER_REGNUM 15 | |
172 | |
173 /* The following a fake hard registers that describe some of the dedicated | |
174 registers on the FR30. */ | |
175 #define CONDITION_CODE_REGNUM 16 | |
176 #define RETURN_POINTER_REGNUM 17 | |
177 #define MD_HIGH_REGNUM 18 | |
178 #define MD_LOW_REGNUM 19 | |
179 | |
180 /* An initializer that says which registers are used for fixed purposes all | |
181 throughout the compiled code and are therefore not available for general | |
182 allocation. These would include the stack pointer, the frame pointer | |
183 (except on machines where that can be used as a general register when no | |
184 frame pointer is needed), the program counter on machines where that is | |
185 considered one of the addressable registers, and any other numbered register | |
186 with a standard use. | |
187 | |
188 This information is expressed as a sequence of numbers, separated by commas | |
189 and surrounded by braces. The Nth number is 1 if register N is fixed, 0 | |
190 otherwise. | |
191 | |
192 The table initialized from this macro, and the table initialized by the | |
193 following one, may be overridden at run time either automatically, by the | |
194 actions of the macro `CONDITIONAL_REGISTER_USAGE', or by the user with the | |
195 command options `-ffixed-REG', `-fcall-used-REG' and `-fcall-saved-REG'. */ | |
196 #define FIXED_REGISTERS \ | |
197 { 1, 0, 0, 0, 0, 0, 0, 0, /* 0 - 7 */ \ | |
198 0, 0, 0, 0, 0, 0, 0, 1, /* 8 - 15 */ \ | |
199 1, 1, 1, 1, 1 } /* 16 - 20 */ | |
200 | |
201 /* XXX - MDL and MDH set as fixed for now - this is until I can get the | |
202 mul patterns working. */ | |
203 | |
204 /* Like `FIXED_REGISTERS' but has 1 for each register that is clobbered (in | |
205 general) by function calls as well as for fixed registers. This macro | |
206 therefore identifies the registers that are not available for general | |
207 allocation of values that must live across function calls. | |
208 | |
209 If a register has 0 in `CALL_USED_REGISTERS', the compiler automatically | |
210 saves it on function entry and restores it on function exit, if the register | |
211 is used within the function. */ | |
212 #define CALL_USED_REGISTERS \ | |
213 { 1, 1, 1, 1, 1, 1, 1, 1, /* 0 - 7 */ \ | |
214 0, 0, 0, 0, 1, 1, 0, 1, /* 8 - 15 */ \ | |
215 1, 1, 1, 1, 1 } /* 16 - 20 */ | |
216 | |
217 /* A C initializer containing the assembler's names for the machine registers, | |
218 each one as a C string constant. This is what translates register numbers | |
219 in the compiler into assembler language. */ | |
220 #define REGISTER_NAMES \ | |
221 { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \ | |
222 "r8", "r9", "r10", "r11", "r12", "ac", "fp", "sp", \ | |
223 "cc", "rp", "mdh", "mdl", "ap" \ | |
224 } | |
225 | |
226 /* If defined, a C initializer for an array of structures containing a name and | |
227 a register number. This macro defines additional names for hard registers, | |
228 thus allowing the `asm' option in declarations to refer to registers using | |
229 alternate names. */ | |
230 #define ADDITIONAL_REGISTER_NAMES \ | |
231 { \ | |
232 {"r13", 13}, {"r14", 14}, {"r15", 15}, {"usp", 15}, {"ps", 16}\ | |
233 } | |
234 | |
235 /*}}}*/ | |
236 /*{{{ How Values Fit in Registers. */ | |
237 | |
238 /* A C expression for the number of consecutive hard registers, starting at | |
239 register number REGNO, required to hold a value of mode MODE. */ | |
240 | |
241 #define HARD_REGNO_NREGS(REGNO, MODE) \ | |
242 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) | |
243 | |
244 /* A C expression that is nonzero if it is permissible to store a value of mode | |
245 MODE in hard register number REGNO (or in several registers starting with | |
246 that one). */ | |
247 | |
248 #define HARD_REGNO_MODE_OK(REGNO, MODE) 1 | |
249 | |
250 /* A C expression that is nonzero if it is desirable to choose register | |
251 allocation so as to avoid move instructions between a value of mode MODE1 | |
252 and a value of mode MODE2. | |
253 | |
254 If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R, MODE2)' are | |
255 ever different for any R, then `MODES_TIEABLE_P (MODE1, MODE2)' must be | |
256 zero. */ | |
257 #define MODES_TIEABLE_P(MODE1, MODE2) 1 | |
258 | |
259 /*}}}*/ | |
260 /*{{{ Register Classes. */ | |
261 | |
262 /* An enumeral type that must be defined with all the register class names as | |
263 enumeral values. `NO_REGS' must be first. `ALL_REGS' must be the last | |
264 register class, followed by one more enumeral value, `LIM_REG_CLASSES', | |
265 which is not a register class but rather tells how many classes there are. | |
266 | |
267 Each register class has a number, which is the value of casting the class | |
268 name to type `int'. The number serves as an index in many of the tables | |
269 described below. */ | |
270 enum reg_class | |
271 { | |
272 NO_REGS, | |
273 MULTIPLY_32_REG, /* the MDL register as used by the MULH, MULUH insns */ | |
274 MULTIPLY_64_REG, /* the MDH,MDL register pair as used by MUL and MULU */ | |
275 LOW_REGS, /* registers 0 through 7 */ | |
276 HIGH_REGS, /* registers 8 through 15 */ | |
277 REAL_REGS, /* i.e. all the general hardware registers on the FR30 */ | |
278 ALL_REGS, | |
279 LIM_REG_CLASSES | |
280 }; | |
281 | |
282 #define GENERAL_REGS REAL_REGS | |
283 #define N_REG_CLASSES ((int) LIM_REG_CLASSES) | |
284 | |
285 #define IRA_COVER_CLASSES \ | |
286 { \ | |
287 REAL_REGS, MULTIPLY_64_REG, LIM_REG_CLASSES \ | |
288 } | |
289 | |
290 /* An initializer containing the names of the register classes as C string | |
291 constants. These names are used in writing some of the debugging dumps. */ | |
292 #define REG_CLASS_NAMES \ | |
293 { \ | |
294 "NO_REGS", \ | |
295 "MULTIPLY_32_REG", \ | |
296 "MULTIPLY_64_REG", \ | |
297 "LOW_REGS", \ | |
298 "HIGH_REGS", \ | |
299 "REAL_REGS", \ | |
300 "ALL_REGS" \ | |
301 } | |
302 | |
303 /* An initializer containing the contents of the register classes, as integers | |
304 which are bit masks. The Nth integer specifies the contents of class N. | |
305 The way the integer MASK is interpreted is that register R is in the class | |
306 if `MASK & (1 << R)' is 1. | |
307 | |
308 When the machine has more than 32 registers, an integer does not suffice. | |
309 Then the integers are replaced by sub-initializers, braced groupings | |
310 containing several integers. Each sub-initializer must be suitable as an | |
311 initializer for the type `HARD_REG_SET' which is defined in | |
312 `hard-reg-set.h'. */ | |
313 #define REG_CLASS_CONTENTS \ | |
314 { \ | |
315 { 0 }, \ | |
316 { 1 << MD_LOW_REGNUM }, \ | |
317 { (1 << MD_LOW_REGNUM) | (1 << MD_HIGH_REGNUM) }, \ | |
318 { (1 << 8) - 1 }, \ | |
319 { ((1 << 8) - 1) << 8 }, \ | |
320 { (1 << CONDITION_CODE_REGNUM) - 1 }, \ | |
321 { (1 << FIRST_PSEUDO_REGISTER) - 1 } \ | |
322 } | |
323 | |
324 /* A C expression whose value is a register class containing hard register | |
325 REGNO. In general there is more than one such class; choose a class which | |
326 is "minimal", meaning that no smaller class also contains the register. */ | |
327 #define REGNO_REG_CLASS(REGNO) \ | |
328 ( (REGNO) < 8 ? LOW_REGS \ | |
329 : (REGNO) < CONDITION_CODE_REGNUM ? HIGH_REGS \ | |
330 : (REGNO) == MD_LOW_REGNUM ? MULTIPLY_32_REG \ | |
331 : (REGNO) == MD_HIGH_REGNUM ? MULTIPLY_64_REG \ | |
332 : ALL_REGS) | |
333 | |
334 /* A macro whose definition is the name of the class to which a valid base | |
335 register must belong. A base register is one used in an address which is | |
336 the register value plus a displacement. */ | |
337 #define BASE_REG_CLASS REAL_REGS | |
338 | |
339 /* A macro whose definition is the name of the class to which a valid index | |
340 register must belong. An index register is one used in an address where its | |
341 value is either multiplied by a scale factor or added to another register | |
342 (as well as added to a displacement). */ | |
343 #define INDEX_REG_CLASS REAL_REGS | |
344 | |
345 /* A C expression which defines the machine-dependent operand constraint | |
346 letters for register classes. If CHAR is such a letter, the value should be | |
347 the register class corresponding to it. Otherwise, the value should be | |
348 `NO_REGS'. The register letter `r', corresponding to class `GENERAL_REGS', | |
349 will not be passed to this macro; you do not need to handle it. | |
350 | |
351 The following letters are unavailable, due to being used as | |
352 constraints: | |
353 '0'..'9' | |
354 '<', '>' | |
355 'E', 'F', 'G', 'H' | |
356 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P' | |
357 'Q', 'R', 'S', 'T', 'U' | |
358 'V', 'X' | |
359 'g', 'i', 'm', 'n', 'o', 'p', 'r', 's' */ | |
360 | |
361 #define REG_CLASS_FROM_LETTER(CHAR) \ | |
362 ( (CHAR) == 'd' ? MULTIPLY_64_REG \ | |
363 : (CHAR) == 'e' ? MULTIPLY_32_REG \ | |
364 : (CHAR) == 'h' ? HIGH_REGS \ | |
365 : (CHAR) == 'l' ? LOW_REGS \ | |
366 : (CHAR) == 'a' ? ALL_REGS \ | |
367 : NO_REGS) | |
368 | |
369 /* A C expression which is nonzero if register number NUM is suitable for use | |
370 as a base register in operand addresses. It may be either a suitable hard | |
371 register or a pseudo register that has been allocated such a hard register. */ | |
372 #define REGNO_OK_FOR_BASE_P(NUM) 1 | |
373 | |
374 /* A C expression which is nonzero if register number NUM is suitable for use | |
375 as an index register in operand addresses. It may be either a suitable hard | |
376 register or a pseudo register that has been allocated such a hard register. | |
377 | |
378 The difference between an index register and a base register is that the | |
379 index register may be scaled. If an address involves the sum of two | |
380 registers, neither one of them scaled, then either one may be labeled the | |
381 "base" and the other the "index"; but whichever labeling is used must fit | |
382 the machine's constraints of which registers may serve in each capacity. | |
383 The compiler will try both labelings, looking for one that is valid, and | |
384 will reload one or both registers only if neither labeling works. */ | |
385 #define REGNO_OK_FOR_INDEX_P(NUM) 1 | |
386 | |
387 /* A C expression that places additional restrictions on the register class to | |
388 use when it is necessary to copy value X into a register in class CLASS. | |
389 The value is a register class; perhaps CLASS, or perhaps another, smaller | |
390 class. On many machines, the following definition is safe: | |
391 | |
392 #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS | |
393 | |
394 Sometimes returning a more restrictive class makes better code. For | |
395 example, on the 68000, when X is an integer constant that is in range for a | |
396 `moveq' instruction, the value of this macro is always `DATA_REGS' as long | |
397 as CLASS includes the data registers. Requiring a data register guarantees | |
398 that a `moveq' will be used. | |
399 | |
400 If X is a `const_double', by returning `NO_REGS' you can force X into a | |
401 memory constant. This is useful on certain machines where immediate | |
402 floating values cannot be loaded into certain kinds of registers. */ | |
403 #define PREFERRED_RELOAD_CLASS(X, CLASS) CLASS | |
404 | |
405 /* A C expression for the maximum number of consecutive registers of | |
406 class CLASS needed to hold a value of mode MODE. | |
407 | |
408 This is closely related to the macro `HARD_REGNO_NREGS'. In fact, the value | |
409 of the macro `CLASS_MAX_NREGS (CLASS, MODE)' should be the maximum value of | |
410 `HARD_REGNO_NREGS (REGNO, MODE)' for all REGNO values in the class CLASS. | |
411 | |
412 This macro helps control the handling of multiple-word values in | |
413 the reload pass. */ | |
414 #define CLASS_MAX_NREGS(CLASS, MODE) HARD_REGNO_NREGS (0, MODE) | |
415 | |
416 /*}}}*/ | |
417 /*{{{ CONSTANTS. */ | |
418 | |
419 /* A C expression that defines the machine-dependent operand constraint letters | |
420 (`I', `J', `K', .. 'P') that specify particular ranges of integer values. | |
421 If C is one of those letters, the expression should check that VALUE, an | |
422 integer, is in the appropriate range and return 1 if so, 0 otherwise. If C | |
423 is not one of those letters, the value should be 0 regardless of VALUE. */ | |
424 #define CONST_OK_FOR_LETTER_P(VALUE, C) \ | |
425 ( (C) == 'I' ? IN_RANGE (VALUE, 0, 15) \ | |
426 : (C) == 'J' ? IN_RANGE (VALUE, -16, -1) \ | |
427 : (C) == 'K' ? IN_RANGE (VALUE, 16, 31) \ | |
428 : (C) == 'L' ? IN_RANGE (VALUE, 0, (1 << 8) - 1) \ | |
429 : (C) == 'M' ? IN_RANGE (VALUE, 0, (1 << 20) - 1) \ | |
430 : (C) == 'P' ? IN_RANGE (VALUE, -(1 << 8), (1 << 8) - 1) \ | |
431 : 0) | |
432 | |
433 /* A C expression that defines the machine-dependent operand constraint letters | |
434 (`G', `H') that specify particular ranges of `const_double' values. | |
435 | |
436 If C is one of those letters, the expression should check that VALUE, an RTX | |
437 of code `const_double', is in the appropriate range and return 1 if so, 0 | |
438 otherwise. If C is not one of those letters, the value should be 0 | |
439 regardless of VALUE. | |
440 | |
441 `const_double' is used for all floating-point constants and for `DImode' | |
442 fixed-point constants. A given letter can accept either or both kinds of | |
443 values. It can use `GET_MODE' to distinguish between these kinds. */ | |
444 #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 0 | |
445 | |
446 /* A C expression that defines the optional machine-dependent constraint | |
447 letters (`Q', `R', `S', `T', `U') that can be used to segregate specific | |
448 types of operands, usually memory references, for the target machine. | |
449 Normally this macro will not be defined. If it is required for a particular | |
450 target machine, it should return 1 if VALUE corresponds to the operand type | |
451 represented by the constraint letter C. If C is not defined as an extra | |
452 constraint, the value returned should be 0 regardless of VALUE. | |
453 | |
454 For example, on the ROMP, load instructions cannot have their output in r0 | |
455 if the memory reference contains a symbolic address. Constraint letter `Q' | |
456 is defined as representing a memory address that does *not* contain a | |
457 symbolic address. An alternative is specified with a `Q' constraint on the | |
458 input and `r' on the output. The next alternative specifies `m' on the | |
459 input and a register class that does not include r0 on the output. */ | |
460 #define EXTRA_CONSTRAINT(VALUE, C) \ | |
461 ((C) == 'Q' ? (GET_CODE (VALUE) == MEM && GET_CODE (XEXP (VALUE, 0)) == SYMBOL_REF) : 0) | |
462 | |
463 /*}}}*/ | |
464 /*{{{ Basic Stack Layout. */ | |
465 | |
466 /* Define this macro if pushing a word onto the stack moves the stack pointer | |
467 to a smaller address. */ | |
468 #define STACK_GROWS_DOWNWARD 1 | |
469 | |
470 /* Define this to macro nonzero if the addresses of local variable slots | |
471 are at negative offsets from the frame pointer. */ | |
472 #define FRAME_GROWS_DOWNWARD 1 | |
473 | |
474 /* Offset from the frame pointer to the first local variable slot to be | |
475 allocated. | |
476 | |
477 If `FRAME_GROWS_DOWNWARD', find the next slot's offset by subtracting the | |
478 first slot's length from `STARTING_FRAME_OFFSET'. Otherwise, it is found by | |
479 adding the length of the first slot to the value `STARTING_FRAME_OFFSET'. */ | |
480 /* #define STARTING_FRAME_OFFSET -4 */ | |
481 #define STARTING_FRAME_OFFSET 0 | |
482 | |
483 /* Offset from the stack pointer register to the first location at which | |
484 outgoing arguments are placed. If not specified, the default value of zero | |
485 is used. This is the proper value for most machines. | |
486 | |
487 If `ARGS_GROW_DOWNWARD', this is the offset to the location above the first | |
488 location at which outgoing arguments are placed. */ | |
489 #define STACK_POINTER_OFFSET 0 | |
490 | |
491 /* Offset from the argument pointer register to the first argument's address. | |
492 On some machines it may depend on the data type of the function. | |
493 | |
494 If `ARGS_GROW_DOWNWARD', this is the offset to the location above the first | |
495 argument's address. */ | |
496 #define FIRST_PARM_OFFSET(FUNDECL) 0 | |
497 | |
498 /* A C expression whose value is RTL representing the location of the incoming | |
499 return address at the beginning of any function, before the prologue. This | |
500 RTL is either a `REG', indicating that the return value is saved in `REG', | |
501 or a `MEM' representing a location in the stack. | |
502 | |
503 You only need to define this macro if you want to support call frame | |
504 debugging information like that provided by DWARF 2. */ | |
505 #define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (SImode, RETURN_POINTER_REGNUM) | |
506 | |
507 /*}}}*/ | |
508 /*{{{ Register That Address the Stack Frame. */ | |
509 | |
510 /* The register number of the arg pointer register, which is used to access the | |
511 function's argument list. On some machines, this is the same as the frame | |
512 pointer register. On some machines, the hardware determines which register | |
513 this is. On other machines, you can choose any register you wish for this | |
514 purpose. If this is not the same register as the frame pointer register, | |
515 then you must mark it as a fixed register according to `FIXED_REGISTERS', or | |
516 arrange to be able to eliminate it. */ | |
517 #define ARG_POINTER_REGNUM 20 | |
518 | |
519 /*}}}*/ | |
520 /*{{{ Eliminating the Frame Pointer and the Arg Pointer. */ | |
521 | |
522 /* A C expression which is nonzero if a function must have and use a frame | |
523 pointer. This expression is evaluated in the reload pass. If its value is | |
524 nonzero the function will have a frame pointer. | |
525 | |
526 The expression can in principle examine the current function and decide | |
527 according to the facts, but on most machines the constant 0 or the constant | |
528 1 suffices. Use 0 when the machine allows code to be generated with no | |
529 frame pointer, and doing so saves some time or space. Use 1 when there is | |
530 no possible advantage to avoiding a frame pointer. | |
531 | |
532 In certain cases, the compiler does not know how to produce valid code | |
533 without a frame pointer. The compiler recognizes those cases and | |
534 automatically gives the function a frame pointer regardless of what | |
535 `FRAME_POINTER_REQUIRED' says. You don't need to worry about them. | |
536 | |
537 In a function that does not require a frame pointer, the frame pointer | |
538 register can be allocated for ordinary usage, unless you mark it as a fixed | |
539 register. See `FIXED_REGISTERS' for more information. */ | |
540 /* #define FRAME_POINTER_REQUIRED 0 */ | |
541 #define FRAME_POINTER_REQUIRED \ | |
542 (flag_omit_frame_pointer == 0 || crtl->args.pretend_args_size > 0) | |
543 | |
544 /* If defined, this macro specifies a table of register pairs used to eliminate | |
545 unneeded registers that point into the stack frame. If it is not defined, | |
546 the only elimination attempted by the compiler is to replace references to | |
547 the frame pointer with references to the stack pointer. | |
548 | |
549 The definition of this macro is a list of structure initializations, each of | |
550 which specifies an original and replacement register. | |
551 | |
552 On some machines, the position of the argument pointer is not known until | |
553 the compilation is completed. In such a case, a separate hard register must | |
554 be used for the argument pointer. This register can be eliminated by | |
555 replacing it with either the frame pointer or the argument pointer, | |
556 depending on whether or not the frame pointer has been eliminated. | |
557 | |
558 In this case, you might specify: | |
559 #define ELIMINABLE_REGS \ | |
560 {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ | |
561 {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ | |
562 {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}} | |
563 | |
564 Note that the elimination of the argument pointer with the stack pointer is | |
565 specified first since that is the preferred elimination. */ | |
566 | |
567 #define ELIMINABLE_REGS \ | |
568 { \ | |
569 {ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ | |
570 {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ | |
571 {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM} \ | |
572 } | |
573 | |
574 /* A C expression that returns nonzero if the compiler is allowed to try to | |
575 replace register number FROM with register number TO. This macro | |
576 need only be defined if `ELIMINABLE_REGS' is defined, and will usually be | |
577 the constant 1, since most of the cases preventing register elimination are | |
578 things that the compiler already knows about. */ | |
579 | |
580 #define CAN_ELIMINATE(FROM, TO) \ | |
581 ((TO) == FRAME_POINTER_REGNUM || ! frame_pointer_needed) | |
582 | |
583 /* This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'. It specifies the | |
584 initial difference between the specified pair of registers. This macro must | |
585 be defined if `ELIMINABLE_REGS' is defined. */ | |
586 #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ | |
587 (OFFSET) = fr30_compute_frame_size (FROM, TO) | |
588 | |
589 /*}}}*/ | |
590 /*{{{ Passing Function Arguments on the Stack. */ | |
591 | |
592 /* If defined, the maximum amount of space required for outgoing arguments will | |
593 be computed and placed into the variable | |
594 `crtl->outgoing_args_size'. No space will be pushed onto the | |
595 stack for each call; instead, the function prologue should increase the | |
596 stack frame size by this amount. | |
597 | |
598 Defining both `PUSH_ROUNDING' and `ACCUMULATE_OUTGOING_ARGS' is not | |
599 proper. */ | |
600 #define ACCUMULATE_OUTGOING_ARGS 1 | |
601 | |
602 /* A C expression that should indicate the number of bytes of its own arguments | |
603 that a function pops on returning, or 0 if the function pops no arguments | |
604 and the caller must therefore pop them all after the function returns. | |
605 | |
606 FUNDECL is a C variable whose value is a tree node that describes the | |
607 function in question. Normally it is a node of type `FUNCTION_DECL' that | |
608 describes the declaration of the function. From this it is possible to | |
609 obtain the DECL_ATTRIBUTES of the function. | |
610 | |
611 FUNTYPE is a C variable whose value is a tree node that describes the | |
612 function in question. Normally it is a node of type `FUNCTION_TYPE' that | |
613 describes the data type of the function. From this it is possible to obtain | |
614 the data types of the value and arguments (if known). | |
615 | |
616 When a call to a library function is being considered, FUNTYPE will contain | |
617 an identifier node for the library function. Thus, if you need to | |
618 distinguish among various library functions, you can do so by their names. | |
619 Note that "library function" in this context means a function used to | |
620 perform arithmetic, whose name is known specially in the compiler and was | |
621 not mentioned in the C code being compiled. | |
622 | |
623 STACK-SIZE is the number of bytes of arguments passed on the stack. If a | |
624 variable number of bytes is passed, it is zero, and argument popping will | |
625 always be the responsibility of the calling function. | |
626 | |
627 On the VAX, all functions always pop their arguments, so the definition of | |
628 this macro is STACK-SIZE. On the 68000, using the standard calling | |
629 convention, no functions pop their arguments, so the value of the macro is | |
630 always 0 in this case. But an alternative calling convention is available | |
631 in which functions that take a fixed number of arguments pop them but other | |
632 functions (such as `printf') pop nothing (the caller pops all). When this | |
633 convention is in use, FUNTYPE is examined to determine whether a function | |
634 takes a fixed number of arguments. */ | |
635 #define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0 | |
636 | |
637 /*}}}*/ | |
638 /*{{{ Function Arguments in Registers. */ | |
639 | |
640 /* The number of register assigned to holding function arguments. */ | |
641 | |
642 #define FR30_NUM_ARG_REGS 4 | |
643 | |
644 #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \ | |
645 ( (NAMED) == 0 ? NULL_RTX \ | |
646 : targetm.calls.must_pass_in_stack (MODE, TYPE) ? NULL_RTX \ | |
647 : (CUM) >= FR30_NUM_ARG_REGS ? NULL_RTX \ | |
648 : gen_rtx_REG (MODE, CUM + FIRST_ARG_REGNUM)) | |
649 | |
650 /* A C type for declaring a variable that is used as the first argument of | |
651 `FUNCTION_ARG' and other related values. For some target machines, the type | |
652 `int' suffices and can hold the number of bytes of argument so far. | |
653 | |
654 There is no need to record in `CUMULATIVE_ARGS' anything about the arguments | |
655 that have been passed on the stack. The compiler has other variables to | |
656 keep track of that. For target machines on which all arguments are passed | |
657 on the stack, there is no need to store anything in `CUMULATIVE_ARGS'; | |
658 however, the data structure must exist and should not be empty, so use | |
659 `int'. */ | |
660 /* On the FR30 this value is an accumulating count of the number of argument | |
661 registers that have been filled with argument values, as opposed to say, | |
662 the number of bytes of argument accumulated so far. */ | |
663 #define CUMULATIVE_ARGS int | |
664 | |
665 /* A C statement (sans semicolon) for initializing the variable CUM for the | |
666 state at the beginning of the argument list. The variable has type | |
667 `CUMULATIVE_ARGS'. The value of FNTYPE is the tree node for the data type | |
668 of the function which will receive the args, or 0 if the args are to a | |
669 compiler support library function. The value of INDIRECT is nonzero when | |
670 processing an indirect call, for example a call through a function pointer. | |
671 The value of INDIRECT is zero for a call to an explicitly named function, a | |
672 library function call, or when `INIT_CUMULATIVE_ARGS' is used to find | |
673 arguments for the function being compiled. | |
674 | |
675 When processing a call to a compiler support library function, LIBNAME | |
676 identifies which one. It is a `symbol_ref' rtx which contains the name of | |
677 the function, as a string. LIBNAME is 0 when an ordinary C function call is | |
678 being processed. Thus, each time this macro is called, either LIBNAME or | |
679 FNTYPE is nonzero, but never both of them at once. */ | |
680 #define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \ | |
681 (CUM) = 0 | |
682 | |
683 /* A C statement (sans semicolon) to update the summarizer variable CUM to | |
684 advance past an argument in the argument list. The values MODE, TYPE and | |
685 NAMED describe that argument. Once this is done, the variable CUM is | |
686 suitable for analyzing the *following* argument with `FUNCTION_ARG', etc. | |
687 | |
688 This macro need not do anything if the argument in question was passed on | |
689 the stack. The compiler knows how to track the amount of stack space used | |
690 for arguments without any special help. */ | |
691 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \ | |
692 (CUM) += (NAMED) * fr30_num_arg_regs (MODE, TYPE) | |
693 | |
694 /* A C expression that is nonzero if REGNO is the number of a hard register in | |
695 which function arguments are sometimes passed. This does *not* include | |
696 implicit arguments such as the static chain and the structure-value address. | |
697 On many machines, no registers can be used for this purpose since all | |
698 function arguments are pushed on the stack. */ | |
699 #define FUNCTION_ARG_REGNO_P(REGNO) \ | |
700 ((REGNO) >= FIRST_ARG_REGNUM && ((REGNO) < FIRST_ARG_REGNUM + FR30_NUM_ARG_REGS)) | |
701 | |
702 /*}}}*/ | |
703 /*{{{ How Scalar Function Values are Returned. */ | |
704 | |
705 #define FUNCTION_VALUE(VALTYPE, FUNC) \ | |
706 gen_rtx_REG (TYPE_MODE (VALTYPE), RETURN_VALUE_REGNUM) | |
707 | |
708 /* A C expression to create an RTX representing the place where a library | |
709 function returns a value of mode MODE. If the precise function being called | |
710 is known, FUNC is a tree node (`FUNCTION_DECL') for it; otherwise, FUNC is a | |
711 null pointer. This makes it possible to use a different value-returning | |
712 convention for specific functions when all their calls are known. | |
713 | |
714 Note that "library function" in this context means a compiler support | |
715 routine, used to perform arithmetic, whose name is known specially by the | |
716 compiler and was not mentioned in the C code being compiled. | |
717 | |
718 The definition of `LIBRARY_VALUE' need not be concerned aggregate data | |
719 types, because none of the library functions returns such types. */ | |
720 #define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, RETURN_VALUE_REGNUM) | |
721 | |
722 /* A C expression that is nonzero if REGNO is the number of a hard register in | |
723 which the values of called function may come back. */ | |
724 | |
725 #define FUNCTION_VALUE_REGNO_P(REGNO) ((REGNO) == RETURN_VALUE_REGNUM) | |
726 | |
727 /*}}}*/ | |
728 /*{{{ How Large Values are Returned. */ | |
729 | |
730 /* Define this macro to be 1 if all structure and union return values must be | |
731 in memory. Since this results in slower code, this should be defined only | |
732 if needed for compatibility with other compilers or with an ABI. If you | |
733 define this macro to be 0, then the conventions used for structure and union | |
734 return values are decided by the `TARGET_RETURN_IN_MEMORY' macro. | |
735 | |
736 If not defined, this defaults to the value 1. */ | |
737 #define DEFAULT_PCC_STRUCT_RETURN 1 | |
738 | |
739 /*}}}*/ | |
740 /*{{{ Generating Code for Profiling. */ | |
741 | |
742 /* A C statement or compound statement to output to FILE some assembler code to | |
743 call the profiling subroutine `mcount'. Before calling, the assembler code | |
744 must load the address of a counter variable into a register where `mcount' | |
745 expects to find the address. The name of this variable is `LP' followed by | |
746 the number LABELNO, so you would generate the name using `LP%d' in a | |
747 `fprintf'. | |
748 | |
749 The details of how the address should be passed to `mcount' are determined | |
750 by your operating system environment, not by GCC. To figure them out, | |
751 compile a small program for profiling using the system's installed C | |
752 compiler and look at the assembler code that results. */ | |
753 #define FUNCTION_PROFILER(FILE, LABELNO) \ | |
754 { \ | |
755 fprintf (FILE, "\t mov rp, r1\n" ); \ | |
756 fprintf (FILE, "\t ldi:32 mcount, r0\n" ); \ | |
757 fprintf (FILE, "\t call @r0\n" ); \ | |
758 fprintf (FILE, ".word\tLP%d\n", LABELNO); \ | |
759 } | |
760 | |
761 /*}}}*/ | |
762 /*{{{ Trampolines for Nested Functions. */ | |
763 | |
764 /* On the FR30, the trampoline is: | |
765 | |
766 nop | |
767 ldi:32 STATIC, r12 | |
768 nop | |
769 ldi:32 FUNCTION, r0 | |
770 jmp @r0 | |
771 | |
772 The no-ops are to guarantee that the static chain and final | |
773 target are 32 bit aligned within the trampoline. That allows us to | |
774 initialize those locations with simple SImode stores. The alternative | |
775 would be to use HImode stores. */ | |
776 | |
777 /* A C statement to output, on the stream FILE, assembler code for a block of | |
778 data that contains the constant parts of a trampoline. This code should not | |
779 include a label--the label is taken care of automatically. */ | |
780 #define TRAMPOLINE_TEMPLATE(FILE) \ | |
781 { \ | |
782 fprintf (FILE, "\tnop\n"); \ | |
783 fprintf (FILE, "\tldi:32\t#0, %s\n", reg_names [STATIC_CHAIN_REGNUM]); \ | |
784 fprintf (FILE, "\tnop\n"); \ | |
785 fprintf (FILE, "\tldi:32\t#0, %s\n", reg_names [COMPILER_SCRATCH_REGISTER]); \ | |
786 fprintf (FILE, "\tjmp\t@%s\n", reg_names [COMPILER_SCRATCH_REGISTER]); \ | |
787 } | |
788 | |
789 /* A C expression for the size in bytes of the trampoline, as an integer. */ | |
790 #define TRAMPOLINE_SIZE 18 | |
791 | |
792 /* We want the trampoline to be aligned on a 32bit boundary so that we can | |
793 make sure the location of the static chain & target function within | |
794 the trampoline is also aligned on a 32bit boundary. */ | |
795 #define TRAMPOLINE_ALIGNMENT 32 | |
796 | |
797 /* A C statement to initialize the variable parts of a trampoline. ADDR is an | |
798 RTX for the address of the trampoline; FNADDR is an RTX for the address of | |
799 the nested function; STATIC_CHAIN is an RTX for the static chain value that | |
800 should be passed to the function when it is called. */ | |
801 #define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, STATIC_CHAIN) \ | |
802 do \ | |
803 { \ | |
804 emit_move_insn (gen_rtx_MEM (SImode, plus_constant (ADDR, 4)), STATIC_CHAIN);\ | |
805 emit_move_insn (gen_rtx_MEM (SImode, plus_constant (ADDR, 12)), FNADDR); \ | |
806 } while (0); | |
807 | |
808 /*}}}*/ | |
809 /*{{{ Addressing Modes. */ | |
810 | |
811 /* A C expression that is 1 if the RTX X is a constant which is a valid | |
812 address. On most machines, this can be defined as `CONSTANT_P (X)', but a | |
813 few machines are more restrictive in which constant addresses are supported. | |
814 | |
815 `CONSTANT_P' accepts integer-values expressions whose values are not | |
816 explicitly known, such as `symbol_ref', `label_ref', and `high' expressions | |
817 and `const' arithmetic expressions, in addition to `const_int' and | |
818 `const_double' expressions. */ | |
819 #define CONSTANT_ADDRESS_P(X) CONSTANT_P (X) | |
820 | |
821 /* A number, the maximum number of registers that can appear in a valid memory | |
822 address. Note that it is up to you to specify a value equal to the maximum | |
823 number that `GO_IF_LEGITIMATE_ADDRESS' would ever accept. */ | |
824 #define MAX_REGS_PER_ADDRESS 1 | |
825 | |
826 /* A C compound statement with a conditional `goto LABEL;' executed if X (an | |
827 RTX) is a legitimate memory address on the target machine for a memory | |
828 operand of mode MODE. */ | |
829 | |
830 /* On the FR30 we only have one real addressing mode - an address in a | |
831 register. There are three special cases however: | |
832 | |
833 * indexed addressing using small positive offsets from the stack pointer | |
834 | |
835 * indexed addressing using small signed offsets from the frame pointer | |
836 | |
837 * register plus register addressing using R13 as the base register. | |
838 | |
839 At the moment we only support the first two of these special cases. */ | |
840 | |
841 #ifdef REG_OK_STRICT | |
842 #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, LABEL) \ | |
843 do \ | |
844 { \ | |
845 if (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \ | |
846 goto LABEL; \ | |
847 if (GET_CODE (X) == PLUS \ | |
848 && ((MODE) == SImode || (MODE) == SFmode) \ | |
849 && GET_CODE (XEXP (X, 0)) == REG \ | |
850 && REGNO (XEXP (X, 0)) == STACK_POINTER_REGNUM \ | |
851 && GET_CODE (XEXP (X, 1)) == CONST_INT \ | |
852 && IN_RANGE (INTVAL (XEXP (X, 1)), 0, (1 << 6) - 4)) \ | |
853 goto LABEL; \ | |
854 if (GET_CODE (X) == PLUS \ | |
855 && ((MODE) == SImode || (MODE) == SFmode) \ | |
856 && GET_CODE (XEXP (X, 0)) == REG \ | |
857 && REGNO (XEXP (X, 0)) == FRAME_POINTER_REGNUM \ | |
858 && GET_CODE (XEXP (X, 1)) == CONST_INT \ | |
859 && IN_RANGE (INTVAL (XEXP (X, 1)), -(1 << 9), (1 << 9) - 4)) \ | |
860 goto LABEL; \ | |
861 } \ | |
862 while (0) | |
863 #else | |
864 #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, LABEL) \ | |
865 do \ | |
866 { \ | |
867 if (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \ | |
868 goto LABEL; \ | |
869 if (GET_CODE (X) == PLUS \ | |
870 && ((MODE) == SImode || (MODE) == SFmode) \ | |
871 && GET_CODE (XEXP (X, 0)) == REG \ | |
872 && REGNO (XEXP (X, 0)) == STACK_POINTER_REGNUM \ | |
873 && GET_CODE (XEXP (X, 1)) == CONST_INT \ | |
874 && IN_RANGE (INTVAL (XEXP (X, 1)), 0, (1 << 6) - 4)) \ | |
875 goto LABEL; \ | |
876 if (GET_CODE (X) == PLUS \ | |
877 && ((MODE) == SImode || (MODE) == SFmode) \ | |
878 && GET_CODE (XEXP (X, 0)) == REG \ | |
879 && (REGNO (XEXP (X, 0)) == FRAME_POINTER_REGNUM \ | |
880 || REGNO (XEXP (X, 0)) == ARG_POINTER_REGNUM) \ | |
881 && GET_CODE (XEXP (X, 1)) == CONST_INT \ | |
882 && IN_RANGE (INTVAL (XEXP (X, 1)), -(1 << 9), (1 << 9) - 4)) \ | |
883 goto LABEL; \ | |
884 } \ | |
885 while (0) | |
886 #endif | |
887 | |
888 /* A C expression that is nonzero if X (assumed to be a `reg' RTX) is valid for | |
889 use as a base register. For hard registers, it should always accept those | |
890 which the hardware permits and reject the others. Whether the macro accepts | |
891 or rejects pseudo registers must be controlled by `REG_OK_STRICT' as | |
892 described above. This usually requires two variant definitions, of which | |
893 `REG_OK_STRICT' controls the one actually used. */ | |
894 #ifdef REG_OK_STRICT | |
895 #define REG_OK_FOR_BASE_P(X) (((unsigned) REGNO (X)) <= STACK_POINTER_REGNUM) | |
896 #else | |
897 #define REG_OK_FOR_BASE_P(X) 1 | |
898 #endif | |
899 | |
900 /* A C expression that is nonzero if X (assumed to be a `reg' RTX) is valid for | |
901 use as an index register. | |
902 | |
903 The difference between an index register and a base register is that the | |
904 index register may be scaled. If an address involves the sum of two | |
905 registers, neither one of them scaled, then either one may be labeled the | |
906 "base" and the other the "index"; but whichever labeling is used must fit | |
907 the machine's constraints of which registers may serve in each capacity. | |
908 The compiler will try both labelings, looking for one that is valid, and | |
909 will reload one or both registers only if neither labeling works. */ | |
910 #define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X) | |
911 | |
912 /* A C statement or compound statement with a conditional `goto LABEL;' | |
913 executed if memory address X (an RTX) can have different meanings depending | |
914 on the machine mode of the memory reference it is used for or if the address | |
915 is valid for some modes but not others. | |
916 | |
917 Autoincrement and autodecrement addresses typically have mode-dependent | |
918 effects because the amount of the increment or decrement is the size of the | |
919 operand being addressed. Some machines have other mode-dependent addresses. | |
920 Many RISC machines have no mode-dependent addresses. | |
921 | |
922 You may assume that ADDR is a valid address for the machine. */ | |
923 #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) | |
924 | |
925 /* A C expression that is nonzero if X is a legitimate constant for an | |
926 immediate operand on the target machine. You can assume that X satisfies | |
927 `CONSTANT_P', so you need not check this. In fact, `1' is a suitable | |
928 definition for this macro on machines where anything `CONSTANT_P' is valid. */ | |
929 #define LEGITIMATE_CONSTANT_P(X) 1 | |
930 | |
931 /*}}}*/ | |
932 /*{{{ Describing Relative Costs of Operations */ | |
933 | |
934 /* Define this macro as a C expression which is nonzero if accessing less than | |
935 a word of memory (i.e. a `char' or a `short') is no faster than accessing a | |
936 word of memory, i.e., if such access require more than one instruction or if | |
937 there is no difference in cost between byte and (aligned) word loads. | |
938 | |
939 When this macro is not defined, the compiler will access a field by finding | |
940 the smallest containing object; when it is defined, a fullword load will be | |
941 used if alignment permits. Unless bytes accesses are faster than word | |
942 accesses, using word accesses is preferable since it may eliminate | |
943 subsequent memory access if subsequent accesses occur to other fields in the | |
944 same word of the structure, but to different bytes. */ | |
945 #define SLOW_BYTE_ACCESS 1 | |
946 | |
947 /*}}}*/ | |
948 /*{{{ Dividing the output into sections. */ | |
949 | |
950 /* A C expression whose value is a string containing the assembler operation | |
951 that should precede instructions and read-only data. Normally `".text"' is | |
952 right. */ | |
953 #define TEXT_SECTION_ASM_OP "\t.text" | |
954 | |
955 /* A C expression whose value is a string containing the assembler operation to | |
956 identify the following data as writable initialized data. Normally | |
957 `".data"' is right. */ | |
958 #define DATA_SECTION_ASM_OP "\t.data" | |
959 | |
960 /* If defined, a C expression whose value is a string containing the | |
961 assembler operation to identify the following data as | |
962 uninitialized global data. If not defined, and neither | |
963 `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined, | |
964 uninitialized global data will be output in the data section if | |
965 `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be | |
966 used. */ | |
967 #define BSS_SECTION_ASM_OP "\t.section .bss" | |
968 | |
969 /*}}}*/ | |
970 /*{{{ The Overall Framework of an Assembler File. */ | |
971 | |
972 /* A C string constant describing how to begin a comment in the target | |
973 assembler language. The compiler assumes that the comment will end at the | |
974 end of the line. */ | |
975 #define ASM_COMMENT_START ";" | |
976 | |
977 /* A C string constant for text to be output before each `asm' statement or | |
978 group of consecutive ones. Normally this is `"#APP"', which is a comment | |
979 that has no effect on most assemblers but tells the GNU assembler that it | |
980 must check the lines that follow for all valid assembler constructs. */ | |
981 #define ASM_APP_ON "#APP\n" | |
982 | |
983 /* A C string constant for text to be output after each `asm' statement or | |
984 group of consecutive ones. Normally this is `"#NO_APP"', which tells the | |
985 GNU assembler to resume making the time-saving assumptions that are valid | |
986 for ordinary compiler output. */ | |
987 #define ASM_APP_OFF "#NO_APP\n" | |
988 | |
989 /*}}}*/ | |
990 /*{{{ Output and Generation of Labels. */ | |
991 | |
992 /* Globalizing directive for a label. */ | |
993 #define GLOBAL_ASM_OP "\t.globl " | |
994 | |
995 /*}}}*/ | |
996 /*{{{ Output of Assembler Instructions. */ | |
997 | |
998 /* A C compound statement to output to stdio stream STREAM the assembler syntax | |
999 for an instruction operand X. X is an RTL expression. | |
1000 | |
1001 CODE is a value that can be used to specify one of several ways of printing | |
1002 the operand. It is used when identical operands must be printed differently | |
1003 depending on the context. CODE comes from the `%' specification that was | |
1004 used to request printing of the operand. If the specification was just | |
1005 `%DIGIT' then CODE is 0; if the specification was `%LTR DIGIT' then CODE is | |
1006 the ASCII code for LTR. | |
1007 | |
1008 If X is a register, this macro should print the register's name. The names | |
1009 can be found in an array `reg_names' whose type is `char *[]'. `reg_names' | |
1010 is initialized from `REGISTER_NAMES'. | |
1011 | |
1012 When the machine description has a specification `%PUNCT' (a `%' followed by | |
1013 a punctuation character), this macro is called with a null pointer for X and | |
1014 the punctuation character for CODE. */ | |
1015 #define PRINT_OPERAND(STREAM, X, CODE) fr30_print_operand (STREAM, X, CODE) | |
1016 | |
1017 /* A C expression which evaluates to true if CODE is a valid punctuation | |
1018 character for use in the `PRINT_OPERAND' macro. If | |
1019 `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no punctuation | |
1020 characters (except for the standard one, `%') are used in this way. */ | |
1021 #define PRINT_OPERAND_PUNCT_VALID_P(CODE) (CODE == '#') | |
1022 | |
1023 /* A C compound statement to output to stdio stream STREAM the assembler syntax | |
1024 for an instruction operand that is a memory reference whose address is X. X | |
1025 is an RTL expression. */ | |
1026 | |
1027 #define PRINT_OPERAND_ADDRESS(STREAM, X) fr30_print_operand_address (STREAM, X) | |
1028 | |
1029 /* If defined, C string expressions to be used for the `%R', `%L', `%U', and | |
1030 `%I' options of `asm_fprintf' (see `final.c'). These are useful when a | |
1031 single `md' file must support multiple assembler formats. In that case, the | |
1032 various `tm.h' files can define these macros differently. | |
1033 | |
1034 USER_LABEL_PREFIX is defined in svr4.h. */ | |
1035 #define REGISTER_PREFIX "%" | |
1036 #define LOCAL_LABEL_PREFIX "." | |
1037 #define USER_LABEL_PREFIX "" | |
1038 #define IMMEDIATE_PREFIX "" | |
1039 | |
1040 /*}}}*/ | |
1041 /*{{{ Output of Dispatch Tables. */ | |
1042 | |
1043 /* This macro should be provided on machines where the addresses in a dispatch | |
1044 table are relative to the table's own address. | |
1045 | |
1046 The definition should be a C statement to output to the stdio stream STREAM | |
1047 an assembler pseudo-instruction to generate a difference between two labels. | |
1048 VALUE and REL are the numbers of two internal labels. The definitions of | |
1049 these labels are output using `(*targetm.asm_out.internal_label)', and they must be | |
1050 printed in the same way here. For example, | |
1051 | |
1052 fprintf (STREAM, "\t.word L%d-L%d\n", VALUE, REL) */ | |
1053 #define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \ | |
1054 fprintf (STREAM, "\t.word .L%d-.L%d\n", VALUE, REL) | |
1055 | |
1056 /* This macro should be provided on machines where the addresses in a dispatch | |
1057 table are absolute. | |
1058 | |
1059 The definition should be a C statement to output to the stdio stream STREAM | |
1060 an assembler pseudo-instruction to generate a reference to a label. VALUE | |
1061 is the number of an internal label whose definition is output using | |
1062 `(*targetm.asm_out.internal_label)'. For example, | |
1063 | |
1064 fprintf (STREAM, "\t.word L%d\n", VALUE) */ | |
1065 #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) \ | |
1066 fprintf (STREAM, "\t.word .L%d\n", VALUE) | |
1067 | |
1068 /*}}}*/ | |
1069 /*{{{ Assembler Commands for Alignment. */ | |
1070 | |
1071 /* A C statement to output to the stdio stream STREAM an assembler command to | |
1072 advance the location counter to a multiple of 2 to the POWER bytes. POWER | |
1073 will be a C expression of type `int'. */ | |
1074 #define ASM_OUTPUT_ALIGN(STREAM, POWER) \ | |
1075 fprintf ((STREAM), "\t.p2align %d\n", (POWER)) | |
1076 | |
1077 /*}}}*/ | |
1078 /*{{{ Miscellaneous Parameters. */ | |
1079 | |
1080 /* An alias for a machine mode name. This is the machine mode that elements of | |
1081 a jump-table should have. */ | |
1082 #define CASE_VECTOR_MODE SImode | |
1083 | |
1084 /* The maximum number of bytes that a single instruction can move quickly from | |
1085 memory to memory. */ | |
1086 #define MOVE_MAX 8 | |
1087 | |
1088 /* A C expression which is nonzero if on this machine it is safe to "convert" | |
1089 an integer of INPREC bits to one of OUTPREC bits (where OUTPREC is smaller | |
1090 than INPREC) by merely operating on it as if it had only OUTPREC bits. | |
1091 | |
1092 On many machines, this expression can be 1. | |
1093 | |
1094 When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for modes for | |
1095 which `MODES_TIEABLE_P' is 0, suboptimal code can result. If this is the | |
1096 case, making `TRULY_NOOP_TRUNCATION' return 0 in such cases may improve | |
1097 things. */ | |
1098 #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1 | |
1099 | |
1100 /* An alias for the machine mode for pointers. On most machines, define this | |
1101 to be the integer mode corresponding to the width of a hardware pointer; | |
1102 `SImode' on 32-bit machine or `DImode' on 64-bit machines. On some machines | |
1103 you must define this to be one of the partial integer modes, such as | |
1104 `PSImode'. | |
1105 | |
1106 The width of `Pmode' must be at least as large as the value of | |
1107 `POINTER_SIZE'. If it is not equal, you must define the macro | |
1108 `POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to `Pmode'. */ | |
1109 #define Pmode SImode | |
1110 | |
1111 /* An alias for the machine mode used for memory references to functions being | |
1112 called, in `call' RTL expressions. On most machines this should be | |
1113 `QImode'. */ | |
1114 #define FUNCTION_MODE QImode | |
1115 | |
1116 /* If cross-compiling, don't require stdio.h etc to build libgcc.a. */ | |
1117 #if defined CROSS_DIRECTORY_STRUCTURE && ! defined inhibit_libc | |
1118 #define inhibit_libc | |
1119 #endif | |
1120 | |
1121 /*}}}*/ | |
1122 /*{{{ Exported variables */ | |
1123 | |
1124 /* Define the information needed to generate branch and scc insns. This is | |
1125 stored from the compare operation. Note that we can't use "rtx" here | |
1126 since it hasn't been defined! */ | |
1127 | |
1128 extern struct rtx_def * fr30_compare_op0; | |
1129 extern struct rtx_def * fr30_compare_op1; | |
1130 | |
1131 /*}}}*/ | |
1132 | |
1133 /* Local Variables: */ | |
1134 /* folded-file: t */ | |
1135 /* End: */ |