OSDN Git Service

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