OSDN Git Service

(INIT_SECTION_ASM_OP): Delete.
[pf3gnuchains/gcc-fork.git] / gcc / config / sh / sh.h
1 /* Definitions of target machine for GNU compiler for Hitachi Super-H.
2    Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
3    Contributed by Steve Chamberlain (sac@cygnus.com).
4    Improved by Jim Wilson (wilson@cygnus.com).
5
6 This file is part of GNU CC.
7
8 GNU CC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 GNU CC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GNU CC; see the file COPYING.  If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA.  */
22
23
24 #define TARGET_VERSION \
25   fputs (" (Hitachi SH)", stderr);
26
27 /* Generate SDB debugging information.  */
28
29 #define SDB_DEBUGGING_INFO
30
31 /* Output DBX (stabs) debugging information if doing -gstabs.  */
32
33 #define DBX_DEBUGGING_INFO
34
35 /* Generate SDB debugging information by default.  */
36
37 #define PREFERRED_DEBUGGING_TYPE SDB_DEBUG
38
39 #define SDB_DELIM ";"
40
41 #define CPP_SPEC "%{ml:-D__LITTLE_ENDIAN__}"
42
43 #define CPP_PREDEFINES "-D__sh__ -Acpu(sh) -Amachine(sh)"
44
45 #define ASM_SPEC  "%{ml:-little}"
46
47 #define LINK_SPEC "%{ml:-m shl}"
48
49 /* We can not debug without a frame pointer.  */
50 /* #define CAN_DEBUG_WITHOUT_FP */
51
52 #define CONDITIONAL_REGISTER_USAGE                              \
53   /* Hitachi saves and restores mac registers on call.  */      \
54   if (TARGET_HITACHI)                                           \
55    {                                                            \
56      call_used_regs[MACH_REG] = 0;                              \
57      call_used_regs[MACL_REG] = 0;                              \
58   }
59 \f
60 /* ??? Need to write documentation for all SH options and add it to the
61    invoke.texi file.  */
62
63 /* Run-time compilation parameters selecting different hardware subsets.  */
64
65 extern int target_flags;
66 #define ISIZE_BIT       (1<<1)
67 #define DALIGN_BIT      (1<<6)
68 #define SH0_BIT         (1<<7)
69 #define SH1_BIT         (1<<8)
70 #define SH2_BIT         (1<<9)
71 #define SH3_BIT         (1<<10)
72 #define SPACE_BIT       (1<<13)
73 #define BIGTABLE_BIT    (1<<14)
74 #define HITACHI_BIT     (1<<22)
75 #define PADSTRUCT_BIT  (1<<28)
76 #define LITTLE_ENDIAN_BIT (1<<29)
77
78 /* Nonzero if we should dump out instruction size info.  */
79 #define TARGET_DUMPISIZE  (target_flags & ISIZE_BIT)
80
81 /* Nonzero to align doubles on 64 bit boundaries.  */
82 #define TARGET_ALIGN_DOUBLE (target_flags & DALIGN_BIT)
83
84 /* Nonzero if we should generate code using type 0 insns.  */
85 /* ??? Is there such a thing as SH0?  If not, we should delete all
86    references to it.  */
87 #define TARGET_SH0 (target_flags & SH0_BIT)
88
89 /* Nonzero if we should generate code using type 1 insns.  */
90 #define TARGET_SH1 (target_flags & SH1_BIT)
91
92 /* Nonzero if we should generate code using type 2 insns.  */
93 #define TARGET_SH2 (target_flags & SH2_BIT)
94
95 /* Nonzero if we should generate code using type 3 insns.  */
96 #define TARGET_SH3 (target_flags & SH3_BIT)
97
98 /* Nonzero if we should generate smaller code rather than faster code.  */
99 #define TARGET_SMALLCODE   (target_flags & SPACE_BIT)
100
101 /* Nonzero to use long jump tables.  */
102 #define TARGET_BIGTABLE     (target_flags & BIGTABLE_BIT)
103
104 /* Nonzero if using Hitachi's calling convention.  */
105 #define TARGET_HITACHI          (target_flags & HITACHI_BIT)
106
107 /* Nonzero if padding structures to a multiple of 4 bytes.  This is
108    incompatible with Hitachi's compiler, and gives unusual structure layouts
109    which confuse programmers.
110    ??? This option is not useful, but is retained in case there are people
111    who are still relying on it.  It may be deleted in the future.  */
112 #define TARGET_PADSTRUCT       (target_flags & PADSTRUCT_BIT)
113
114 /* Nonzero if generating code for a little endian SH.  */
115 #define TARGET_LITTLE_ENDIAN     (target_flags & LITTLE_ENDIAN_BIT)
116
117 #define TARGET_SWITCHES                         \
118 { {"0",         SH0_BIT},                       \
119   {"1",         SH1_BIT},                       \
120   {"2",         SH2_BIT},                       \
121   {"3",         SH3_BIT|SH2_BIT},               \
122   {"3l",        SH3_BIT|SH2_BIT|LITTLE_ENDIAN_BIT},     \
123   {"b",         -LITTLE_ENDIAN_BIT},            \
124   {"bigtable",  BIGTABLE_BIT},                  \
125   {"dalign",    DALIGN_BIT},                    \
126   {"hitachi",   HITACHI_BIT},                   \
127   {"isize",     ISIZE_BIT},                     \
128   {"l",         LITTLE_ENDIAN_BIT},             \
129   {"padstruct", PADSTRUCT_BIT},                 \
130   {"space",     SPACE_BIT},                     \
131   {"",          TARGET_DEFAULT}                 \
132 }
133
134 #define TARGET_DEFAULT  (0)
135
136 #define OVERRIDE_OPTIONS                                        \
137 do {                                                            \
138   sh_cpu = CPU_SH0;                                             \
139   if (TARGET_SH1)                                               \
140     sh_cpu = CPU_SH1;                                           \
141   if (TARGET_SH2)                                               \
142     sh_cpu = CPU_SH2;                                           \
143   if (TARGET_SH3)                                               \
144     sh_cpu = CPU_SH3;                                           \
145                                                                 \
146   /* We *MUST* always define optimize since we *HAVE* to run    \
147      shorten branches to get correct code.  */                  \
148   /* ??? This is obsolete, since now shorten branches is no     \
149      longer required by the SH, and is always run once even     \
150      when not optimizing.  Changing this now might be           \
151      confusing though.  */                                      \
152   optimize = 1;                                                 \
153   flag_delayed_branch = 1;                                      \
154                                                                 \
155   /* But never run scheduling before reload, since that can     \
156      break global alloc, and generates slower code anyway due   \
157      to the pressure on R0.  */                                 \
158   flag_schedule_insns = 0;                                      \
159 } while (0)
160 \f
161 /* Target machine storage layout.  */
162
163 /* Define to use software floating point emulator for REAL_ARITHMETIC and
164    decimal <-> binary conversion.  */
165 #define REAL_ARITHMETIC
166
167 /* Define this if most significant bit is lowest numbered
168    in instructions that operate on numbered bit-fields.  */
169
170 #define BITS_BIG_ENDIAN  0
171
172 /* Define this if most significant byte of a word is the lowest numbered.  */
173 #define BYTES_BIG_ENDIAN (TARGET_LITTLE_ENDIAN == 0)
174
175 /* Define this if most significant word of a multiword number is the lowest
176    numbered.  */
177 #define WORDS_BIG_ENDIAN (TARGET_LITTLE_ENDIAN == 0)
178
179 /* Define this to set the endianness to use in libgcc2.c, which can
180    not depend on target_flags.  */
181 #if defined(__LITTLE_ENDIAN__)
182 #define LIBGCC2_WORDS_BIG_ENDIAN 0
183 #else
184 #define LIBGCC2_WORDS_BIG_ENDIAN 1
185 #endif
186
187 /* Number of bits in an addressable storage unit.  */
188 #define BITS_PER_UNIT  8
189
190 /* Width in bits of a "word", which is the contents of a machine register.
191    Note that this is not necessarily the width of data type `int';
192    if using 16-bit ints on a 68000, this would still be 32.
193    But on a machine with 16-bit registers, this would be 16.  */
194 #define BITS_PER_WORD  32
195 #define MAX_BITS_PER_WORD 32
196
197 /* Width of a word, in units (bytes).  */
198 #define UNITS_PER_WORD  4
199
200 /* Width in bits of a pointer.
201    See also the macro `Pmode' defined below.  */
202 #define POINTER_SIZE  32
203
204 /* Allocation boundary (in *bits*) for storing arguments in argument list.  */
205 #define PARM_BOUNDARY   32
206
207 /* Boundary (in *bits*) on which stack pointer should be aligned.  */
208 #define STACK_BOUNDARY  32
209
210 /* Allocation boundary (in *bits*) for the code of a function.
211    32 bit alignment is faster, because instructions are always fetched as a
212    pair from a longword boundary.  */
213 /* ??? Perhaps also define ASM_OUTPUT_ALIGN_CODE and/or ASM_OUTPUT_LOOP_ALIGN
214    so as to align jump targets and/or loops to 4 byte boundaries when not
215    optimizing for space?  */
216 #define FUNCTION_BOUNDARY  (TARGET_SMALLCODE ? 16 : 32)
217
218 /* Alignment of field after `int : 0' in a structure.  */
219 #define EMPTY_FIELD_BOUNDARY  32
220
221 /* No data type wants to be aligned rounder than this.  */
222 #define BIGGEST_ALIGNMENT  (TARGET_ALIGN_DOUBLE ? 64 : 32)
223
224 /* The best alignment to use in cases where we have a choice.  */
225 #define FASTEST_ALIGNMENT 32
226
227 /* Make strings word-aligned so strcpy from constants will be faster.  */
228 #define CONSTANT_ALIGNMENT(EXP, ALIGN)  \
229   ((TREE_CODE (EXP) == STRING_CST       \
230     && (ALIGN) < FASTEST_ALIGNMENT)     \
231     ? FASTEST_ALIGNMENT : (ALIGN))
232
233 /* Make arrays of chars word-aligned for the same reasons.  */
234 #define DATA_ALIGNMENT(TYPE, ALIGN)             \
235   (TREE_CODE (TYPE) == ARRAY_TYPE               \
236    && TYPE_MODE (TREE_TYPE (TYPE)) == QImode    \
237    && (ALIGN) < FASTEST_ALIGNMENT ? FASTEST_ALIGNMENT : (ALIGN))
238
239 /* Number of bits which any structure or union's size must be a
240    multiple of.  Each structure or union's size is rounded up to a
241    multiple of this.  */
242 #define STRUCTURE_SIZE_BOUNDARY (TARGET_PADSTRUCT ? 32 : 8)
243
244 /* Set this nonzero if move instructions will actually fail to work
245    when given unaligned data.  */
246 #define STRICT_ALIGNMENT 1
247 \f
248 /* Standard register usage.  */
249
250 /* Register allocation for the Hitachi calling convention:
251
252         r0              arg return
253         r1..r3          scratch
254         r4..r7          args in
255         r8..r13         call saved
256         r14             frame pointer/call saved
257         r15             stack pointer
258         ap              arg pointer (doesn't really exist, always eliminated)
259         pr              subroutine return address
260         t               t bit
261         mach            multiply/accumulate result, high part
262         macl            multiply/accumulate result, low part.  */
263
264 /* Number of actual hardware registers.
265    The hardware registers are assigned numbers for the compiler
266    from 0 to just below FIRST_PSEUDO_REGISTER.
267    All registers that the compiler knows about must be given numbers,
268    even those that are not normally considered general registers.  */
269
270 #define AP_REG   16
271 #define PR_REG   17
272 #define T_REG    18
273 #define GBR_REG  19
274 #define MACH_REG 20
275 #define MACL_REG 21
276 #define SPECIAL_REG(REGNO) ((REGNO) >= 18 && (REGNO) <= 21)
277
278 #define FIRST_PSEUDO_REGISTER 22
279
280 /* 1 for registers that have pervasive standard uses
281    and are not available for the register allocator.
282
283    Mach register is fixed 'cause it's only 10 bits wide for SH1.
284    It is 32 bits wide for SH2.  */
285
286 #define FIXED_REGISTERS         \
287   { 0,  0,  0,  0,              \
288     0,  0,  0,  0,              \
289     0,  0,  0,  0,              \
290     0,  0,  0,  1,              \
291     1,  1,  1,  1,              \
292     1,  1}
293
294 /* 1 for registers not available across function calls.
295    These must include the FIXED_REGISTERS and also any
296    registers that can be used without being saved.
297    The latter must include the registers where values are returned
298    and the register where structure-value addresses are passed.
299    Aside from that, you can include as many other registers as you like.  */
300
301 #define CALL_USED_REGISTERS     \
302    { 1,  1,  1,  1,             \
303      1,  1,  1,  1,             \
304      0,  0,  0,  0,             \
305      0,  0,  0,  1,             \
306      1,  0,  1,  1,             \
307      1,  1}
308
309 /* Return number of consecutive hard regs needed starting at reg REGNO
310    to hold something of mode MODE.
311    This is ordinarily the length in words of a value of mode MODE
312    but can be less for certain modes in special long registers.
313
314    On the SH regs are UNITS_PER_WORD bits wide.  */
315
316 #define HARD_REGNO_NREGS(REGNO, MODE) \
317    (((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
318
319 /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
320    We can allow any mode in any general register.  The special registers
321    only allow SImode.  Don't allow any mode in the PR.  */
322
323 #define HARD_REGNO_MODE_OK(REGNO, MODE)         \
324   (SPECIAL_REG (REGNO) ? (MODE) == SImode       \
325    : (REGNO) == PR_REG ? 0                      \
326    : 1)
327
328 /* Value is 1 if it is a good idea to tie two pseudo registers
329    when one has mode MODE1 and one has mode MODE2.
330    If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
331    for any hard reg, then this must be 0 for correct output.  */
332
333 #define MODES_TIEABLE_P(MODE1, MODE2) \
334   ((MODE1) == (MODE2) || GET_MODE_CLASS (MODE1) == GET_MODE_CLASS (MODE2))
335
336 /* Specify the registers used for certain standard purposes.
337    The values of these macros are register numbers.  */
338
339 /* Define this if the program counter is overloaded on a register.  */
340 /* #define PC_REGNUM            15*/
341
342 /* Register to use for pushing function arguments.  */
343 #define STACK_POINTER_REGNUM    15
344
345 /* Base register for access to local variables of the function.  */
346 #define FRAME_POINTER_REGNUM    14
347
348 /* Value should be nonzero if functions must have frame pointers.
349    Zero means the frame pointer need not be set up (and parms may be accessed
350    via the stack pointer) in functions that seem suitable.  */
351
352 #define FRAME_POINTER_REQUIRED  0
353
354 /* Definitions for register eliminations.
355
356    We have two registers that can be eliminated on the SH.  First, the
357    frame pointer register can often be eliminated in favor of the stack
358    pointer register.  Secondly, the argument pointer register can always be
359    eliminated; it is replaced with either the stack or frame pointer.  */
360
361 /* This is an array of structures.  Each structure initializes one pair
362    of eliminable registers.  The "from" register number is given first,
363    followed by "to".  Eliminations of the same "from" register are listed
364    in order of preference.  */
365
366 #define ELIMINABLE_REGS                         \
367 {{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
368  { ARG_POINTER_REGNUM,   STACK_POINTER_REGNUM}, \
369  { ARG_POINTER_REGNUM,   FRAME_POINTER_REGNUM},}
370
371 /* Given FROM and TO register numbers, say whether this elimination
372    is allowed.  */
373 #define CAN_ELIMINATE(FROM, TO) \
374   (!((FROM) == FRAME_POINTER_REGNUM && FRAME_POINTER_REQUIRED))
375
376 /* Define the offset between two registers, one to be eliminated, and the other
377    its replacement, at the start of a routine.  */
378
379 #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
380   OFFSET = initial_elimination_offset (FROM, TO)
381
382 /* Base register for access to arguments of the function.  */
383 #define ARG_POINTER_REGNUM      16
384
385 /* Register in which the static-chain is passed to a function.  */
386 #define STATIC_CHAIN_REGNUM     13
387
388 /* The register in which a struct value address is passed.  */
389
390 #define STRUCT_VALUE_REGNUM 2
391
392 /* If the structure value address is not passed in a register, define
393    `STRUCT_VALUE' as an expression returning an RTX for the place
394    where the address is passed.  If it returns 0, the address is
395    passed as an "invisible" first argument.  */
396
397 /*#define STRUCT_VALUE ((rtx)0)*/
398
399 /* Don't default to pcc-struct-return, because we have already specified
400    exactly how to return structures in the RETURN_IN_MEMORY macro.  */
401
402 #define DEFAULT_PCC_STRUCT_RETURN 0
403 \f
404 /* Define the classes of registers for register constraints in the
405    machine description.  Also define ranges of constants.
406
407    One of the classes must always be named ALL_REGS and include all hard regs.
408    If there is more than one class, another class must be named NO_REGS
409    and contain no registers.
410
411    The name GENERAL_REGS must be the name of a class (or an alias for
412    another name such as ALL_REGS).  This is the class of registers
413    that is allowed by "g" or "r" in a register constraint.
414    Also, registers outside this class are allocated only when
415    instructions express preferences for them.
416
417    The classes must be numbered in nondecreasing order; that is,
418    a larger-numbered class must never be contained completely
419    in a smaller-numbered class.
420
421    For any two classes, it is very desirable that there be another
422    class that represents their union.  */
423
424 /* The SH has two sorts of general registers, R0 and the rest.  R0 can
425    be used as the destination of some of the arithmetic ops. There are
426    also some special purpose registers; the T bit register, the
427    Procedure Return Register and the Multiply Accumulate Registers.  */
428
429 enum reg_class
430 {
431   NO_REGS,
432   R0_REGS,
433   PR_REGS,
434   T_REGS,
435   MAC_REGS,
436   GENERAL_REGS,
437   ALL_REGS,
438   LIM_REG_CLASSES
439 };
440
441 #define N_REG_CLASSES  (int) LIM_REG_CLASSES
442
443 /* Give names of register classes as strings for dump file.  */
444 #define REG_CLASS_NAMES \
445 {                       \
446   "NO_REGS",            \
447   "R0_REGS",            \
448   "PR_REGS",            \
449   "T_REGS",             \
450   "MAC_REGS",           \
451   "GENERAL_REGS",       \
452   "ALL_REGS",           \
453 }
454
455 /* Define which registers fit in which classes.
456    This is an initializer for a vector of HARD_REG_SET
457    of length N_REG_CLASSES.  */
458
459 #define REG_CLASS_CONTENTS      \
460 {                               \
461   0x000000,  /* NO_REGS      */ \
462   0x000001,  /* R0_REGS      */ \
463   0x020000,  /* PR_REGS      */ \
464   0x040000,  /* T_REGS       */ \
465   0x300000,  /* MAC_REGS     */ \
466   0x01FFFF,  /* GENERAL_REGS */ \
467   0x37FFFF   /* ALL_REGS     */ \
468 }
469
470 /* The same information, inverted:
471    Return the class number of the smallest class containing
472    reg number REGNO.  This could be a conditional expression
473    or could index an array.  */
474
475 extern int regno_reg_class[];
476 #define REGNO_REG_CLASS(REGNO) regno_reg_class[REGNO]
477
478 /* When defined, the compiler allows registers explicitly used in the
479    rtl to be used as spill registers but prevents the compiler from
480    extending the lifetime of these registers.  */
481
482 #define SMALL_REGISTER_CLASSES
483
484 /* The order in which register should be allocated.  */
485 #define REG_ALLOC_ORDER \
486   { 1,2,3,7,6,5,4,0,8,9,10,11,12,13,14,15,16,17,18,19,20,21 }
487
488 /* The class value for index registers, and the one for base regs.  */
489 #define INDEX_REG_CLASS  R0_REGS
490 #define BASE_REG_CLASS   GENERAL_REGS
491
492 /* Get reg_class from a letter such as appears in the machine
493    description.  */
494 extern enum reg_class reg_class_from_letter[];
495
496 #define REG_CLASS_FROM_LETTER(C) \
497    ( (C) >= 'a' && (C) <= 'z' ? reg_class_from_letter[(C)-'a'] : NO_REGS )
498 \f
499 /* The letters I, J, K, L and M in a register constraint string
500    can be used to stand for particular ranges of immediate operands.
501    This macro defines what the ranges are.
502    C is the letter, and VALUE is a constant value.
503    Return 1 if VALUE is in the range specified by C.
504         I: arithmetic operand -127..128, as used in add, sub, etc
505         K: shift operand 1,2,8 or 16
506         L: logical operand 0..255, as used in and, or, etc.
507         M: constant 1
508         N: constant 0  */
509
510 #define CONST_OK_FOR_I(VALUE) (((int)(VALUE))>= -128 && ((int)(VALUE)) <= 127)
511 #define CONST_OK_FOR_K(VALUE) ((VALUE)==1||(VALUE)==2||(VALUE)==8||(VALUE)==16)
512 #define CONST_OK_FOR_L(VALUE) (((int)(VALUE))>=    0 && ((int)(VALUE)) <= 255)
513 #define CONST_OK_FOR_M(VALUE) ((VALUE)==1)
514 #define CONST_OK_FOR_N(VALUE) ((VALUE)==0)
515 #define CONST_OK_FOR_LETTER_P(VALUE, C)         \
516      ((C) == 'I' ? CONST_OK_FOR_I (VALUE)       \
517     : (C) == 'K' ? CONST_OK_FOR_K (VALUE)       \
518     : (C) == 'L' ? CONST_OK_FOR_L (VALUE)       \
519     : (C) == 'M' ? CONST_OK_FOR_M (VALUE)       \
520     : (C) == 'N' ? CONST_OK_FOR_N (VALUE)       \
521     : 0)
522
523 /* Similar, but for floating constants, and defining letters G and H.
524    Here VALUE is the CONST_DOUBLE rtx itself.  */
525
526 #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 0
527
528 /* Given an rtx X being reloaded into a reg required to be
529    in class CLASS, return the class of reg to actually use.
530    In general this is just CLASS; but on some machines
531    in some cases it is preferable to use a more restrictive class.  */
532
533 #define PREFERRED_RELOAD_CLASS(X, CLASS) CLASS
534
535 /* Return the maximum number of consecutive registers
536    needed to represent mode MODE in a register of class CLASS.
537
538    On SH this is the size of MODE in words.  */
539 #define CLASS_MAX_NREGS(CLASS, MODE) \
540      ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
541 \f
542 /* Stack layout; function entry, exit and calling.  */
543
544 /* Define the number of registers that can hold parameters.
545    These three macros are used only in other macro definitions below.  */
546 #define NPARM_REGS 4
547 #define FIRST_PARM_REG 4
548 #define FIRST_RET_REG  0
549
550 /* Define this if pushing a word on the stack
551    makes the stack pointer a smaller address.  */
552 #define STACK_GROWS_DOWNWARD
553
554 /*  Define this macro if the addresses of local variable slots are at
555     negative offsets from the frame pointer.
556
557     The SH only has positive indexes, so grow the frame up.  */
558 /* #define FRAME_GROWS_DOWNWARD */
559
560 /* Offset from the frame pointer to the first local variable slot to
561    be allocated.  */
562 #define STARTING_FRAME_OFFSET  0
563
564 /* If we generate an insn to push BYTES bytes,
565    this says how many the stack pointer really advances by.  */
566 #define PUSH_ROUNDING(NPUSHED)  (((NPUSHED) + 3) & ~3)
567
568 /* Offset of first parameter from the argument pointer register value.  */
569 #define FIRST_PARM_OFFSET(FNDECL)  0
570
571 /* Value is the number of byte of arguments automatically
572    popped when returning from a subroutine call.
573    FUNDECL is the declaration node of the function (as a tree),
574    FUNTYPE is the data type of the function (as a tree),
575    or for a library call it is an identifier node for the subroutine name.
576    SIZE is the number of bytes of arguments passed on the stack.
577
578    On the SH, the caller does not pop any of its arguments that were passed
579    on the stack.  */
580 #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE)  0
581
582 /* Define how to find the value returned by a function.
583    VALTYPE is the data type of the value (as a tree).
584    If the precise function being called is known, FUNC is its FUNCTION_DECL;
585    otherwise, FUNC is 0.  */
586
587 #define FUNCTION_VALUE(VALTYPE, FUNC) \
588   gen_rtx (REG, TYPE_MODE (VALTYPE), FIRST_RET_REG)
589
590 /* Define how to find the value returned by a library function
591    assuming the value has mode MODE.  */
592 #define LIBCALL_VALUE(MODE)     gen_rtx (REG, MODE, FIRST_RET_REG)
593
594 /* 1 if N is a possible register number for a function value.
595    On the SH, only r0 can return results.  */
596 #define FUNCTION_VALUE_REGNO_P(REGNO)   ((REGNO) == FIRST_RET_REG)
597
598 /* 1 if N is a possible register number for function argument passing.  */
599
600 #define FUNCTION_ARG_REGNO_P(REGNO) \
601   ((REGNO) >= FIRST_PARM_REG && (REGNO) < (NPARM_REGS + FIRST_PARM_REG))
602 \f
603 /* Define a data type for recording info about an argument list
604    during the scan of that argument list.  This data type should
605    hold all necessary information about the function itself
606    and about the args processed so far, enough to enable macros
607    such as FUNCTION_ARG to determine where the next arg should go.
608
609    On SH, this is a single integer, which is a number of words
610    of arguments scanned so far (including the invisible argument,
611    if any, which holds the structure-value-address).
612    Thus NARGREGS or more means all following args should go on the stack.  */
613
614 #define CUMULATIVE_ARGS  int
615
616 #define ROUND_ADVANCE(SIZE) \
617   ((SIZE + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
618
619 /* Round a register number up to a proper boundary for an arg of mode
620    MODE.
621
622    The SH doesn't care about double alignment, so we only
623    round doubles to even regs when asked to explicitly.  */
624
625 #define ROUND_REG(X, MODE)                                      \
626   ((TARGET_ALIGN_DOUBLE                                         \
627    && GET_MODE_UNIT_SIZE ((MODE)) > UNITS_PER_WORD)             \
628    ? ((X) + ((X) & 1)) : (X))
629
630 /* Initialize a variable CUM of type CUMULATIVE_ARGS
631    for a call to a function whose data type is FNTYPE.
632    For a library call, FNTYPE is 0.
633
634    On SH, the offset always starts at 0: the first parm reg is always
635    the same reg.  */
636
637 #define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME) \
638   ((CUM) = 0)
639
640 /* Update the data in CUM to advance over an argument
641    of mode MODE and data type TYPE.
642    (TYPE is null for libcalls where that information may not be
643    available.)  */
644
645 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)    \
646  ((CUM) = (ROUND_REG ((CUM), (MODE))                    \
647            + ((MODE) != BLKmode                         \
648               ? ROUND_ADVANCE (GET_MODE_SIZE (MODE))    \
649               : ROUND_ADVANCE (int_size_in_bytes (TYPE)))))
650
651 /* Define where to put the arguments to a function.
652    Value is zero to push the argument on the stack,
653    or a hard register in which to store the argument.
654
655    MODE is the argument's machine mode.
656    TYPE is the data type of the argument (as a tree).
657     This is null for libcalls where that information may
658     not be available.
659    CUM is a variable of type CUMULATIVE_ARGS which gives info about
660     the preceding args and about the function being called.
661    NAMED is nonzero if this argument is a named parameter
662     (otherwise it is an extra parameter matching an ellipsis).
663
664    On SH the first args are normally in registers
665    and the rest are pushed.  Any arg that starts within the first
666    NPARM_REGS words is at least partially passed in a register unless
667    its data type forbids.  */
668
669 #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
670   sh_function_arg (CUM, MODE, TYPE, NAMED)
671
672 extern struct rtx_def *sh_function_arg();
673
674 /* For an arg passed partly in registers and partly in memory,
675    this is the number of registers used.
676    For args passed entirely in registers or entirely in memory, zero.
677
678    We sometimes split args.  */
679
680 #define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
681   sh_function_arg_partial_nregs (CUM, MODE, TYPE, NAMED)
682
683 extern int current_function_anonymous_args;
684
685 /* Perform any needed actions needed for a function that is receiving a
686    variable number of arguments.  */
687
688 #define SETUP_INCOMING_VARARGS(ASF, MODE, TYPE, PAS, ST) \
689   current_function_anonymous_args = 1;
690
691 /* Call the function profiler with a given profile label.  */
692
693 #define FUNCTION_PROFILER(STREAM,LABELNO)                       \
694 {                                                               \
695         fprintf(STREAM, "       trapa   #5\n");                 \
696         fprintf(STREAM, "       .align  2\n");                  \
697         fprintf(STREAM, "       .long   LP%d\n", (LABELNO));    \
698 }
699
700 /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
701    the stack pointer does not matter.  The value is tested only in
702    functions that have frame pointers.
703    No definition is equivalent to always zero.  */
704
705 #define EXIT_IGNORE_STACK 1
706
707 /* Generate the assembly code for function exit
708    Just dump out any accumulated constant table.  */
709
710 #define FUNCTION_EPILOGUE(STREAM, SIZE)  function_epilogue (STREAM, SIZE)
711
712 /* Output assembler code for a block containing the constant parts
713    of a trampoline, leaving space for the variable parts.
714
715    On the SH, the trampoline looks like
716    1 0000 D301                  mov.l   l1,r3
717    2 0002 DD02                  mov.l   l2,r13
718    3 0004 4D2B                  jmp     @r13
719    4 0006 200B                  or      r0,r0
720    5 0008 00000000      l1:     .long   function
721    6 000c 00000000      l2:     .long   area  */
722 #define TRAMPOLINE_TEMPLATE(FILE)               \
723 {                                               \
724   fprintf ((FILE), "    .word   0xd301\n");     \
725   fprintf ((FILE), "    .word   0xdd02\n");     \
726   fprintf ((FILE), "    .word   0x4d2b\n");     \
727   fprintf ((FILE), "    .word   0x200b\n");     \
728   fprintf ((FILE), "    .long   0\n");          \
729   fprintf ((FILE), "    .long   0\n");          \
730 }
731
732 /* Length in units of the trampoline for entering a nested function.  */
733 #define TRAMPOLINE_SIZE  16
734
735 /* Alignment required for a trampoline in units.  */
736 #define TRAMPOLINE_ALIGN  4
737
738 /* Emit RTL insns to initialize the variable parts of a trampoline.
739    FNADDR is an RTX for the address of the function's pure code.
740    CXT is an RTX for the static chain value for the function.  */
741
742 #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)                       \
743 {                                                                       \
744   emit_move_insn (gen_rtx (MEM, SImode, plus_constant ((TRAMP), 8)),    \
745                   (CXT));                                               \
746   emit_move_insn (gen_rtx (MEM, SImode, plus_constant ((TRAMP), 12)),   \
747                   (FNADDR));                                            \
748 }
749 \f
750 /* Addressing modes, and classification of registers for them.  */
751 #define HAVE_POST_INCREMENT  1
752 /*#define HAVE_PRE_INCREMENT   1*/
753 /*#define HAVE_POST_DECREMENT  1*/
754 #define HAVE_PRE_DECREMENT   1
755
756 /* Macros to check register numbers against specific register classes.  */
757
758 /* These assume that REGNO is a hard or pseudo reg number.
759    They give nonzero only if REGNO is a hard reg of the suitable class
760    or a pseudo reg currently allocated to a suitable hard reg.
761    Since they use reg_renumber, they are safe only once reg_renumber
762    has been allocated, which happens in local-alloc.c.  */
763
764 #define REGNO_OK_FOR_BASE_P(REGNO) \
765   ((REGNO) < PR_REG || (unsigned) reg_renumber[(REGNO)] < PR_REG)
766 #define REGNO_OK_FOR_INDEX_P(REGNO) \
767   ((REGNO) == 0 || (unsigned) reg_renumber[(REGNO)] == 0)
768
769 /* Maximum number of registers that can appear in a valid memory
770    address.  */
771
772 #define MAX_REGS_PER_ADDRESS 2
773
774 /* Recognize any constant value that is a valid address.  */
775
776 #define CONSTANT_ADDRESS_P(X)   (GET_CODE (X) == LABEL_REF)
777
778 /* Nonzero if the constant value X is a legitimate general operand.  */
779
780 /* ??? Should modify this to accept CONST_DOUBLE, and then modify the
781    constant pool table code to fix loads of CONST_DOUBLEs.  If that doesn't
782    work well, then we can at least handle simple CONST_DOUBLEs here
783    such as 0.0.  */
784 #define LEGITIMATE_CONSTANT_P(X)        (GET_CODE(X) != CONST_DOUBLE)
785
786 /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
787    and check its validity for a certain class.
788    We have two alternate definitions for each of them.
789    The usual definition accepts all pseudo regs; the other rejects
790    them unless they have been allocated suitable hard regs.
791    The symbol REG_OK_STRICT causes the latter definition to be used.  */
792
793 #define MODE_DISP_OK_4(X,MODE) ((GET_MODE_SIZE(MODE)==4) && ((unsigned)INTVAL(X)<64) && (!(INTVAL(X) &3)))
794 #define MODE_DISP_OK_8(X,MODE) ((GET_MODE_SIZE(MODE)==8) && ((unsigned)INTVAL(X)<60) && (!(INTVAL(X) &3)))
795
796 #ifndef REG_OK_STRICT
797
798 /* Nonzero if X is a hard reg that can be used as a base reg
799    or if it is a pseudo reg.  */
800 #define REG_OK_FOR_BASE_P(X) \
801   (REGNO (X) <= 16 || REGNO (X) >= FIRST_PSEUDO_REGISTER)
802
803 /* Nonzero if X is a hard reg that can be used as an index
804    or if it is a pseudo reg.  */
805 #define REG_OK_FOR_INDEX_P(X) \
806   (REGNO (X) == 0 || REGNO (X) >= FIRST_PSEUDO_REGISTER)
807
808 /* Nonzero if X/OFFSET is a hard reg that can be used as an index
809    or if X is a pseudo reg.  */
810 #define SUBREG_OK_FOR_INDEX_P(X, OFFSET) \
811   ((REGNO (X) == 0 && OFFSET == 0) || REGNO (X) >= FIRST_PSEUDO_REGISTER)
812
813 #else
814
815 /* Nonzero if X is a hard reg that can be used as a base reg.  */
816 #define REG_OK_FOR_BASE_P(X) \
817   REGNO_OK_FOR_BASE_P (REGNO (X))
818
819 /* Nonzero if X is a hard reg that can be used as an index.  */
820 #define REG_OK_FOR_INDEX_P(X) \
821   REGNO_OK_FOR_INDEX_P (REGNO (X))
822
823 /* Nonzero if X/OFFSET is a hard reg that can be used as an index.  */
824 #define SUBREG_OK_FOR_INDEX_P(X, OFFSET) \
825   (REGNO_OK_FOR_INDEX_P (REGNO (X)) && OFFSET == 0)
826
827 #endif
828
829 /* The 'Q' constraint is a pc relative load operand.  */
830 #define EXTRA_CONSTRAINT_Q(OP)                                          \
831   (GET_CODE (OP) == MEM &&                                              \
832    ((GET_CODE (XEXP (OP, 0)) == LABEL_REF)                              \
833     || (GET_CODE (XEXP (OP, 0)) == CONST                                \
834         && GET_CODE (XEXP (XEXP (OP, 0), 0)) == PLUS                    \
835         && GET_CODE (XEXP (XEXP (XEXP (OP, 0), 0), 0)) == LABEL_REF     \
836         && GET_CODE (XEXP (XEXP (XEXP (OP, 0), 0), 1)) == CONST_INT)))
837
838 #define EXTRA_CONSTRAINT(OP, C)         \
839   ((C) == 'Q' ? EXTRA_CONSTRAINT_Q (OP) \
840    : 0)
841 \f
842 /* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
843    that is a valid memory address for an instruction.
844    The MODE argument is the machine mode for the MEM expression
845    that wants to use this address.
846
847    The other macros defined here are used only in GO_IF_LEGITIMATE_ADDRESS.  */
848
849 #define BASE_REGISTER_RTX_P(X)                          \
850   ((GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X))       \
851    || (GET_CODE (X) == SUBREG                           \
852        && GET_CODE (SUBREG_REG (X)) == REG              \
853        && REG_OK_FOR_BASE_P (SUBREG_REG (X))))
854
855 /* Since this must be r0, which is a single register class, we must check
856    SUBREGs more carefully, to be sure that we don't accept one that extends
857    outside the class.  */
858 #define INDEX_REGISTER_RTX_P(X)                         \
859   ((GET_CODE (X) == REG && REG_OK_FOR_INDEX_P (X))      \
860    || (GET_CODE (X) == SUBREG                           \
861        && GET_CODE (SUBREG_REG (X)) == REG              \
862        && SUBREG_OK_FOR_INDEX_P (SUBREG_REG (X), SUBREG_WORD (X))))
863
864 /* Jump to LABEL if X is a valid address RTX.  This must also take
865    REG_OK_STRICT into account when deciding about valid registers, but it uses
866    the above macros so we are in luck.
867
868    Allow  REG
869           REG+disp
870           REG+r0
871           REG++
872           --REG  */
873
874 /* The SH allows a displacement in a QI or HI amode, but only when the
875    other operand is R0. GCC doesn't handle this very well, so we forgo
876    all of that.
877
878    A legitimate index for a QI or HI is 0, SI can be any number 0..63,
879    DI can be any number 0..60.  */
880
881 #define GO_IF_LEGITIMATE_INDEX(MODE, OP, LABEL)                         \
882   do {                                                                  \
883     if (GET_CODE (OP) == CONST_INT)                                     \
884       {                                                                 \
885         if (MODE_DISP_OK_4 (OP, MODE))  goto LABEL;                     \
886         if (MODE_DISP_OK_8 (OP, MODE))  goto LABEL;                     \
887       }                                                                 \
888   } while(0)
889
890 #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, LABEL)                        \
891 {                                                                       \
892   if (BASE_REGISTER_RTX_P (X))                                          \
893     goto LABEL;                                                         \
894   else if ((GET_CODE (X) == POST_INC || GET_CODE (X) == PRE_DEC)        \
895            && BASE_REGISTER_RTX_P (XEXP (X, 0)))                        \
896     goto LABEL;                                                         \
897   else if (GET_CODE (X) == PLUS)                                        \
898     {                                                                   \
899       rtx xop0 = XEXP (X, 0);                                           \
900       rtx xop1 = XEXP (X, 1);                                           \
901       if (GET_MODE_SIZE (MODE) <= 8 && BASE_REGISTER_RTX_P (xop0))      \
902         GO_IF_LEGITIMATE_INDEX (MODE, xop1, LABEL);                     \
903       if (GET_MODE_SIZE (MODE) <= 4)                                    \
904         {                                                               \
905           if (BASE_REGISTER_RTX_P (xop1) && INDEX_REGISTER_RTX_P (xop0))\
906             goto LABEL;                                                 \
907           if (INDEX_REGISTER_RTX_P (xop1) && BASE_REGISTER_RTX_P (xop0))\
908             goto LABEL;                                                 \
909         }                                                               \
910     }                                                                   \
911 }
912 \f
913 /* Try machine-dependent ways of modifying an illegitimate address
914    to be legitimate.  If we find one, return the new, valid address.
915    This macro is used in only one place: `memory_address' in explow.c.
916
917    OLDX is the address as it was before break_out_memory_refs was called.
918    In some cases it is useful to look at this to decide what needs to be done.
919
920    MODE and WIN are passed so that this macro can use
921    GO_IF_LEGITIMATE_ADDRESS.
922
923    It is always safe for this macro to do nothing.  It exists to recognize
924    opportunities to optimize the output.  */
925
926 #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) ;
927
928 /* Go to LABEL if ADDR (a legitimate address expression)
929    has an effect that depends on the machine mode it is used for.  */
930 #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)                        \
931 {                                                                       \
932   if (GET_CODE(ADDR) == PRE_DEC || GET_CODE(ADDR) == POST_INC)          \
933     goto LABEL;                                                         \
934 }
935 \f
936 /* Specify the machine mode that this machine uses
937    for the index in the tablejump instruction.  */
938 #define CASE_VECTOR_MODE (TARGET_BIGTABLE ? SImode : HImode)
939
940 /* Define this if the tablejump instruction expects the table
941    to contain offsets from the address of the table.
942    Do not define this if the table should contain absolute addresses.  */
943 #define CASE_VECTOR_PC_RELATIVE
944
945 /* Specify the tree operation to be used to convert reals to integers.  */
946 #define IMPLICIT_FIX_EXPR  FIX_ROUND_EXPR
947
948 /* This is the kind of divide that is easiest to do in the general case.  */
949 #define EASY_DIV_EXPR  TRUNC_DIV_EXPR
950
951 /* 'char' is signed by default.  */
952 #define DEFAULT_SIGNED_CHAR  1
953
954 /* The type of size_t unsigned int.  */
955 #define SIZE_TYPE "unsigned int"
956
957 #define WCHAR_TYPE "short unsigned int"
958 #define WCHAR_TYPE_SIZE 16
959
960 /* Don't cse the address of the function being compiled.  */
961 /*#define NO_RECURSIVE_FUNCTION_CSE 1*/
962
963 /* Max number of bytes we can move from memory to memory
964    in one reasonably fast instruction.  */
965 #define MOVE_MAX 4
966
967 /* Define if operations between registers always perform the operation
968    on the full register even if a narrower mode is specified.  */
969 #define WORD_REGISTER_OPERATIONS
970
971 /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
972    will either zero-extend or sign-extend.  The value of this macro should
973    be the code that says which one of the two operations is implicitly
974    done, NIL if none.  */
975 #define LOAD_EXTEND_OP(MODE) SIGN_EXTEND
976
977 /* Define this if zero-extension is slow (more than one real instruction).
978    On the SH, it's only one instruction.  */
979 /* #define SLOW_ZERO_EXTEND */
980
981 /* Nonzero if access to memory by bytes is slow and undesirable.  */
982 #define SLOW_BYTE_ACCESS 0
983
984 /* We assume that the store-condition-codes instructions store 0 for false
985    and some other value for true.  This is the value stored for true.  */
986
987 #define STORE_FLAG_VALUE 1
988
989 /* Immediate shift counts are truncated by the output routines (or was it
990    the assembler?).  Shift counts in a register are truncated by SH.  Note
991    that the native compiler puts too large (> 32) immediate shift counts
992    into a register and shifts by the register, letting the SH decide what
993    to do instead of doing that itself.  */
994 /* ??? This is defined, but the library routines in lib1funcs.asm do not
995    truncate the shift count.  This may result in incorrect results for
996    unusual cases.  Truncating the shift counts in the library routines would
997    make them faster.  However, the SH3 has hardware shifts that do not
998    truncate, so it appears that we need to leave this undefined for correct
999    SH3 code.  We can still using truncation in the library routines though to
1000    make them faster.  */
1001 #define SHIFT_COUNT_TRUNCATED 1
1002
1003 /* All integers have the same format so truncation is easy.  */
1004 #define TRULY_NOOP_TRUNCATION(OUTPREC,INPREC)  1
1005
1006 /* Define this if addresses of constant functions
1007    shouldn't be put through pseudo regs where they can be cse'd.
1008    Desirable on machines where ordinary constants are expensive
1009    but a CALL with constant address is cheap.  */
1010 /*#define NO_FUNCTION_CSE 1*/
1011
1012 /* Chars and shorts should be passed as ints.  */
1013 #define PROMOTE_PROTOTYPES 1
1014
1015 /* The machine modes of pointers and functions.  */
1016 #define Pmode  SImode
1017 #define FUNCTION_MODE  Pmode
1018
1019 /* The relative costs of various types of constants.  Note that cse.c defines
1020    REG = 1, SUBREG = 2, any node = (2 + sum of subnodes).  */
1021
1022 #define CONST_COSTS(RTX, CODE, OUTER_CODE)      \
1023   case CONST_INT:                               \
1024     if (INTVAL (RTX) == 0)                      \
1025       return 0;                                 \
1026     else if (CONST_OK_FOR_I (INTVAL (RTX)))     \
1027       return 1;                                 \
1028     else if ((OUTER_CODE == AND || OUTER_CODE == IOR || OUTER_CODE == XOR) \
1029              && CONST_OK_FOR_L (INTVAL (RTX)))  \
1030       return 1;                                 \
1031     else                                        \
1032       return 8;                                 \
1033   case CONST:                                   \
1034   case LABEL_REF:                               \
1035   case SYMBOL_REF:                              \
1036     return 5;                                   \
1037   case CONST_DOUBLE:                            \
1038       return 10;
1039
1040 #define RTX_COSTS(X, CODE, OUTER_CODE)                  \
1041   case AND:                                             \
1042     return COSTS_N_INSNS (andcosts (X));                \
1043   case MULT:                                            \
1044     return COSTS_N_INSNS (multcosts (X));               \
1045   case ASHIFT:                                          \
1046   case ASHIFTRT:                                        \
1047   case LSHIFTRT:                                        \
1048     return COSTS_N_INSNS (shiftcosts (X)) ;             \
1049   case DIV:                                             \
1050   case UDIV:                                            \
1051   case MOD:                                             \
1052   case UMOD:                                            \
1053     return COSTS_N_INSNS (20);                          \
1054   case FLOAT:                                           \
1055   case FIX:                                             \
1056     return 100;
1057
1058 /* The multiply insn on the SH1 and the divide insns on the SH1 and SH2
1059    are actually function calls with some special constraints on arguments
1060    and register usage.
1061
1062    These macros tell reorg that the references to arguments and
1063    register clobbers for insns of type sfunc do not appear to happen
1064    until after the millicode call.  This allows reorg to put insns
1065    which set the argument registers into the delay slot of the millicode
1066    call -- thus they act more like traditional CALL_INSNs.
1067
1068    get_attr_type will try to recognize the given insn, so make sure to
1069    filter out things it will not accept -- SEQUENCE, USE and CLOBBER insns
1070    in particular.  */
1071
1072 #define INSN_SETS_ARE_DELAYED(X)                \
1073   ((GET_CODE (X) == INSN                        \
1074     && GET_CODE (PATTERN (X)) != SEQUENCE       \
1075     && GET_CODE (PATTERN (X)) != USE            \
1076     && GET_CODE (PATTERN (X)) != CLOBBER        \
1077     && get_attr_type (X) == TYPE_SFUNC))
1078
1079 #define INSN_REFERENCES_ARE_DELAYED(X)          \
1080   ((GET_CODE (X) == INSN                        \
1081     && GET_CODE (PATTERN (X)) != SEQUENCE       \
1082     && GET_CODE (PATTERN (X)) != USE            \
1083     && GET_CODE (PATTERN (X)) != CLOBBER        \
1084     && get_attr_type (X) == TYPE_SFUNC))
1085
1086 /* Compute extra cost of moving data between one register class
1087    and another.
1088
1089    On the SH it is hard to move into the T reg, but simple to load
1090    from it.  */
1091
1092 #define REGISTER_MOVE_COST(SRCCLASS, DSTCLASS) \
1093         (((DSTCLASS == T_REGS) || (DSTCLASS == PR_REG)) ? 10 : 1)
1094
1095 /* ??? Perhaps make MEMORY_MOVE_COST depend on compiler option?  This
1096    would be so that people would slow memory systems could generate
1097    different code that does fewer memory accesses.  */
1098 \f
1099 /* Assembler output control.  */
1100
1101 /* The text to go at the start of the assembler file.  */
1102 #define ASM_FILE_START(STREAM)                                          \
1103   output_file_start (STREAM, f_options,                                 \
1104                      sizeof f_options / sizeof f_options[0],            \
1105                      W_options, sizeof W_options / sizeof W_options[0]);
1106
1107 #define ASM_FILE_END(STREAM)
1108
1109 #define ASM_APP_ON              ""
1110 #define ASM_APP_OFF             ""
1111 #define FILE_ASM_OP             "\t.file\n"
1112 #define IDENT_ASM_OP            "\t.ident\n"
1113
1114 /* How to change between sections.  */
1115
1116 #define TEXT_SECTION_ASM_OP             "\t.text"
1117 #define DATA_SECTION_ASM_OP             "\t.data"
1118 #define CTORS_SECTION_ASM_OP            "\t.section\t.ctors\n"
1119 #define DTORS_SECTION_ASM_OP            "\t.section\t.dtors\n"
1120 #define EXTRA_SECTIONS                  in_ctors, in_dtors
1121 #define EXTRA_SECTION_FUNCTIONS                                 \
1122 void                                                            \
1123 ctors_section()                                                 \
1124 {                                                               \
1125   if (in_section != in_ctors)                                   \
1126     {                                                           \
1127       fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP);     \
1128       in_section = in_ctors;                                    \
1129     }                                                           \
1130 }                                                               \
1131 void                                                            \
1132 dtors_section()                                                 \
1133 {                                                               \
1134   if (in_section != in_dtors)                                   \
1135     {                                                           \
1136       fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP);     \
1137       in_section = in_dtors;                                    \
1138     }                                                           \
1139 }
1140
1141 /* A C statement to output something to the assembler file to switch to section
1142    NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or
1143    NULL_TREE.  Some target formats do not support arbitrary sections.  Do not
1144    define this macro in such cases.  */
1145
1146 #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME) \
1147    do { fprintf (FILE, ".section\t%s\n", NAME); } while (0)
1148
1149 #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
1150    do { ctors_section();  fprintf(FILE,"\t.long\t_%s\n", NAME); } while (0)
1151
1152 #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \
1153    do {  dtors_section();  fprintf(FILE,"\t.long\t_%s\n", NAME); } while (0)
1154
1155 #undef DO_GLOBAL_CTORS_BODY
1156
1157 #define DO_GLOBAL_CTORS_BODY                    \
1158 {                                               \
1159   typedef (*pfunc)();                           \
1160   extern pfunc __ctors[];                       \
1161   extern pfunc __ctors_end[];                   \
1162   pfunc *p;                                     \
1163   for (p = __ctors_end; p > __ctors; )          \
1164     {                                           \
1165       (*--p)();                                 \
1166     }                                           \
1167 }
1168
1169 #undef DO_GLOBAL_DTORS_BODY
1170 #define DO_GLOBAL_DTORS_BODY                    \
1171 {                                               \
1172   typedef (*pfunc)();                           \
1173   extern pfunc __dtors[];                       \
1174   extern pfunc __dtors_end[];                   \
1175   pfunc *p;                                     \
1176   for (p = __dtors; p < __dtors_end; p++)       \
1177     {                                           \
1178       (*p)();                                   \
1179     }                                           \
1180 }
1181
1182 #define ASM_OUTPUT_REG_PUSH(file, v) \
1183   fprintf (file, "\tmov.l       r%s,-@r15\n", v);
1184
1185 #define ASM_OUTPUT_REG_POP(file, v) \
1186   fprintf (file, "\tmov.l       @r15+,r%s\n", v);
1187
1188 /* The assembler's names for the registers.  RFP need not always be used as
1189    the Real framepointer; it can also be used as a normal general register.
1190    Note that the name `fp' is horribly misleading since `fp' is in fact only
1191    the argument-and-return-context pointer.  */
1192 #define REGISTER_NAMES                                  \
1193 {                                                       \
1194   "r0", "r1", "r2",  "r3",  "r4",  "r5",  "r6",  "r7",  \
1195   "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \
1196   "ap", "pr", "t",  "gbr", "mach","macl"                \
1197 }
1198
1199 /* DBX register number for a given compiler register number.  */
1200 #define DBX_REGISTER_NUMBER(REGNO)  (REGNO)
1201
1202 /* Output a label definition.  */
1203 #define ASM_OUTPUT_LABEL(FILE,NAME) \
1204   do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
1205
1206 /* This is how to output an assembler line
1207    that says to advance the location counter
1208    to a multiple of 2**LOG bytes.  */
1209
1210 #define ASM_OUTPUT_ALIGN(FILE,LOG)      \
1211   if ((LOG) != 0)                       \
1212     fprintf (FILE, "\t.align %d\n", LOG)
1213
1214 /* Output a function label definition.  */
1215 #define ASM_DECLARE_FUNCTION_NAME(STREAM,NAME,DECL) \
1216     ASM_OUTPUT_LABEL(STREAM, NAME)
1217
1218 /* Output a globalising directive for a label.  */
1219 #define ASM_GLOBALIZE_LABEL(STREAM,NAME)        \
1220   (fprintf (STREAM, "\t.global\t"),             \
1221    assemble_name (STREAM, NAME),                \
1222    fputc ('\n',STREAM))
1223
1224 /* Output a reference to a label.  */
1225 #define ASM_OUTPUT_LABELREF(STREAM,NAME) \
1226   fprintf (STREAM, "_%s", NAME)
1227
1228 /* Make an internal label into a string.  */
1229 #define ASM_GENERATE_INTERNAL_LABEL(STRING, PREFIX, NUM) \
1230   sprintf (STRING, "*%s%d", PREFIX, NUM)
1231
1232 /* Output an internal label definition.  */
1233 #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
1234   fprintf (FILE, "%s%d:\n", PREFIX, NUM)
1235
1236 /* #define ASM_OUTPUT_CASE_END(STREAM,NUM,TABLE)            */
1237
1238 /* Construct a private name.  */
1239 #define ASM_FORMAT_PRIVATE_NAME(OUTVAR,NAME,NUMBER)     \
1240   ((OUTVAR) = (char *) alloca (strlen (NAME) + 10),     \
1241    sprintf ((OUTVAR), "%s.%d", (NAME), (NUMBER)))
1242
1243 /* Jump tables must be 32 bit aligned, no matter the size of the element.  */
1244 #define ASM_OUTPUT_CASE_LABEL(STREAM,PREFIX,NUM,TABLE) \
1245   fprintf (STREAM, "\t.align 2\n%s%d:\n",  PREFIX, NUM);
1246
1247 /* Output a relative address table.  */
1248
1249 #define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM,VALUE,REL)                      \
1250   if (TARGET_BIGTABLE)                                                  \
1251     fprintf (STREAM, "\t.long   L%d-L%d\n", VALUE,REL);                 \
1252   else                                                                  \
1253     fprintf (STREAM, "\t.word   L%d-L%d\n", VALUE,REL);                 \
1254
1255 /* Output an absolute table element.  */
1256
1257 #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM,VALUE)                           \
1258   if (TARGET_BIGTABLE)                                                  \
1259     fprintf (STREAM, "\t.long   L%d\n", VALUE);                         \
1260   else                                                                  \
1261     fprintf (STREAM, "\t.word   L%d\n", VALUE);                         \
1262
1263 /* Output various types of constants.  */
1264
1265 /* This is how to output an assembler line defining a `double'.  */
1266
1267 #define ASM_OUTPUT_DOUBLE(FILE,VALUE)                   \
1268 do { char dstr[30];                                     \
1269      REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr);    \
1270      fprintf (FILE, "\t.double %s\n", dstr);            \
1271    } while (0)
1272
1273 /* This is how to output an assembler line defining a `float' constant.  */
1274 #define ASM_OUTPUT_FLOAT(FILE,VALUE)                    \
1275 do { char dstr[30];                                     \
1276      REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr);    \
1277      fprintf (FILE, "\t.float %s\n", dstr);             \
1278    } while (0)
1279
1280 #define ASM_OUTPUT_INT(STREAM, EXP)     \
1281   (fprintf (STREAM, "\t.long\t"),       \
1282    output_addr_const (STREAM, (EXP)),   \
1283    fputc ('\n', STREAM))
1284
1285 #define ASM_OUTPUT_SHORT(STREAM, EXP)   \
1286   (fprintf (STREAM, "\t.short\t"),      \
1287    output_addr_const (STREAM, (EXP)),   \
1288    fputc ('\n', STREAM))
1289
1290 #define ASM_OUTPUT_CHAR(STREAM, EXP)    \
1291   (fprintf (STREAM, "\t.byte\t"),       \
1292    output_addr_const (STREAM, (EXP)),   \
1293    fputc ('\n', STREAM))
1294
1295 #define ASM_OUTPUT_BYTE(STREAM, VALUE)          \
1296   fprintf (STREAM, "\t.byte\t%d\n", VALUE)      \
1297
1298 /* This is how to output an assembler line
1299    that says to advance the location counter by SIZE bytes.  */
1300
1301 #define ASM_OUTPUT_SKIP(FILE,SIZE) \
1302   fprintf (FILE, "\t.space %d\n", (SIZE))
1303
1304 /* This says how to output an assembler line
1305    to define a global common symbol.  */
1306
1307 #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED)    \
1308 ( fputs ("\t.comm ", (FILE)),                   \
1309   assemble_name ((FILE), (NAME)),               \
1310   fprintf ((FILE), ",%d\n", (SIZE)))
1311
1312 /* This says how to output an assembler line
1313    to define a local common symbol.  */
1314
1315 #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE,ROUNDED)      \
1316 ( fputs ("\t.lcomm ", (FILE)),                          \
1317   assemble_name ((FILE), (NAME)),                       \
1318   fprintf ((FILE), ",%d\n", (SIZE)))
1319
1320 /* The assembler's parentheses characters.  */
1321 #define ASM_OPEN_PAREN "("
1322 #define ASM_CLOSE_PAREN ")"
1323
1324 /* Target characters.  */
1325 #define TARGET_BELL     007
1326 #define TARGET_BS       010
1327 #define TARGET_TAB      011
1328 #define TARGET_NEWLINE  012
1329 #define TARGET_VT       013
1330 #define TARGET_FF       014
1331 #define TARGET_CR       015
1332 \f
1333 /* Only perform branch elimination (by making instructions conditional) if
1334    we're optimizing.  Otherwise it's of no use anyway.  */
1335 #define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \
1336   final_prescan_insn (INSN, OPVEC, NOPERANDS)
1337
1338 /* Print operand X (an rtx) in assembler syntax to file FILE.
1339    CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
1340    For `%' followed by punctuation, CODE is the punctuation and X is null.  */
1341
1342 #define PRINT_OPERAND(STREAM, X, CODE)  print_operand (STREAM, X, CODE)
1343
1344 /* Print a memory address as an operand to reference that memory location.  */
1345
1346 #define PRINT_OPERAND_ADDRESS(STREAM,X)  print_operand_address (STREAM, X)
1347
1348 #define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \
1349   ((CHAR)=='.' || (CHAR) == '#' || (CHAR)=='@')
1350 \f
1351 extern struct rtx_def *sh_compare_op0;
1352 extern struct rtx_def *sh_compare_op1;
1353 extern struct rtx_def *prepare_scc_operands();
1354
1355 /* Which processor to schedule for.  The elements of the enumeration must
1356    match exactly the cpu attribute in the sh.md file.  */
1357
1358 enum processor_type {
1359   PROCESSOR_SH0,
1360   PROCESSOR_SH1,
1361   PROCESSOR_SH2,
1362   PROCESSOR_SH3
1363 };
1364
1365 #define sh_cpu_attr ((enum attr_cpu)sh_cpu)
1366 extern enum processor_type sh_cpu;
1367
1368 /* Declare functions defined in sh.c and used in templates.  */
1369
1370 extern char *output_branch();
1371 extern char *output_shift();
1372 extern char *output_movedouble();
1373 extern char *output_movepcrel();
1374 extern char *output_jump_label_table();
1375 extern char *output_far_jump();
1376
1377 #define MACHINE_DEPENDENT_REORG(X) machine_dependent_reorg(X)
1378
1379 /* Generate calls to memcpy, memcmp and memset.  */
1380
1381 #define TARGET_MEM_FUNCTIONS
1382
1383 #define HANDLE_PRAGMA(finput) return handle_pragma (finput)
1384
1385 /* Set when processing a function with pragma interrupt turned on.  */
1386
1387 extern int pragma_interrupt;
1388
1389 #define MOVE_RATIO (TARGET_SMALLCODE ? 2 : 16)
1390 \f
1391 /* Instructions with unfilled delay slots take up an extra two bytes for
1392    the nop in the delay slot.  */
1393
1394 #define ADJUST_INSN_LENGTH(X, LENGTH)                           \
1395   if (((GET_CODE (X) == INSN                                    \
1396         && GET_CODE (PATTERN (X)) != SEQUENCE                   \
1397         && GET_CODE (PATTERN (X)) != USE                        \
1398         && GET_CODE (PATTERN (X)) != CLOBBER)                   \
1399        || GET_CODE (X) == CALL_INSN                             \
1400        || (GET_CODE (X) == JUMP_INSN                            \
1401            && GET_CODE (PATTERN (X)) != ADDR_DIFF_VEC           \
1402            && GET_CODE (PATTERN (X)) != ADDR_VEC))              \
1403       && get_attr_needs_delay_slot (X) == NEEDS_DELAY_SLOT_YES) \
1404    LENGTH += 2;
1405
1406 /* Enable a bug fix for the shorten_branches pass.  */
1407 #define SHORTEN_WITH_ADJUST_INSN_LENGTH
1408 \f
1409 /* Define the codes that are matched by predicates in sh.c.  */
1410 #define PREDICATE_CODES \
1411   {"arith_reg_operand", {SUBREG, REG}},                                 \
1412   {"arith_operand", {SUBREG, REG, CONST_INT}},                          \
1413   {"arith_reg_or_0_operand", {SUBREG, REG, CONST_INT}},                 \
1414   {"logical_operand", {SUBREG, REG, CONST_INT}},                        \
1415   {"general_movsrc_operand", {SUBREG, REG, CONST_INT, MEM}},            \
1416   {"general_movdst_operand", {SUBREG, REG, CONST_INT, MEM}},
1417
1418 /* Define this macro if it is advisable to hold scalars in registers
1419    in a wider mode than that declared by the program.  In such cases, 
1420    the value is constrained to be within the bounds of the declared
1421    type, but kept valid in the wider mode.  The signedness of the
1422    extension may differ from that of the type.
1423
1424    Leaving the unsignedp unchanged gives better code than always setting it
1425    to 0.  This is despite the fact that we have only signed char and short
1426    load instructions.  */
1427 #define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \
1428   if (GET_MODE_CLASS (MODE) == MODE_INT                 \
1429       && GET_MODE_SIZE (MODE) < UNITS_PER_WORD)         \
1430     MODE = SImode;
1431
1432 /* Defining PROMOTE_FUNCTION_ARGS eliminates some unnecessary zero/sign
1433    extensions applied to char/short functions arguments.  Defining
1434    PROMOTE_FUNCTION_RETURN does the same for function returns.  */
1435
1436 #define PROMOTE_FUNCTION_ARGS
1437 #define PROMOTE_FUNCTION_RETURN
1438
1439 /* ??? Define ACCUMULATE_OUTGOING_ARGS?  This is more efficient than pushing
1440    and poping arguments.  However, we do have push/pop instructions, and
1441    rather limited offsets (4 bits) in load/store instructions, so it isn't
1442    clear if this would give better code.  If implemented, should check for
1443    compatibility problems.  */
1444
1445 /* ??? Define ADJUST_COSTS?  */
1446
1447 /* For the sake of libgcc2.c, indicate target supports atexit.  */
1448 #define HAVE_ATEXIT