1 |
38 |
julius |
/*{{{ Comment. */
|
2 |
|
|
|
3 |
|
|
/* Definitions of FR30 target.
|
4 |
|
|
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2007
|
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 |
|
|
/* An initializer containing the names of the register classes as C string
|
286 |
|
|
constants. These names are used in writing some of the debugging dumps. */
|
287 |
|
|
#define REG_CLASS_NAMES \
|
288 |
|
|
{ \
|
289 |
|
|
"NO_REGS", \
|
290 |
|
|
"MULTIPLY_32_REG", \
|
291 |
|
|
"MULTIPLY_64_REG", \
|
292 |
|
|
"LOW_REGS", \
|
293 |
|
|
"HIGH_REGS", \
|
294 |
|
|
"REAL_REGS", \
|
295 |
|
|
"ALL_REGS" \
|
296 |
|
|
}
|
297 |
|
|
|
298 |
|
|
/* An initializer containing the contents of the register classes, as integers
|
299 |
|
|
which are bit masks. The Nth integer specifies the contents of class N.
|
300 |
|
|
The way the integer MASK is interpreted is that register R is in the class
|
301 |
|
|
if `MASK & (1 << R)' is 1.
|
302 |
|
|
|
303 |
|
|
When the machine has more than 32 registers, an integer does not suffice.
|
304 |
|
|
Then the integers are replaced by sub-initializers, braced groupings
|
305 |
|
|
containing several integers. Each sub-initializer must be suitable as an
|
306 |
|
|
initializer for the type `HARD_REG_SET' which is defined in
|
307 |
|
|
`hard-reg-set.h'. */
|
308 |
|
|
#define REG_CLASS_CONTENTS \
|
309 |
|
|
{ \
|
310 |
|
|
{ 0 }, \
|
311 |
|
|
{ 1 << MD_LOW_REGNUM }, \
|
312 |
|
|
{ (1 << MD_LOW_REGNUM) | (1 << MD_HIGH_REGNUM) }, \
|
313 |
|
|
{ (1 << 8) - 1 }, \
|
314 |
|
|
{ ((1 << 8) - 1) << 8 }, \
|
315 |
|
|
{ (1 << CONDITION_CODE_REGNUM) - 1 }, \
|
316 |
|
|
{ (1 << FIRST_PSEUDO_REGISTER) - 1 } \
|
317 |
|
|
}
|
318 |
|
|
|
319 |
|
|
/* A C expression whose value is a register class containing hard register
|
320 |
|
|
REGNO. In general there is more than one such class; choose a class which
|
321 |
|
|
is "minimal", meaning that no smaller class also contains the register. */
|
322 |
|
|
#define REGNO_REG_CLASS(REGNO) \
|
323 |
|
|
( (REGNO) < 8 ? LOW_REGS \
|
324 |
|
|
: (REGNO) < CONDITION_CODE_REGNUM ? HIGH_REGS \
|
325 |
|
|
: (REGNO) == MD_LOW_REGNUM ? MULTIPLY_32_REG \
|
326 |
|
|
: (REGNO) == MD_HIGH_REGNUM ? MULTIPLY_64_REG \
|
327 |
|
|
: ALL_REGS)
|
328 |
|
|
|
329 |
|
|
/* A macro whose definition is the name of the class to which a valid base
|
330 |
|
|
register must belong. A base register is one used in an address which is
|
331 |
|
|
the register value plus a displacement. */
|
332 |
|
|
#define BASE_REG_CLASS REAL_REGS
|
333 |
|
|
|
334 |
|
|
/* A macro whose definition is the name of the class to which a valid index
|
335 |
|
|
register must belong. An index register is one used in an address where its
|
336 |
|
|
value is either multiplied by a scale factor or added to another register
|
337 |
|
|
(as well as added to a displacement). */
|
338 |
|
|
#define INDEX_REG_CLASS REAL_REGS
|
339 |
|
|
|
340 |
|
|
/* A C expression which defines the machine-dependent operand constraint
|
341 |
|
|
letters for register classes. If CHAR is such a letter, the value should be
|
342 |
|
|
the register class corresponding to it. Otherwise, the value should be
|
343 |
|
|
`NO_REGS'. The register letter `r', corresponding to class `GENERAL_REGS',
|
344 |
|
|
will not be passed to this macro; you do not need to handle it.
|
345 |
|
|
|
346 |
|
|
The following letters are unavailable, due to being used as
|
347 |
|
|
constraints:
|
348 |
|
|
'0'..'9'
|
349 |
|
|
'<', '>'
|
350 |
|
|
'E', 'F', 'G', 'H'
|
351 |
|
|
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P'
|
352 |
|
|
'Q', 'R', 'S', 'T', 'U'
|
353 |
|
|
'V', 'X'
|
354 |
|
|
'g', 'i', 'm', 'n', 'o', 'p', 'r', 's' */
|
355 |
|
|
|
356 |
|
|
#define REG_CLASS_FROM_LETTER(CHAR) \
|
357 |
|
|
( (CHAR) == 'd' ? MULTIPLY_64_REG \
|
358 |
|
|
: (CHAR) == 'e' ? MULTIPLY_32_REG \
|
359 |
|
|
: (CHAR) == 'h' ? HIGH_REGS \
|
360 |
|
|
: (CHAR) == 'l' ? LOW_REGS \
|
361 |
|
|
: (CHAR) == 'a' ? ALL_REGS \
|
362 |
|
|
: NO_REGS)
|
363 |
|
|
|
364 |
|
|
/* A C expression which is nonzero if register number NUM is suitable for use
|
365 |
|
|
as a base register in operand addresses. It may be either a suitable hard
|
366 |
|
|
register or a pseudo register that has been allocated such a hard register. */
|
367 |
|
|
#define REGNO_OK_FOR_BASE_P(NUM) 1
|
368 |
|
|
|
369 |
|
|
/* A C expression which is nonzero if register number NUM is suitable for use
|
370 |
|
|
as an index 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 |
|
|
|
373 |
|
|
The difference between an index register and a base register is that the
|
374 |
|
|
index register may be scaled. If an address involves the sum of two
|
375 |
|
|
registers, neither one of them scaled, then either one may be labeled the
|
376 |
|
|
"base" and the other the "index"; but whichever labeling is used must fit
|
377 |
|
|
the machine's constraints of which registers may serve in each capacity.
|
378 |
|
|
The compiler will try both labelings, looking for one that is valid, and
|
379 |
|
|
will reload one or both registers only if neither labeling works. */
|
380 |
|
|
#define REGNO_OK_FOR_INDEX_P(NUM) 1
|
381 |
|
|
|
382 |
|
|
/* A C expression that places additional restrictions on the register class to
|
383 |
|
|
use when it is necessary to copy value X into a register in class CLASS.
|
384 |
|
|
The value is a register class; perhaps CLASS, or perhaps another, smaller
|
385 |
|
|
class. On many machines, the following definition is safe:
|
386 |
|
|
|
387 |
|
|
#define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
|
388 |
|
|
|
389 |
|
|
Sometimes returning a more restrictive class makes better code. For
|
390 |
|
|
example, on the 68000, when X is an integer constant that is in range for a
|
391 |
|
|
`moveq' instruction, the value of this macro is always `DATA_REGS' as long
|
392 |
|
|
as CLASS includes the data registers. Requiring a data register guarantees
|
393 |
|
|
that a `moveq' will be used.
|
394 |
|
|
|
395 |
|
|
If X is a `const_double', by returning `NO_REGS' you can force X into a
|
396 |
|
|
memory constant. This is useful on certain machines where immediate
|
397 |
|
|
floating values cannot be loaded into certain kinds of registers. */
|
398 |
|
|
#define PREFERRED_RELOAD_CLASS(X, CLASS) CLASS
|
399 |
|
|
|
400 |
|
|
/* A C expression for the maximum number of consecutive registers of
|
401 |
|
|
class CLASS needed to hold a value of mode MODE.
|
402 |
|
|
|
403 |
|
|
This is closely related to the macro `HARD_REGNO_NREGS'. In fact, the value
|
404 |
|
|
of the macro `CLASS_MAX_NREGS (CLASS, MODE)' should be the maximum value of
|
405 |
|
|
`HARD_REGNO_NREGS (REGNO, MODE)' for all REGNO values in the class CLASS.
|
406 |
|
|
|
407 |
|
|
This macro helps control the handling of multiple-word values in
|
408 |
|
|
the reload pass. */
|
409 |
|
|
#define CLASS_MAX_NREGS(CLASS, MODE) HARD_REGNO_NREGS (0, MODE)
|
410 |
|
|
|
411 |
|
|
/*}}}*/
|
412 |
|
|
/*{{{ CONSTANTS. */
|
413 |
|
|
|
414 |
|
|
/* A C expression that defines the machine-dependent operand constraint letters
|
415 |
|
|
(`I', `J', `K', .. 'P') that specify particular ranges of integer values.
|
416 |
|
|
If C is one of those letters, the expression should check that VALUE, an
|
417 |
|
|
integer, is in the appropriate range and return 1 if so, 0 otherwise. If C
|
418 |
|
|
is not one of those letters, the value should be 0 regardless of VALUE. */
|
419 |
|
|
#define CONST_OK_FOR_LETTER_P(VALUE, C) \
|
420 |
|
|
( (C) == 'I' ? IN_RANGE (VALUE, 0, 15) \
|
421 |
|
|
: (C) == 'J' ? IN_RANGE (VALUE, -16, -1) \
|
422 |
|
|
: (C) == 'K' ? IN_RANGE (VALUE, 16, 31) \
|
423 |
|
|
: (C) == 'L' ? IN_RANGE (VALUE, 0, (1 << 8) - 1) \
|
424 |
|
|
: (C) == 'M' ? IN_RANGE (VALUE, 0, (1 << 20) - 1) \
|
425 |
|
|
: (C) == 'P' ? IN_RANGE (VALUE, -(1 << 8), (1 << 8) - 1) \
|
426 |
|
|
: 0)
|
427 |
|
|
|
428 |
|
|
/* A C expression that defines the machine-dependent operand constraint letters
|
429 |
|
|
(`G', `H') that specify particular ranges of `const_double' values.
|
430 |
|
|
|
431 |
|
|
If C is one of those letters, the expression should check that VALUE, an RTX
|
432 |
|
|
of code `const_double', is in the appropriate range and return 1 if so, 0
|
433 |
|
|
otherwise. If C is not one of those letters, the value should be 0
|
434 |
|
|
regardless of VALUE.
|
435 |
|
|
|
436 |
|
|
`const_double' is used for all floating-point constants and for `DImode'
|
437 |
|
|
fixed-point constants. A given letter can accept either or both kinds of
|
438 |
|
|
values. It can use `GET_MODE' to distinguish between these kinds. */
|
439 |
|
|
#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 0
|
440 |
|
|
|
441 |
|
|
/* A C expression that defines the optional machine-dependent constraint
|
442 |
|
|
letters (`Q', `R', `S', `T', `U') that can be used to segregate specific
|
443 |
|
|
types of operands, usually memory references, for the target machine.
|
444 |
|
|
Normally this macro will not be defined. If it is required for a particular
|
445 |
|
|
target machine, it should return 1 if VALUE corresponds to the operand type
|
446 |
|
|
represented by the constraint letter C. If C is not defined as an extra
|
447 |
|
|
constraint, the value returned should be 0 regardless of VALUE.
|
448 |
|
|
|
449 |
|
|
For example, on the ROMP, load instructions cannot have their output in r0
|
450 |
|
|
if the memory reference contains a symbolic address. Constraint letter `Q'
|
451 |
|
|
is defined as representing a memory address that does *not* contain a
|
452 |
|
|
symbolic address. An alternative is specified with a `Q' constraint on the
|
453 |
|
|
input and `r' on the output. The next alternative specifies `m' on the
|
454 |
|
|
input and a register class that does not include r0 on the output. */
|
455 |
|
|
#define EXTRA_CONSTRAINT(VALUE, C) \
|
456 |
|
|
((C) == 'Q' ? (GET_CODE (VALUE) == MEM && GET_CODE (XEXP (VALUE, 0)) == SYMBOL_REF) : 0)
|
457 |
|
|
|
458 |
|
|
/*}}}*/
|
459 |
|
|
/*{{{ Basic Stack Layout. */
|
460 |
|
|
|
461 |
|
|
/* Define this macro if pushing a word onto the stack moves the stack pointer
|
462 |
|
|
to a smaller address. */
|
463 |
|
|
#define STACK_GROWS_DOWNWARD 1
|
464 |
|
|
|
465 |
|
|
/* Define this to macro nonzero if the addresses of local variable slots
|
466 |
|
|
are at negative offsets from the frame pointer. */
|
467 |
|
|
#define FRAME_GROWS_DOWNWARD 1
|
468 |
|
|
|
469 |
|
|
/* Offset from the frame pointer to the first local variable slot to be
|
470 |
|
|
allocated.
|
471 |
|
|
|
472 |
|
|
If `FRAME_GROWS_DOWNWARD', find the next slot's offset by subtracting the
|
473 |
|
|
first slot's length from `STARTING_FRAME_OFFSET'. Otherwise, it is found by
|
474 |
|
|
adding the length of the first slot to the value `STARTING_FRAME_OFFSET'. */
|
475 |
|
|
/* #define STARTING_FRAME_OFFSET -4 */
|
476 |
|
|
#define STARTING_FRAME_OFFSET 0
|
477 |
|
|
|
478 |
|
|
/* Offset from the stack pointer register to the first location at which
|
479 |
|
|
outgoing arguments are placed. If not specified, the default value of zero
|
480 |
|
|
is used. This is the proper value for most machines.
|
481 |
|
|
|
482 |
|
|
If `ARGS_GROW_DOWNWARD', this is the offset to the location above the first
|
483 |
|
|
location at which outgoing arguments are placed. */
|
484 |
|
|
#define STACK_POINTER_OFFSET 0
|
485 |
|
|
|
486 |
|
|
/* Offset from the argument pointer register to the first argument's address.
|
487 |
|
|
On some machines it may depend on the data type of the function.
|
488 |
|
|
|
489 |
|
|
If `ARGS_GROW_DOWNWARD', this is the offset to the location above the first
|
490 |
|
|
argument's address. */
|
491 |
|
|
#define FIRST_PARM_OFFSET(FUNDECL) 0
|
492 |
|
|
|
493 |
|
|
/* A C expression whose value is RTL representing the location of the incoming
|
494 |
|
|
return address at the beginning of any function, before the prologue. This
|
495 |
|
|
RTL is either a `REG', indicating that the return value is saved in `REG',
|
496 |
|
|
or a `MEM' representing a location in the stack.
|
497 |
|
|
|
498 |
|
|
You only need to define this macro if you want to support call frame
|
499 |
|
|
debugging information like that provided by DWARF 2. */
|
500 |
|
|
#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (SImode, RETURN_POINTER_REGNUM)
|
501 |
|
|
|
502 |
|
|
/*}}}*/
|
503 |
|
|
/*{{{ Register That Address the Stack Frame. */
|
504 |
|
|
|
505 |
|
|
/* The register number of the arg pointer register, which is used to access the
|
506 |
|
|
function's argument list. On some machines, this is the same as the frame
|
507 |
|
|
pointer register. On some machines, the hardware determines which register
|
508 |
|
|
this is. On other machines, you can choose any register you wish for this
|
509 |
|
|
purpose. If this is not the same register as the frame pointer register,
|
510 |
|
|
then you must mark it as a fixed register according to `FIXED_REGISTERS', or
|
511 |
|
|
arrange to be able to eliminate it. */
|
512 |
|
|
#define ARG_POINTER_REGNUM 20
|
513 |
|
|
|
514 |
|
|
/*}}}*/
|
515 |
|
|
/*{{{ Eliminating the Frame Pointer and the Arg Pointer. */
|
516 |
|
|
|
517 |
|
|
/* A C expression which is nonzero if a function must have and use a frame
|
518 |
|
|
pointer. This expression is evaluated in the reload pass. If its value is
|
519 |
|
|
nonzero the function will have a frame pointer.
|
520 |
|
|
|
521 |
|
|
The expression can in principle examine the current function and decide
|
522 |
|
|
according to the facts, but on most machines the constant 0 or the constant
|
523 |
|
|
1 suffices. Use 0 when the machine allows code to be generated with no
|
524 |
|
|
frame pointer, and doing so saves some time or space. Use 1 when there is
|
525 |
|
|
no possible advantage to avoiding a frame pointer.
|
526 |
|
|
|
527 |
|
|
In certain cases, the compiler does not know how to produce valid code
|
528 |
|
|
without a frame pointer. The compiler recognizes those cases and
|
529 |
|
|
automatically gives the function a frame pointer regardless of what
|
530 |
|
|
`FRAME_POINTER_REQUIRED' says. You don't need to worry about them.
|
531 |
|
|
|
532 |
|
|
In a function that does not require a frame pointer, the frame pointer
|
533 |
|
|
register can be allocated for ordinary usage, unless you mark it as a fixed
|
534 |
|
|
register. See `FIXED_REGISTERS' for more information. */
|
535 |
|
|
/* #define FRAME_POINTER_REQUIRED 0 */
|
536 |
|
|
#define FRAME_POINTER_REQUIRED \
|
537 |
|
|
(flag_omit_frame_pointer == 0 || current_function_pretend_args_size > 0)
|
538 |
|
|
|
539 |
|
|
/* If defined, this macro specifies a table of register pairs used to eliminate
|
540 |
|
|
unneeded registers that point into the stack frame. If it is not defined,
|
541 |
|
|
the only elimination attempted by the compiler is to replace references to
|
542 |
|
|
the frame pointer with references to the stack pointer.
|
543 |
|
|
|
544 |
|
|
The definition of this macro is a list of structure initializations, each of
|
545 |
|
|
which specifies an original and replacement register.
|
546 |
|
|
|
547 |
|
|
On some machines, the position of the argument pointer is not known until
|
548 |
|
|
the compilation is completed. In such a case, a separate hard register must
|
549 |
|
|
be used for the argument pointer. This register can be eliminated by
|
550 |
|
|
replacing it with either the frame pointer or the argument pointer,
|
551 |
|
|
depending on whether or not the frame pointer has been eliminated.
|
552 |
|
|
|
553 |
|
|
In this case, you might specify:
|
554 |
|
|
#define ELIMINABLE_REGS \
|
555 |
|
|
{{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
|
556 |
|
|
{ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
|
557 |
|
|
{FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
|
558 |
|
|
|
559 |
|
|
Note that the elimination of the argument pointer with the stack pointer is
|
560 |
|
|
specified first since that is the preferred elimination. */
|
561 |
|
|
|
562 |
|
|
#define ELIMINABLE_REGS \
|
563 |
|
|
{ \
|
564 |
|
|
{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
|
565 |
|
|
{ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
|
566 |
|
|
{FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM} \
|
567 |
|
|
}
|
568 |
|
|
|
569 |
|
|
/* A C expression that returns nonzero if the compiler is allowed to try to
|
570 |
|
|
replace register number FROM with register number TO. This macro
|
571 |
|
|
need only be defined if `ELIMINABLE_REGS' is defined, and will usually be
|
572 |
|
|
the constant 1, since most of the cases preventing register elimination are
|
573 |
|
|
things that the compiler already knows about. */
|
574 |
|
|
|
575 |
|
|
#define CAN_ELIMINATE(FROM, TO) \
|
576 |
|
|
((TO) == FRAME_POINTER_REGNUM || ! frame_pointer_needed)
|
577 |
|
|
|
578 |
|
|
/* This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'. It specifies the
|
579 |
|
|
initial difference between the specified pair of registers. This macro must
|
580 |
|
|
be defined if `ELIMINABLE_REGS' is defined. */
|
581 |
|
|
#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
|
582 |
|
|
(OFFSET) = fr30_compute_frame_size (FROM, TO)
|
583 |
|
|
|
584 |
|
|
/*}}}*/
|
585 |
|
|
/*{{{ Passing Function Arguments on the Stack. */
|
586 |
|
|
|
587 |
|
|
/* If defined, the maximum amount of space required for outgoing arguments will
|
588 |
|
|
be computed and placed into the variable
|
589 |
|
|
`current_function_outgoing_args_size'. No space will be pushed onto the
|
590 |
|
|
stack for each call; instead, the function prologue should increase the
|
591 |
|
|
stack frame size by this amount.
|
592 |
|
|
|
593 |
|
|
Defining both `PUSH_ROUNDING' and `ACCUMULATE_OUTGOING_ARGS' is not
|
594 |
|
|
proper. */
|
595 |
|
|
#define ACCUMULATE_OUTGOING_ARGS 1
|
596 |
|
|
|
597 |
|
|
/* A C expression that should indicate the number of bytes of its own arguments
|
598 |
|
|
that a function pops on returning, or 0 if the function pops no arguments
|
599 |
|
|
and the caller must therefore pop them all after the function returns.
|
600 |
|
|
|
601 |
|
|
FUNDECL is a C variable whose value is a tree node that describes the
|
602 |
|
|
function in question. Normally it is a node of type `FUNCTION_DECL' that
|
603 |
|
|
describes the declaration of the function. From this it is possible to
|
604 |
|
|
obtain the DECL_ATTRIBUTES of the function.
|
605 |
|
|
|
606 |
|
|
FUNTYPE 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_TYPE' that
|
608 |
|
|
describes the data type of the function. From this it is possible to obtain
|
609 |
|
|
the data types of the value and arguments (if known).
|
610 |
|
|
|
611 |
|
|
When a call to a library function is being considered, FUNTYPE will contain
|
612 |
|
|
an identifier node for the library function. Thus, if you need to
|
613 |
|
|
distinguish among various library functions, you can do so by their names.
|
614 |
|
|
Note that "library function" in this context means a function used to
|
615 |
|
|
perform arithmetic, whose name is known specially in the compiler and was
|
616 |
|
|
not mentioned in the C code being compiled.
|
617 |
|
|
|
618 |
|
|
STACK-SIZE is the number of bytes of arguments passed on the stack. If a
|
619 |
|
|
variable number of bytes is passed, it is zero, and argument popping will
|
620 |
|
|
always be the responsibility of the calling function.
|
621 |
|
|
|
622 |
|
|
On the VAX, all functions always pop their arguments, so the definition of
|
623 |
|
|
this macro is STACK-SIZE. On the 68000, using the standard calling
|
624 |
|
|
convention, no functions pop their arguments, so the value of the macro is
|
625 |
|
|
always 0 in this case. But an alternative calling convention is available
|
626 |
|
|
in which functions that take a fixed number of arguments pop them but other
|
627 |
|
|
functions (such as `printf') pop nothing (the caller pops all). When this
|
628 |
|
|
convention is in use, FUNTYPE is examined to determine whether a function
|
629 |
|
|
takes a fixed number of arguments. */
|
630 |
|
|
#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0
|
631 |
|
|
|
632 |
|
|
/*}}}*/
|
633 |
|
|
/*{{{ Function Arguments in Registers. */
|
634 |
|
|
|
635 |
|
|
/* The number of register assigned to holding function arguments. */
|
636 |
|
|
|
637 |
|
|
#define FR30_NUM_ARG_REGS 4
|
638 |
|
|
|
639 |
|
|
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
|
640 |
|
|
( (NAMED) == 0 ? NULL_RTX \
|
641 |
|
|
: targetm.calls.must_pass_in_stack (MODE, TYPE) ? NULL_RTX \
|
642 |
|
|
: (CUM) >= FR30_NUM_ARG_REGS ? NULL_RTX \
|
643 |
|
|
: gen_rtx_REG (MODE, CUM + FIRST_ARG_REGNUM))
|
644 |
|
|
|
645 |
|
|
/* A C type for declaring a variable that is used as the first argument of
|
646 |
|
|
`FUNCTION_ARG' and other related values. For some target machines, the type
|
647 |
|
|
`int' suffices and can hold the number of bytes of argument so far.
|
648 |
|
|
|
649 |
|
|
There is no need to record in `CUMULATIVE_ARGS' anything about the arguments
|
650 |
|
|
that have been passed on the stack. The compiler has other variables to
|
651 |
|
|
keep track of that. For target machines on which all arguments are passed
|
652 |
|
|
on the stack, there is no need to store anything in `CUMULATIVE_ARGS';
|
653 |
|
|
however, the data structure must exist and should not be empty, so use
|
654 |
|
|
`int'. */
|
655 |
|
|
/* On the FR30 this value is an accumulating count of the number of argument
|
656 |
|
|
registers that have been filled with argument values, as opposed to say,
|
657 |
|
|
the number of bytes of argument accumulated so far. */
|
658 |
|
|
#define CUMULATIVE_ARGS int
|
659 |
|
|
|
660 |
|
|
/* A C statement (sans semicolon) for initializing the variable CUM for the
|
661 |
|
|
state at the beginning of the argument list. The variable has type
|
662 |
|
|
`CUMULATIVE_ARGS'. The value of FNTYPE is the tree node for the data type
|
663 |
|
|
of the function which will receive the args, or 0 if the args are to a
|
664 |
|
|
compiler support library function. The value of INDIRECT is nonzero when
|
665 |
|
|
processing an indirect call, for example a call through a function pointer.
|
666 |
|
|
The value of INDIRECT is zero for a call to an explicitly named function, a
|
667 |
|
|
library function call, or when `INIT_CUMULATIVE_ARGS' is used to find
|
668 |
|
|
arguments for the function being compiled.
|
669 |
|
|
|
670 |
|
|
When processing a call to a compiler support library function, LIBNAME
|
671 |
|
|
identifies which one. It is a `symbol_ref' rtx which contains the name of
|
672 |
|
|
the function, as a string. LIBNAME is 0 when an ordinary C function call is
|
673 |
|
|
being processed. Thus, each time this macro is called, either LIBNAME or
|
674 |
|
|
FNTYPE is nonzero, but never both of them at once. */
|
675 |
|
|
#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
|
676 |
|
|
(CUM) = 0
|
677 |
|
|
|
678 |
|
|
/* A C statement (sans semicolon) to update the summarizer variable CUM to
|
679 |
|
|
advance past an argument in the argument list. The values MODE, TYPE and
|
680 |
|
|
NAMED describe that argument. Once this is done, the variable CUM is
|
681 |
|
|
suitable for analyzing the *following* argument with `FUNCTION_ARG', etc.
|
682 |
|
|
|
683 |
|
|
This macro need not do anything if the argument in question was passed on
|
684 |
|
|
the stack. The compiler knows how to track the amount of stack space used
|
685 |
|
|
for arguments without any special help. */
|
686 |
|
|
#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
|
687 |
|
|
(CUM) += (NAMED) * fr30_num_arg_regs (MODE, TYPE)
|
688 |
|
|
|
689 |
|
|
/* A C expression that is nonzero if REGNO is the number of a hard register in
|
690 |
|
|
which function arguments are sometimes passed. This does *not* include
|
691 |
|
|
implicit arguments such as the static chain and the structure-value address.
|
692 |
|
|
On many machines, no registers can be used for this purpose since all
|
693 |
|
|
function arguments are pushed on the stack. */
|
694 |
|
|
#define FUNCTION_ARG_REGNO_P(REGNO) \
|
695 |
|
|
((REGNO) >= FIRST_ARG_REGNUM && ((REGNO) < FIRST_ARG_REGNUM + FR30_NUM_ARG_REGS))
|
696 |
|
|
|
697 |
|
|
/*}}}*/
|
698 |
|
|
/*{{{ How Scalar Function Values are Returned. */
|
699 |
|
|
|
700 |
|
|
#define FUNCTION_VALUE(VALTYPE, FUNC) \
|
701 |
|
|
gen_rtx_REG (TYPE_MODE (VALTYPE), RETURN_VALUE_REGNUM)
|
702 |
|
|
|
703 |
|
|
/* A C expression to create an RTX representing the place where a library
|
704 |
|
|
function returns a value of mode MODE. If the precise function being called
|
705 |
|
|
is known, FUNC is a tree node (`FUNCTION_DECL') for it; otherwise, FUNC is a
|
706 |
|
|
null pointer. This makes it possible to use a different value-returning
|
707 |
|
|
convention for specific functions when all their calls are known.
|
708 |
|
|
|
709 |
|
|
Note that "library function" in this context means a compiler support
|
710 |
|
|
routine, used to perform arithmetic, whose name is known specially by the
|
711 |
|
|
compiler and was not mentioned in the C code being compiled.
|
712 |
|
|
|
713 |
|
|
The definition of `LIBRARY_VALUE' need not be concerned aggregate data
|
714 |
|
|
types, because none of the library functions returns such types. */
|
715 |
|
|
#define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, RETURN_VALUE_REGNUM)
|
716 |
|
|
|
717 |
|
|
/* A C expression that is nonzero if REGNO is the number of a hard register in
|
718 |
|
|
which the values of called function may come back. */
|
719 |
|
|
|
720 |
|
|
#define FUNCTION_VALUE_REGNO_P(REGNO) ((REGNO) == RETURN_VALUE_REGNUM)
|
721 |
|
|
|
722 |
|
|
/*}}}*/
|
723 |
|
|
/*{{{ How Large Values are Returned. */
|
724 |
|
|
|
725 |
|
|
/* Define this macro to be 1 if all structure and union return values must be
|
726 |
|
|
in memory. Since this results in slower code, this should be defined only
|
727 |
|
|
if needed for compatibility with other compilers or with an ABI. If you
|
728 |
|
|
define this macro to be 0, then the conventions used for structure and union
|
729 |
|
|
return values are decided by the `RETURN_IN_MEMORY' macro.
|
730 |
|
|
|
731 |
|
|
If not defined, this defaults to the value 1. */
|
732 |
|
|
#define DEFAULT_PCC_STRUCT_RETURN 1
|
733 |
|
|
|
734 |
|
|
/*}}}*/
|
735 |
|
|
/*{{{ Generating Code for Profiling. */
|
736 |
|
|
|
737 |
|
|
/* A C statement or compound statement to output to FILE some assembler code to
|
738 |
|
|
call the profiling subroutine `mcount'. Before calling, the assembler code
|
739 |
|
|
must load the address of a counter variable into a register where `mcount'
|
740 |
|
|
expects to find the address. The name of this variable is `LP' followed by
|
741 |
|
|
the number LABELNO, so you would generate the name using `LP%d' in a
|
742 |
|
|
`fprintf'.
|
743 |
|
|
|
744 |
|
|
The details of how the address should be passed to `mcount' are determined
|
745 |
|
|
by your operating system environment, not by GCC. To figure them out,
|
746 |
|
|
compile a small program for profiling using the system's installed C
|
747 |
|
|
compiler and look at the assembler code that results. */
|
748 |
|
|
#define FUNCTION_PROFILER(FILE, LABELNO) \
|
749 |
|
|
{ \
|
750 |
|
|
fprintf (FILE, "\t mov rp, r1\n" ); \
|
751 |
|
|
fprintf (FILE, "\t ldi:32 mcount, r0\n" ); \
|
752 |
|
|
fprintf (FILE, "\t call @r0\n" ); \
|
753 |
|
|
fprintf (FILE, ".word\tLP%d\n", LABELNO); \
|
754 |
|
|
}
|
755 |
|
|
|
756 |
|
|
/*}}}*/
|
757 |
|
|
/*{{{ Trampolines for Nested Functions. */
|
758 |
|
|
|
759 |
|
|
/* On the FR30, the trampoline is:
|
760 |
|
|
|
761 |
|
|
nop
|
762 |
|
|
ldi:32 STATIC, r12
|
763 |
|
|
nop
|
764 |
|
|
ldi:32 FUNCTION, r0
|
765 |
|
|
jmp @r0
|
766 |
|
|
|
767 |
|
|
The no-ops are to guarantee that the static chain and final
|
768 |
|
|
target are 32 bit aligned within the trampoline. That allows us to
|
769 |
|
|
initialize those locations with simple SImode stores. The alternative
|
770 |
|
|
would be to use HImode stores. */
|
771 |
|
|
|
772 |
|
|
/* A C statement to output, on the stream FILE, assembler code for a block of
|
773 |
|
|
data that contains the constant parts of a trampoline. This code should not
|
774 |
|
|
include a label--the label is taken care of automatically. */
|
775 |
|
|
#define TRAMPOLINE_TEMPLATE(FILE) \
|
776 |
|
|
{ \
|
777 |
|
|
fprintf (FILE, "\tnop\n"); \
|
778 |
|
|
fprintf (FILE, "\tldi:32\t#0, %s\n", reg_names [STATIC_CHAIN_REGNUM]); \
|
779 |
|
|
fprintf (FILE, "\tnop\n"); \
|
780 |
|
|
fprintf (FILE, "\tldi:32\t#0, %s\n", reg_names [COMPILER_SCRATCH_REGISTER]); \
|
781 |
|
|
fprintf (FILE, "\tjmp\t@%s\n", reg_names [COMPILER_SCRATCH_REGISTER]); \
|
782 |
|
|
}
|
783 |
|
|
|
784 |
|
|
/* A C expression for the size in bytes of the trampoline, as an integer. */
|
785 |
|
|
#define TRAMPOLINE_SIZE 18
|
786 |
|
|
|
787 |
|
|
/* We want the trampoline to be aligned on a 32bit boundary so that we can
|
788 |
|
|
make sure the location of the static chain & target function within
|
789 |
|
|
the trampoline is also aligned on a 32bit boundary. */
|
790 |
|
|
#define TRAMPOLINE_ALIGNMENT 32
|
791 |
|
|
|
792 |
|
|
/* A C statement to initialize the variable parts of a trampoline. ADDR is an
|
793 |
|
|
RTX for the address of the trampoline; FNADDR is an RTX for the address of
|
794 |
|
|
the nested function; STATIC_CHAIN is an RTX for the static chain value that
|
795 |
|
|
should be passed to the function when it is called. */
|
796 |
|
|
#define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, STATIC_CHAIN) \
|
797 |
|
|
do \
|
798 |
|
|
{ \
|
799 |
|
|
emit_move_insn (gen_rtx_MEM (SImode, plus_constant (ADDR, 4)), STATIC_CHAIN);\
|
800 |
|
|
emit_move_insn (gen_rtx_MEM (SImode, plus_constant (ADDR, 12)), FNADDR); \
|
801 |
|
|
} while (0);
|
802 |
|
|
|
803 |
|
|
/*}}}*/
|
804 |
|
|
/*{{{ Addressing Modes. */
|
805 |
|
|
|
806 |
|
|
/* A C expression that is 1 if the RTX X is a constant which is a valid
|
807 |
|
|
address. On most machines, this can be defined as `CONSTANT_P (X)', but a
|
808 |
|
|
few machines are more restrictive in which constant addresses are supported.
|
809 |
|
|
|
810 |
|
|
`CONSTANT_P' accepts integer-values expressions whose values are not
|
811 |
|
|
explicitly known, such as `symbol_ref', `label_ref', and `high' expressions
|
812 |
|
|
and `const' arithmetic expressions, in addition to `const_int' and
|
813 |
|
|
`const_double' expressions. */
|
814 |
|
|
#define CONSTANT_ADDRESS_P(X) CONSTANT_P (X)
|
815 |
|
|
|
816 |
|
|
/* A number, the maximum number of registers that can appear in a valid memory
|
817 |
|
|
address. Note that it is up to you to specify a value equal to the maximum
|
818 |
|
|
number that `GO_IF_LEGITIMATE_ADDRESS' would ever accept. */
|
819 |
|
|
#define MAX_REGS_PER_ADDRESS 1
|
820 |
|
|
|
821 |
|
|
/* A C compound statement with a conditional `goto LABEL;' executed if X (an
|
822 |
|
|
RTX) is a legitimate memory address on the target machine for a memory
|
823 |
|
|
operand of mode MODE. */
|
824 |
|
|
|
825 |
|
|
/* On the FR30 we only have one real addressing mode - an address in a
|
826 |
|
|
register. There are three special cases however:
|
827 |
|
|
|
828 |
|
|
* indexed addressing using small positive offsets from the stack pointer
|
829 |
|
|
|
830 |
|
|
* indexed addressing using small signed offsets from the frame pointer
|
831 |
|
|
|
832 |
|
|
* register plus register addressing using R13 as the base register.
|
833 |
|
|
|
834 |
|
|
At the moment we only support the first two of these special cases. */
|
835 |
|
|
|
836 |
|
|
#ifdef REG_OK_STRICT
|
837 |
|
|
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, LABEL) \
|
838 |
|
|
do \
|
839 |
|
|
{ \
|
840 |
|
|
if (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \
|
841 |
|
|
goto LABEL; \
|
842 |
|
|
if (GET_CODE (X) == PLUS \
|
843 |
|
|
&& ((MODE) == SImode || (MODE) == SFmode) \
|
844 |
|
|
&& GET_CODE (XEXP (X, 0)) == REG \
|
845 |
|
|
&& REGNO (XEXP (X, 0)) == STACK_POINTER_REGNUM \
|
846 |
|
|
&& GET_CODE (XEXP (X, 1)) == CONST_INT \
|
847 |
|
|
&& IN_RANGE (INTVAL (XEXP (X, 1)), 0, (1 << 6) - 4)) \
|
848 |
|
|
goto LABEL; \
|
849 |
|
|
if (GET_CODE (X) == PLUS \
|
850 |
|
|
&& ((MODE) == SImode || (MODE) == SFmode) \
|
851 |
|
|
&& GET_CODE (XEXP (X, 0)) == REG \
|
852 |
|
|
&& REGNO (XEXP (X, 0)) == FRAME_POINTER_REGNUM \
|
853 |
|
|
&& GET_CODE (XEXP (X, 1)) == CONST_INT \
|
854 |
|
|
&& IN_RANGE (INTVAL (XEXP (X, 1)), -(1 << 9), (1 << 9) - 4)) \
|
855 |
|
|
goto LABEL; \
|
856 |
|
|
} \
|
857 |
|
|
while (0)
|
858 |
|
|
#else
|
859 |
|
|
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, LABEL) \
|
860 |
|
|
do \
|
861 |
|
|
{ \
|
862 |
|
|
if (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \
|
863 |
|
|
goto LABEL; \
|
864 |
|
|
if (GET_CODE (X) == PLUS \
|
865 |
|
|
&& ((MODE) == SImode || (MODE) == SFmode) \
|
866 |
|
|
&& GET_CODE (XEXP (X, 0)) == REG \
|
867 |
|
|
&& REGNO (XEXP (X, 0)) == STACK_POINTER_REGNUM \
|
868 |
|
|
&& GET_CODE (XEXP (X, 1)) == CONST_INT \
|
869 |
|
|
&& IN_RANGE (INTVAL (XEXP (X, 1)), 0, (1 << 6) - 4)) \
|
870 |
|
|
goto LABEL; \
|
871 |
|
|
if (GET_CODE (X) == PLUS \
|
872 |
|
|
&& ((MODE) == SImode || (MODE) == SFmode) \
|
873 |
|
|
&& GET_CODE (XEXP (X, 0)) == REG \
|
874 |
|
|
&& (REGNO (XEXP (X, 0)) == FRAME_POINTER_REGNUM \
|
875 |
|
|
|| REGNO (XEXP (X, 0)) == ARG_POINTER_REGNUM) \
|
876 |
|
|
&& GET_CODE (XEXP (X, 1)) == CONST_INT \
|
877 |
|
|
&& IN_RANGE (INTVAL (XEXP (X, 1)), -(1 << 9), (1 << 9) - 4)) \
|
878 |
|
|
goto LABEL; \
|
879 |
|
|
} \
|
880 |
|
|
while (0)
|
881 |
|
|
#endif
|
882 |
|
|
|
883 |
|
|
/* A C expression that is nonzero if X (assumed to be a `reg' RTX) is valid for
|
884 |
|
|
use as a base register. For hard registers, it should always accept those
|
885 |
|
|
which the hardware permits and reject the others. Whether the macro accepts
|
886 |
|
|
or rejects pseudo registers must be controlled by `REG_OK_STRICT' as
|
887 |
|
|
described above. This usually requires two variant definitions, of which
|
888 |
|
|
`REG_OK_STRICT' controls the one actually used. */
|
889 |
|
|
#ifdef REG_OK_STRICT
|
890 |
|
|
#define REG_OK_FOR_BASE_P(X) (((unsigned) REGNO (X)) <= STACK_POINTER_REGNUM)
|
891 |
|
|
#else
|
892 |
|
|
#define REG_OK_FOR_BASE_P(X) 1
|
893 |
|
|
#endif
|
894 |
|
|
|
895 |
|
|
/* A C expression that is nonzero if X (assumed to be a `reg' RTX) is valid for
|
896 |
|
|
use as an index register.
|
897 |
|
|
|
898 |
|
|
The difference between an index register and a base register is that the
|
899 |
|
|
index register may be scaled. If an address involves the sum of two
|
900 |
|
|
registers, neither one of them scaled, then either one may be labeled the
|
901 |
|
|
"base" and the other the "index"; but whichever labeling is used must fit
|
902 |
|
|
the machine's constraints of which registers may serve in each capacity.
|
903 |
|
|
The compiler will try both labelings, looking for one that is valid, and
|
904 |
|
|
will reload one or both registers only if neither labeling works. */
|
905 |
|
|
#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X)
|
906 |
|
|
|
907 |
|
|
/* A C statement or compound statement with a conditional `goto LABEL;'
|
908 |
|
|
executed if memory address X (an RTX) can have different meanings depending
|
909 |
|
|
on the machine mode of the memory reference it is used for or if the address
|
910 |
|
|
is valid for some modes but not others.
|
911 |
|
|
|
912 |
|
|
Autoincrement and autodecrement addresses typically have mode-dependent
|
913 |
|
|
effects because the amount of the increment or decrement is the size of the
|
914 |
|
|
operand being addressed. Some machines have other mode-dependent addresses.
|
915 |
|
|
Many RISC machines have no mode-dependent addresses.
|
916 |
|
|
|
917 |
|
|
You may assume that ADDR is a valid address for the machine. */
|
918 |
|
|
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)
|
919 |
|
|
|
920 |
|
|
/* A C expression that is nonzero if X is a legitimate constant for an
|
921 |
|
|
immediate operand on the target machine. You can assume that X satisfies
|
922 |
|
|
`CONSTANT_P', so you need not check this. In fact, `1' is a suitable
|
923 |
|
|
definition for this macro on machines where anything `CONSTANT_P' is valid. */
|
924 |
|
|
#define LEGITIMATE_CONSTANT_P(X) 1
|
925 |
|
|
|
926 |
|
|
/*}}}*/
|
927 |
|
|
/*{{{ Describing Relative Costs of Operations */
|
928 |
|
|
|
929 |
|
|
/* Define this macro as a C expression which is nonzero if accessing less than
|
930 |
|
|
a word of memory (i.e. a `char' or a `short') is no faster than accessing a
|
931 |
|
|
word of memory, i.e., if such access require more than one instruction or if
|
932 |
|
|
there is no difference in cost between byte and (aligned) word loads.
|
933 |
|
|
|
934 |
|
|
When this macro is not defined, the compiler will access a field by finding
|
935 |
|
|
the smallest containing object; when it is defined, a fullword load will be
|
936 |
|
|
used if alignment permits. Unless bytes accesses are faster than word
|
937 |
|
|
accesses, using word accesses is preferable since it may eliminate
|
938 |
|
|
subsequent memory access if subsequent accesses occur to other fields in the
|
939 |
|
|
same word of the structure, but to different bytes. */
|
940 |
|
|
#define SLOW_BYTE_ACCESS 1
|
941 |
|
|
|
942 |
|
|
/*}}}*/
|
943 |
|
|
/*{{{ Dividing the output into sections. */
|
944 |
|
|
|
945 |
|
|
/* A C expression whose value is a string containing the assembler operation
|
946 |
|
|
that should precede instructions and read-only data. Normally `".text"' is
|
947 |
|
|
right. */
|
948 |
|
|
#define TEXT_SECTION_ASM_OP "\t.text"
|
949 |
|
|
|
950 |
|
|
/* A C expression whose value is a string containing the assembler operation to
|
951 |
|
|
identify the following data as writable initialized data. Normally
|
952 |
|
|
`".data"' is right. */
|
953 |
|
|
#define DATA_SECTION_ASM_OP "\t.data"
|
954 |
|
|
|
955 |
|
|
/* If defined, a C expression whose value is a string containing the
|
956 |
|
|
assembler operation to identify the following data as
|
957 |
|
|
uninitialized global data. If not defined, and neither
|
958 |
|
|
`ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined,
|
959 |
|
|
uninitialized global data will be output in the data section if
|
960 |
|
|
`-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be
|
961 |
|
|
used. */
|
962 |
|
|
#define BSS_SECTION_ASM_OP "\t.section .bss"
|
963 |
|
|
|
964 |
|
|
/*}}}*/
|
965 |
|
|
/*{{{ The Overall Framework of an Assembler File. */
|
966 |
|
|
|
967 |
|
|
/* A C string constant describing how to begin a comment in the target
|
968 |
|
|
assembler language. The compiler assumes that the comment will end at the
|
969 |
|
|
end of the line. */
|
970 |
|
|
#define ASM_COMMENT_START ";"
|
971 |
|
|
|
972 |
|
|
/* A C string constant for text to be output before each `asm' statement or
|
973 |
|
|
group of consecutive ones. Normally this is `"#APP"', which is a comment
|
974 |
|
|
that has no effect on most assemblers but tells the GNU assembler that it
|
975 |
|
|
must check the lines that follow for all valid assembler constructs. */
|
976 |
|
|
#define ASM_APP_ON "#APP\n"
|
977 |
|
|
|
978 |
|
|
/* A C string constant for text to be output after each `asm' statement or
|
979 |
|
|
group of consecutive ones. Normally this is `"#NO_APP"', which tells the
|
980 |
|
|
GNU assembler to resume making the time-saving assumptions that are valid
|
981 |
|
|
for ordinary compiler output. */
|
982 |
|
|
#define ASM_APP_OFF "#NO_APP\n"
|
983 |
|
|
|
984 |
|
|
/*}}}*/
|
985 |
|
|
/*{{{ Output and Generation of Labels. */
|
986 |
|
|
|
987 |
|
|
/* Globalizing directive for a label. */
|
988 |
|
|
#define GLOBAL_ASM_OP "\t.globl "
|
989 |
|
|
|
990 |
|
|
/*}}}*/
|
991 |
|
|
/*{{{ Output of Assembler Instructions. */
|
992 |
|
|
|
993 |
|
|
/* A C compound statement to output to stdio stream STREAM the assembler syntax
|
994 |
|
|
for an instruction operand X. X is an RTL expression.
|
995 |
|
|
|
996 |
|
|
CODE is a value that can be used to specify one of several ways of printing
|
997 |
|
|
the operand. It is used when identical operands must be printed differently
|
998 |
|
|
depending on the context. CODE comes from the `%' specification that was
|
999 |
|
|
used to request printing of the operand. If the specification was just
|
1000 |
|
|
`%DIGIT' then CODE is 0; if the specification was `%LTR DIGIT' then CODE is
|
1001 |
|
|
the ASCII code for LTR.
|
1002 |
|
|
|
1003 |
|
|
If X is a register, this macro should print the register's name. The names
|
1004 |
|
|
can be found in an array `reg_names' whose type is `char *[]'. `reg_names'
|
1005 |
|
|
is initialized from `REGISTER_NAMES'.
|
1006 |
|
|
|
1007 |
|
|
When the machine description has a specification `%PUNCT' (a `%' followed by
|
1008 |
|
|
a punctuation character), this macro is called with a null pointer for X and
|
1009 |
|
|
the punctuation character for CODE. */
|
1010 |
|
|
#define PRINT_OPERAND(STREAM, X, CODE) fr30_print_operand (STREAM, X, CODE)
|
1011 |
|
|
|
1012 |
|
|
/* A C expression which evaluates to true if CODE is a valid punctuation
|
1013 |
|
|
character for use in the `PRINT_OPERAND' macro. If
|
1014 |
|
|
`PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no punctuation
|
1015 |
|
|
characters (except for the standard one, `%') are used in this way. */
|
1016 |
|
|
#define PRINT_OPERAND_PUNCT_VALID_P(CODE) (CODE == '#')
|
1017 |
|
|
|
1018 |
|
|
/* A C compound statement to output to stdio stream STREAM the assembler syntax
|
1019 |
|
|
for an instruction operand that is a memory reference whose address is X. X
|
1020 |
|
|
is an RTL expression. */
|
1021 |
|
|
|
1022 |
|
|
#define PRINT_OPERAND_ADDRESS(STREAM, X) fr30_print_operand_address (STREAM, X)
|
1023 |
|
|
|
1024 |
|
|
/* If defined, C string expressions to be used for the `%R', `%L', `%U', and
|
1025 |
|
|
`%I' options of `asm_fprintf' (see `final.c'). These are useful when a
|
1026 |
|
|
single `md' file must support multiple assembler formats. In that case, the
|
1027 |
|
|
various `tm.h' files can define these macros differently.
|
1028 |
|
|
|
1029 |
|
|
USER_LABEL_PREFIX is defined in svr4.h. */
|
1030 |
|
|
#define REGISTER_PREFIX "%"
|
1031 |
|
|
#define LOCAL_LABEL_PREFIX "."
|
1032 |
|
|
#define USER_LABEL_PREFIX ""
|
1033 |
|
|
#define IMMEDIATE_PREFIX ""
|
1034 |
|
|
|
1035 |
|
|
/*}}}*/
|
1036 |
|
|
/*{{{ Output of Dispatch Tables. */
|
1037 |
|
|
|
1038 |
|
|
/* This macro should be provided on machines where the addresses in a dispatch
|
1039 |
|
|
table are relative to the table's own address.
|
1040 |
|
|
|
1041 |
|
|
The definition should be a C statement to output to the stdio stream STREAM
|
1042 |
|
|
an assembler pseudo-instruction to generate a difference between two labels.
|
1043 |
|
|
VALUE and REL are the numbers of two internal labels. The definitions of
|
1044 |
|
|
these labels are output using `(*targetm.asm_out.internal_label)', and they must be
|
1045 |
|
|
printed in the same way here. For example,
|
1046 |
|
|
|
1047 |
|
|
fprintf (STREAM, "\t.word L%d-L%d\n", VALUE, REL) */
|
1048 |
|
|
#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \
|
1049 |
|
|
fprintf (STREAM, "\t.word .L%d-.L%d\n", VALUE, REL)
|
1050 |
|
|
|
1051 |
|
|
/* This macro should be provided on machines where the addresses in a dispatch
|
1052 |
|
|
table are absolute.
|
1053 |
|
|
|
1054 |
|
|
The definition should be a C statement to output to the stdio stream STREAM
|
1055 |
|
|
an assembler pseudo-instruction to generate a reference to a label. VALUE
|
1056 |
|
|
is the number of an internal label whose definition is output using
|
1057 |
|
|
`(*targetm.asm_out.internal_label)'. For example,
|
1058 |
|
|
|
1059 |
|
|
fprintf (STREAM, "\t.word L%d\n", VALUE) */
|
1060 |
|
|
#define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) \
|
1061 |
|
|
fprintf (STREAM, "\t.word .L%d\n", VALUE)
|
1062 |
|
|
|
1063 |
|
|
/*}}}*/
|
1064 |
|
|
/*{{{ Assembler Commands for Alignment. */
|
1065 |
|
|
|
1066 |
|
|
/* A C statement to output to the stdio stream STREAM an assembler command to
|
1067 |
|
|
advance the location counter to a multiple of 2 to the POWER bytes. POWER
|
1068 |
|
|
will be a C expression of type `int'. */
|
1069 |
|
|
#define ASM_OUTPUT_ALIGN(STREAM, POWER) \
|
1070 |
|
|
fprintf ((STREAM), "\t.p2align %d\n", (POWER))
|
1071 |
|
|
|
1072 |
|
|
/*}}}*/
|
1073 |
|
|
/*{{{ Miscellaneous Parameters. */
|
1074 |
|
|
|
1075 |
|
|
/* An alias for a machine mode name. This is the machine mode that elements of
|
1076 |
|
|
a jump-table should have. */
|
1077 |
|
|
#define CASE_VECTOR_MODE SImode
|
1078 |
|
|
|
1079 |
|
|
/* The maximum number of bytes that a single instruction can move quickly from
|
1080 |
|
|
memory to memory. */
|
1081 |
|
|
#define MOVE_MAX 8
|
1082 |
|
|
|
1083 |
|
|
/* A C expression which is nonzero if on this machine it is safe to "convert"
|
1084 |
|
|
an integer of INPREC bits to one of OUTPREC bits (where OUTPREC is smaller
|
1085 |
|
|
than INPREC) by merely operating on it as if it had only OUTPREC bits.
|
1086 |
|
|
|
1087 |
|
|
On many machines, this expression can be 1.
|
1088 |
|
|
|
1089 |
|
|
When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for modes for
|
1090 |
|
|
which `MODES_TIEABLE_P' is 0, suboptimal code can result. If this is the
|
1091 |
|
|
case, making `TRULY_NOOP_TRUNCATION' return 0 in such cases may improve
|
1092 |
|
|
things. */
|
1093 |
|
|
#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
|
1094 |
|
|
|
1095 |
|
|
/* An alias for the machine mode for pointers. On most machines, define this
|
1096 |
|
|
to be the integer mode corresponding to the width of a hardware pointer;
|
1097 |
|
|
`SImode' on 32-bit machine or `DImode' on 64-bit machines. On some machines
|
1098 |
|
|
you must define this to be one of the partial integer modes, such as
|
1099 |
|
|
`PSImode'.
|
1100 |
|
|
|
1101 |
|
|
The width of `Pmode' must be at least as large as the value of
|
1102 |
|
|
`POINTER_SIZE'. If it is not equal, you must define the macro
|
1103 |
|
|
`POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to `Pmode'. */
|
1104 |
|
|
#define Pmode SImode
|
1105 |
|
|
|
1106 |
|
|
/* An alias for the machine mode used for memory references to functions being
|
1107 |
|
|
called, in `call' RTL expressions. On most machines this should be
|
1108 |
|
|
`QImode'. */
|
1109 |
|
|
#define FUNCTION_MODE QImode
|
1110 |
|
|
|
1111 |
|
|
/* If cross-compiling, don't require stdio.h etc to build libgcc.a. */
|
1112 |
|
|
#if defined CROSS_COMPILE && ! defined inhibit_libc
|
1113 |
|
|
#define inhibit_libc
|
1114 |
|
|
#endif
|
1115 |
|
|
|
1116 |
|
|
/*}}}*/
|
1117 |
|
|
/*{{{ Exported variables */
|
1118 |
|
|
|
1119 |
|
|
/* Define the information needed to generate branch and scc insns. This is
|
1120 |
|
|
stored from the compare operation. Note that we can't use "rtx" here
|
1121 |
|
|
since it hasn't been defined! */
|
1122 |
|
|
|
1123 |
|
|
extern struct rtx_def * fr30_compare_op0;
|
1124 |
|
|
extern struct rtx_def * fr30_compare_op1;
|
1125 |
|
|
|
1126 |
|
|
/*}}}*/
|
1127 |
|
|
|
1128 |
|
|
/* Local Variables: */
|
1129 |
|
|
/* folded-file: t */
|
1130 |
|
|
/* End: */
|