OSDN Git Service

Change FSF address.
[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 /* Show we can debug even 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 #else
809
810 /* Nonzero if X is a hard reg that can be used as a base reg.  */
811 #define REG_OK_FOR_BASE_P(X) \
812         REGNO_OK_FOR_BASE_P (REGNO (X))
813
814 /* Nonzero if X is a hard reg that can be used as an index.  */
815 #define REG_OK_FOR_INDEX_P(X) \
816         REGNO_OK_FOR_INDEX_P (REGNO (X))
817
818 #endif
819
820 /* The 'Q' constraint is a pc relative load operand.  */
821 #define EXTRA_CONSTRAINT_Q(OP)                                          \
822   (GET_CODE (OP) == MEM &&                                              \
823    ((GET_CODE (XEXP (OP, 0)) == LABEL_REF)                              \
824     || (GET_CODE (XEXP (OP, 0)) == CONST                                \
825         && GET_CODE (XEXP (XEXP (OP, 0), 0)) == PLUS                    \
826         && GET_CODE (XEXP (XEXP (XEXP (OP, 0), 0), 0)) == LABEL_REF     \
827         && GET_CODE (XEXP (XEXP (XEXP (OP, 0), 0), 1)) == CONST_INT)))
828
829 #define EXTRA_CONSTRAINT(OP, C)         \
830   ((C) == 'Q' ? EXTRA_CONSTRAINT_Q (OP) \
831    : 0)
832 \f
833 /* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
834    that is a valid memory address for an instruction.
835    The MODE argument is the machine mode for the MEM expression
836    that wants to use this address.
837
838    The other macros defined here are used only in GO_IF_LEGITIMATE_ADDRESS.  */
839
840 #define BASE_REGISTER_RTX_P(X)                          \
841   ((GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X))       \
842    || (GET_CODE (X) == SUBREG                           \
843        && GET_CODE (SUBREG_REG (X)) == REG              \
844        && REG_OK_FOR_BASE_P (SUBREG_REG (X))))
845
846 #define INDEX_REGISTER_RTX_P(X)                         \
847   ((GET_CODE (X) == REG && REG_OK_FOR_INDEX_P (X))      \
848    || (GET_CODE (X) == SUBREG                           \
849        && GET_CODE (SUBREG_REG (X)) == REG              \
850        && REG_OK_FOR_INDEX_P (SUBREG_REG (X))))
851
852 /* Jump to LABEL if X is a valid address RTX.  This must also take
853    REG_OK_STRICT into account when deciding about valid registers, but it uses
854    the above macros so we are in luck.
855
856    Allow  REG
857           REG+disp
858           REG+r0
859           REG++
860           --REG  */
861
862 /* The SH allows a displacement in a QI or HI amode, but only when the
863    other operand is R0. GCC doesn't handle this very well, so we forgo
864    all of that.
865
866    A legitimate index for a QI or HI is 0, SI can be any number 0..63,
867    DI can be any number 0..60.  */
868
869 #define GO_IF_LEGITIMATE_INDEX(MODE, OP, LABEL)                         \
870   do {                                                                  \
871     if (GET_CODE (OP) == CONST_INT)                                     \
872       {                                                                 \
873         if (MODE_DISP_OK_4 (OP, MODE))  goto LABEL;                     \
874         if (MODE_DISP_OK_8 (OP, MODE))  goto LABEL;                     \
875       }                                                                 \
876   } while(0)
877
878 #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, LABEL)                        \
879 {                                                                       \
880   if (BASE_REGISTER_RTX_P (X))                                          \
881     goto LABEL;                                                         \
882   else if ((GET_CODE (X) == POST_INC || GET_CODE (X) == PRE_DEC)        \
883            && BASE_REGISTER_RTX_P (XEXP (X, 0)))                        \
884     goto LABEL;                                                         \
885   else if (GET_CODE (X) == PLUS)                                        \
886     {                                                                   \
887       rtx xop0 = XEXP (X, 0);                                           \
888       rtx xop1 = XEXP (X, 1);                                           \
889       if (GET_MODE_SIZE (MODE) <= 8 && BASE_REGISTER_RTX_P (xop0))      \
890         GO_IF_LEGITIMATE_INDEX (MODE, xop1, LABEL);                     \
891       if (GET_MODE_SIZE (MODE) <= 4)                                    \
892         {                                                               \
893           if (BASE_REGISTER_RTX_P (xop1) && INDEX_REGISTER_RTX_P (xop0))\
894             goto LABEL;                                                 \
895           if (INDEX_REGISTER_RTX_P (xop1) && BASE_REGISTER_RTX_P (xop0))\
896             goto LABEL;                                                 \
897         }                                                               \
898     }                                                                   \
899 }
900 \f
901 /* Try machine-dependent ways of modifying an illegitimate address
902    to be legitimate.  If we find one, return the new, valid address.
903    This macro is used in only one place: `memory_address' in explow.c.
904
905    OLDX is the address as it was before break_out_memory_refs was called.
906    In some cases it is useful to look at this to decide what needs to be done.
907
908    MODE and WIN are passed so that this macro can use
909    GO_IF_LEGITIMATE_ADDRESS.
910
911    It is always safe for this macro to do nothing.  It exists to recognize
912    opportunities to optimize the output.  */
913
914 #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) ;
915
916 /* Go to LABEL if ADDR (a legitimate address expression)
917    has an effect that depends on the machine mode it is used for.  */
918 #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)                        \
919 {                                                                       \
920   if (GET_CODE(ADDR) == PRE_DEC || GET_CODE(ADDR) == POST_INC)          \
921     goto LABEL;                                                         \
922 }
923 \f
924 /* Specify the machine mode that this machine uses
925    for the index in the tablejump instruction.  */
926 #define CASE_VECTOR_MODE (TARGET_BIGTABLE ? SImode : HImode)
927
928 /* Define this if the tablejump instruction expects the table
929    to contain offsets from the address of the table.
930    Do not define this if the table should contain absolute addresses.  */
931 #define CASE_VECTOR_PC_RELATIVE
932
933 /* Specify the tree operation to be used to convert reals to integers.  */
934 #define IMPLICIT_FIX_EXPR  FIX_ROUND_EXPR
935
936 /* This is the kind of divide that is easiest to do in the general case.  */
937 #define EASY_DIV_EXPR  TRUNC_DIV_EXPR
938
939 /* 'char' is signed by default.  */
940 #define DEFAULT_SIGNED_CHAR  1
941
942 /* The type of size_t unsigned int.  */
943 #define SIZE_TYPE "unsigned int"
944
945 #define WCHAR_TYPE "short unsigned int"
946 #define WCHAR_TYPE_SIZE 16
947
948 /* Don't cse the address of the function being compiled.  */
949 /*#define NO_RECURSIVE_FUNCTION_CSE 1*/
950
951 /* Max number of bytes we can move from memory to memory
952    in one reasonably fast instruction.  */
953 #define MOVE_MAX 4
954
955 /* Define if operations between registers always perform the operation
956    on the full register even if a narrower mode is specified.  */
957 #define WORD_REGISTER_OPERATIONS
958
959 /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
960    will either zero-extend or sign-extend.  The value of this macro should
961    be the code that says which one of the two operations is implicitly
962    done, NIL if none.  */
963 #define LOAD_EXTEND_OP(MODE) SIGN_EXTEND
964
965 /* Define this if zero-extension is slow (more than one real instruction).
966    On the SH, it's only one instruction.  */
967 /* #define SLOW_ZERO_EXTEND */
968
969 /* Nonzero if access to memory by bytes is slow and undesirable.  */
970 #define SLOW_BYTE_ACCESS 0
971
972 /* We assume that the store-condition-codes instructions store 0 for false
973    and some other value for true.  This is the value stored for true.  */
974
975 #define STORE_FLAG_VALUE 1
976
977 /* Immediate shift counts are truncated by the output routines (or was it
978    the assembler?).  Shift counts in a register are truncated by SH.  Note
979    that the native compiler puts too large (> 32) immediate shift counts
980    into a register and shifts by the register, letting the SH decide what
981    to do instead of doing that itself.  */
982 /* ??? This is defined, but the library routines in lib1funcs.asm do not
983    truncate the shift count.  This may result in incorrect results for
984    unusual cases.  Truncating the shift counts in the library routines would
985    make them faster.  However, the SH3 has hardware shifts that do not
986    truncate, so it appears that we need to leave this undefined for correct
987    SH3 code.  We can still using truncation in the library routines though to
988    make them faster.  */
989 #define SHIFT_COUNT_TRUNCATED 1
990
991 /* All integers have the same format so truncation is easy.  */
992 #define TRULY_NOOP_TRUNCATION(OUTPREC,INPREC)  1
993
994 /* Define this if addresses of constant functions
995    shouldn't be put through pseudo regs where they can be cse'd.
996    Desirable on machines where ordinary constants are expensive
997    but a CALL with constant address is cheap.  */
998 /*#define NO_FUNCTION_CSE 1*/
999
1000 /* Chars and shorts should be passed as ints.  */
1001 #define PROMOTE_PROTOTYPES 1
1002
1003 /* The machine modes of pointers and functions.  */
1004 #define Pmode  SImode
1005 #define FUNCTION_MODE  Pmode
1006
1007 /* The relative costs of various types of constants.  Note that cse.c defines
1008    REG = 1, SUBREG = 2, any node = (2 + sum of subnodes).  */
1009
1010 #define CONST_COSTS(RTX, CODE, OUTER_CODE)      \
1011   case CONST_INT:                               \
1012     if (INTVAL (RTX) == 0)                      \
1013       return 0;                                 \
1014     else if (CONST_OK_FOR_I (INTVAL (RTX)))     \
1015       return 1;                                 \
1016     else if ((OUTER_CODE == AND || OUTER_CODE == IOR || OUTER_CODE == XOR) \
1017              && CONST_OK_FOR_L (INTVAL (RTX)))  \
1018       return 1;                                 \
1019     else                                        \
1020       return 8;                                 \
1021   case CONST:                                   \
1022   case LABEL_REF:                               \
1023   case SYMBOL_REF:                              \
1024     return 5;                                   \
1025   case CONST_DOUBLE:                            \
1026       return 10;
1027
1028 #define RTX_COSTS(X, CODE, OUTER_CODE)                  \
1029   case AND:                                             \
1030     return COSTS_N_INSNS (andcosts (X));                \
1031   case MULT:                                            \
1032     return COSTS_N_INSNS (multcosts (X));               \
1033   case ASHIFT:                                          \
1034   case ASHIFTRT:                                        \
1035   case LSHIFTRT:                                        \
1036     return COSTS_N_INSNS (shiftcosts (X)) ;             \
1037   case DIV:                                             \
1038   case UDIV:                                            \
1039   case MOD:                                             \
1040   case UMOD:                                            \
1041     return COSTS_N_INSNS (20);                          \
1042   case FLOAT:                                           \
1043   case FIX:                                             \
1044     return 100;
1045
1046 /* The multiply insn on the SH1 and the divide insns on the SH1 and SH2
1047    are actually function calls with some special constraints on arguments
1048    and register usage.
1049
1050    These macros tell reorg that the references to arguments and
1051    register clobbers for insns of type sfunc do not appear to happen
1052    until after the millicode call.  This allows reorg to put insns
1053    which set the argument registers into the delay slot of the millicode
1054    call -- thus they act more like traditional CALL_INSNs.
1055
1056    get_attr_type will try to recognize the given insn, so make sure to
1057    filter out things it will not accept -- SEQUENCE, USE and CLOBBER insns
1058    in particular.  */
1059
1060 #define INSN_SETS_ARE_DELAYED(X)                \
1061   ((GET_CODE (X) == INSN                        \
1062     && GET_CODE (PATTERN (X)) != SEQUENCE       \
1063     && GET_CODE (PATTERN (X)) != USE            \
1064     && GET_CODE (PATTERN (X)) != CLOBBER        \
1065     && get_attr_type (X) == TYPE_SFUNC))
1066
1067 #define INSN_REFERENCES_ARE_DELAYED(X)          \
1068   ((GET_CODE (X) == INSN                        \
1069     && GET_CODE (PATTERN (X)) != SEQUENCE       \
1070     && GET_CODE (PATTERN (X)) != USE            \
1071     && GET_CODE (PATTERN (X)) != CLOBBER        \
1072     && get_attr_type (X) == TYPE_SFUNC))
1073
1074 /* Compute extra cost of moving data between one register class
1075    and another.
1076
1077    On the SH it is hard to move into the T reg, but simple to load
1078    from it.  */
1079
1080 #define REGISTER_MOVE_COST(SRCCLASS, DSTCLASS) \
1081         (((DSTCLASS == T_REGS) || (DSTCLASS == PR_REG)) ? 10 : 1)
1082
1083 /* ??? Perhaps make MEMORY_MOVE_COST depend on compiler option?  This
1084    would be so that people would slow memory systems could generate
1085    different code that does fewer memory accesses.  */
1086 \f
1087 /* Assembler output control.  */
1088
1089 /* The text to go at the start of the assembler file.  */
1090 #define ASM_FILE_START(STREAM)                                          \
1091   output_file_start (STREAM, f_options,                                 \
1092                      sizeof f_options / sizeof f_options[0],            \
1093                      W_options, sizeof W_options / sizeof W_options[0]);
1094
1095 #define ASM_FILE_END(STREAM)
1096
1097 #define ASM_APP_ON              ""
1098 #define ASM_APP_OFF             ""
1099 #define FILE_ASM_OP             "\t.file\n"
1100 #define IDENT_ASM_OP            "\t.ident\n"
1101
1102 /* How to change between sections.  */
1103
1104 #define TEXT_SECTION_ASM_OP             "\t.text"
1105 #define DATA_SECTION_ASM_OP             "\t.data"
1106 #define CTORS_SECTION_ASM_OP            "\t.section\t.ctors\n"
1107 #define DTORS_SECTION_ASM_OP            "\t.section\t.dtors\n"
1108 #define INIT_SECTION_ASM_OP             "\t.section\t.init\n"
1109 #define EXTRA_SECTIONS                  in_ctors, in_dtors
1110 #define EXTRA_SECTION_FUNCTIONS                                 \
1111 void                                                            \
1112 ctors_section()                                                 \
1113 {                                                               \
1114   if (in_section != in_ctors)                                   \
1115     {                                                           \
1116       fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP);     \
1117       in_section = in_ctors;                                    \
1118     }                                                           \
1119 }                                                               \
1120 void                                                            \
1121 dtors_section()                                                 \
1122 {                                                               \
1123   if (in_section != in_dtors)                                   \
1124     {                                                           \
1125       fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP);     \
1126       in_section = in_dtors;                                    \
1127     }                                                           \
1128 }
1129
1130 /* A C statement to output something to the assembler file to switch to section
1131    NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or
1132    NULL_TREE.  Some target formats do not support arbitrary sections.  Do not
1133    define this macro in such cases.  */
1134
1135 #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME) \
1136    do { fprintf (FILE, ".section\t%s\n", NAME); } while (0)
1137
1138 #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
1139    do { ctors_section();  fprintf(FILE,"\t.long\t_%s\n", NAME); } while (0)
1140
1141 #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \
1142    do {  dtors_section();  fprintf(FILE,"\t.long\t_%s\n", NAME); } while (0)
1143
1144 #undef DO_GLOBAL_CTORS_BODY
1145
1146 #define DO_GLOBAL_CTORS_BODY                    \
1147 {                                               \
1148   typedef (*pfunc)();                           \
1149   extern pfunc __ctors[];                       \
1150   extern pfunc __ctors_end[];                   \
1151   pfunc *p;                                     \
1152   for (p = __ctors_end; p > __ctors; )          \
1153     {                                           \
1154       (*--p)();                                 \
1155     }                                           \
1156 }
1157
1158 #undef DO_GLOBAL_DTORS_BODY
1159 #define DO_GLOBAL_DTORS_BODY                    \
1160 {                                               \
1161   typedef (*pfunc)();                           \
1162   extern pfunc __dtors[];                       \
1163   extern pfunc __dtors_end[];                   \
1164   pfunc *p;                                     \
1165   for (p = __dtors; p < __dtors_end; p++)       \
1166     {                                           \
1167       (*p)();                                   \
1168     }                                           \
1169 }
1170
1171 #define ASM_OUTPUT_REG_PUSH(file, v) \
1172   fprintf (file, "\tmov.l       r%s,-@r15\n", v);
1173
1174 #define ASM_OUTPUT_REG_POP(file, v) \
1175   fprintf (file, "\tmov.l       @r15+,r%s\n", v);
1176
1177 /* The assembler's names for the registers.  RFP need not always be used as
1178    the Real framepointer; it can also be used as a normal general register.
1179    Note that the name `fp' is horribly misleading since `fp' is in fact only
1180    the argument-and-return-context pointer.  */
1181 #define REGISTER_NAMES                                  \
1182 {                                                       \
1183   "r0", "r1", "r2",  "r3",  "r4",  "r5",  "r6",  "r7",  \
1184   "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \
1185   "ap", "pr", "t",  "gbr", "mach","macl"                \
1186 }
1187
1188 /* DBX register number for a given compiler register number.  */
1189 #define DBX_REGISTER_NUMBER(REGNO)  (REGNO)
1190
1191 /* Output a label definition.  */
1192 #define ASM_OUTPUT_LABEL(FILE,NAME) \
1193   do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
1194
1195 /* This is how to output an assembler line
1196    that says to advance the location counter
1197    to a multiple of 2**LOG bytes.  */
1198
1199 #define ASM_OUTPUT_ALIGN(FILE,LOG)      \
1200   if ((LOG) != 0)                       \
1201     fprintf (FILE, "\t.align %d\n", LOG)
1202
1203 /* Output a function label definition.  */
1204 #define ASM_DECLARE_FUNCTION_NAME(STREAM,NAME,DECL) \
1205     ASM_OUTPUT_LABEL(STREAM, NAME)
1206
1207 /* Output a globalising directive for a label.  */
1208 #define ASM_GLOBALIZE_LABEL(STREAM,NAME)        \
1209   (fprintf (STREAM, "\t.global\t"),             \
1210    assemble_name (STREAM, NAME),                \
1211    fputc ('\n',STREAM))
1212
1213 /* Output a reference to a label.  */
1214 #define ASM_OUTPUT_LABELREF(STREAM,NAME) \
1215   fprintf (STREAM, "_%s", NAME)
1216
1217 /* Make an internal label into a string.  */
1218 #define ASM_GENERATE_INTERNAL_LABEL(STRING, PREFIX, NUM) \
1219   sprintf (STRING, "*%s%d", PREFIX, NUM)
1220
1221 /* Output an internal label definition.  */
1222 #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
1223   fprintf (FILE, "%s%d:\n", PREFIX, NUM)
1224
1225 /* #define ASM_OUTPUT_CASE_END(STREAM,NUM,TABLE)            */
1226
1227 /* Construct a private name.  */
1228 #define ASM_FORMAT_PRIVATE_NAME(OUTVAR,NAME,NUMBER)     \
1229   ((OUTVAR) = (char *) alloca (strlen (NAME) + 10),     \
1230    sprintf ((OUTVAR), "%s.%d", (NAME), (NUMBER)))
1231
1232 /* Jump tables must be 32 bit aligned, no matter the size of the element.  */
1233 #define ASM_OUTPUT_CASE_LABEL(STREAM,PREFIX,NUM,TABLE) \
1234   fprintf (STREAM, "\t.align 2\n%s%d:\n",  PREFIX, NUM);
1235
1236 /* Output a relative address table.  */
1237
1238 #define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM,VALUE,REL)                      \
1239   if (TARGET_BIGTABLE)                                                  \
1240     fprintf (STREAM, "\t.long   L%d-L%d\n", VALUE,REL);                 \
1241   else                                                                  \
1242     fprintf (STREAM, "\t.word   L%d-L%d\n", VALUE,REL);                 \
1243
1244 /* Output an absolute table element.  */
1245
1246 #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM,VALUE)                           \
1247   if (TARGET_BIGTABLE)                                                  \
1248     fprintf (STREAM, "\t.long   L%d\n", VALUE);                         \
1249   else                                                                  \
1250     fprintf (STREAM, "\t.word   L%d\n", VALUE);                         \
1251
1252 /* Output various types of constants.  */
1253
1254 /* This is how to output an assembler line defining a `double'.  */
1255
1256 #define ASM_OUTPUT_DOUBLE(FILE,VALUE)                   \
1257 do { char dstr[30];                                     \
1258      REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr);    \
1259      fprintf (FILE, "\t.double %s\n", dstr);            \
1260    } while (0)
1261
1262 /* This is how to output an assembler line defining a `float' constant.  */
1263 #define ASM_OUTPUT_FLOAT(FILE,VALUE)                    \
1264 do { char dstr[30];                                     \
1265      REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr);    \
1266      fprintf (FILE, "\t.float %s\n", dstr);             \
1267    } while (0)
1268
1269 #define ASM_OUTPUT_INT(STREAM, EXP)     \
1270   (fprintf (STREAM, "\t.long\t"),       \
1271    output_addr_const (STREAM, (EXP)),   \
1272    fputc ('\n', STREAM))
1273
1274 #define ASM_OUTPUT_SHORT(STREAM, EXP)   \
1275   (fprintf (STREAM, "\t.short\t"),      \
1276    output_addr_const (STREAM, (EXP)),   \
1277    fputc ('\n', STREAM))
1278
1279 #define ASM_OUTPUT_CHAR(STREAM, EXP)    \
1280   (fprintf (STREAM, "\t.byte\t"),       \
1281    output_addr_const (STREAM, (EXP)),   \
1282    fputc ('\n', STREAM))
1283
1284 #define ASM_OUTPUT_BYTE(STREAM, VALUE)          \
1285   fprintf (STREAM, "\t.byte\t%d\n", VALUE)      \
1286
1287 /* This is how to output an assembler line
1288    that says to advance the location counter by SIZE bytes.  */
1289
1290 #define ASM_OUTPUT_SKIP(FILE,SIZE) \
1291   fprintf (FILE, "\t.space %d\n", (SIZE))
1292
1293 /* This says how to output an assembler line
1294    to define a global common symbol.  */
1295
1296 #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED)    \
1297 ( fputs ("\t.comm ", (FILE)),                   \
1298   assemble_name ((FILE), (NAME)),               \
1299   fprintf ((FILE), ",%d\n", (SIZE)))
1300
1301 /* This says how to output an assembler line
1302    to define a local common symbol.  */
1303
1304 #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE,ROUNDED)      \
1305 ( fputs ("\t.lcomm ", (FILE)),                          \
1306   assemble_name ((FILE), (NAME)),                       \
1307   fprintf ((FILE), ",%d\n", (SIZE)))
1308
1309 /* The assembler's parentheses characters.  */
1310 #define ASM_OPEN_PAREN "("
1311 #define ASM_CLOSE_PAREN ")"
1312
1313 /* Target characters.  */
1314 #define TARGET_BELL     007
1315 #define TARGET_BS       010
1316 #define TARGET_TAB      011
1317 #define TARGET_NEWLINE  012
1318 #define TARGET_VT       013
1319 #define TARGET_FF       014
1320 #define TARGET_CR       015
1321 \f
1322 /* Only perform branch elimination (by making instructions conditional) if
1323    we're optimizing.  Otherwise it's of no use anyway.  */
1324 #define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \
1325   final_prescan_insn (INSN, OPVEC, NOPERANDS)
1326
1327 /* Print operand X (an rtx) in assembler syntax to file FILE.
1328    CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
1329    For `%' followed by punctuation, CODE is the punctuation and X is null.  */
1330
1331 #define PRINT_OPERAND(STREAM, X, CODE)  print_operand (STREAM, X, CODE)
1332
1333 /* Print a memory address as an operand to reference that memory location.  */
1334
1335 #define PRINT_OPERAND_ADDRESS(STREAM,X)  print_operand_address (STREAM, X)
1336
1337 #define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \
1338   ((CHAR)=='.' || (CHAR) == '#' || (CHAR)=='@')
1339 \f
1340 extern struct rtx_def *sh_compare_op0;
1341 extern struct rtx_def *sh_compare_op1;
1342 extern struct rtx_def *prepare_scc_operands();
1343
1344 /* Which processor to schedule for.  The elements of the enumeration must
1345    match exactly the cpu attribute in the sh.md file.  */
1346
1347 enum processor_type {
1348   PROCESSOR_SH0,
1349   PROCESSOR_SH1,
1350   PROCESSOR_SH2,
1351   PROCESSOR_SH3
1352 };
1353
1354 #define sh_cpu_attr ((enum attr_cpu)sh_cpu)
1355 extern enum processor_type sh_cpu;
1356
1357 /* Declare functions defined in sh.c and used in templates.  */
1358
1359 extern char *output_branch();
1360 extern char *output_shift();
1361 extern char *output_movedouble();
1362 extern char *output_movepcrel();
1363 extern char *output_jump_label_table();
1364 extern char *output_far_jump();
1365
1366 #define MACHINE_DEPENDENT_REORG(X) machine_dependent_reorg(X)
1367
1368 /* Generate calls to memcpy, memcmp and memset.  */
1369
1370 #define TARGET_MEM_FUNCTIONS
1371
1372 #define HANDLE_PRAGMA(finput) return handle_pragma (finput)
1373
1374 /* Set when processing a function with pragma interrupt turned on.  */
1375
1376 extern int pragma_interrupt;
1377
1378 #define MOVE_RATIO (TARGET_SMALLCODE ? 2 : 16)
1379 \f
1380 /* Instructions with unfilled delay slots take up an extra two bytes for
1381    the nop in the delay slot.  */
1382
1383 #define ADJUST_INSN_LENGTH(X, LENGTH)                           \
1384   if (((GET_CODE (X) == INSN                                    \
1385         && GET_CODE (PATTERN (X)) != SEQUENCE                   \
1386         && GET_CODE (PATTERN (X)) != USE                        \
1387         && GET_CODE (PATTERN (X)) != CLOBBER)                   \
1388        || GET_CODE (X) == CALL_INSN                             \
1389        || (GET_CODE (X) == JUMP_INSN                            \
1390            && GET_CODE (PATTERN (X)) != ADDR_DIFF_VEC           \
1391            && GET_CODE (PATTERN (X)) != ADDR_VEC))              \
1392       && get_attr_needs_delay_slot (X) == NEEDS_DELAY_SLOT_YES) \
1393    LENGTH += 2;
1394
1395 /* Enable a bug fix for the shorten_branches pass.  */
1396 #define SHORTEN_WITH_ADJUST_INSN_LENGTH
1397 \f
1398 /* Define the codes that are matched by predicates in sh.c.  */
1399 #define PREDICATE_CODES \
1400   {"arith_reg_operand", {SUBREG, REG}},                                 \
1401   {"arith_operand", {SUBREG, REG, CONST_INT}},                          \
1402   {"arith_reg_or_0_operand", {SUBREG, REG, CONST_INT}},                 \
1403   {"logical_operand", {SUBREG, REG, CONST_INT}},                        \
1404   {"general_movsrc_operand", {SUBREG, REG, CONST_INT, MEM}},            \
1405   {"general_movdst_operand", {SUBREG, REG, CONST_INT, MEM}},
1406
1407 /* Define this macro if it is advisable to hold scalars in registers
1408    in a wider mode than that declared by the program.  In such cases, 
1409    the value is constrained to be within the bounds of the declared
1410    type, but kept valid in the wider mode.  The signedness of the
1411    extension may differ from that of the type.
1412
1413    Leaving the unsignedp unchanged gives better code than always setting it
1414    to 0.  This is despite the fact that we have only signed char and short
1415    load instructions.  */
1416 #define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \
1417   if (GET_MODE_CLASS (MODE) == MODE_INT                 \
1418       && GET_MODE_SIZE (MODE) < UNITS_PER_WORD)         \
1419     MODE = SImode;
1420
1421 /* PROMOTE_FUNCTION_ARGS and PROMOTE_FUNCTION_RETURN appear to have no
1422    effect, because all unprototyped char/shorts are already promoted to
1423    int, and because PROMOTE_PROTOTYPES causes all prototypes char/shorts
1424    to be promoted to it.  */
1425
1426 /* ??? Define ACCUMULATE_OUTGOING_ARGS?  This is more efficient than pushing
1427    and poping arguments.  However, we do have push/pop instructions, and
1428    rather limited offsets (4 bits) in load/store instructions, so it isn't
1429    clear if this would give better code.  If implemented, should check for
1430    compatibility problems.  */
1431
1432 /* ??? Define ADJUST_COSTS?  */