OSDN Git Service

* config/arc/arc.h, config/arm/arm.h, config/frv/frv.h,
[pf3gnuchains/gcc-fork.git] / gcc / config / mcore / mcore.h
1 /* Definitions of target machine for GNU compiler,
2    for Motorola M*CORE Processor.
3    Copyright (C) 1993, 1999, 2000, 2001, 2002, 2003, 2004
4    Free Software Foundation, Inc.
5
6    This file is part of GCC.
7
8    GCC is free software; you can redistribute it and/or modify it
9    under the terms of the GNU General Public License as published
10    by the Free Software Foundation; either version 2, or (at your
11    option) any later version.
12
13    GCC is distributed in the hope that it will be useful, but WITHOUT
14    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
16    License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with GCC; see the file COPYING.  If not, write to the
20    Free Software Foundation, 59 Temple Place - Suite 330,
21    Boston, MA 02111-1307, USA.  */
22
23 #ifndef GCC_MCORE_H
24 #define GCC_MCORE_H
25
26 /* RBE: need to move these elsewhere.  */
27 #undef  LIKE_PPC_ABI 
28 #define MCORE_STRUCT_ARGS
29 /* RBE: end of "move elsewhere".  */
30
31 /* Run-time Target Specification.  */
32 #define TARGET_MCORE
33
34 /* Get tree.c to declare a target-specific specialization of
35    merge_decl_attributes.  */
36 #define TARGET_DLLIMPORT_DECL_ATTRIBUTES
37
38 /* Support the __declspec keyword by turning them into attributes.
39    We currently only support: dllexport and dllimport.
40    Note that the current way we do this may result in a collision with
41    predefined attributes later on.  This can be solved by using one attribute,
42    say __declspec__, and passing args to it.  The problem with that approach
43    is that args are not accumulated: each new appearance would clobber any
44    existing args.  */
45 #define TARGET_CPU_CPP_BUILTINS()                                         \
46   do                                                                      \
47     {                                                                     \
48       builtin_define ("__mcore__");                                       \
49       builtin_define ("__MCORE__");                                       \
50       builtin_define ("__declspec(x)=__attribute__((x))");                \
51       if (TARGET_LITTLE_END)                                              \
52         builtin_define ("__MCORELE__");                                   \
53       else                                                                \
54         builtin_define ("__MCOREBE__");                                   \
55       if (TARGET_M340)                                                    \
56         builtin_define ("__M340__");                                      \
57       else                                                                \
58         builtin_define ("__M210__");                                      \
59     }                                                                     \
60   while (0)
61
62 /* If -m4align is ever re-enabled then add this line to the definition of CPP_SPEC
63    %{!m4align:-D__MCORE_ALIGN_8__} %{m4align:-D__MCORE__ALIGN_4__}.  */
64 #undef  CPP_SPEC
65 #define CPP_SPEC "%{m210:%{mlittle-endian:%ethe m210 does not have little endian support}}"
66
67 /* We don't have a -lg library, so don't put it in the list.  */
68 #undef  LIB_SPEC
69 #define LIB_SPEC "%{!shared: %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}}"
70
71 #undef  ASM_SPEC
72 #define ASM_SPEC "%{mbig-endian:-EB} %{m210:-cpu=210 -EB}"
73
74 #undef  LINK_SPEC
75 #define LINK_SPEC "%{mbig-endian:-EB} %{m210:-EB} -X"
76
77 /* Can only count on 16 bits of availability; change to long would affect
78    many architecture specific files (other architectures...).  */
79 extern int target_flags;
80
81 #define HARDLIT_BIT        (1 << 0) /* Build in-line literals using 2 insns.  */
82 #define ALIGN8_BIT         (1 << 1) /* Max alignment goes to 8 instead of 4.  */
83 #define DIV_BIT            (1 << 2) /* Generate divide instructions.  */
84 #define RELAX_IMM_BIT      (1 << 3) /* Arbitrary immediates in and, or, tst.  */
85 #define W_FIELD_BIT        (1 << 4) /* Generate bit insv/extv using SImode.  */
86 #define OVERALIGN_FUNC_BIT (1 << 5) /* Align functions to 4 byte boundary.  */
87 #define CGDATA_BIT         (1 << 6) /* Generate callgraph data.  */
88 #define SLOW_BYTES_BIT     (1 << 7) /* Slow byte access.  */
89 #define LITTLE_END_BIT     (1 << 8) /* Generate little endian code.  */
90 #define M340_BIT           (1 << 9) /* Generate code for the m340.  */
91
92 #define TARGET_DEFAULT     \
93  (HARDLIT_BIT | ALIGN8_BIT | DIV_BIT | RELAX_IMM_BIT | M340_BIT | LITTLE_END_BIT)
94
95 #ifndef MULTILIB_DEFAULTS
96 #define MULTILIB_DEFAULTS { "mlittle-endian", "m340" }
97 #endif
98
99 #define TARGET_HARDLIT          (target_flags & HARDLIT_BIT)
100 /* The ability to have 4 byte alignment is being suppressed for now.
101    If this ability is reenabled, you must enable the definition below
102    *and* edit t-mcore to enable multilibs for 4 byte alignment code.  */
103 #if 0 
104 #define TARGET_8ALIGN           (target_flags & ALIGN8_BIT)
105 #else
106 #define TARGET_8ALIGN           1
107 #endif
108 #define TARGET_DIV              (target_flags & DIV_BIT)
109 #define TARGET_RELAX_IMM        (target_flags & RELAX_IMM_BIT)
110 #define TARGET_W_FIELD          (target_flags & W_FIELD_BIT)
111 #define TARGET_OVERALIGN_FUNC   (target_flags & OVERALIGN_FUNC_BIT)
112 #define TARGET_CG_DATA          (target_flags & CGDATA_BIT)
113 #define TARGET_CG_DATA          (target_flags & CGDATA_BIT)
114 #define TARGET_SLOW_BYTES       (target_flags & SLOW_BYTES_BIT)
115 #define TARGET_LITTLE_END       (target_flags & LITTLE_END_BIT)
116 #define TARGET_M340             (target_flags & M340_BIT)
117
118
119 #define TARGET_SWITCHES                                                 \
120 { {"hardlit",               HARDLIT_BIT,                                \
121      N_("Inline constants if it can be done in 2 insns or less") },     \
122   {"no-hardlit",          - HARDLIT_BIT,                                \
123      N_("Inline constants if it only takes 1 instruction") },           \
124   {"4align",              - ALIGN8_BIT,                                 \
125      N_("Set maximum alignment to 4") },                                \
126   {"8align",                ALIGN8_BIT,                                 \
127      N_("Set maximum alignment to 8") },                                \
128   {"div",                   DIV_BIT,                                    \
129      "" },                                                              \
130   {"no-div",              - DIV_BIT,                                    \
131      N_("Do not use the divide instruction") },                         \
132   {"relax-immediates",      RELAX_IMM_BIT,                              \
133      "" },                                                              \
134   {"no-relax-immediates", - RELAX_IMM_BIT,                              \
135      N_("Do not arbitrary sized immediates in bit operations") },       \
136   {"wide-bitfields",        W_FIELD_BIT,                                \
137      N_("Always treat bit-field as int-sized") },                       \
138   {"no-wide-bitfields",   - W_FIELD_BIT,                                \
139      "" },                                                              \
140   {"4byte-functions",       OVERALIGN_FUNC_BIT,                         \
141      N_("Force functions to be aligned to a 4 byte boundary") },        \
142   {"no-4byte-functions",  - OVERALIGN_FUNC_BIT,                         \
143      N_("Force functions to be aligned to a 2 byte boundary") },        \
144   {"callgraph-data",        CGDATA_BIT,                                 \
145      N_("Emit call graph information") },                               \
146   {"no-callgraph-data",   - CGDATA_BIT,                                 \
147      "" },                                                              \
148   {"slow-bytes",            SLOW_BYTES_BIT,                             \
149      N_("Prefer word accesses over byte accesses") },                   \
150   {"no-slow-bytes",       - SLOW_BYTES_BIT,                             \
151      "" },                                                              \
152   { "no-lsim",              0, "" },                                    \
153   {"little-endian",         LITTLE_END_BIT,                             \
154      N_("Generate little endian code") },                               \
155   {"big-endian",          - LITTLE_END_BIT,                             \
156      "" },                                                              \
157   {"210",                 - M340_BIT,                                   \
158      "" },                                                              \
159   {"340",                   M340_BIT,                                   \
160      N_("Generate code for the M*Core M340") },                         \
161   {"",                      TARGET_DEFAULT,                             \
162      "" }                                                               \
163 }
164
165 extern char * mcore_current_function_name;
166  
167 /* Target specific options (as opposed to the switches above).  */
168 extern const char * mcore_stack_increment_string;
169
170 #define TARGET_OPTIONS                                                  \
171 {                                                                       \
172   {"stack-increment=", & mcore_stack_increment_string,                  \
173      N_("Maximum amount for a single stack increment operation"), 0}    \
174 }
175
176 /* The MCore ABI says that bitfields are unsigned by default.  */
177 #define CC1_SPEC "-funsigned-bitfields"
178
179 /* What options are we going to default to specific settings when
180    -O* happens; the user can subsequently override these settings.
181   
182    Omitting the frame pointer is a very good idea on the MCore.
183    Scheduling isn't worth anything on the current MCore implementation.  */
184 #define OPTIMIZATION_OPTIONS(LEVEL,SIZE)        \
185 {                                               \
186   if (LEVEL)                                    \
187     {                                           \
188       flag_no_function_cse = 1;                 \
189       flag_omit_frame_pointer = 1;              \
190                                                 \
191       if (LEVEL >= 2)                           \
192         {                                       \
193           flag_caller_saves = 0;                \
194           flag_schedule_insns = 0;              \
195           flag_schedule_insns_after_reload = 0; \
196         }                                       \
197     }                                           \
198   if (SIZE)                                     \
199     {                                           \
200       target_flags &= ~ HARDLIT_BIT;            \
201     }                                           \
202 }
203
204 /* What options are we going to force to specific settings,
205    regardless of what the user thought he wanted.
206    We also use this for some post-processing of options.  */
207 #define OVERRIDE_OPTIONS  mcore_override_options ()
208
209 /* Target machine storage Layout.  */
210
211 #define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE)       \
212   if (GET_MODE_CLASS (MODE) == MODE_INT         \
213       && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
214     {                                           \
215       (MODE) = SImode;                          \
216       (UNSIGNEDP) = 1;                          \
217     }
218
219 /* Define this if most significant bit is lowest numbered
220    in instructions that operate on numbered bit-fields.  */
221 #define BITS_BIG_ENDIAN  0
222
223 /* Define this if most significant byte of a word is the lowest numbered.  */
224 #define BYTES_BIG_ENDIAN (! TARGET_LITTLE_END)
225
226 /* Define this if most significant word of a multiword number is the lowest
227    numbered.  */
228 #define WORDS_BIG_ENDIAN (! TARGET_LITTLE_END)
229
230 #define LIBGCC2_WORDS_BIG_ENDIAN 1
231 #ifdef __MCORELE__
232 #undef  LIBGCC2_WORDS_BIG_ENDIAN
233 #define LIBGCC2_WORDS_BIG_ENDIAN 0
234 #endif
235
236 #define MAX_BITS_PER_WORD 32
237
238 /* Width of a word, in units (bytes).  */
239 #define UNITS_PER_WORD  4
240
241 /* A C expression for the size in bits of the type `long long' on the
242    target machine.  If you don't define this, the default is two
243    words.  */
244 #define LONG_LONG_TYPE_SIZE 64
245
246 /* Allocation boundary (in *bits*) for storing arguments in argument list.  */
247 #define PARM_BOUNDARY   32
248
249 /* Doubles must be aligned to an 8 byte boundary.  */
250 #define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \
251   ((MODE != BLKmode && (GET_MODE_SIZE (MODE) == 8)) \
252    ? BIGGEST_ALIGNMENT : PARM_BOUNDARY)
253      
254 /* Boundary (in *bits*) on which stack pointer should be aligned.  */
255 #define STACK_BOUNDARY  (TARGET_8ALIGN ? 64 : 32)
256
257 /* Largest increment in UNITS we allow the stack to grow in a single operation.  */
258 extern int mcore_stack_increment;
259 #define STACK_UNITS_MAXSTEP  4096
260
261 /* Allocation boundary (in *bits*) for the code of a function.  */
262 #define FUNCTION_BOUNDARY  ((TARGET_OVERALIGN_FUNC) ? 32 : 16)
263
264 /* Alignment of field after `int : 0' in a structure.  */
265 #define EMPTY_FIELD_BOUNDARY  32
266
267 /* No data type wants to be aligned rounder than this.  */
268 #define BIGGEST_ALIGNMENT  (TARGET_8ALIGN ? 64 : 32)
269
270 /* The best alignment to use in cases where we have a choice.  */
271 #define FASTEST_ALIGNMENT 32
272
273 /* Every structures size must be a multiple of 8 bits.  */
274 #define STRUCTURE_SIZE_BOUNDARY 8
275
276 /* Look at the fundamental type that is used for a bit-field and use 
277    that to impose alignment on the enclosing structure.
278    struct s {int a:8}; should have same alignment as "int", not "char".  */
279 #define PCC_BITFIELD_TYPE_MATTERS       1
280
281 /* Largest integer machine mode for structures.  If undefined, the default
282    is GET_MODE_SIZE(DImode).  */
283 #define MAX_FIXED_MODE_SIZE 32
284
285 /* Make strings word-aligned so strcpy from constants will be faster.  */
286 #define CONSTANT_ALIGNMENT(EXP, ALIGN)  \
287   ((TREE_CODE (EXP) == STRING_CST       \
288     && (ALIGN) < FASTEST_ALIGNMENT)     \
289    ? FASTEST_ALIGNMENT : (ALIGN))
290
291 /* Make arrays of chars word-aligned for the same reasons.  */
292 #define DATA_ALIGNMENT(TYPE, ALIGN)             \
293   (TREE_CODE (TYPE) == ARRAY_TYPE               \
294    && TYPE_MODE (TREE_TYPE (TYPE)) == QImode    \
295    && (ALIGN) < FASTEST_ALIGNMENT ? FASTEST_ALIGNMENT : (ALIGN))
296      
297 /* Set this nonzero if move instructions will actually fail to work
298    when given unaligned data.  */
299 #define STRICT_ALIGNMENT 1
300
301 /* Standard register usage.  */
302
303 /* Register allocation for our first guess 
304
305         r0              stack pointer
306         r1              scratch, target reg for xtrb?
307         r2-r7           arguments.
308         r8-r14          call saved
309         r15             link register
310         ap              arg pointer (doesn't really exist, always eliminated)
311         c               c bit
312         fp              frame pointer (doesn't really exist, always eliminated)
313         x19             two control registers.  */
314
315 /* Number of actual hardware registers.
316    The hardware registers are assigned numbers for the compiler
317    from 0 to just below FIRST_PSEUDO_REGISTER.
318    All registers that the compiler knows about must be given numbers,
319    even those that are not normally considered general registers.
320
321    MCore has 16 integer registers and 2 control registers + the arg
322    pointer.  */
323
324 #define FIRST_PSEUDO_REGISTER 20
325
326 #define R1_REG  1       /* Where literals are forced.  */
327 #define LK_REG  15      /* Overloaded on general register.  */
328 #define AP_REG  16      /* Fake arg pointer register.  */
329 /* RBE: mcore.md depends on CC_REG being set to 17.  */
330 #define CC_REG  17      /* Can't name it C_REG.  */
331 #define FP_REG  18      /* Fake frame pointer register.  */
332
333 /* Specify the registers used for certain standard purposes.
334    The values of these macros are register numbers.  */
335
336
337 #undef PC_REGNUM /* Define this if the program counter is overloaded on a register.  */
338 #define STACK_POINTER_REGNUM 0 /* Register to use for pushing function arguments.  */
339 #define FRAME_POINTER_REGNUM 8 /* When we need FP, use r8.  */
340
341 /* The assembler's names for the registers.  RFP need not always be used as
342    the Real framepointer; it can also be used as a normal general register.
343    Note that the name `fp' is horribly misleading since `fp' is in fact only
344    the argument-and-return-context pointer.  */
345 #define REGISTER_NAMES                                  \
346 {                                                       \
347   "sp", "r1", "r2",  "r3",  "r4",  "r5",  "r6",  "r7",  \
348   "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \
349   "apvirtual",  "c", "fpvirtual", "x19" \
350 }
351
352 /* 1 for registers that have pervasive standard uses
353    and are not available for the register allocator.  */
354 #define FIXED_REGISTERS  \
355  /*  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r10 r11 r12 r13 r14 r15 ap  c  fp x19 */ \
356    { 1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1, 1, 1}
357
358 /* 1 for registers not available across function calls.
359    These must include the FIXED_REGISTERS and also any
360    registers that can be used without being saved.
361    The latter must include the registers where values are returned
362    and the register where structure-value addresses are passed.
363    Aside from that, you can include as many other registers as you like.  */
364
365 /* RBE: r15 {link register} not available across calls,
366    But we don't mark it that way here....  */
367 #define CALL_USED_REGISTERS \
368  /*  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r10 r11 r12 r13 r14 r15 ap  c   fp x19 */ \
369    { 1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1, 1}
370
371 /* The order in which register should be allocated.  */
372 #define REG_ALLOC_ORDER  \
373  /* r7  r6  r5  r4  r3  r2  r15 r14 r13 r12 r11 r10  r9  r8  r1  r0  ap  c   fp x19*/ \
374   {  7,  6,  5,  4,  3,  2,  15, 14, 13, 12, 11, 10,  9,  8,  1,  0, 16, 17, 18, 19}
375
376 /* Return number of consecutive hard regs needed starting at reg REGNO
377    to hold something of mode MODE.
378    This is ordinarily the length in words of a value of mode MODE
379    but can be less for certain modes in special long registers.
380
381    On the MCore regs are UNITS_PER_WORD bits wide; */
382 #define HARD_REGNO_NREGS(REGNO, MODE)  \
383    (((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
384
385 /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
386    We may keep double values in even registers.  */
387 #define HARD_REGNO_MODE_OK(REGNO, MODE)  \
388   ((TARGET_8ALIGN && GET_MODE_SIZE (MODE) > UNITS_PER_WORD) ? (((REGNO) & 1) == 0) : (REGNO < 18))
389
390 /* Value is 1 if it is a good idea to tie two pseudo registers
391    when one has mode MODE1 and one has mode MODE2.
392    If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
393    for any hard reg, then this must be 0 for correct output.  */
394 #define MODES_TIEABLE_P(MODE1, MODE2) \
395   ((MODE1) == (MODE2) || GET_MODE_CLASS (MODE1) == GET_MODE_CLASS (MODE2))
396
397 /* Value should be nonzero if functions must have frame pointers.
398    Zero means the frame pointer need not be set up (and parms may be accessed
399    via the stack pointer) in functions that seem suitable.  */
400 #define FRAME_POINTER_REQUIRED  0
401
402 /* Definitions for register eliminations.
403
404    We have two registers that can be eliminated on the MCore.  First, the
405    frame pointer register can often be eliminated in favor of the stack
406    pointer register.  Secondly, the argument pointer register can always be
407    eliminated; it is replaced with either the stack or frame pointer.  */
408
409 /* Base register for access to arguments of the function.  */
410 #define ARG_POINTER_REGNUM      16
411
412 /* Register in which the static-chain is passed to a function.  */
413 #define STATIC_CHAIN_REGNUM     1
414
415 /* This is an array of structures.  Each structure initializes one pair
416    of eliminable registers.  The "from" register number is given first,
417    followed by "to".  Eliminations of the same "from" register are listed
418    in order of preference.  */
419 #define ELIMINABLE_REGS                         \
420 {{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
421  { ARG_POINTER_REGNUM,   STACK_POINTER_REGNUM}, \
422  { ARG_POINTER_REGNUM,   FRAME_POINTER_REGNUM},}
423
424 /* Given FROM and TO register numbers, say whether this elimination
425    is allowed.  */
426 #define CAN_ELIMINATE(FROM, TO) \
427   (!((FROM) == FRAME_POINTER_REGNUM && FRAME_POINTER_REQUIRED))
428
429 /* Define the offset between two registers, one to be eliminated, and the other
430    its replacement, at the start of a routine.  */
431 #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
432   OFFSET = mcore_initial_elimination_offset (FROM, TO)
433
434 /* Define the classes of registers for register constraints in the
435    machine description.  Also define ranges of constants.
436
437    One of the classes must always be named ALL_REGS and include all hard regs.
438    If there is more than one class, another class must be named NO_REGS
439    and contain no registers.
440
441    The name GENERAL_REGS must be the name of a class (or an alias for
442    another name such as ALL_REGS).  This is the class of registers
443    that is allowed by "g" or "r" in a register constraint.
444    Also, registers outside this class are allocated only when
445    instructions express preferences for them.
446
447    The classes must be numbered in nondecreasing order; that is,
448    a larger-numbered class must never be contained completely
449    in a smaller-numbered class.
450
451    For any two classes, it is very desirable that there be another
452    class that represents their union.  */
453
454 /* The MCore has only general registers. There are
455    also some special purpose registers: the T bit register, the
456    procedure Link and the Count Registers.  */
457 enum reg_class
458 {
459   NO_REGS,
460   ONLYR1_REGS,
461   LRW_REGS,
462   GENERAL_REGS,
463   C_REGS,
464   ALL_REGS,
465   LIM_REG_CLASSES
466 };
467
468 #define N_REG_CLASSES  (int) LIM_REG_CLASSES
469
470 /* Give names of register classes as strings for dump file.  */
471 #define REG_CLASS_NAMES  \
472 {                       \
473   "NO_REGS",            \
474   "ONLYR1_REGS",        \
475   "LRW_REGS",           \
476   "GENERAL_REGS",       \
477   "C_REGS",             \
478   "ALL_REGS",           \
479 }
480
481 /* Define which registers fit in which classes.
482    This is an initializer for a vector of HARD_REG_SET
483    of length N_REG_CLASSES.  */
484
485 /* ??? STACK_POINTER_REGNUM should be excluded from LRW_REGS.  */
486 #define REG_CLASS_CONTENTS              \
487 {                                       \
488   {0x000000},  /* NO_REGS       */      \
489   {0x000002},  /* ONLYR1_REGS   */      \
490   {0x007FFE},  /* LRW_REGS      */      \
491   {0x01FFFF},  /* GENERAL_REGS  */      \
492   {0x020000},  /* C_REGS        */      \
493   {0x0FFFFF}   /* ALL_REGS      */      \
494 }
495
496 /* The same information, inverted:
497    Return the class number of the smallest class containing
498    reg number REGNO.  This could be a conditional expression
499    or could index an array.  */
500
501 extern const int regno_reg_class[FIRST_PSEUDO_REGISTER];
502 #define REGNO_REG_CLASS(REGNO) regno_reg_class[REGNO]
503
504 /* When defined, the compiler allows registers explicitly used in the
505    rtl to be used as spill registers but prevents the compiler from
506    extending the lifetime of these registers.  */
507 #define SMALL_REGISTER_CLASSES 1
508  
509 /* The class value for index registers, and the one for base regs.  */
510 #define INDEX_REG_CLASS  NO_REGS
511 #define BASE_REG_CLASS   GENERAL_REGS
512
513 /* Get reg_class from a letter such as appears in the machine 
514    description.  */
515 extern const enum reg_class reg_class_from_letter[];
516
517 #define REG_CLASS_FROM_LETTER(C) \
518    (ISLOWER (C) ? reg_class_from_letter[(C) - 'a'] : NO_REGS)
519
520 /* The letters I, J, K, L, M, N, O, and P in a register constraint string
521    can be used to stand for particular ranges of immediate operands.
522    This macro defines what the ranges are.
523    C is the letter, and VALUE is a constant value.
524    Return 1 if VALUE is in the range specified by C.
525         I: loadable by movi (0..127)
526         J: arithmetic operand 1..32
527         K: shift operand 0..31
528         L: negative arithmetic operand -1..-32
529         M: powers of two, constants loadable by bgeni
530         N: powers of two minus 1, constants loadable by bmaski, including -1
531         O: allowed by cmov with two constants +/- 1 of each other
532         P: values we will generate 'inline' -- without an 'lrw'
533
534    Others defined for use after reload
535         Q: constant 1
536         R: a label
537         S: 0/1/2 cleared bits out of 32 [for bclri's]
538         T: 2 set bits out of 32 [for bseti's]
539         U: constant 0
540         xxxS: 1 cleared bit out of 32 (complement of power of 2). for bclri
541         xxxT: 2 cleared bits out of 32. for pairs of bclris.  */
542 #define CONST_OK_FOR_I(VALUE) (((int)(VALUE)) >= 0 && ((int)(VALUE)) <= 0x7f)
543 #define CONST_OK_FOR_J(VALUE) (((int)(VALUE)) >  0 && ((int)(VALUE)) <= 32)
544 #define CONST_OK_FOR_L(VALUE) (((int)(VALUE)) <  0 && ((int)(VALUE)) >= -32)
545 #define CONST_OK_FOR_K(VALUE) (((int)(VALUE)) >= 0 && ((int)(VALUE)) <= 31)
546 #define CONST_OK_FOR_M(VALUE) (exact_log2 (VALUE) >= 0)
547 #define CONST_OK_FOR_N(VALUE) (((int)(VALUE)) == -1 || exact_log2 ((VALUE) + 1) >= 0)
548 #define CONST_OK_FOR_O(VALUE) (CONST_OK_FOR_I(VALUE) || \
549                                CONST_OK_FOR_M(VALUE) || \
550                                CONST_OK_FOR_N(VALUE) || \
551                                CONST_OK_FOR_M((int)(VALUE) - 1) || \
552                                CONST_OK_FOR_N((int)(VALUE) + 1))
553
554 #define CONST_OK_FOR_P(VALUE) (mcore_const_ok_for_inline (VALUE)) 
555
556 #define CONST_OK_FOR_LETTER_P(VALUE, C)     \
557      ((C) == 'I' ? CONST_OK_FOR_I (VALUE)   \
558     : (C) == 'J' ? CONST_OK_FOR_J (VALUE)   \
559     : (C) == 'L' ? CONST_OK_FOR_L (VALUE)   \
560     : (C) == 'K' ? CONST_OK_FOR_K (VALUE)   \
561     : (C) == 'M' ? CONST_OK_FOR_M (VALUE)   \
562     : (C) == 'N' ? CONST_OK_FOR_N (VALUE)   \
563     : (C) == 'P' ? CONST_OK_FOR_P (VALUE)   \
564     : (C) == 'O' ? CONST_OK_FOR_O (VALUE)   \
565     : 0)
566
567 /* Similar, but for floating constants, and defining letters G and H.
568    Here VALUE is the CONST_DOUBLE rtx itself.  */
569 #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
570    ((C) == 'G' ? CONST_OK_FOR_I (CONST_DOUBLE_HIGH (VALUE)) \
571               && CONST_OK_FOR_I (CONST_DOUBLE_LOW (VALUE))  \
572     : 0)
573
574 /* Letters in the range `Q' through `U' in a register constraint string
575    may be defined in a machine-dependent fashion to stand for arbitrary
576    operand types.  */
577 #define EXTRA_CONSTRAINT(OP, C)                         \
578   ((C) == 'R' ? (GET_CODE (OP) == MEM                   \
579                  && GET_CODE (XEXP (OP, 0)) == LABEL_REF) \
580    : (C) == 'S' ? (GET_CODE (OP) == CONST_INT \
581                    && mcore_num_zeros (INTVAL (OP)) <= 2) \
582    : (C) == 'T' ? (GET_CODE (OP) == CONST_INT \
583                    && mcore_num_ones (INTVAL (OP)) == 2) \
584    : (C) == 'Q' ? (GET_CODE (OP) == CONST_INT \
585                    && INTVAL(OP) == 1) \
586    : (C) == 'U' ? (GET_CODE (OP) == CONST_INT \
587                    && INTVAL(OP) == 0) \
588    : 0)
589
590 /* Given an rtx X being reloaded into a reg required to be
591    in class CLASS, return the class of reg to actually use.
592    In general this is just CLASS; but on some machines
593    in some cases it is preferable to use a more restrictive class.  */
594 #define PREFERRED_RELOAD_CLASS(X, CLASS) mcore_reload_class (X, CLASS)
595
596 /* Return the register class of a scratch register needed to copy IN into
597    or out of a register in CLASS in MODE.  If it can be done directly,
598    NO_REGS is returned.  */
599 #define SECONDARY_RELOAD_CLASS(CLASS, MODE, X) \
600   mcore_secondary_reload_class (CLASS, MODE, X)
601
602 /* Return the maximum number of consecutive registers
603    needed to represent mode MODE in a register of class CLASS. 
604
605    On MCore this is the size of MODE in words.  */
606 #define CLASS_MAX_NREGS(CLASS, MODE)  \
607      (ROUND_ADVANCE (GET_MODE_SIZE (MODE)))
608
609 /* Stack layout; function entry, exit and calling.  */
610
611 /* Define the number of register that can hold parameters.
612    These two macros are used only in other macro definitions below.  */
613 #define NPARM_REGS 6
614 #define FIRST_PARM_REG 2
615 #define FIRST_RET_REG 2
616
617 /* Define this if pushing a word on the stack
618    makes the stack pointer a smaller address.  */
619 #define STACK_GROWS_DOWNWARD  
620
621 /* Offset within stack frame to start allocating local variables at.
622    If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
623    first local allocated.  Otherwise, it is the offset to the BEGINNING
624    of the first local allocated.  */
625 #define STARTING_FRAME_OFFSET  0
626
627 /* If defined, the maximum amount of space required for outgoing arguments
628    will be computed and placed into the variable
629    `current_function_outgoing_args_size'.  No space will be pushed
630    onto the stack for each call; instead, the function prologue should
631    increase the stack frame size by this amount.  */
632 #define ACCUMULATE_OUTGOING_ARGS 1
633
634 /* Offset of first parameter from the argument pointer register value.  */
635 #define FIRST_PARM_OFFSET(FNDECL)  0
636
637 /* Value is the number of byte of arguments automatically
638    popped when returning from a subroutine call.
639    FUNTYPE is the data type of the function (as a tree),
640    or for a library call it is an identifier node for the subroutine name.
641    SIZE is the number of bytes of arguments passed on the stack.
642
643    On the MCore, the callee does not pop any of its arguments that were passed
644    on the stack.  */
645 #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0
646
647 /* Define how to find the value returned by a function.
648    VALTYPE is the data type of the value (as a tree).
649    If the precise function being called is known, FUNC is its FUNCTION_DECL;
650    otherwise, FUNC is 0.  */
651 #define FUNCTION_VALUE(VALTYPE, FUNC)  mcore_function_value (VALTYPE, FUNC)
652
653 /* Don't default to pcc-struct-return, because gcc is the only compiler, and
654    we want to retain compatibility with older gcc versions.  */
655 #define DEFAULT_PCC_STRUCT_RETURN 0
656
657 /* Define how to find the value returned by a library function
658    assuming the value has mode MODE.  */
659 #define LIBCALL_VALUE(MODE)  gen_rtx_REG (MODE, FIRST_RET_REG)
660
661 /* 1 if N is a possible register number for a function value.
662    On the MCore, only r4 can return results.  */
663 #define FUNCTION_VALUE_REGNO_P(REGNO)  ((REGNO) == FIRST_RET_REG)
664
665 #define MUST_PASS_IN_STACK(MODE,TYPE)  \
666   mcore_must_pass_on_stack (MODE, TYPE)
667
668 /* 1 if N is a possible register number for function argument passing.  */
669 #define FUNCTION_ARG_REGNO_P(REGNO)  \
670   ((REGNO) >= FIRST_PARM_REG && (REGNO) < (NPARM_REGS + FIRST_PARM_REG))
671
672 /* Define a data type for recording info about an argument list
673    during the scan of that argument list.  This data type should
674    hold all necessary information about the function itself
675    and about the args processed so far, enough to enable macros
676    such as FUNCTION_ARG to determine where the next arg should go.
677
678    On MCore, this is a single integer, which is a number of words
679    of arguments scanned so far (including the invisible argument,
680    if any, which holds the structure-value-address).
681    Thus NARGREGS or more means all following args should go on the stack.  */
682 #define CUMULATIVE_ARGS  int
683
684 #define ROUND_ADVANCE(SIZE)     \
685   ((SIZE + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
686
687 /* Round a register number up to a proper boundary for an arg of mode 
688    MODE. 
689    
690    We round to an even reg for things larger than a word.  */
691 #define ROUND_REG(X, MODE)                              \
692   ((TARGET_8ALIGN                                       \
693    && GET_MODE_UNIT_SIZE ((MODE)) > UNITS_PER_WORD)     \
694    ? ((X) + ((X) & 1)) : (X))
695
696
697 /* Initialize a variable CUM of type CUMULATIVE_ARGS
698    for a call to a function whose data type is FNTYPE.
699    For a library call, FNTYPE is 0.
700
701    On MCore, the offset always starts at 0: the first parm reg is always
702    the same reg.  */
703 #define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
704   ((CUM) = 0)
705
706 /* Update the data in CUM to advance over an argument
707    of mode MODE and data type TYPE.
708    (TYPE is null for libcalls where that information may not be
709    available.)  */
710 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)       \
711  ((CUM) = (ROUND_REG ((CUM), (MODE))                       \
712            + ((NAMED) * mcore_num_arg_regs (MODE, TYPE)))) \
713
714 /* Define where to put the arguments to a function.  */
715 #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
716   mcore_function_arg (CUM, MODE, TYPE, NAMED)
717
718 /* A C expression that indicates when an argument must be passed by
719    reference.  If nonzero for an argument, a copy of that argument is
720    made in memory and a pointer to the argument is passed instead of
721    the argument itself.  The pointer is passed in whatever way is
722    appropriate for passing a pointer to that type.  */
723 #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \
724   MUST_PASS_IN_STACK (MODE, TYPE)
725
726 /* For an arg passed partly in registers and partly in memory,
727    this is the number of registers used.
728    For args passed entirely in registers or entirely in memory, zero.
729    Any arg that starts in the first NPARM_REGS regs but won't entirely
730    fit in them needs partial registers on the MCore.  */
731 #define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
732   mcore_function_arg_partial_nregs (CUM, MODE, TYPE, NAMED)
733
734 /* Call the function profiler with a given profile label.  */
735 #define FUNCTION_PROFILER(STREAM,LABELNO)               \
736 {                                                       \
737   fprintf (STREAM, "    trap    1\n");                  \
738   fprintf (STREAM, "    .align  2\n");                  \
739   fprintf (STREAM, "    .long   LP%d\n", (LABELNO));    \
740 }
741
742 /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
743    the stack pointer does not matter.  The value is tested only in
744    functions that have frame pointers.
745    No definition is equivalent to always zero.  */
746 #define EXIT_IGNORE_STACK 0
747
748 /* Output assembler code for a block containing the constant parts
749    of a trampoline, leaving space for the variable parts.
750
751    On the MCore, the trampoline looks like:
752         lrw     r1,  function
753         lrw     r13, area
754         jmp     r13
755         or      r0, r0
756     .literals                                                */
757 #define TRAMPOLINE_TEMPLATE(FILE)               \
758 {                                               \
759   fprintf ((FILE), "    .short  0x7102\n");     \
760   fprintf ((FILE), "    .short  0x7d02\n");     \
761   fprintf ((FILE), "    .short  0x00cd\n");     \
762   fprintf ((FILE), "    .short  0x1e00\n");     \
763   fprintf ((FILE), "    .long   0\n");          \
764   fprintf ((FILE), "    .long   0\n");          \
765 }
766
767 /* Length in units of the trampoline for entering a nested function.  */
768 #define TRAMPOLINE_SIZE  12
769
770 /* Alignment required for a trampoline in bits.  */
771 #define TRAMPOLINE_ALIGNMENT  32
772
773 /* Emit RTL insns to initialize the variable parts of a trampoline.
774    FNADDR is an RTX for the address of the function's pure code.
775    CXT is an RTX for the static chain value for the function.  */
776 #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)  \
777 {                                                                       \
778   emit_move_insn (gen_rtx_MEM (SImode, plus_constant ((TRAMP), 8)),     \
779                   (CXT));                                               \
780   emit_move_insn (gen_rtx_MEM (SImode, plus_constant ((TRAMP), 12)),    \
781                   (FNADDR));                                            \
782 }
783
784 /* Macros to check register numbers against specific register classes.  */
785
786 /* These assume that REGNO is a hard or pseudo reg number.
787    They give nonzero only if REGNO is a hard reg of the suitable class
788    or a pseudo reg currently allocated to a suitable hard reg.
789    Since they use reg_renumber, they are safe only once reg_renumber
790    has been allocated, which happens in local-alloc.c.  */
791 #define REGNO_OK_FOR_BASE_P(REGNO)  \
792   ((REGNO) < AP_REG || (unsigned) reg_renumber[(REGNO)] < AP_REG)
793
794 #define REGNO_OK_FOR_INDEX_P(REGNO)   0
795
796 /* Maximum number of registers that can appear in a valid memory 
797    address.  */
798 #define MAX_REGS_PER_ADDRESS 1
799
800 /* Recognize any constant value that is a valid address.  */
801 #define CONSTANT_ADDRESS_P(X)    (GET_CODE (X) == LABEL_REF)
802
803 /* Nonzero if the constant value X is a legitimate general operand.
804    It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE.
805
806    On the MCore, allow anything but a double.  */
807 #define LEGITIMATE_CONSTANT_P(X) (GET_CODE(X) != CONST_DOUBLE)
808
809 #define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN)
810 /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
811    and check its validity for a certain class.
812    We have two alternate definitions for each of them.
813    The usual definition accepts all pseudo regs; the other rejects
814    them unless they have been allocated suitable hard regs.
815    The symbol REG_OK_STRICT causes the latter definition to be used.  */
816 #ifndef REG_OK_STRICT
817
818 /* Nonzero if X is a hard reg that can be used as a base reg
819    or if it is a pseudo reg.  */
820 #define REG_OK_FOR_BASE_P(X) \
821         (REGNO (X) <= 16 || REGNO (X) >= FIRST_PSEUDO_REGISTER)
822
823 /* Nonzero if X is a hard reg that can be used as an index
824    or if it is a pseudo reg.  */
825 #define REG_OK_FOR_INDEX_P(X)   0
826
827 #else
828
829 /* Nonzero if X is a hard reg that can be used as a base reg.  */
830 #define REG_OK_FOR_BASE_P(X)    \
831         REGNO_OK_FOR_BASE_P (REGNO (X))
832
833 /* Nonzero if X is a hard reg that can be used as an index.  */
834 #define REG_OK_FOR_INDEX_P(X)   0
835
836 #endif
837 /* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
838    that is a valid memory address for an instruction.
839    The MODE argument is the machine mode for the MEM expression
840    that wants to use this address.
841
842    The other macros defined here are used only in GO_IF_LEGITIMATE_ADDRESS.  */
843 #define BASE_REGISTER_RTX_P(X)  \
844   (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X))
845
846 #define INDEX_REGISTER_RTX_P(X)  \
847   (GET_CODE (X) == REG && REG_OK_FOR_INDEX_P (X))
848
849
850 /* Jump to LABEL if X is a valid address RTX.  This must also take
851    REG_OK_STRICT into account when deciding about valid registers, but it uses
852    the above macros so we are in luck.  
853  
854    Allow  REG
855           REG+disp 
856
857    A legitimate index for a QI is 0..15, for HI is 0..30, for SI is 0..60,
858    and for DI is 0..56 because we use two SI loads, etc.  */
859 #define GO_IF_LEGITIMATE_INDEX(MODE, REGNO, OP, LABEL)                  \
860   do                                                                    \
861     {                                                                   \
862       if (GET_CODE (OP) == CONST_INT)                                   \
863         {                                                               \
864           if (GET_MODE_SIZE (MODE) >= 4                                 \
865               && (((unsigned)INTVAL (OP)) % 4) == 0                     \
866               &&  ((unsigned)INTVAL (OP)) <= 64 - GET_MODE_SIZE (MODE)) \
867             goto LABEL;                                                 \
868           if (GET_MODE_SIZE (MODE) == 2                                 \
869               && (((unsigned)INTVAL (OP)) % 2) == 0                     \
870               &&  ((unsigned)INTVAL (OP)) <= 30)                        \
871             goto LABEL;                                                 \
872           if (GET_MODE_SIZE (MODE) == 1                                 \
873               && ((unsigned)INTVAL (OP)) <= 15)                         \
874             goto LABEL;                                                 \
875         }                                                               \
876     }                                                                   \
877   while (0)
878
879 #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, LABEL)                  \
880 {                                                                 \
881   if (BASE_REGISTER_RTX_P (X))                                    \
882     goto LABEL;                                                   \
883   else if (GET_CODE (X) == PLUS || GET_CODE (X) == LO_SUM)        \
884     {                                                             \
885       rtx xop0 = XEXP (X,0);                                      \
886       rtx xop1 = XEXP (X,1);                                      \
887       if (BASE_REGISTER_RTX_P (xop0))                             \
888         GO_IF_LEGITIMATE_INDEX (MODE, REGNO (xop0), xop1, LABEL); \
889       if (BASE_REGISTER_RTX_P (xop1))                             \
890         GO_IF_LEGITIMATE_INDEX (MODE, REGNO (xop1), xop0, LABEL); \
891     }                                                             \
892 }                                                                  
893                                                                    
894 /* Go to LABEL if ADDR (a legitimate address expression)
895    has an effect that depends on the machine mode it is used for.  */
896 #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)  \
897 {                                                                       \
898   if (   GET_CODE (ADDR) == PRE_DEC || GET_CODE (ADDR) == POST_DEC      \
899       || GET_CODE (ADDR) == PRE_INC || GET_CODE (ADDR) == POST_INC)     \
900     goto LABEL;                                                         \
901 }
902
903 /* Specify the machine mode that this machine uses
904    for the index in the tablejump instruction.  */
905 #define CASE_VECTOR_MODE SImode
906
907 /* 'char' is signed by default.  */
908 #define DEFAULT_SIGNED_CHAR  0
909
910 /* The type of size_t unsigned int.  */
911 #define SIZE_TYPE "unsigned int"
912
913 /* Don't cse the address of the function being compiled.  */
914 #define NO_RECURSIVE_FUNCTION_CSE 1
915
916 /* Max number of bytes we can move from memory to memory
917    in one reasonably fast instruction.  */
918 #define MOVE_MAX 4
919
920 /* Define if operations between registers always perform the operation
921    on the full register even if a narrower mode is specified.  */
922 #define WORD_REGISTER_OPERATIONS
923
924 /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
925    will either zero-extend or sign-extend.  The value of this macro should
926    be the code that says which one of the two operations is implicitly
927    done, NIL if none.  */
928 #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
929
930 /* Nonzero if access to memory by bytes is slow and undesirable.  */
931 #define SLOW_BYTE_ACCESS TARGET_SLOW_BYTES
932
933 /* Immediate shift counts are truncated by the output routines (or was it
934    the assembler?).  Shift counts in a register are truncated by ARM.  Note
935    that the native compiler puts too large (> 32) immediate shift counts
936    into a register and shifts by the register, letting the ARM decide what
937    to do instead of doing that itself.  */
938 #define SHIFT_COUNT_TRUNCATED 1
939
940 /* All integers have the same format so truncation is easy.  */
941 #define TRULY_NOOP_TRUNCATION(OUTPREC,INPREC)  1
942
943 /* Define this if addresses of constant functions
944    shouldn't be put through pseudo regs where they can be cse'd.
945    Desirable on machines where ordinary constants are expensive
946    but a CALL with constant address is cheap.  */
947 /* Why is this defined??? -- dac */
948 #define NO_FUNCTION_CSE 1
949
950 /* The machine modes of pointers and functions.  */
951 #define Pmode          SImode
952 #define FUNCTION_MODE  Pmode
953
954 /* Compute extra cost of moving data between one register class
955    and another.  All register moves are cheap.  */
956 #define REGISTER_MOVE_COST(MODE, SRCCLASS, DSTCLASS) 2
957
958 #define WORD_REGISTER_OPERATIONS
959
960 /* Implicit library calls should use memcpy, not bcopy, etc.  */
961 #define TARGET_MEM_FUNCTIONS
962
963 /* Assembler output control.  */
964 #define ASM_COMMENT_START "\t//"
965
966 #define ASM_APP_ON      "// inline asm begin\n"
967 #define ASM_APP_OFF     "// inline asm end\n"
968
969 #define FILE_ASM_OP     "\t.file\n"
970
971 /* Switch to the text or data segment.  */
972 #define TEXT_SECTION_ASM_OP  "\t.text"
973 #define DATA_SECTION_ASM_OP  "\t.data"
974
975 #undef  EXTRA_SECTIONS
976 #define EXTRA_SECTIONS SUBTARGET_EXTRA_SECTIONS
977
978 #undef  EXTRA_SECTION_FUNCTIONS
979 #define EXTRA_SECTION_FUNCTIONS                 \
980   SUBTARGET_EXTRA_SECTION_FUNCTIONS             \
981   SWITCH_SECTION_FUNCTION
982
983 /* Switch to SECTION (an `enum in_section').
984
985    ??? This facility should be provided by GCC proper.
986    The problem is that we want to temporarily switch sections in
987    ASM_DECLARE_OBJECT_NAME and then switch back to the original section
988    afterwards.  */
989 #define SWITCH_SECTION_FUNCTION                                 \
990 static void switch_to_section (enum in_section, tree);          \
991 static void                                                     \
992 switch_to_section (enum in_section section, tree decl)          \
993 {                                                               \
994   switch (section)                                              \
995     {                                                           \
996       case in_text: text_section (); break;                     \
997       case in_data: data_section (); break;                     \
998       case in_named: named_section (decl, NULL, 0); break;      \
999       SUBTARGET_SWITCH_SECTIONS                                 \
1000       default: abort (); break;                                 \
1001     }                                                           \
1002 }
1003
1004 /* Switch into a generic section.  */
1005 #undef TARGET_ASM_NAMED_SECTION
1006 #define TARGET_ASM_NAMED_SECTION  mcore_asm_named_section
1007
1008 /* This is how to output an insn to push a register on the stack.
1009    It need not be very fast code.  */
1010 #define ASM_OUTPUT_REG_PUSH(FILE,REGNO)  \
1011   fprintf (FILE, "\tsubi\t %s,%d\n\tstw\t %s,(%s)\n",   \
1012            reg_names[STACK_POINTER_REGNUM],             \
1013            (STACK_BOUNDARY / BITS_PER_UNIT),            \
1014            reg_names[REGNO],                            \
1015            reg_names[STACK_POINTER_REGNUM])
1016
1017 /* Length in instructions of the code output by ASM_OUTPUT_REG_PUSH.  */
1018 #define REG_PUSH_LENGTH 2
1019
1020 /* This is how to output an insn to pop a register from the stack.  */
1021 #define ASM_OUTPUT_REG_POP(FILE,REGNO)  \
1022   fprintf (FILE, "\tldw\t %s,(%s)\n\taddi\t %s,%d\n",   \
1023            reg_names[REGNO],                            \
1024            reg_names[STACK_POINTER_REGNUM],             \
1025            reg_names[STACK_POINTER_REGNUM],             \
1026            (STACK_BOUNDARY / BITS_PER_UNIT))
1027
1028   
1029 /* Output a reference to a label.  */
1030 #undef  ASM_OUTPUT_LABELREF
1031 #define ASM_OUTPUT_LABELREF(STREAM, NAME)  \
1032   fprintf (STREAM, "%s%s", USER_LABEL_PREFIX, \
1033            (* targetm.strip_name_encoding) (NAME))
1034
1035 /* This is how to output an assembler line
1036    that says to advance the location counter
1037    to a multiple of 2**LOG bytes.  */
1038 #define ASM_OUTPUT_ALIGN(FILE,LOG)      \
1039   if ((LOG) != 0)                       \
1040     fprintf (FILE, "\t.align\t%d\n", LOG)
1041
1042 #ifndef ASM_DECLARE_RESULT
1043 #define ASM_DECLARE_RESULT(FILE, RESULT)
1044 #endif
1045
1046 #define MULTIPLE_SYMBOL_SPACES 1
1047
1048 #define SUPPORTS_ONE_ONLY 1
1049
1050 /* A pair of macros to output things for the callgraph data.
1051    VALUE means (to the tools that reads this info later):
1052         0 a call from src to dst
1053         1 the call is special (e.g. dst is "unknown" or "alloca")
1054         2 the call is special (e.g., the src is a table instead of routine)
1055   
1056    Frame sizes are augmented with timestamps to help later tools 
1057    differentiate between static entities with same names in different
1058    files.  */
1059 extern long mcore_current_compilation_timestamp;
1060 #define ASM_OUTPUT_CG_NODE(FILE,SRCNAME,VALUE)                          \
1061   do                                                                    \
1062     {                                                                   \
1063       if (mcore_current_compilation_timestamp == 0)                     \
1064         mcore_current_compilation_timestamp = time (0);                 \
1065       fprintf ((FILE),"\t.equ\t__$frame$size$_%s_$_%08lx,%d\n",         \
1066              (SRCNAME), mcore_current_compilation_timestamp, (VALUE));  \
1067     }                                                                   \
1068   while (0)
1069
1070 #define ASM_OUTPUT_CG_EDGE(FILE,SRCNAME,DSTNAME,VALUE)          \
1071   do                                                            \
1072     {                                                           \
1073       fprintf ((FILE),"\t.equ\t__$function$call$_%s_$_%s,%d\n", \
1074              (SRCNAME), (DSTNAME), (VALUE));                    \
1075     }                                                           \
1076   while (0)
1077
1078 /* Globalizing directive for a label.  */
1079 #define GLOBAL_ASM_OP "\t.export\t"
1080
1081 /* The prefix to add to user-visible assembler symbols.  */
1082 #undef  USER_LABEL_PREFIX
1083 #define USER_LABEL_PREFIX ""
1084
1085 /* Make an internal label into a string.  */
1086 #undef  ASM_GENERATE_INTERNAL_LABEL
1087 #define ASM_GENERATE_INTERNAL_LABEL(STRING, PREFIX, NUM)  \
1088   sprintf (STRING, "*.%s%ld", PREFIX, (long) NUM)
1089
1090 /* Jump tables must be 32 bit aligned.  */
1091 #undef  ASM_OUTPUT_CASE_LABEL
1092 #define ASM_OUTPUT_CASE_LABEL(STREAM,PREFIX,NUM,TABLE) \
1093   fprintf (STREAM, "\t.align 2\n.%s%d:\n", PREFIX, NUM);
1094
1095 /* Output a relative address. Not needed since jump tables are absolute
1096    but we must define it anyway.  */
1097 #define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM,BODY,VALUE,REL)  \
1098   fputs ("- - - ASM_OUTPUT_ADDR_DIFF_ELT called!\n", STREAM)
1099
1100 /* Output an element of a dispatch table.  */
1101 #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM,VALUE)  \
1102     fprintf (STREAM, "\t.long\t.L%d\n", VALUE)
1103
1104 /* Output various types of constants.  */
1105
1106 /* This is how to output an assembler line
1107    that says to advance the location counter by SIZE bytes.  */
1108 #undef  ASM_OUTPUT_SKIP
1109 #define ASM_OUTPUT_SKIP(FILE,SIZE)  \
1110   fprintf (FILE, "\t.fill %d, 1\n", (int)(SIZE))
1111
1112 /* This says how to output an assembler line
1113    to define a global common symbol, with alignment information.  */
1114 /* XXX - for now we ignore the alignment.  */     
1115 #undef  ASM_OUTPUT_ALIGNED_COMMON
1116 #define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN)      \
1117   do                                                            \
1118     {                                                           \
1119       if (mcore_dllexport_name_p (NAME))                        \
1120         MCORE_EXPORT_NAME (FILE, NAME)                          \
1121       if (! mcore_dllimport_name_p (NAME))                      \
1122         {                                                       \
1123           fputs ("\t.comm\t", FILE);                            \
1124           assemble_name (FILE, NAME);                           \
1125           fprintf (FILE, ",%lu\n", (unsigned long)(SIZE));      \
1126         }                                                       \
1127     }                                                           \
1128   while (0)
1129
1130 /* This says how to output an assembler line
1131    to define an external symbol.  */
1132 #define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME)   \
1133   do                                            \
1134     {                                           \
1135       fputs ("\t.import\t", (FILE));            \
1136       assemble_name ((FILE), (NAME));           \
1137       fputs ("\n", (FILE));                     \
1138     }                                           \
1139   while (0)
1140      
1141 #undef  ASM_OUTPUT_EXTERNAL
1142 /* RBE: we undefined this and let gas do it's "undefined is imported"
1143    games. This is because when we use this, we get a marked 
1144    reference through the call to assemble_name and this forces C++
1145    inlined member functions (or any inlined function) to be instantiated
1146    regardless of whether any call sites remain.
1147    This makes this aspect of the compiler non-ABI compliant.  */
1148
1149 /* This says how to output an assembler line
1150    to define a local common symbol....  */
1151 #undef  ASM_OUTPUT_LOCAL
1152 #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED)     \
1153   (fputs ("\t.lcomm\t", FILE),                          \
1154   assemble_name (FILE, NAME),                           \
1155   fprintf (FILE, ",%d\n", (int)SIZE))
1156
1157 /* ... and how to define a local common symbol whose alignment
1158    we wish to specify.  ALIGN comes in as bits, we have to turn
1159    it into bytes.  */
1160 #undef  ASM_OUTPUT_ALIGNED_LOCAL
1161 #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN)               \
1162   do                                                                    \
1163     {                                                                   \
1164       fputs ("\t.bss\t", (FILE));                                       \
1165       assemble_name ((FILE), (NAME));                                   \
1166       fprintf ((FILE), ",%d,%d\n", (int)(SIZE), (ALIGN) / BITS_PER_UNIT);\
1167     }                                                                   \
1168   while (0)
1169
1170 /* Print operand X (an rtx) in assembler syntax to file FILE.
1171    CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
1172    For `%' followed by punctuation, CODE is the punctuation and X is null.  */
1173 #define PRINT_OPERAND(STREAM, X, CODE)  mcore_print_operand (STREAM, X, CODE)
1174
1175 /* Print a memory address as an operand to reference that memory location.  */
1176 #define PRINT_OPERAND_ADDRESS(STREAM,X)  mcore_print_operand_address (STREAM, X)
1177
1178 #define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \
1179   ((CHAR)=='.' || (CHAR) == '#' || (CHAR) == '*' || (CHAR) == '^' || (CHAR) == '!')
1180
1181 #define PREDICATE_CODES                                                 \
1182   { "mcore_arith_reg_operand",          { REG, SUBREG }},               \
1183   { "mcore_general_movsrc_operand",     { MEM, CONST_INT, REG, SUBREG }},\
1184   { "mcore_general_movdst_operand",     { MEM, CONST_INT, REG, SUBREG }},\
1185   { "mcore_reload_operand",             { MEM, REG, SUBREG }},          \
1186   { "mcore_arith_J_operand",            { CONST_INT, REG, SUBREG }},    \
1187   { "mcore_arith_K_operand",            { CONST_INT, REG, SUBREG }},    \
1188   { "mcore_arith_K_operand_not_0",      { CONST_INT, REG, SUBREG }},    \
1189   { "mcore_arith_M_operand",            { CONST_INT, REG, SUBREG }},    \
1190   { "mcore_arith_K_S_operand",          { CONST_INT, REG, SUBREG }},    \
1191   { "mcore_arith_O_operand",            { CONST_INT, REG, SUBREG }},    \
1192   { "mcore_arith_imm_operand",          { CONST_INT, REG, SUBREG }},    \
1193   { "mcore_arith_any_imm_operand",      { CONST_INT, REG, SUBREG }},    \
1194   { "mcore_literal_K_operand",          { CONST_INT }},                 \
1195   { "mcore_addsub_operand",             { CONST_INT, REG, SUBREG }},    \
1196   { "mcore_compare_operand",            { CONST_INT, REG, SUBREG }},    \
1197   { "mcore_load_multiple_operation",    { PARALLEL }},                  \
1198   { "mcore_store_multiple_operation",   { PARALLEL }},                  \
1199   { "mcore_call_address_operand",       { REG, SUBREG, CONST_INT }},    \
1200
1201 #endif /* ! GCC_MCORE_H */