OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [config/] [mt/] [mt.h] - Blame information for rev 825

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 38 julius
/* Target Definitions for MorphoRISC1
2
   Copyright (C) 2005, 2007 Free Software Foundation, Inc.
3
   Contributed by Red Hat, Inc.
4
 
5
   This file is part of GCC.
6
 
7
   GCC is free software; you can redistribute it and/or modify it
8
   under the terms of the GNU General Public License as published
9
   by the Free Software Foundation; either version 3, or (at your
10
   option) any later version.
11
 
12
   GCC is distributed in the hope that it will be useful, but WITHOUT
13
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14
   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
15
   License for more details.
16
 
17
   You should have received a copy of the GNU General Public License
18
   along with GCC; see the file COPYING3.  If not see
19
   <http://www.gnu.org/licenses/>.  */
20
 
21
extern struct rtx_def * mt_ucmpsi3_libcall;
22
 
23
enum processor_type
24
{
25
  PROCESSOR_MS1_64_001,
26
  PROCESSOR_MS1_16_002,
27
  PROCESSOR_MS1_16_003,
28
  PROCESSOR_MS2
29
};
30
 
31
enum epilogue_type
32
{
33
  EH_EPILOGUE,
34
  NORMAL_EPILOGUE
35
};
36
 
37
extern enum processor_type mt_cpu;
38
 
39
 
40
/* Support for a compile-time default CPU, et cetera.  The rules are:
41
   --with-arch is ignored if -march is specified.  */
42
#define OPTION_DEFAULT_SPECS \
43
  {"arch", "%{!march=*:-march=%(VALUE)}" }
44
 
45
/* A C string constant that tells the GCC driver program options to pass to
46
   the assembler.  */
47
#undef  ASM_SPEC
48
#define ASM_SPEC "%{march=*} %{!march=*: -march=ms1-16-002}"
49
 
50
/* A string to pass to at the end of the command given to the linker.  */
51
#undef  LIB_SPEC
52
#define LIB_SPEC "--start-group -lc -lsim --end-group \
53
%{msim: ; \
54
march=ms1-64-001:-T 64-001.ld%s; \
55
march=ms1-16-002:-T 16-002.ld%s; \
56
march=ms1-16-003:-T 16-003.ld%s; \
57
march=ms2:-T ms2.ld%s; \
58
         :-T 16-002.ld}"
59
 
60
/* A string to pass at the very beginning of the command given to the
61
   linker.  */
62
#undef  STARTFILE_SPEC
63
#define STARTFILE_SPEC "%{msim:crt0.o%s;\
64
march=ms1-64-001:%{!mno-crt0:crt0-64-001.o%s} startup-64-001.o%s; \
65
march=ms1-16-002:%{!mno-crt0:crt0-16-002.o%s} startup-16-002.o%s; \
66
march=ms1-16-003:%{!mno-crt0:crt0-16-003.o%s} startup-16-003.o%s; \
67
march=ms2:%{!mno-crt0:crt0-ms2.o%s} startup-ms2.o%s; \
68
         :%{!mno-crt0:crt0-16-002.o%s} startup-16-002.o%s} \
69
crti.o%s crtbegin.o%s"
70
 
71
/* A string to pass at the end of the command given to the linker.  */
72
#undef  ENDFILE_SPEC
73
#define ENDFILE_SPEC "%{msim:exit.o%s; \
74
march=ms1-64-001:exit-64-001.o%s; \
75
march=ms1-16-002:exit-16-002.o%s; \
76
march=ms1-16-003:exit-16-003.o%s; \
77
march=ms2:exit-ms2.o%s; \
78
         :exit-16-002.o%s} \
79
 crtend.o%s crtn.o%s"
80
 
81
/* Run-time target specifications.  */
82
 
83
#define TARGET_CPU_CPP_BUILTINS()               \
84
  do                                            \
85
    {                                           \
86
      builtin_define_with_int_value ("__mt__", mt_cpu); \
87
      builtin_assert ("machine=mt");            \
88
    }                                           \
89
  while (0)
90
 
91
#define TARGET_MS1_64_001 (mt_cpu == PROCESSOR_MS1_64_001)
92
#define TARGET_MS1_16_002 (mt_cpu == PROCESSOR_MS1_16_002)
93
#define TARGET_MS1_16_003 (mt_cpu == PROCESSOR_MS1_16_003)
94
#define TARGET_MS2 (mt_cpu == PROCESSOR_MS2)
95
 
96
#define TARGET_VERSION  fprintf (stderr, " (mt)");
97
 
98
#define OVERRIDE_OPTIONS mt_override_options ()
99
 
100
#define CAN_DEBUG_WITHOUT_FP 1
101
 
102
 
103
/* Storage Layout.  */
104
 
105
#define BITS_BIG_ENDIAN 0
106
 
107
#define BYTES_BIG_ENDIAN 1
108
 
109
#define WORDS_BIG_ENDIAN 1
110
 
111
#define UNITS_PER_WORD 4
112
 
113
/* A macro to update MODE and UNSIGNEDP when an object whose type is TYPE and
114
   which has the specified mode and signedness is to be stored in a register.
115
   This macro is only called when TYPE is a scalar type.
116
 
117
   On most RISC machines, which only have operations that operate on a full
118
   register, define this macro to set M to `word_mode' if M is an integer mode
119
   narrower than `BITS_PER_WORD'.  In most cases, only integer modes should be
120
   widened because wider-precision floating-point operations are usually more
121
   expensive than their narrower counterparts.
122
 
123
   For most machines, the macro definition does not change UNSIGNEDP.  However,
124
   some machines, have instructions that preferentially handle either signed or
125
   unsigned quantities of certain modes.  For example, on the DEC Alpha, 32-bit
126
   loads from memory and 32-bit add instructions sign-extend the result to 64
127
   bits.  On such machines, set UNSIGNEDP according to which kind of extension
128
   is more efficient.
129
 
130
   Do not define this macro if it would never modify MODE.  */
131
#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE)                       \
132
  do                                                            \
133
    {                                                           \
134
      if (GET_MODE_CLASS (MODE) == MODE_INT                     \
135
          && GET_MODE_SIZE (MODE) < 4)                          \
136
        (MODE) = SImode;                                        \
137
    }                                                           \
138
  while (0)
139
 
140
/* Normal alignment required for function parameters on the stack, in bits.
141
   All stack parameters receive at least this much alignment regardless of data
142
   type.  On most machines, this is the same as the size of an integer.  */
143
#define PARM_BOUNDARY 32
144
 
145
/* Define this macro to the minimum alignment enforced by hardware for
146
   the stack pointer on this machine.  The definition is a C
147
   expression for the desired alignment (measured in bits).  This
148
   value is used as a default if PREFERRED_STACK_BOUNDARY is not
149
   defined.  On most machines, this should be the same as
150
   PARM_BOUNDARY.  */
151
#define STACK_BOUNDARY 32
152
 
153
/* Alignment required for a function entry point, in bits.  */
154
#define FUNCTION_BOUNDARY 32
155
 
156
/* Biggest alignment that any data type can require on this machine,
157
   in bits.  */
158
#define BIGGEST_ALIGNMENT 32
159
 
160
/* If defined, a C expression to compute the alignment for a variable
161
   in the static store.  TYPE is the data type, and ALIGN is the
162
   alignment that the object would ordinarily have.  The value of this
163
   macro is used instead of that alignment to align the object.
164
 
165
   If this macro is not defined, then ALIGN is used.  */
166
#define DATA_ALIGNMENT(TYPE, ALIGN)             \
167
  (TREE_CODE (TYPE) == ARRAY_TYPE               \
168
   && TYPE_MODE (TREE_TYPE (TYPE)) == QImode    \
169
   && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
170
 
171
/* If defined, a C expression to compute the alignment given to a constant that
172
   is being placed in memory.  CONSTANT is the constant and ALIGN is the
173
   alignment that the object would ordinarily have.  The value of this macro is
174
   used instead of that alignment to align the object.
175
 
176
   If this macro is not defined, then ALIGN is used.
177
 
178
   The typical use of this macro is to increase alignment for string constants
179
   to be word aligned so that `strcpy' calls that copy constants can be done
180
   inline.  */
181
#define CONSTANT_ALIGNMENT(EXP, ALIGN)  \
182
  (TREE_CODE (EXP) == STRING_CST        \
183
   && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
184
 
185
/* Number of bits which any structure or union's size must be a multiple of.
186
   Each structure or union's size is rounded up to a multiple of this.
187
 
188
   If you do not define this macro, the default is the same as `BITS_PER_UNIT'.  */
189
#define STRUCTURE_SIZE_BOUNDARY 32
190
 
191
/* Define this macro to be the value 1 if instructions will fail to work if
192
   given data not on the nominal alignment.  If instructions will merely go
193
   slower in that case, define this macro as 0.  */
194
#define STRICT_ALIGNMENT 1
195
 
196
/* Define this if you wish to imitate the way many other C compilers handle
197
   alignment of bitfields and the structures that contain them.  */
198
#define PCC_BITFIELD_TYPE_MATTERS 1
199
 
200
/* Layout of Source Language Data Types.  */
201
 
202
#define INT_TYPE_SIZE 32
203
 
204
#define SHORT_TYPE_SIZE 16
205
 
206
#define LONG_TYPE_SIZE 32
207
 
208
#define LONG_LONG_TYPE_SIZE 64
209
 
210
#define CHAR_TYPE_SIZE 8
211
 
212
#define FLOAT_TYPE_SIZE 32
213
 
214
#define DOUBLE_TYPE_SIZE 64
215
 
216
#define LONG_DOUBLE_TYPE_SIZE 64
217
 
218
#define DEFAULT_SIGNED_CHAR 1
219
 
220
/* Register Basics.  */
221
 
222
/* General purpose registers.  */
223
#define GPR_FIRST       0               /* First gpr */
224
#define GPR_LAST        15              /* Last possible gpr */
225
 
226
#define GPR_R0          0               /* Always 0 */
227
#define GPR_R7          7               /* Used as a scratch register */
228
#define GPR_R8          8               /* Used as a scratch register */
229
#define GPR_R9          9               /* Used as a scratch register */
230
#define GPR_R10         10              /* Used as a scratch register */
231
#define GPR_R11         11              /* Used as a scratch register */
232
#define GPR_FP          12              /* Frame pointer */
233
#define GPR_SP          13              /* Stack pointer */
234
#define GPR_LINK        14              /* Saved return address as
235
                                           seen  by the caller */
236
#define GPR_INTERRUPT_LINK 15           /* hold return addres for interrupts */
237
 
238
#define LOOP_FIRST         (GPR_LAST + 1)
239
#define LOOP_LAST          (LOOP_FIRST + 3)
240
 
241
/* Argument register that is eliminated in favor of the frame and/or stack
242
   pointer.  Also add register to point to where the return address is
243
   stored.  */
244
#define SPECIAL_REG_FIRST               (LOOP_LAST + 1)
245
#define SPECIAL_REG_LAST                (SPECIAL_REG_FIRST)
246
#define ARG_POINTER_REGNUM              (SPECIAL_REG_FIRST + 0)
247
#define SPECIAL_REG_P(R)                ((R) == SPECIAL_REG_FIRST)
248
 
249
/* The first/last register that can contain the arguments to a function.  */
250
#define FIRST_ARG_REGNUM        1
251
#define LAST_ARG_REGNUM         4
252
 
253
/* The register used to hold functions return value */
254
#define RETVAL_REGNUM           11
255
 
256
#define FIRST_PSEUDO_REGISTER (SPECIAL_REG_LAST + 1)
257
 
258
#define IS_PSEUDO_P(R)  (REGNO (R) >= FIRST_PSEUDO_REGISTER)
259
 
260
/* R0           always has the value 0
261
   R10          static link
262
   R12  FP      pointer to active frame
263
   R13  SP      pointer to top of stack
264
   R14  RA      return address
265
   R15  IRA     interrupt return address.  */
266
#define FIXED_REGISTERS { 1, 0, 0, 0, 0, 0, 0, 0, \
267
                          0, 0, 0, 0, 1, 1, 1, 1, \
268
                          1, 1, 1, 1, 1           \
269
                         }
270
 
271
/* Like `FIXED_REGISTERS' but has 1 for each register that is clobbered (in
272
   general) by function calls as well as for fixed registers.  This macro
273
   therefore identifies the registers that are not available for general
274
   allocation of values that must live across function calls.  */
275
#define CALL_USED_REGISTERS     { 1, 1, 1, 1, 1, 0, 0, 1, \
276
                                  1, 1, 1, 1, 1, 1, 1, 1, \
277
                                  1, 1, 1, 1, 1           \
278
                                }
279
 
280
 
281
/* How Values Fit in Registers.  */
282
 
283
#define HARD_REGNO_NREGS(REGNO, MODE)                           \
284
  ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
285
 
286
#define HARD_REGNO_MODE_OK(REGNO, MODE) 1
287
 
288
/* A C expression that is nonzero if a value of mode MODE1 is
289
   accessible in mode MODE2 without copying.  */
290
#define MODES_TIEABLE_P(MODE1, MODE2) 1
291
 
292
/* Register Classes.  */
293
 
294
enum reg_class
295
{
296
  NO_REGS,
297
  ALL_REGS,
298
  LIM_REG_CLASSES
299
};
300
 
301
#define   GENERAL_REGS  ALL_REGS
302
 
303
#define N_REG_CLASSES ((int) LIM_REG_CLASSES)
304
 
305
#define REG_CLASS_NAMES {"NO_REGS", "ALL_REGS" }
306
 
307
#define REG_CLASS_CONTENTS \
308
   {                                                            \
309
     { 0x0 },                                                   \
310
     { 0x000fffff },                                            \
311
   }
312
 
313
/* A C expression whose value is a register class containing hard register
314
   REGNO.  In general there is more than one such class; choose a class which
315
   is "minimal", meaning that no smaller class also contains the register.  */
316
#define REGNO_REG_CLASS(REGNO) GENERAL_REGS
317
 
318
#define BASE_REG_CLASS GENERAL_REGS
319
 
320
#define INDEX_REG_CLASS NO_REGS
321
 
322
#define REG_CLASS_FROM_LETTER(CHAR) NO_REGS
323
 
324
#define REGNO_OK_FOR_BASE_P(NUM) 1
325
 
326
#define REGNO_OK_FOR_INDEX_P(NUM) 1
327
 
328
/* A C expression that places additional restrictions on the register class to
329
   use when it is necessary to copy value X into a register in class CLASS.
330
   The value is a register class; perhaps CLASS, or perhaps another, smaller
331
   class.  On many machines, the following definition is safe:
332
 
333
        #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
334
*/
335
#define PREFERRED_RELOAD_CLASS(X, CLASS) (CLASS)
336
 
337
#define SECONDARY_RELOAD_CLASS(CLASS,MODE,X) \
338
  mt_secondary_reload_class((CLASS), (MODE), (X))
339
 
340
/* A C expression for the maximum number of consecutive registers of
341
   class CLASS needed to hold a value of mode MODE.  */
342
#define CLASS_MAX_NREGS(CLASS, MODE) \
343
  ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
344
 
345
/* For MorphoRISC1:
346
 
347
   `I'  is used for the range of constants an arithmetic insn can
348
        actually contain (16 bits signed integers).
349
 
350
   `J'  is used for the range which is just zero (ie, $r0).
351
 
352
   `K'  is used for the range of constants a logical insn can actually
353
        contain (16 bit zero-extended integers).
354
 
355
   `L'  is used for the range of constants that be loaded with lui
356
        (ie, the bottom 16 bits are zero).
357
 
358
   `M'  is used for the range of constants that take two words to load
359
        (ie, not matched by `I', `K', and `L').
360
 
361
   `N'  is used for negative 16 bit constants other than -65536.
362
 
363
   `O'  is a 15 bit signed integer.
364
 
365
   `P'  is used for positive 16 bit constants.  */
366
 
367
#define SMALL_INT(X) ((unsigned HOST_WIDE_INT) (INTVAL (X) + 0x8000) < 0x10000)
368
#define SMALL_INT_UNSIGNED(X) ((unsigned HOST_WIDE_INT) (INTVAL (X)) < 0x10000)
369
 
370
/* A C expression that defines the machine-dependent operand
371
   constraint letters that specify particular ranges of integer
372
   values.  If C is one of those letters, the expression should check
373
   that VALUE, an integer, is in the appropriate range and return 1 if
374
   so, 0 otherwise.  If C is not one of those letters, the value
375
   should be 0 regardless of VALUE.  */
376
#define CONST_OK_FOR_LETTER_P(VALUE, C)                                 \
377
  ((C) == 'I' ? ((unsigned HOST_WIDE_INT) ((VALUE) + 0x8000) < 0x10000) \
378
   : (C) == 'J' ? ((VALUE) == 0)                                        \
379
   : (C) == 'K' ? ((unsigned HOST_WIDE_INT) (VALUE) < 0x10000)          \
380
   : (C) == 'L' ? (((VALUE) & 0x0000ffff) == 0                          \
381
                   && (((VALUE) & ~2147483647) == 0                     \
382
                       || ((VALUE) & ~2147483647) == ~2147483647))      \
383
   : (C) == 'M' ? ((((VALUE) & ~0x0000ffff) != 0)                       \
384
                   && (((VALUE) & ~0x0000ffff) != ~0x0000ffff)          \
385
                   && (((VALUE) & 0x0000ffff) != 0                      \
386
                       || (((VALUE) & ~2147483647) != 0                 \
387
                           && ((VALUE) & ~2147483647) != ~2147483647))) \
388
   : (C) == 'N' ? ((unsigned HOST_WIDE_INT) ((VALUE) + 0xffff) < 0xffff) \
389
   : (C) == 'O' ? ((unsigned HOST_WIDE_INT) ((VALUE) + 0x4000) < 0x8000) \
390
   : (C) == 'P' ? ((VALUE) != 0 && (((VALUE) & ~0x0000ffff) == 0))      \
391
   : 0)
392
 
393
/* A C expression that defines the machine-dependent operand constraint letters
394
   (`G', `H') that specify particular ranges of `const_double' values.  */
395
#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 0
396
 
397
/* Most negative value represent on mt */
398
#define MT_MIN_INT 0x80000000
399
 
400
/* Basic Stack Layout.  */
401
 
402
enum save_direction
403
{
404
  FROM_PROCESSOR_TO_MEM,
405
  FROM_MEM_TO_PROCESSOR
406
};
407
 
408
/* Tell prologue and epilogue if register REGNO should be saved / restored.
409
   The return address and frame pointer are treated separately.
410
   Don't consider them here.  */
411
#define MUST_SAVE_REGISTER(regno)                               \
412
  (   (regno) != GPR_LINK                                       \
413
   && (regno) != GPR_FP                                         \
414
   && (regno) != GPR_SP                                         \
415
   && (regno) != GPR_R0                                         \
416
   &&   (( regs_ever_live [regno] && ! call_used_regs [regno] ) \
417
       /* Save ira register in an interrupt handler.  */        \
418
        || (interrupt_handler && (regno) == GPR_INTERRUPT_LINK) \
419
       /* Save any register used in an interrupt handler.  */   \
420
        || (interrupt_handler && regs_ever_live [regno])        \
421
       /* Save call clobbered registers in non-leaf interrupt   \
422
          handlers.  */                                         \
423
        || (interrupt_handler && call_used_regs[regno]          \
424
           && !current_function_is_leaf)                        \
425
        ||(current_function_calls_eh_return                     \
426
           && (regno == GPR_R7 || regno == GPR_R8))             \
427
        )                                                       \
428
  )
429
 
430
#define STACK_GROWS_DOWNWARD 1
431
 
432
/* Offset from the frame pointer to the first local variable slot to be
433
   allocated.
434
 
435
   If `FRAME_GROWS_DOWNWARD', find the next slot's offset by
436
   subtracting the first slot's length from `STARTING_FRAME_OFFSET'.
437
   Otherwise, it is found by adding the length of the first slot to
438
   the value `STARTING_FRAME_OFFSET'.  */
439
#define STARTING_FRAME_OFFSET current_function_outgoing_args_size
440
 
441
/* Offset from the argument pointer register to the first argument's address.
442
   On some machines it may depend on the data type of the function.
443
 
444
   If `ARGS_GROW_DOWNWARD', this is the offset to the location above the first
445
   argument's address.  */
446
#define FIRST_PARM_OFFSET(FUNDECL) 0
447
 
448
#define RETURN_ADDR_RTX(COUNT, FRAMEADDR)                               \
449
    mt_return_addr_rtx (COUNT)
450
 
451
/* A C expression whose value is RTL representing the location of the incoming
452
   return address at the beginning of any function, before the prologue.  This
453
   RTL is either a `REG', indicating that the return value is saved in `REG',
454
   or a `MEM' representing a location in the stack.
455
 
456
   You only need to define this macro if you want to support call frame
457
   debugging information like that provided by DWARF 2.  */
458
#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (SImode, GPR_LINK)
459
 
460
/* A C expression whose value is an integer giving the offset, in bytes, from
461
   the value of the stack pointer register to the top of the stack frame at the
462
   beginning of any function, before the prologue.  The top of the frame is
463
   defined to be the value of the stack pointer in the previous frame, just
464
   before the call instruction.
465
 
466
   You only need to define this macro if you want to support call frame
467
   debugging information like that provided by DWARF 2.  */
468
#define INCOMING_FRAME_SP_OFFSET 0
469
 
470
#define STACK_POINTER_REGNUM GPR_SP
471
 
472
#define FRAME_POINTER_REGNUM GPR_FP
473
 
474
/* The register number of the arg pointer register, which is used to
475
   access the function's argument list.  */
476
#define ARG_POINTER_REGNUM              (SPECIAL_REG_FIRST + 0)
477
 
478
/* Register numbers used for passing a function's static chain pointer.  */
479
#define STATIC_CHAIN_REGNUM 10
480
 
481
/* A C expression which is nonzero if a function must have and use a frame
482
   pointer.  */
483
#define FRAME_POINTER_REQUIRED 0
484
 
485
/* Structure to be filled in by compute_frame_size with register
486
   save masks, and offsets for the current function.  */
487
 
488
struct mt_frame_info
489
{
490
  unsigned int total_size;      /* # Bytes that the entire frame takes up.  */
491
  unsigned int pretend_size;    /* # Bytes we push and pretend caller did.  */
492
  unsigned int args_size;       /* # Bytes that outgoing arguments take up.  */
493
  unsigned int extra_size;
494
  unsigned int reg_size;        /* # Bytes needed to store regs.  */
495
  unsigned int var_size;        /* # Bytes that variables take up.  */
496
  unsigned int frame_size;      /* # Bytes in current frame.  */
497
  unsigned int reg_mask;        /* Mask of saved registers.  */
498
  unsigned int save_fp;         /* Nonzero if frame pointer must be saved.  */
499
  unsigned int save_lr;         /* Nonzero if return pointer must be saved.  */
500
  int          initialized;     /* Nonzero if frame size already calculated.  */
501
};
502
 
503
extern struct mt_frame_info current_frame_info;
504
 
505
/* If defined, this macro specifies a table of register pairs used to eliminate
506
   unneeded registers that point into the stack frame.  */
507
#define ELIMINABLE_REGS                                                 \
508
{                                                                       \
509
  {ARG_POINTER_REGNUM,   STACK_POINTER_REGNUM},                         \
510
  {ARG_POINTER_REGNUM,   FRAME_POINTER_REGNUM},                         \
511
  {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}                          \
512
}
513
 
514
/* A C expression that returns nonzero if the compiler is allowed to try to
515
   replace register number FROM with register number TO.  */
516
#define CAN_ELIMINATE(FROM, TO)                                         \
517
 ((FROM) == ARG_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM          \
518
  ? ! frame_pointer_needed                                              \
519
  : 1)
520
 
521
/* This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'.  It
522
   specifies the initial difference between the specified pair of
523
   registers.  This macro must be defined if `ELIMINABLE_REGS' is
524
   defined.  */
525
#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET)                    \
526
  (OFFSET) = mt_initial_elimination_offset (FROM, TO)
527
 
528
/* If defined, the maximum amount of space required for outgoing
529
   arguments will be computed and placed into the variable
530
   `current_function_outgoing_args_size'.  */
531
#define ACCUMULATE_OUTGOING_ARGS 1
532
 
533
/* Define this if it is the responsibility of the caller to
534
   allocate the area reserved for arguments passed in registers.  */
535
#define OUTGOING_REG_PARM_STACK_SPACE
536
 
537
/* The number of register assigned to holding function arguments.  */
538
#define MT_NUM_ARG_REGS        4
539
 
540
/* Define this if it is the responsibility of the caller to allocate
541
   the area reserved for arguments passed in registers.  */
542
#define REG_PARM_STACK_SPACE(FNDECL) (MT_NUM_ARG_REGS * UNITS_PER_WORD)
543
 
544
/* Define this macro if `REG_PARM_STACK_SPACE' is defined, but the stack
545
   parameters don't skip the area specified by it.  */
546
#define STACK_PARMS_IN_REG_PARM_AREA
547
 
548
/* A C expression that should indicate the number of bytes of its own
549
   arguments that a function pops on returning, or 0 if the function
550
   pops no arguments and the caller must therefore pop them all after
551
   the function returns.  */
552
#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0
553
 
554
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
555
   mt_function_arg (& (CUM), (MODE), (TYPE), (NAMED), FALSE)
556
 
557
#define CUMULATIVE_ARGS int
558
 
559
#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
560
    mt_init_cumulative_args (& (CUM), FNTYPE, LIBNAME, FNDECL, FALSE)
561
 
562
#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)                    \
563
    mt_function_arg_advance (&CUM, MODE, TYPE, NAMED)
564
 
565
#define FUNCTION_ARG_BOUNDARY(MODE, TYPE)                               \
566
    mt_function_arg_boundary (MODE, TYPE)
567
 
568
#define FUNCTION_ARG_REGNO_P(REGNO)                                     \
569
  ((REGNO) >= FIRST_ARG_REGNUM && ((REGNO) <= LAST_ARG_REGNUM))
570
 
571
#define RETURN_VALUE_REGNUM     RETVAL_REGNUM
572
 
573
#define FUNCTION_VALUE(VALTYPE, FUNC) \
574
   mt_function_value (VALTYPE, TYPE_MODE(VALTYPE), FUNC)
575
 
576
#define LIBCALL_VALUE(MODE) \
577
   mt_function_value (NULL_TREE, MODE, NULL_TREE)
578
 
579
#define FUNCTION_VALUE_REGNO_P(REGNO) ((REGNO) == RETURN_VALUE_REGNUM)
580
 
581
/* A C expression which can inhibit the returning of certain function
582
   values in registers, based on the type of value.  */
583
#define RETURN_IN_MEMORY(TYPE) (int_size_in_bytes (TYPE) > UNITS_PER_WORD)
584
 
585
/* Define this macro to be 1 if all structure and union return values must be
586
   in memory.  */
587
#define DEFAULT_PCC_STRUCT_RETURN 0
588
 
589
/* Define this macro as a C expression that is nonzero if the return
590
   instruction or the function epilogue ignores the value of the stack
591
   pointer; in other words, if it is safe to delete an instruction to
592
   adjust the stack pointer before a return from the function.  */
593
#define EXIT_IGNORE_STACK 1
594
 
595
#define EPILOGUE_USES(REGNO) mt_epilogue_uses(REGNO)
596
 
597
/* Define this macro if the function epilogue contains delay slots to which
598
   instructions from the rest of the function can be "moved".  */
599
#define DELAY_SLOTS_FOR_EPILOGUE 1
600
 
601
/* A C expression that returns 1 if INSN can be placed in delay slot number N
602
   of the epilogue.  */
603
#define ELIGIBLE_FOR_EPILOGUE_DELAY(INSN, N) 0
604
 
605
#define FUNCTION_PROFILER(FILE, LABELNO) gcc_unreachable ()
606
 
607
/* Trampolines are not implemented.  */
608
#define TRAMPOLINE_SIZE 0
609
 
610
#define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, STATIC_CHAIN)
611
 
612
/* ?? What is this -- aldyh ?? */
613
#define UCMPSI3_LIBCALL         "__ucmpsi3"
614
 
615
/* Addressing Modes.  */
616
 
617
/* A C expression that is 1 if the RTX X is a constant which is a valid
618
   address.  */
619
#define CONSTANT_ADDRESS_P(X) CONSTANT_P (X)
620
 
621
/* A number, the maximum number of registers that can appear in a valid memory
622
   address.  Note that it is up to you to specify a value equal to the maximum
623
   number that `GO_IF_LEGITIMATE_ADDRESS' would ever accept.  */
624
#define MAX_REGS_PER_ADDRESS 1
625
 
626
#ifdef REG_OK_STRICT
627
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
628
{                                               \
629
  if (mt_legitimate_address_p (MODE, X, 1))     \
630
    goto ADDR;                                  \
631
}
632
#else
633
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
634
{                                               \
635
  if (mt_legitimate_address_p (MODE, X, 0))     \
636
    goto ADDR;                                  \
637
}
638
#endif
639
 
640
#ifdef REG_OK_STRICT
641
#define REG_OK_FOR_BASE_P(X) mt_reg_ok_for_base_p (X, 1)
642
#else
643
#define REG_OK_FOR_BASE_P(X) mt_reg_ok_for_base_p (X, 0)
644
#endif
645
 
646
#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X)
647
 
648
#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) {}
649
 
650
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)
651
 
652
#define LEGITIMATE_CONSTANT_P(X) 1
653
 
654
/* A C expression for the cost of moving data of mode M between a register and
655
   memory.  A value of 2 is the default; this cost is relative to those in
656
   `REGISTER_MOVE_COST'.
657
 
658
   If moving between registers and memory is more expensive than between two
659
   registers, you should define this macro to express the relative cost.  */
660
#define MEMORY_MOVE_COST(M,C,I) 10
661
 
662
/* Define this macro as a C expression which is nonzero if accessing less than
663
   a word of memory (i.e. a `char' or a `short') is no faster than accessing a
664
   word of memory.  */
665
#define SLOW_BYTE_ACCESS 1
666
 
667
#define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) 1
668
 
669
#define TEXT_SECTION_ASM_OP ".text"
670
 
671
#define DATA_SECTION_ASM_OP ".data"
672
 
673
#define BSS_SECTION_ASM_OP "\t.section\t.bss"
674
 
675
/* A C string constant for text to be output before each `asm' statement or
676
   group of consecutive ones.  Normally this is `"#APP"', which is a comment
677
   that has no effect on most assemblers but tells the GNU assembler that it
678
   must check the lines that follow for all valid assembler constructs.  */
679
#define ASM_APP_ON "#APP\n"
680
 
681
/* A C string constant for text to be output after each `asm' statement or
682
   group of consecutive ones.  Normally this is `"#NO_APP"', which tells the
683
   GNU assembler to resume making the time-saving assumptions that are valid
684
   for ordinary compiler output.  */
685
#define ASM_APP_OFF "#NO_APP\n"
686
 
687
/* This is how to output an assembler line defining a `char' constant.  */
688
#define ASM_OUTPUT_CHAR(FILE, VALUE)                    \
689
  do                                                    \
690
    {                                                   \
691
      fprintf (FILE, "\t.byte\t");                      \
692
      output_addr_const (FILE, (VALUE));                \
693
      fprintf (FILE, "\n");                             \
694
    }                                                   \
695
  while (0)
696
 
697
/* This is how to output an assembler line defining a `short' constant.  */
698
#define ASM_OUTPUT_SHORT(FILE, VALUE)                   \
699
  do                                                    \
700
    {                                                   \
701
      fprintf (FILE, "\t.hword\t");                     \
702
      output_addr_const (FILE, (VALUE));                \
703
      fprintf (FILE, "\n");                             \
704
    }                                                   \
705
  while (0)
706
 
707
/* This is how to output an assembler line defining an `int' constant.
708
   We also handle symbol output here.  */
709
#define ASM_OUTPUT_INT(FILE, VALUE)                     \
710
  do                                                    \
711
    {                                                   \
712
      fprintf (FILE, "\t.word\t");                      \
713
      output_addr_const (FILE, (VALUE));                \
714
      fprintf (FILE, "\n");                             \
715
    }                                                   \
716
  while (0)
717
 
718
/* A C statement to output to the stdio stream STREAM an assembler instruction
719
   to assemble a single byte containing the number VALUE.
720
 
721
   This declaration must be present.  */
722
#define ASM_OUTPUT_BYTE(STREAM, VALUE) \
723
  fprintf (STREAM, "\t%s\t0x%x\n", ASM_BYTE_OP, (VALUE))
724
 
725
/* Globalizing directive for a label.  */
726
#define GLOBAL_ASM_OP "\t.globl "
727
 
728
#define REGISTER_NAMES                                                  \
729
{ "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7",                       \
730
  "R8", "R9", "R10", "R11", "R12", "R13", "R14", "R15",                 \
731
  "LOOP1", "LOOP2", "LOOP3", "LOOP4", "ap" }
732
 
733
/* If defined, a C initializer for an array of structures containing a name and
734
   a register number.  This macro defines additional names for hard registers,
735
   thus allowing the `asm' option in declarations to refer to registers using
736
   alternate names.  */
737
#define ADDITIONAL_REGISTER_NAMES \
738
{ { "FP", 12}, {"SP", 13}, {"RA", 14}, {"IRA", 15} }
739
 
740
/* Define this macro if you are using an unusual assembler that requires
741
   different names for the machine instructions.
742
 
743
   The definition is a C statement or statements which output an assembler
744
   instruction opcode to the stdio stream STREAM.  The macro-operand PTR is a
745
   variable of type `char *' which points to the opcode name in its "internal"
746
   form--the form that is written in the machine description.  The definition
747
   should output the opcode name to STREAM, performing any translation you
748
   desire, and increment the variable PTR to point at the end of the opcode so
749
   that it will not be output twice.  */
750
#define ASM_OUTPUT_OPCODE(STREAM, PTR) \
751
   (PTR) = mt_asm_output_opcode (STREAM, PTR)
752
 
753
#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \
754
  mt_final_prescan_insn (INSN, OPVEC, NOPERANDS)
755
 
756
#define PRINT_OPERAND(STREAM, X, CODE) mt_print_operand (STREAM, X, CODE)
757
 
758
/* A C expression which evaluates to true if CODE is a valid punctuation
759
   character for use in the `PRINT_OPERAND' macro.  */
760
/* #:  Print nop for delay slot.  */
761
#define PRINT_OPERAND_PUNCT_VALID_P(CODE) ((CODE) == '#')
762
 
763
#define PRINT_OPERAND_ADDRESS(STREAM, X) mt_print_operand_address (STREAM, X)
764
 
765
/* If defined, C string expressions to be used for the `%R', `%L', `%U', and
766
   `%I' options of `asm_fprintf' (see `final.c').  These are useful when a
767
   single `md' file must support multiple assembler formats.  In that case, the
768
   various `tm.h' files can define these macros differently.
769
 
770
   USER_LABEL_PREFIX is defined in svr4.h.  */
771
#define REGISTER_PREFIX     "%"
772
#define LOCAL_LABEL_PREFIX  "."
773
#define USER_LABEL_PREFIX   ""
774
#define IMMEDIATE_PREFIX    ""
775
 
776
/* This macro should be provided on machines where the addresses in a dispatch
777
   table are relative to the table's own address.
778
 
779
   The definition should be a C statement to output to the stdio stream STREAM
780
   an assembler pseudo-instruction to generate a difference between two labels.
781
   VALUE and REL are the numbers of two internal labels.  The definitions of
782
   these labels are output using `targetm.asm_out.internal_label', and they
783
   must be printed in the same way here.  */
784
#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \
785
fprintf (STREAM, "\t.word .L%d-.L%d\n", VALUE, REL)
786
 
787
/* This macro should be provided on machines where the addresses in a dispatch
788
   table are absolute.
789
 
790
   The definition should be a C statement to output to the stdio stream STREAM
791
   an assembler pseudo-instruction to generate a reference to a label.  VALUE
792
   is the number of an internal label whose definition is output using
793
   `targetm.asm_out.internal_label'.  */
794
#define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) \
795
fprintf (STREAM, "\t.word .L%d\n", VALUE)
796
 
797
#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (GPR_LINK)
798
 
799
#define EH_RETURN_DATA_REGNO(N) \
800
  ((N) == 0 ? GPR_R7 : (N) == 1 ? GPR_R8 : INVALID_REGNUM)
801
 
802
#define EH_RETURN_STACKADJ_REGNO        GPR_R11
803
#define EH_RETURN_STACKADJ_RTX          \
804
        gen_rtx_REG (SImode, EH_RETURN_STACKADJ_REGNO)
805
#define EH_RETURN_HANDLER_REGNO         GPR_R10
806
#define EH_RETURN_HANDLER_RTX           \
807
        gen_rtx_REG (SImode, EH_RETURN_HANDLER_REGNO)
808
 
809
#define ASM_OUTPUT_ALIGN(STREAM, POWER) \
810
  fprintf ((STREAM), "\t.p2align %d\n", (POWER))
811
 
812
#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
813
 
814
#ifndef DWARF2_DEBUGGING_INFO
815
#define DWARF2_DEBUGGING_INFO
816
#endif
817
 
818
/* Define this macro if GCC should produce dwarf version 2-style
819
   line numbers.  This usually requires extending the assembler to
820
   support them, and #defining DWARF2_LINE_MIN_INSN_LENGTH in the
821
   assembler configuration header files.  */
822
#define DWARF2_ASM_LINE_DEBUG_INFO 1
823
 
824
/* An alias for a machine mode name.  This is the machine mode that
825
   elements of a jump-table should have.  */
826
#define CASE_VECTOR_MODE SImode
827
 
828
/* Define this macro if operations between registers with integral
829
   mode smaller than a word are always performed on the entire
830
   register.  Most RISC machines have this property and most CISC
831
   machines do not.  */
832
#define WORD_REGISTER_OPERATIONS
833
 
834
/* The maximum number of bytes that a single instruction can move quickly from
835
   memory to memory.  */
836
#define MOVE_MAX 4
837
 
838
/* A C expression which is nonzero if on this machine it is safe to "convert"
839
   an integer of INPREC bits to one of OUTPREC bits (where OUTPREC is smaller
840
   than INPREC) by merely operating on it as if it had only OUTPREC bits.
841
 
842
   On many machines, this expression can be 1.
843
 
844
   When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for modes for
845
   which `MODES_TIEABLE_P' is 0, suboptimal code can result.  If this is the
846
   case, making `TRULY_NOOP_TRUNCATION' return 0 in such cases may improve
847
   things.  */
848
#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
849
 
850
#define Pmode SImode
851
 
852
/* An alias for the machine mode used for memory references to functions being
853
   called, in `call' RTL expressions.  On most machines this should be
854
   `QImode'.  */
855
#define FUNCTION_MODE QImode
856
 
857
#define HANDLE_SYSV_PRAGMA 1
858
 
859
/* Indicate how many instructions can be issued at the same time.  */
860
#define ISSUE_RATE 1
861
 
862
/* Define the information needed to generate branch and scc insns.  This is
863
   stored from the compare operation.  Note that we can't use "rtx" here
864
   since it hasn't been defined!  */
865
 
866
extern struct rtx_def * mt_compare_op0;
867
extern struct rtx_def * mt_compare_op1;
868
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.