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

Subversion Repositories openrisc

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

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

Line No. Rev Author Line
1 38 julius
/* Target macros for the FRV port of GCC.
2
   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
3
   Free Software Foundation, Inc.
4
   Contributed by Red Hat 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 3, 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 COPYING3.  If not see
20
   <http://www.gnu.org/licenses/>.  */
21
 
22
#ifndef __FRV_H__
23
#define __FRV_H__
24
 
25
/* Frv general purpose macros.  */
26
/* Align an address.  */
27
#define ADDR_ALIGN(addr,align) (((addr) + (align) - 1) & ~((align) - 1))
28
 
29
/* Return true if a value is inside a range.  */
30
#define IN_RANGE_P(VALUE, LOW, HIGH)                            \
31
  (   (((HOST_WIDE_INT)(VALUE)) >= (HOST_WIDE_INT)(LOW))        \
32
   && (((HOST_WIDE_INT)(VALUE)) <= ((HOST_WIDE_INT)(HIGH))))
33
 
34
 
35
/* Driver configuration.  */
36
 
37
/* A C expression which determines whether the option `-CHAR' takes arguments.
38
   The value should be the number of arguments that option takes-zero, for many
39
   options.
40
 
41
   By default, this macro is defined to handle the standard options properly.
42
   You need not define it unless you wish to add additional options which take
43
   arguments.
44
 
45
   Defined in svr4.h.  */
46
#undef  SWITCH_TAKES_ARG
47
#define SWITCH_TAKES_ARG(CHAR)                                          \
48
  (DEFAULT_SWITCH_TAKES_ARG (CHAR) || (CHAR) == 'G')
49
 
50
/* A C expression which determines whether the option `-NAME' takes arguments.
51
   The value should be the number of arguments that option takes-zero, for many
52
   options.  This macro rather than `SWITCH_TAKES_ARG' is used for
53
   multi-character option names.
54
 
55
   By default, this macro is defined as `DEFAULT_WORD_SWITCH_TAKES_ARG', which
56
   handles the standard options properly.  You need not define
57
   `WORD_SWITCH_TAKES_ARG' unless you wish to add additional options which take
58
   arguments.  Any redefinition should call `DEFAULT_WORD_SWITCH_TAKES_ARG' and
59
   then check for additional options.
60
 
61
   Defined in svr4.h.  */
62
#undef WORD_SWITCH_TAKES_ARG
63
 
64
/* -fpic and -fPIC used to imply the -mlibrary-pic multilib, but with
65
    FDPIC which multilib to use depends on whether FDPIC is in use or
66
    not.  The trick we use is to introduce -multilib-library-pic as a
67
    pseudo-flag that selects the library-pic multilib, and map fpic
68
    and fPIC to it only if fdpic is not selected.  Also, if fdpic is
69
    selected and no PIC/PIE options are present, we imply -fPIE.
70
    Otherwise, if -fpic or -fPIC are enabled and we're optimizing for
71
    speed, or if we have -On with n>=3, enable inlining of PLTs.  As
72
    for -mgprel-ro, we want to enable it by default, but not for -fpic or
73
    -fpie.  */
74
 
75
#define DRIVER_SELF_SPECS SUBTARGET_DRIVER_SELF_SPECS \
76
"%{mno-pack:\
77
   %{!mhard-float:-msoft-float}\
78
   %{!mmedia:-mno-media}}\
79
 %{!mfdpic:%{fpic|fPIC: -multilib-library-pic}}\
80
 %{mfdpic:%{!fpic:%{!fpie:%{!fPIC:%{!fPIE:\
81
            %{!fno-pic:%{!fno-pie:%{!fno-PIC:%{!fno-PIE:-fPIE}}}}}}}} \
82
          %{!mno-inline-plt:%{O*:%{!O0:%{!Os:%{fpic|fPIC:-minline-plt} \
83
                    %{!fpic:%{!fPIC:%{!O:%{!O1:%{!O2:-minline-plt}}}}}}}}} \
84
          %{!mno-gprel-ro:%{!fpic:%{!fpie:-mgprel-ro}}}} \
85
"
86
#ifndef SUBTARGET_DRIVER_SELF_SPECS
87
# define SUBTARGET_DRIVER_SELF_SPECS
88
#endif
89
 
90
/* A C string constant that tells the GCC driver program options to pass to
91
   the assembler.  It can also specify how to translate options you give to GNU
92
   CC into options for GCC to pass to the assembler.  See the file `sun3.h'
93
   for an example of this.
94
 
95
   Do not define this macro if it does not need to do anything.
96
 
97
   Defined in svr4.h.  */
98
#undef  ASM_SPEC
99
#define ASM_SPEC "\
100
%{G*} %{v} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \
101
%{mtomcat-stats} \
102
%{!mno-eflags: \
103
    %{mcpu=*} \
104
    %{mgpr-*} %{mfpr-*} \
105
    %{msoft-float} %{mhard-float} \
106
    %{mdword} %{mno-dword} \
107
    %{mdouble} %{mno-double} \
108
    %{mmedia} %{mno-media} \
109
    %{mmuladd} %{mno-muladd} \
110
    %{mpack} %{mno-pack} \
111
    %{mno-fdpic:-mnopic} %{mfdpic} \
112
    %{fpic|fpie: -mpic} %{fPIC|fPIE: -mPIC} %{mlibrary-pic}}"
113
 
114
/* Another C string constant used much like `LINK_SPEC'.  The difference
115
   between the two is that `STARTFILE_SPEC' is used at the very beginning of
116
   the command given to the linker.
117
 
118
   If this macro is not defined, a default is provided that loads the standard
119
   C startup file from the usual place.  See `gcc.c'.
120
 
121
   Defined in svr4.h.  */
122
#undef  STARTFILE_SPEC
123
#define STARTFILE_SPEC "crt0%O%s frvbegin%O%s"
124
 
125
/* Another C string constant used much like `LINK_SPEC'.  The difference
126
   between the two is that `ENDFILE_SPEC' is used at the very end of the
127
   command given to the linker.
128
 
129
   Do not define this macro if it does not need to do anything.
130
 
131
   Defined in svr4.h.  */
132
#undef  ENDFILE_SPEC
133
#define ENDFILE_SPEC "frvend%O%s"
134
 
135
 
136
#define MASK_DEFAULT_FRV        \
137
  (MASK_MEDIA                   \
138
   | MASK_DOUBLE                \
139
   | MASK_MULADD                \
140
   | MASK_DWORD                 \
141
   | MASK_PACK)
142
 
143
#define MASK_DEFAULT_FR500 \
144
  (MASK_MEDIA | MASK_DWORD | MASK_PACK)
145
 
146
#define MASK_DEFAULT_FR550 \
147
  (MASK_MEDIA | MASK_DWORD | MASK_PACK)
148
 
149
#define MASK_DEFAULT_FR450      \
150
  (MASK_GPR_32                  \
151
   | MASK_FPR_32                \
152
   | MASK_MEDIA                 \
153
   | MASK_SOFT_FLOAT            \
154
   | MASK_DWORD                 \
155
   | MASK_PACK)
156
 
157
#define MASK_DEFAULT_FR400      \
158
  (MASK_GPR_32                  \
159
   | MASK_FPR_32                \
160
   | MASK_MEDIA                 \
161
   | MASK_ACC_4                 \
162
   | MASK_SOFT_FLOAT            \
163
   | MASK_DWORD                 \
164
   | MASK_PACK)
165
 
166
#define MASK_DEFAULT_SIMPLE \
167
  (MASK_GPR_32 | MASK_SOFT_FLOAT)
168
 
169
/* A C string constant that tells the GCC driver program options to pass to
170
   `cc1'.  It can also specify how to translate options you give to GCC into
171
   options for GCC to pass to the `cc1'.
172
 
173
   Do not define this macro if it does not need to do anything.  */
174
/* For ABI compliance, we need to put bss data into the normal data section.  */
175
#define CC1_SPEC "%{G*}"
176
 
177
/* A C string constant that tells the GCC driver program options to pass to
178
   the linker.  It can also specify how to translate options you give to GCC
179
   into options for GCC to pass to the linker.
180
 
181
   Do not define this macro if it does not need to do anything.
182
 
183
   Defined in svr4.h.  */
184
/* Override the svr4.h version with one that dispenses without the svr4
185
   shared library options, notably -G.  */
186
#undef  LINK_SPEC
187
#define LINK_SPEC "\
188
%{h*} %{v:-V} \
189
%{b} \
190
%{mfdpic:-melf32frvfd -z text} \
191
%{static:-dn -Bstatic} \
192
%{shared:-Bdynamic} \
193
%{symbolic:-Bsymbolic} \
194
%{G*} \
195
%{YP,*} \
196
%{Qy:} %{!Qn:-Qy}"
197
 
198
/* Another C string constant used much like `LINK_SPEC'.  The difference
199
   between the two is that `LIB_SPEC' is used at the end of the command given
200
   to the linker.
201
 
202
   If this macro is not defined, a default is provided that loads the standard
203
   C library from the usual place.  See `gcc.c'.
204
 
205
   Defined in svr4.h.  */
206
 
207
#undef  LIB_SPEC
208
#define LIB_SPEC "--start-group -lc -lsim --end-group"
209
 
210
#ifndef CPU_TYPE
211
#define CPU_TYPE                FRV_CPU_FR500
212
#endif
213
 
214
/* Run-time target specifications */
215
 
216
#define TARGET_CPU_CPP_BUILTINS()                                       \
217
  do                                                                    \
218
    {                                                                   \
219
      int issue_rate;                                                   \
220
                                                                        \
221
      builtin_define ("__frv__");                                       \
222
      builtin_assert ("machine=frv");                                   \
223
                                                                        \
224
      issue_rate = frv_issue_rate ();                                   \
225
      if (issue_rate > 1)                                               \
226
        builtin_define_with_int_value ("__FRV_VLIW__", issue_rate);     \
227
      builtin_define_with_int_value ("__FRV_GPR__", NUM_GPRS);          \
228
      builtin_define_with_int_value ("__FRV_FPR__", NUM_FPRS);          \
229
      builtin_define_with_int_value ("__FRV_ACC__", NUM_ACCS);          \
230
                                                                        \
231
      switch (frv_cpu_type)                                             \
232
        {                                                               \
233
        case FRV_CPU_GENERIC:                                           \
234
          builtin_define ("__CPU_GENERIC__");                           \
235
          break;                                                        \
236
        case FRV_CPU_FR550:                                             \
237
          builtin_define ("__CPU_FR550__");                             \
238
          break;                                                        \
239
        case FRV_CPU_FR500:                                             \
240
        case FRV_CPU_TOMCAT:                                            \
241
          builtin_define ("__CPU_FR500__");                             \
242
          break;                                                        \
243
        case FRV_CPU_FR450:                                             \
244
          builtin_define ("__CPU_FR450__");                             \
245
          break;                                                        \
246
        case FRV_CPU_FR405:                                             \
247
          builtin_define ("__CPU_FR405__");                             \
248
          break;                                                        \
249
        case FRV_CPU_FR400:                                             \
250
          builtin_define ("__CPU_FR400__");                             \
251
          break;                                                        \
252
        case FRV_CPU_FR300:                                             \
253
        case FRV_CPU_SIMPLE:                                            \
254
          builtin_define ("__CPU_FR300__");                             \
255
          break;                                                        \
256
        }                                                               \
257
                                                                        \
258
      if (TARGET_HARD_FLOAT)                                            \
259
        builtin_define ("__FRV_HARD_FLOAT__");                          \
260
      if (TARGET_DWORD)                                                 \
261
        builtin_define ("__FRV_DWORD__");                               \
262
      if (TARGET_FDPIC)                                                 \
263
        builtin_define ("__FRV_FDPIC__");                               \
264
      if (flag_leading_underscore > 0)                                  \
265
        builtin_define ("__FRV_UNDERSCORE__");                          \
266
    }                                                                   \
267
  while (0)
268
 
269
 
270
#define TARGET_HAS_FPRS         (TARGET_HARD_FLOAT || TARGET_MEDIA)
271
 
272
#define NUM_GPRS                (TARGET_GPR_32? 32 : 64)
273
#define NUM_FPRS                (!TARGET_HAS_FPRS? 0 : TARGET_FPR_32? 32 : 64)
274
#define NUM_ACCS                (!TARGET_MEDIA? 0 : TARGET_ACC_4? 4 : 8)
275
 
276
/* X is a valid accumulator number if (X & ACC_MASK) == X.  */
277
#define ACC_MASK                                                \
278
  (!TARGET_MEDIA ? 0                                            \
279
   : TARGET_ACC_4 ? 3                                           \
280
   : frv_cpu_type == FRV_CPU_FR450 ? 11                         \
281
   : 7)
282
 
283
/* Macros to identify the blend of media instructions available.  Revision 1
284
   is the one found on the FR500.  Revision 2 includes the changes made for
285
   the FR400.
286
 
287
   Treat the generic processor as a revision 1 machine for now, for
288
   compatibility with earlier releases.  */
289
 
290
#define TARGET_MEDIA_REV1                                       \
291
  (TARGET_MEDIA                                                 \
292
   && (frv_cpu_type == FRV_CPU_GENERIC                          \
293
       || frv_cpu_type == FRV_CPU_FR500))
294
 
295
#define TARGET_MEDIA_REV2                                       \
296
  (TARGET_MEDIA                                                 \
297
   && (frv_cpu_type == FRV_CPU_FR400                            \
298
       || frv_cpu_type == FRV_CPU_FR405                         \
299
       || frv_cpu_type == FRV_CPU_FR450                         \
300
       || frv_cpu_type == FRV_CPU_FR550))
301
 
302
#define TARGET_MEDIA_FR450                                      \
303
  (frv_cpu_type == FRV_CPU_FR450)
304
 
305
#define TARGET_FR500_FR550_BUILTINS                             \
306
   (frv_cpu_type == FRV_CPU_FR500                               \
307
    || frv_cpu_type == FRV_CPU_FR550)
308
 
309
#define TARGET_FR405_BUILTINS                                   \
310
  (frv_cpu_type == FRV_CPU_FR405                                \
311
   || frv_cpu_type == FRV_CPU_FR450)
312
 
313
#ifndef HAVE_AS_TLS
314
#define HAVE_AS_TLS 0
315
#endif
316
 
317
/* This macro is a C statement to print on `stderr' a string describing the
318
   particular machine description choice.  Every machine description should
319
   define `TARGET_VERSION'.  For example:
320
 
321
        #ifdef MOTOROLA
322
        #define TARGET_VERSION \
323
          fprintf (stderr, " (68k, Motorola syntax)");
324
        #else
325
        #define TARGET_VERSION \
326
          fprintf (stderr, " (68k, MIT syntax)");
327
        #endif  */
328
#define TARGET_VERSION fprintf (stderr, _(" (frv)"))
329
 
330
/* Sometimes certain combinations of command options do not make sense on a
331
   particular target machine.  You can define a macro `OVERRIDE_OPTIONS' to
332
   take account of this.  This macro, if defined, is executed once just after
333
   all the command options have been parsed.
334
 
335
   Don't use this macro to turn on various extra optimizations for `-O'.  That
336
   is what `OPTIMIZATION_OPTIONS' is for.  */
337
 
338
#define OVERRIDE_OPTIONS frv_override_options ()
339
 
340
/* Some machines may desire to change what optimizations are performed for
341
   various optimization levels.  This macro, if defined, is executed once just
342
   after the optimization level is determined and before the remainder of the
343
   command options have been parsed.  Values set in this macro are used as the
344
   default values for the other command line options.
345
 
346
   LEVEL is the optimization level specified; 2 if `-O2' is specified, 1 if
347
   `-O' is specified, and 0 if neither is specified.
348
 
349
   SIZE is nonzero if `-Os' is specified, 0 otherwise.
350
 
351
   You should not use this macro to change options that are not
352
   machine-specific.  These should uniformly selected by the same optimization
353
   level on all supported machines.  Use this macro to enable machine-specific
354
   optimizations.
355
 
356
   *Do not examine `write_symbols' in this macro!* The debugging options are
357
   *not supposed to alter the generated code.  */
358
#define OPTIMIZATION_OPTIONS(LEVEL,SIZE) frv_optimization_options (LEVEL, SIZE)
359
 
360
 
361
/* Define this macro if debugging can be performed even without a frame
362
   pointer.  If this macro is defined, GCC will turn on the
363
   `-fomit-frame-pointer' option whenever `-O' is specified.  */
364
/* Frv needs a specific frame layout that includes the frame pointer.  */
365
 
366
#define CAN_DEBUG_WITHOUT_FP
367
 
368
#define LABEL_ALIGN_AFTER_BARRIER(LABEL) (TARGET_ALIGN_LABELS ? 3 : 0)
369
 
370
/* Small Data Area Support.  */
371
/* Maximum size of variables that go in .sdata/.sbss.
372
   The -msdata=foo switch also controls how small variables are handled.  */
373
#ifndef SDATA_DEFAULT_SIZE
374
#define SDATA_DEFAULT_SIZE 8
375
#endif
376
 
377
 
378
/* Storage Layout */
379
 
380
/* Define this macro to have the value 1 if the most significant bit in a byte
381
   has the lowest number; otherwise define it to have the value zero.  This
382
   means that bit-field instructions count from the most significant bit.  If
383
   the machine has no bit-field instructions, then this must still be defined,
384
   but it doesn't matter which value it is defined to.  This macro need not be
385
   a constant.
386
 
387
   This macro does not affect the way structure fields are packed into bytes or
388
   words; that is controlled by `BYTES_BIG_ENDIAN'.  */
389
#define BITS_BIG_ENDIAN 1
390
 
391
/* Define this macro to have the value 1 if the most significant byte in a word
392
   has the lowest number.  This macro need not be a constant.  */
393
#define BYTES_BIG_ENDIAN 1
394
 
395
/* Define this macro to have the value 1 if, in a multiword object, the most
396
   significant word has the lowest number.  This applies to both memory
397
   locations and registers; GCC fundamentally assumes that the order of
398
   words in memory is the same as the order in registers.  This macro need not
399
   be a constant.  */
400
#define WORDS_BIG_ENDIAN 1
401
 
402
/* Number of storage units in a word; normally 4.  */
403
#define UNITS_PER_WORD 4
404
 
405
/* A macro to update MODE and UNSIGNEDP when an object whose type is TYPE and
406
   which has the specified mode and signedness is to be stored in a register.
407
   This macro is only called when TYPE is a scalar type.
408
 
409
   On most RISC machines, which only have operations that operate on a full
410
   register, define this macro to set M to `word_mode' if M is an integer mode
411
   narrower than `BITS_PER_WORD'.  In most cases, only integer modes should be
412
   widened because wider-precision floating-point operations are usually more
413
   expensive than their narrower counterparts.
414
 
415
   For most machines, the macro definition does not change UNSIGNEDP.  However,
416
   some machines, have instructions that preferentially handle either signed or
417
   unsigned quantities of certain modes.  For example, on the DEC Alpha, 32-bit
418
   loads from memory and 32-bit add instructions sign-extend the result to 64
419
   bits.  On such machines, set UNSIGNEDP according to which kind of extension
420
   is more efficient.
421
 
422
   Do not define this macro if it would never modify MODE.  */
423
#define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE)     \
424
  do                                            \
425
    {                                           \
426
      if (GET_MODE_CLASS (MODE) == MODE_INT     \
427
          && GET_MODE_SIZE (MODE) < 4)          \
428
        (MODE) = SImode;                        \
429
    }                                           \
430
  while (0)
431
 
432
/* Normal alignment required for function parameters on the stack, in bits.
433
   All stack parameters receive at least this much alignment regardless of data
434
   type.  On most machines, this is the same as the size of an integer.  */
435
#define PARM_BOUNDARY 32
436
 
437
/* Define this macro if you wish to preserve a certain alignment for the stack
438
   pointer.  The definition is a C expression for the desired alignment
439
   (measured in bits).
440
 
441
   If `PUSH_ROUNDING' is not defined, the stack will always be aligned to the
442
   specified boundary.  If `PUSH_ROUNDING' is defined and specifies a less
443
   strict alignment than `STACK_BOUNDARY', the stack may be momentarily
444
   unaligned while pushing arguments.  */
445
#define STACK_BOUNDARY 64
446
 
447
/* Alignment required for a function entry point, in bits.  */
448
#define FUNCTION_BOUNDARY 128
449
 
450
/* Biggest alignment that any data type can require on this machine,
451
   in bits.  */
452
#define BIGGEST_ALIGNMENT 64
453
 
454
/* @@@ A hack, needed because libobjc wants to use ADJUST_FIELD_ALIGN for
455
   some reason.  */
456
#ifdef IN_TARGET_LIBS
457
#define BIGGEST_FIELD_ALIGNMENT 64
458
#else
459
/* An expression for the alignment of a structure field FIELD if the
460
   alignment computed in the usual way is COMPUTED.  GCC uses this
461
   value instead of the value in `BIGGEST_ALIGNMENT' or
462
   `BIGGEST_FIELD_ALIGNMENT', if defined, for structure fields only.  */
463
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED)                             \
464
  frv_adjust_field_align (FIELD, COMPUTED)
465
#endif
466
 
467
/* If defined, a C expression to compute the alignment for a static variable.
468
   TYPE is the data type, and ALIGN is the alignment that the object
469
   would ordinarily have.  The value of this macro is used instead of that
470
   alignment to align the object.
471
 
472
   If this macro is not defined, then ALIGN is used.
473
 
474
   One use of this macro is to increase alignment of medium-size data to make
475
   it all fit in fewer cache lines.  Another is to cause character arrays to be
476
   word-aligned so that `strcpy' calls that copy constants to character arrays
477
   can be done inline.  */
478
#define DATA_ALIGNMENT(TYPE, ALIGN)             \
479
  (TREE_CODE (TYPE) == ARRAY_TYPE               \
480
   && TYPE_MODE (TREE_TYPE (TYPE)) == QImode    \
481
   && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
482
 
483
/* If defined, a C expression to compute the alignment given to a constant that
484
   is being placed in memory.  CONSTANT is the constant and ALIGN is the
485
   alignment that the object would ordinarily have.  The value of this macro is
486
   used instead of that alignment to align the object.
487
 
488
   If this macro is not defined, then ALIGN is used.
489
 
490
   The typical use of this macro is to increase alignment for string constants
491
   to be word aligned so that `strcpy' calls that copy constants can be done
492
   inline.  */
493
#define CONSTANT_ALIGNMENT(EXP, ALIGN)  \
494
  (TREE_CODE (EXP) == STRING_CST        \
495
   && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
496
 
497
/* Define this macro to be the value 1 if instructions will fail to work if
498
   given data not on the nominal alignment.  If instructions will merely go
499
   slower in that case, define this macro as 0.  */
500
#define STRICT_ALIGNMENT 1
501
 
502
/* Define this if you wish to imitate the way many other C compilers handle
503
   alignment of bitfields and the structures that contain them.
504
 
505
   The behavior is that the type written for a bit-field (`int', `short', or
506
   other integer type) imposes an alignment for the entire structure, as if the
507
   structure really did contain an ordinary field of that type.  In addition,
508
   the bit-field is placed within the structure so that it would fit within such
509
   a field, not crossing a boundary for it.
510
 
511
   Thus, on most machines, a bit-field whose type is written as `int' would not
512
   cross a four-byte boundary, and would force four-byte alignment for the
513
   whole structure.  (The alignment used may not be four bytes; it is
514
   controlled by the other alignment parameters.)
515
 
516
   If the macro is defined, its definition should be a C expression; a nonzero
517
   value for the expression enables this behavior.
518
 
519
   Note that if this macro is not defined, or its value is zero, some bitfields
520
   may cross more than one alignment boundary.  The compiler can support such
521
   references if there are `insv', `extv', and `extzv' insns that can directly
522
   reference memory.
523
 
524
   The other known way of making bitfields work is to define
525
   `STRUCTURE_SIZE_BOUNDARY' as large as `BIGGEST_ALIGNMENT'.  Then every
526
   structure can be accessed with fullwords.
527
 
528
   Unless the machine has bit-field instructions or you define
529
   `STRUCTURE_SIZE_BOUNDARY' that way, you must define
530
   `PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value.
531
 
532
   If your aim is to make GCC use the same conventions for laying out
533
   bitfields as are used by another compiler, here is how to investigate what
534
   the other compiler does.  Compile and run this program:
535
 
536
        struct foo1
537
        {
538
          char x;
539
          char :0;
540
          char y;
541
        };
542
 
543
        struct foo2
544
        {
545
          char x;
546
          int :0;
547
          char y;
548
        };
549
 
550
        main ()
551
        {
552
          printf ("Size of foo1 is %d\n",
553
                  sizeof (struct foo1));
554
          printf ("Size of foo2 is %d\n",
555
                  sizeof (struct foo2));
556
          exit (0);
557
        }
558
 
559
   If this prints 2 and 5, then the compiler's behavior is what you would get
560
   from `PCC_BITFIELD_TYPE_MATTERS'.
561
 
562
   Defined in svr4.h.  */
563
#define PCC_BITFIELD_TYPE_MATTERS 1
564
 
565
 
566
/* Layout of Source Language Data Types.  */
567
 
568
#define CHAR_TYPE_SIZE         8
569
#define SHORT_TYPE_SIZE       16
570
#define INT_TYPE_SIZE         32
571
#define LONG_TYPE_SIZE        32
572
#define LONG_LONG_TYPE_SIZE   64
573
#define FLOAT_TYPE_SIZE       32
574
#define DOUBLE_TYPE_SIZE      64
575
#define LONG_DOUBLE_TYPE_SIZE 64
576
 
577
/* An expression whose value is 1 or 0, according to whether the type `char'
578
   should be signed or unsigned by default.  The user can always override this
579
   default with the options `-fsigned-char' and `-funsigned-char'.  */
580
#define DEFAULT_SIGNED_CHAR 1
581
 
582
 
583
/* General purpose registers.  */
584
#define GPR_FIRST       0                       /* First gpr */
585
#define GPR_LAST        (GPR_FIRST + 63)        /* Last gpr */
586
#define GPR_R0          GPR_FIRST               /* R0, constant 0 */
587
#define GPR_FP          (GPR_FIRST + 2)         /* Frame pointer */
588
#define GPR_SP          (GPR_FIRST + 1)         /* Stack pointer */
589
                                                /* small data register */
590
#define SDA_BASE_REG    ((unsigned)(TARGET_FDPIC ? -1 : flag_pic ? PIC_REGNO : (GPR_FIRST + 16)))
591
#define PIC_REGNO       (GPR_FIRST + (TARGET_FDPIC?15:17))        /* PIC register.  */
592
#define FDPIC_FPTR_REGNO  (GPR_FIRST + 14)        /* uClinux PIC function pointer register.  */
593
#define FDPIC_REGNO   (GPR_FIRST + 15)        /* uClinux PIC register.  */
594
 
595
#define OUR_FDPIC_REG   get_hard_reg_initial_val (SImode, FDPIC_REGNO)
596
 
597
#define FPR_FIRST       64                      /* First FP reg */
598
#define FPR_LAST        127                     /* Last  FP reg */
599
 
600
#define GPR_TEMP_NUM    frv_condexec_temps      /* # gprs to reserve for temps */
601
 
602
/* We reserve the last CR and CCR in each category to be used as a reload
603
   register to reload the CR/CCR registers.  This is a kludge.  */
604
#define CC_FIRST        128                     /* First ICC/FCC reg */
605
#define CC_LAST         135                     /* Last  ICC/FCC reg */
606
#define ICC_FIRST       (CC_FIRST + 4)          /* First ICC reg */
607
#define ICC_LAST        (CC_FIRST + 7)          /* Last  ICC reg */
608
#define ICC_TEMP        (CC_FIRST + 7)          /* Temporary ICC reg */
609
#define FCC_FIRST       (CC_FIRST)              /* First FCC reg */
610
#define FCC_LAST        (CC_FIRST + 3)          /* Last  FCC reg */
611
 
612
/* Amount to shift a value to locate a ICC or FCC register in the CCR
613
   register and shift it to the bottom 4 bits.  */
614
#define CC_SHIFT_RIGHT(REGNO) (((REGNO) - CC_FIRST) << 2)
615
 
616
/* Mask to isolate a single ICC/FCC value.  */
617
#define CC_MASK         0xf
618
 
619
/* Masks to isolate the various bits in an ICC field.  */
620
#define ICC_MASK_N      0x8     /* negative */
621
#define ICC_MASK_Z      0x4     /* zero */
622
#define ICC_MASK_V      0x2     /* overflow */
623
#define ICC_MASK_C      0x1     /* carry */
624
 
625
/* Mask to isolate the N/Z flags in an ICC.  */
626
#define ICC_MASK_NZ (ICC_MASK_N | ICC_MASK_Z)
627
 
628
/* Mask to isolate the Z/C flags in an ICC.  */
629
#define ICC_MASK_ZC (ICC_MASK_Z | ICC_MASK_C)
630
 
631
/* Masks to isolate the various bits in a FCC field.  */
632
#define FCC_MASK_E      0x8     /* equal */
633
#define FCC_MASK_L      0x4     /* less than */
634
#define FCC_MASK_G      0x2     /* greater than */
635
#define FCC_MASK_U      0x1     /* unordered */
636
 
637
/* For CCR registers, the machine wants CR4..CR7 to be used for integer
638
   code and CR0..CR3 to be used for floating point.  */
639
#define CR_FIRST        136                     /* First CCR */
640
#define CR_LAST         143                     /* Last  CCR */
641
#define CR_NUM          (CR_LAST-CR_FIRST+1)    /* # of CCRs (8) */
642
#define ICR_FIRST       (CR_FIRST + 4)          /* First integer CCR */
643
#define ICR_LAST        (CR_FIRST + 7)          /* Last  integer CCR */
644
#define ICR_TEMP        ICR_LAST                /* Temp  integer CCR */
645
#define FCR_FIRST       (CR_FIRST + 0)          /* First float CCR */
646
#define FCR_LAST        (CR_FIRST + 3)          /* Last  float CCR */
647
 
648
/* Amount to shift a value to locate a CR register in the CCCR special purpose
649
   register and shift it to the bottom 2 bits.  */
650
#define CR_SHIFT_RIGHT(REGNO) (((REGNO) - CR_FIRST) << 1)
651
 
652
/* Mask to isolate a single CR value.  */
653
#define CR_MASK         0x3
654
 
655
#define ACC_FIRST       144                     /* First acc register */
656
#define ACC_LAST        155                     /* Last  acc register */
657
 
658
#define ACCG_FIRST      156                     /* First accg register */
659
#define ACCG_LAST       167                     /* Last  accg register */
660
 
661
#define AP_FIRST        168                     /* fake argument pointer */
662
 
663
#define SPR_FIRST       169
664
#define SPR_LAST        172
665
#define LR_REGNO        (SPR_FIRST)
666
#define LCR_REGNO       (SPR_FIRST + 1)
667
#define IACC_FIRST      (SPR_FIRST + 2)
668
#define IACC_LAST       (SPR_FIRST + 3)
669
 
670
#define GPR_P(R)        IN_RANGE_P (R, GPR_FIRST, GPR_LAST)
671
#define GPR_OR_AP_P(R)  (GPR_P (R) || (R) == ARG_POINTER_REGNUM)
672
#define FPR_P(R)        IN_RANGE_P (R, FPR_FIRST, FPR_LAST)
673
#define CC_P(R)         IN_RANGE_P (R, CC_FIRST, CC_LAST)
674
#define ICC_P(R)        IN_RANGE_P (R, ICC_FIRST, ICC_LAST)
675
#define FCC_P(R)        IN_RANGE_P (R, FCC_FIRST, FCC_LAST)
676
#define CR_P(R)         IN_RANGE_P (R, CR_FIRST, CR_LAST)
677
#define ICR_P(R)        IN_RANGE_P (R, ICR_FIRST, ICR_LAST)
678
#define FCR_P(R)        IN_RANGE_P (R, FCR_FIRST, FCR_LAST)
679
#define ACC_P(R)        IN_RANGE_P (R, ACC_FIRST, ACC_LAST)
680
#define ACCG_P(R)       IN_RANGE_P (R, ACCG_FIRST, ACCG_LAST)
681
#define SPR_P(R)        IN_RANGE_P (R, SPR_FIRST, SPR_LAST)
682
 
683
#define GPR_OR_PSEUDO_P(R)      (GPR_P (R) || (R) >= FIRST_PSEUDO_REGISTER)
684
#define FPR_OR_PSEUDO_P(R)      (FPR_P (R) || (R) >= FIRST_PSEUDO_REGISTER)
685
#define GPR_AP_OR_PSEUDO_P(R)   (GPR_OR_AP_P (R) || (R) >= FIRST_PSEUDO_REGISTER)
686
#define CC_OR_PSEUDO_P(R)       (CC_P (R) || (R) >= FIRST_PSEUDO_REGISTER)
687
#define ICC_OR_PSEUDO_P(R)      (ICC_P (R) || (R) >= FIRST_PSEUDO_REGISTER)
688
#define FCC_OR_PSEUDO_P(R)      (FCC_P (R) || (R) >= FIRST_PSEUDO_REGISTER)
689
#define CR_OR_PSEUDO_P(R)       (CR_P (R) || (R) >= FIRST_PSEUDO_REGISTER)
690
#define ICR_OR_PSEUDO_P(R)      (ICR_P (R) || (R) >= FIRST_PSEUDO_REGISTER)
691
#define FCR_OR_PSEUDO_P(R)      (FCR_P (R) || (R) >= FIRST_PSEUDO_REGISTER)
692
#define ACC_OR_PSEUDO_P(R)      (ACC_P (R) || (R) >= FIRST_PSEUDO_REGISTER)
693
#define ACCG_OR_PSEUDO_P(R)     (ACCG_P (R) || (R) >= FIRST_PSEUDO_REGISTER)
694
 
695
#define MAX_STACK_IMMEDIATE_OFFSET 2047
696
 
697
 
698
/* Register Basics.  */
699
 
700
/* Number of hardware registers known to the compiler.  They receive numbers 0
701
   through `FIRST_PSEUDO_REGISTER-1'; thus, the first pseudo register's number
702
   really is assigned the number `FIRST_PSEUDO_REGISTER'.  */
703
#define FIRST_PSEUDO_REGISTER (SPR_LAST + 1)
704
 
705
/* The first/last register that can contain the arguments to a function.  */
706
#define FIRST_ARG_REGNUM        (GPR_FIRST + 8)
707
#define LAST_ARG_REGNUM         (FIRST_ARG_REGNUM + FRV_NUM_ARG_REGS - 1)
708
 
709
/* Registers used by the exception handling functions.  These should be
710
   registers that are not otherwise used by the calling sequence.  */
711
#define FIRST_EH_REGNUM         14
712
#define LAST_EH_REGNUM          15
713
 
714
/* Scratch registers used in the prologue, epilogue and thunks.
715
   OFFSET_REGNO is for loading constant addends that are too big for a
716
   single instruction.  TEMP_REGNO is used for transferring SPRs to and from
717
   the stack, and various other activities.  */
718
#define OFFSET_REGNO            4
719
#define TEMP_REGNO              5
720
 
721
/* Registers used in the prologue.  OLD_SP_REGNO is the old stack pointer,
722
   which is sometimes used to set up the frame pointer.  */
723
#define OLD_SP_REGNO            6
724
 
725
/* Registers used in the epilogue.  STACKADJ_REGNO stores the exception
726
   handler's stack adjustment.  */
727
#define STACKADJ_REGNO          6
728
 
729
/* Registers used in thunks.  JMP_REGNO is used for loading the target
730
   address.  */
731
#define JUMP_REGNO              6
732
 
733
#define EH_RETURN_DATA_REGNO(N) ((N) <= (LAST_EH_REGNUM - FIRST_EH_REGNUM)? \
734
                                 (N) + FIRST_EH_REGNUM : INVALID_REGNUM)
735
#define EH_RETURN_STACKADJ_RTX  gen_rtx_REG (SImode, STACKADJ_REGNO)
736
#define EH_RETURN_HANDLER_RTX   RETURN_ADDR_RTX (0, frame_pointer_rtx)
737
 
738
#define EPILOGUE_USES(REGNO) ((REGNO) == LR_REGNO)
739
 
740
/* An initializer that says which registers are used for fixed purposes all
741
   throughout the compiled code and are therefore not available for general
742
   allocation.  These would include the stack pointer, the frame pointer
743
   (except on machines where that can be used as a general register when no
744
   frame pointer is needed), the program counter on machines where that is
745
   considered one of the addressable registers, and any other numbered register
746
   with a standard use.
747
 
748
   This information is expressed as a sequence of numbers, separated by commas
749
   and surrounded by braces.  The Nth number is 1 if register N is fixed, 0
750
   otherwise.
751
 
752
   The table initialized from this macro, and the table initialized by the
753
   following one, may be overridden at run time either automatically, by the
754
   actions of the macro `CONDITIONAL_REGISTER_USAGE', or by the user with the
755
   command options `-ffixed-REG', `-fcall-used-REG' and `-fcall-saved-REG'.  */
756
 
757
/* gr0  -- Hard Zero
758
   gr1  -- Stack Pointer
759
   gr2  -- Frame Pointer
760
   gr3  -- Hidden Parameter
761
   gr16 -- Small Data reserved
762
   gr17 -- Pic reserved
763
   gr28 -- OS reserved
764
   gr29 -- OS reserved
765
   gr30 -- OS reserved
766
   gr31 -- OS reserved
767
   cr3  -- reserved to reload FCC registers.
768
   cr7  -- reserved to reload ICC registers.  */
769
#define FIXED_REGISTERS                                                 \
770
{       /* Integer Registers */                                         \
771
        1, 1, 1, 1, 0, 0, 0, 0,         /* 000-007, gr0  - gr7  */      \
772
        0, 0, 0, 0, 0, 0, 0, 0,         /* 008-015, gr8  - gr15 */      \
773
        1, 1, 0, 0, 0, 0, 0, 0,         /* 016-023, gr16 - gr23 */      \
774
        0, 0, 0, 0, 1, 1, 1, 1,         /* 024-031, gr24 - gr31 */      \
775
        0, 0, 0, 0, 0, 0, 0, 0,         /* 032-039, gr32 - gr39 */      \
776
        0, 0, 0, 0, 0, 0, 0, 0,         /* 040-040, gr48 - gr47 */      \
777
        0, 0, 0, 0, 0, 0, 0, 0,         /* 048-055, gr48 - gr55 */      \
778
        0, 0, 0, 0, 0, 0, 0, 0,         /* 056-063, gr56 - gr63 */      \
779
        /* Float Registers */                                           \
780
        0, 0, 0, 0, 0, 0, 0, 0,         /* 064-071, fr0  - fr7  */      \
781
        0, 0, 0, 0, 0, 0, 0, 0,         /* 072-079, fr8  - fr15 */      \
782
        0, 0, 0, 0, 0, 0, 0, 0,         /* 080-087, fr16 - fr23 */      \
783
        0, 0, 0, 0, 0, 0, 0, 0,         /* 088-095, fr24 - fr31 */      \
784
        0, 0, 0, 0, 0, 0, 0, 0,         /* 096-103, fr32 - fr39 */      \
785
        0, 0, 0, 0, 0, 0, 0, 0,         /* 104-111, fr48 - fr47 */      \
786
        0, 0, 0, 0, 0, 0, 0, 0,         /* 112-119, fr48 - fr55 */      \
787
        0, 0, 0, 0, 0, 0, 0, 0,         /* 120-127, fr56 - fr63 */      \
788
        /* Condition Code Registers */                                  \
789
        0, 0, 0, 0,                     /* 128-131, fcc0 - fcc3  */     \
790
        0, 0, 0, 1,                     /* 132-135, icc0 - icc3 */      \
791
        /* Conditional execution Registers (CCR) */                     \
792
        0, 0, 0, 0, 0, 0, 0, 1,         /* 136-143, cr0 - cr7 */        \
793
        /* Accumulators */                                              \
794
        1, 1, 1, 1, 1, 1, 1, 1,         /* 144-151, acc0  - acc7 */     \
795
        1, 1, 1, 1,                     /* 152-155, acc8  - acc11 */    \
796
        1, 1, 1, 1, 1, 1, 1, 1,         /* 156-163, accg0 - accg7 */    \
797
        1, 1, 1, 1,                     /* 164-167, accg8 - accg11 */   \
798
        /* Other registers */                                           \
799
        1,                              /* 168, AP   - fake arg ptr */  \
800
        0,                              /* 169, LR   - Link register*/  \
801
        0,                              /* 170, LCR  - Loop count reg*/ \
802
        1, 1                            /* 171-172, iacc0 */            \
803
}
804
 
805
/* Like `FIXED_REGISTERS' but has 1 for each register that is clobbered (in
806
   general) by function calls as well as for fixed registers.  This macro
807
   therefore identifies the registers that are not available for general
808
   allocation of values that must live across function calls.
809
 
810
   If a register has 0 in `CALL_USED_REGISTERS', the compiler automatically
811
   saves it on function entry and restores it on function exit, if the register
812
   is used within the function.  */
813
#define CALL_USED_REGISTERS                                             \
814
{       /* Integer Registers */                                         \
815
        1, 1, 1, 1, 1, 1, 1, 1,         /* 000-007, gr0  - gr7  */      \
816
        1, 1, 1, 1, 1, 1, 1, 1,         /* 008-015, gr8  - gr15 */      \
817
        1, 1, 0, 0, 0, 0, 0, 0,         /* 016-023, gr16 - gr23 */      \
818
        0, 0, 0, 0, 1, 1, 1, 1,         /* 024-031, gr24 - gr31 */      \
819
        1, 1, 1, 1, 1, 1, 1, 1,         /* 032-039, gr32 - gr39 */      \
820
        1, 1, 1, 1, 1, 1, 1, 1,         /* 040-040, gr48 - gr47 */      \
821
        0, 0, 0, 0, 0, 0, 0, 0,         /* 048-055, gr48 - gr55 */      \
822
        0, 0, 0, 0, 0, 0, 0, 0,         /* 056-063, gr56 - gr63 */      \
823
        /* Float Registers */                                           \
824
        1, 1, 1, 1, 1, 1, 1, 1,         /* 064-071, fr0  - fr7  */      \
825
        1, 1, 1, 1, 1, 1, 1, 1,         /* 072-079, fr8  - fr15 */      \
826
        0, 0, 0, 0, 0, 0, 0, 0,         /* 080-087, fr16 - fr23 */      \
827
        0, 0, 0, 0, 0, 0, 0, 0,         /* 088-095, fr24 - fr31 */      \
828
        1, 1, 1, 1, 1, 1, 1, 1,         /* 096-103, fr32 - fr39 */      \
829
        1, 1, 1, 1, 1, 1, 1, 1,         /* 104-111, fr48 - fr47 */      \
830
        0, 0, 0, 0, 0, 0, 0, 0,         /* 112-119, fr48 - fr55 */      \
831
        0, 0, 0, 0, 0, 0, 0, 0,         /* 120-127, fr56 - fr63 */      \
832
        /* Condition Code Registers */                                  \
833
        1, 1, 1, 1,                     /* 128-131, fcc0 - fcc3 */      \
834
        1, 1, 1, 1,                     /* 132-135, icc0 - icc3  */     \
835
        /* Conditional execution Registers (CCR) */                     \
836
        1, 1, 1, 1, 1, 1, 1, 1,         /* 136-143, cr0 - cr7 */        \
837
        /* Accumulators */                                              \
838
        1, 1, 1, 1, 1, 1, 1, 1,         /* 144-151, acc0 - acc7 */      \
839
        1, 1, 1, 1,                     /* 152-155, acc8 - acc11 */     \
840
        1, 1, 1, 1, 1, 1, 1, 1,         /* 156-163, accg0 - accg7 */    \
841
        1, 1, 1, 1,                     /* 164-167, accg8 - accg11 */   \
842
        /* Other registers */                                           \
843
        1,                              /* 168, AP  - fake arg ptr */   \
844
        1,                              /* 169, LR  - Link register*/   \
845
        1,                              /* 170, LCR - Loop count reg */ \
846
        1, 1                            /* 171-172, iacc0 */            \
847
}
848
 
849
/* Zero or more C statements that may conditionally modify two variables
850
   `fixed_regs' and `call_used_regs' (both of type `char []') after they have
851
   been initialized from the two preceding macros.
852
 
853
   This is necessary in case the fixed or call-clobbered registers depend on
854
   target flags.
855
 
856
   You need not define this macro if it has no work to do.
857
 
858
   If the usage of an entire class of registers depends on the target flags,
859
   you may indicate this to GCC by using this macro to modify `fixed_regs' and
860
   `call_used_regs' to 1 for each of the registers in the classes which should
861
   not be used by GCC.  Also define the macro `REG_CLASS_FROM_LETTER' to return
862
   `NO_REGS' if it is called with a letter for a class that shouldn't be used.
863
 
864
   (However, if this class is not included in `GENERAL_REGS' and all of the
865
   insn patterns whose constraints permit this class are controlled by target
866
   switches, then GCC will automatically avoid using these registers when the
867
   target switches are opposed to them.)  */
868
 
869
#define CONDITIONAL_REGISTER_USAGE frv_conditional_register_usage ()
870
 
871
 
872
/* Order of allocation of registers.  */
873
 
874
/* If defined, an initializer for a vector of integers, containing the numbers
875
   of hard registers in the order in which GCC should prefer to use them
876
   (from most preferred to least).
877
 
878
   If this macro is not defined, registers are used lowest numbered first (all
879
   else being equal).
880
 
881
   One use of this macro is on machines where the highest numbered registers
882
   must always be saved and the save-multiple-registers instruction supports
883
   only sequences of consecutive registers.  On such machines, define
884
   `REG_ALLOC_ORDER' to be an initializer that lists the highest numbered
885
   allocatable register first.  */
886
 
887
/* On the FRV, allocate GR16 and GR17 after other saved registers so that we
888
   have a better chance of allocating 2 registers at a time and can use the
889
   double word load/store instructions in the prologue.  */
890
#define REG_ALLOC_ORDER                                                 \
891
{                                                                       \
892
  /* volatile registers */                                              \
893
  GPR_FIRST  +  4, GPR_FIRST  +  5, GPR_FIRST  +  6, GPR_FIRST  +  7,   \
894
  GPR_FIRST  +  8, GPR_FIRST  +  9, GPR_FIRST  + 10, GPR_FIRST  + 11,   \
895
  GPR_FIRST  + 12, GPR_FIRST  + 13, GPR_FIRST  + 14, GPR_FIRST  + 15,   \
896
  GPR_FIRST  + 32, GPR_FIRST  + 33, GPR_FIRST  + 34, GPR_FIRST  + 35,   \
897
  GPR_FIRST  + 36, GPR_FIRST  + 37, GPR_FIRST  + 38, GPR_FIRST  + 39,   \
898
  GPR_FIRST  + 40, GPR_FIRST  + 41, GPR_FIRST  + 42, GPR_FIRST  + 43,   \
899
  GPR_FIRST  + 44, GPR_FIRST  + 45, GPR_FIRST  + 46, GPR_FIRST  + 47,   \
900
                                                                        \
901
  FPR_FIRST  +  0, FPR_FIRST  +  1, FPR_FIRST  +  2, FPR_FIRST  +  3,   \
902
  FPR_FIRST  +  4, FPR_FIRST  +  5, FPR_FIRST  +  6, FPR_FIRST  +  7,   \
903
  FPR_FIRST  +  8, FPR_FIRST  +  9, FPR_FIRST  + 10, FPR_FIRST  + 11,   \
904
  FPR_FIRST  + 12, FPR_FIRST  + 13, FPR_FIRST  + 14, FPR_FIRST  + 15,   \
905
  FPR_FIRST  + 32, FPR_FIRST  + 33, FPR_FIRST  + 34, FPR_FIRST  + 35,   \
906
  FPR_FIRST  + 36, FPR_FIRST  + 37, FPR_FIRST  + 38, FPR_FIRST  + 39,   \
907
  FPR_FIRST  + 40, FPR_FIRST  + 41, FPR_FIRST  + 42, FPR_FIRST  + 43,   \
908
  FPR_FIRST  + 44, FPR_FIRST  + 45, FPR_FIRST  + 46, FPR_FIRST  + 47,   \
909
                                                                        \
910
  ICC_FIRST  +  0, ICC_FIRST  +  1, ICC_FIRST  +  2, ICC_FIRST  +  3,   \
911
  FCC_FIRST  +  0, FCC_FIRST  +  1, FCC_FIRST  +  2, FCC_FIRST  +  3,   \
912
  CR_FIRST   +  0, CR_FIRST   +  1, CR_FIRST   +  2, CR_FIRST   +  3,   \
913
  CR_FIRST   +  4, CR_FIRST   +  5, CR_FIRST   +  6, CR_FIRST   +  7,   \
914
                                                                        \
915
  /* saved registers */                                                 \
916
  GPR_FIRST  + 18, GPR_FIRST  + 19,                                     \
917
  GPR_FIRST  + 20, GPR_FIRST  + 21, GPR_FIRST  + 22, GPR_FIRST  + 23,   \
918
  GPR_FIRST  + 24, GPR_FIRST  + 25, GPR_FIRST  + 26, GPR_FIRST  + 27,   \
919
  GPR_FIRST  + 48, GPR_FIRST  + 49, GPR_FIRST  + 50, GPR_FIRST  + 51,   \
920
  GPR_FIRST  + 52, GPR_FIRST  + 53, GPR_FIRST  + 54, GPR_FIRST  + 55,   \
921
  GPR_FIRST  + 56, GPR_FIRST  + 57, GPR_FIRST  + 58, GPR_FIRST  + 59,   \
922
  GPR_FIRST  + 60, GPR_FIRST  + 61, GPR_FIRST  + 62, GPR_FIRST  + 63,   \
923
  GPR_FIRST  + 16, GPR_FIRST  + 17,                                     \
924
                                                                        \
925
  FPR_FIRST  + 16, FPR_FIRST  + 17, FPR_FIRST  + 18, FPR_FIRST  + 19,   \
926
  FPR_FIRST  + 20, FPR_FIRST  + 21, FPR_FIRST  + 22, FPR_FIRST  + 23,   \
927
  FPR_FIRST  + 24, FPR_FIRST  + 25, FPR_FIRST  + 26, FPR_FIRST  + 27,   \
928
  FPR_FIRST  + 28, FPR_FIRST  + 29, FPR_FIRST  + 30, FPR_FIRST  + 31,   \
929
  FPR_FIRST  + 48, FPR_FIRST  + 49, FPR_FIRST  + 50, FPR_FIRST  + 51,   \
930
  FPR_FIRST  + 52, FPR_FIRST  + 53, FPR_FIRST  + 54, FPR_FIRST  + 55,   \
931
  FPR_FIRST  + 56, FPR_FIRST  + 57, FPR_FIRST  + 58, FPR_FIRST  + 59,   \
932
  FPR_FIRST  + 60, FPR_FIRST  + 61, FPR_FIRST  + 62, FPR_FIRST  + 63,   \
933
                                                                        \
934
  /* special or fixed registers */                                      \
935
  GPR_FIRST  +  0, GPR_FIRST  +  1, GPR_FIRST  +  2, GPR_FIRST  +  3,   \
936
  GPR_FIRST  + 28, GPR_FIRST  + 29, GPR_FIRST  + 30, GPR_FIRST  + 31,   \
937
  ACC_FIRST  +  0, ACC_FIRST  +  1, ACC_FIRST  +  2, ACC_FIRST  +  3,   \
938
  ACC_FIRST  +  4, ACC_FIRST  +  5, ACC_FIRST  +  6, ACC_FIRST  +  7,   \
939
  ACC_FIRST  +  8, ACC_FIRST  +  9, ACC_FIRST  + 10, ACC_FIRST  + 11,   \
940
  ACCG_FIRST +  0, ACCG_FIRST +  1, ACCG_FIRST +  2, ACCG_FIRST +  3,   \
941
  ACCG_FIRST +  4, ACCG_FIRST +  5, ACCG_FIRST +  6, ACCG_FIRST +  7,   \
942
  ACCG_FIRST +  8, ACCG_FIRST +  9, ACCG_FIRST + 10, ACCG_FIRST + 11,   \
943
  AP_FIRST,        LR_REGNO,       LCR_REGNO,                           \
944
  IACC_FIRST +  0, IACC_FIRST +  1                                      \
945
}
946
 
947
 
948
/* How Values Fit in Registers.  */
949
 
950
/* A C expression for the number of consecutive hard registers, starting at
951
   register number REGNO, required to hold a value of mode MODE.
952
 
953
   On a machine where all registers are exactly one word, a suitable definition
954
   of this macro is
955
 
956
        #define HARD_REGNO_NREGS(REGNO, MODE)            \
957
           ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1)  \
958
            / UNITS_PER_WORD))  */
959
 
960
/* On the FRV, make the CC modes take 3 words in the integer registers, so that
961
   we can build the appropriate instructions to properly reload the values.  */
962
#define HARD_REGNO_NREGS(REGNO, MODE) frv_hard_regno_nregs (REGNO, MODE)
963
 
964
/* A C expression that is nonzero if it is permissible to store a value of mode
965
   MODE in hard register number REGNO (or in several registers starting with
966
   that one).  For a machine where all registers are equivalent, a suitable
967
   definition is
968
 
969
        #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
970
 
971
   It is not necessary for this macro to check for the numbers of fixed
972
   registers, because the allocation mechanism considers them to be always
973
   occupied.
974
 
975
   On some machines, double-precision values must be kept in even/odd register
976
   pairs.  The way to implement that is to define this macro to reject odd
977
   register numbers for such modes.
978
 
979
   The minimum requirement for a mode to be OK in a register is that the
980
   `movMODE' instruction pattern support moves between the register and any
981
   other hard register for which the mode is OK; and that moving a value into
982
   the register and back out not alter it.
983
 
984
   Since the same instruction used to move `SImode' will work for all narrower
985
   integer modes, it is not necessary on any machine for `HARD_REGNO_MODE_OK'
986
   to distinguish between these modes, provided you define patterns `movhi',
987
   etc., to take advantage of this.  This is useful because of the interaction
988
   between `HARD_REGNO_MODE_OK' and `MODES_TIEABLE_P'; it is very desirable for
989
   all integer modes to be tieable.
990
 
991
   Many machines have special registers for floating point arithmetic.  Often
992
   people assume that floating point machine modes are allowed only in floating
993
   point registers.  This is not true.  Any registers that can hold integers
994
   can safely *hold* a floating point machine mode, whether or not floating
995
   arithmetic can be done on it in those registers.  Integer move instructions
996
   can be used to move the values.
997
 
998
   On some machines, though, the converse is true: fixed-point machine modes
999
   may not go in floating registers.  This is true if the floating registers
1000
   normalize any value stored in them, because storing a non-floating value
1001
   there would garble it.  In this case, `HARD_REGNO_MODE_OK' should reject
1002
   fixed-point machine modes in floating registers.  But if the floating
1003
   registers do not automatically normalize, if you can store any bit pattern
1004
   in one and retrieve it unchanged without a trap, then any machine mode may
1005
   go in a floating register, so you can define this macro to say so.
1006
 
1007
   The primary significance of special floating registers is rather that they
1008
   are the registers acceptable in floating point arithmetic instructions.
1009
   However, this is of no concern to `HARD_REGNO_MODE_OK'.  You handle it by
1010
   writing the proper constraints for those instructions.
1011
 
1012
   On some machines, the floating registers are especially slow to access, so
1013
   that it is better to store a value in a stack frame than in such a register
1014
   if floating point arithmetic is not being done.  As long as the floating
1015
   registers are not in class `GENERAL_REGS', they will not be used unless some
1016
   pattern's constraint asks for one.  */
1017
#define HARD_REGNO_MODE_OK(REGNO, MODE) frv_hard_regno_mode_ok (REGNO, MODE)
1018
 
1019
/* A C expression that is nonzero if it is desirable to choose register
1020
   allocation so as to avoid move instructions between a value of mode MODE1
1021
   and a value of mode MODE2.
1022
 
1023
   If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R, MODE2)' are
1024
   ever different for any R, then `MODES_TIEABLE_P (MODE1, MODE2)' must be
1025
   zero.  */
1026
#define MODES_TIEABLE_P(MODE1, MODE2) (MODE1 == MODE2)
1027
 
1028
/* Define this macro if the compiler should avoid copies to/from CCmode
1029
   registers.  You should only define this macro if support fo copying to/from
1030
   CCmode is incomplete.  */
1031
#define AVOID_CCMODE_COPIES
1032
 
1033
 
1034
/* Register Classes.  */
1035
 
1036
/* An enumeral type that must be defined with all the register class names as
1037
   enumeral values.  `NO_REGS' must be first.  `ALL_REGS' must be the last
1038
   register class, followed by one more enumeral value, `LIM_REG_CLASSES',
1039
   which is not a register class but rather tells how many classes there are.
1040
 
1041
   Each register class has a number, which is the value of casting the class
1042
   name to type `int'.  The number serves as an index in many of the tables
1043
   described below.  */
1044
enum reg_class
1045
{
1046
  NO_REGS,
1047
  ICC_REGS,
1048
  FCC_REGS,
1049
  CC_REGS,
1050
  ICR_REGS,
1051
  FCR_REGS,
1052
  CR_REGS,
1053
  LCR_REG,
1054
  LR_REG,
1055
  GR8_REGS,
1056
  GR9_REGS,
1057
  GR89_REGS,
1058
  FDPIC_REGS,
1059
  FDPIC_FPTR_REGS,
1060
  FDPIC_CALL_REGS,
1061
  SPR_REGS,
1062
  QUAD_ACC_REGS,
1063
  EVEN_ACC_REGS,
1064
  ACC_REGS,
1065
  ACCG_REGS,
1066
  QUAD_FPR_REGS,
1067
  FEVEN_REGS,
1068
  FPR_REGS,
1069
  QUAD_REGS,
1070
  EVEN_REGS,
1071
  GPR_REGS,
1072
  ALL_REGS,
1073
  LIM_REG_CLASSES
1074
};
1075
 
1076
#define GENERAL_REGS GPR_REGS
1077
 
1078
/* The number of distinct register classes, defined as follows:
1079
 
1080
        #define N_REG_CLASSES (int) LIM_REG_CLASSES  */
1081
#define N_REG_CLASSES ((int) LIM_REG_CLASSES)
1082
 
1083
/* An initializer containing the names of the register classes as C string
1084
   constants.  These names are used in writing some of the debugging dumps.  */
1085
#define REG_CLASS_NAMES {                                               \
1086
   "NO_REGS",                                                           \
1087
   "ICC_REGS",                                                          \
1088
   "FCC_REGS",                                                          \
1089
   "CC_REGS",                                                           \
1090
   "ICR_REGS",                                                          \
1091
   "FCR_REGS",                                                          \
1092
   "CR_REGS",                                                           \
1093
   "LCR_REG",                                                           \
1094
   "LR_REG",                                                            \
1095
   "GR8_REGS",                                                          \
1096
   "GR9_REGS",                                                          \
1097
   "GR89_REGS",                                                         \
1098
   "FDPIC_REGS",                                                        \
1099
   "FDPIC_FPTR_REGS",                                                   \
1100
   "FDPIC_CALL_REGS",                                                   \
1101
   "SPR_REGS",                                                          \
1102
   "QUAD_ACC_REGS",                                                     \
1103
   "EVEN_ACC_REGS",                                                     \
1104
   "ACC_REGS",                                                          \
1105
   "ACCG_REGS",                                                         \
1106
   "QUAD_FPR_REGS",                                                     \
1107
   "FEVEN_REGS",                                                        \
1108
   "FPR_REGS",                                                          \
1109
   "QUAD_REGS",                                                         \
1110
   "EVEN_REGS",                                                         \
1111
   "GPR_REGS",                                                          \
1112
   "ALL_REGS"                                                           \
1113
}
1114
 
1115
/* An initializer containing the contents of the register classes, as integers
1116
   which are bit masks.  The Nth integer specifies the contents of class N.
1117
   The way the integer MASK is interpreted is that register R is in the class
1118
   if `MASK & (1 << R)' is 1.
1119
 
1120
   When the machine has more than 32 registers, an integer does not suffice.
1121
   Then the integers are replaced by sub-initializers, braced groupings
1122
   containing several integers.  Each sub-initializer must be suitable as an
1123
   initializer for the type `HARD_REG_SET' which is defined in
1124
   `hard-reg-set.h'.  */
1125
#define REG_CLASS_CONTENTS                                                     \
1126
{  /* gr0-gr31 gr32-gr63  fr0-fr31   fr32-fr-63 cc/ccr/acc ap/spr */           \
1127
  { 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x0}, /* NO_REGS  */\
1128
  { 0x00000000,0x00000000,0x00000000,0x00000000,0x000000f0,0x0}, /* ICC_REGS */\
1129
  { 0x00000000,0x00000000,0x00000000,0x00000000,0x0000000f,0x0}, /* FCC_REGS */\
1130
  { 0x00000000,0x00000000,0x00000000,0x00000000,0x000000ff,0x0}, /* CC_REGS  */\
1131
  { 0x00000000,0x00000000,0x00000000,0x00000000,0x0000f000,0x0}, /* ICR_REGS */\
1132
  { 0x00000000,0x00000000,0x00000000,0x00000000,0x00000f00,0x0}, /* FCR_REGS */\
1133
  { 0x00000000,0x00000000,0x00000000,0x00000000,0x0000ff00,0x0}, /* CR_REGS  */\
1134
  { 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x400}, /* LCR_REGS */\
1135
  { 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x200}, /* LR_REGS  */\
1136
  { 0x00000100,0x00000000,0x00000000,0x00000000,0x00000000,0x0}, /* GR8_REGS */\
1137
  { 0x00000200,0x00000000,0x00000000,0x00000000,0x00000000,0x0}, /* GR9_REGS */\
1138
  { 0x00000300,0x00000000,0x00000000,0x00000000,0x00000000,0x0}, /* GR89_REGS */\
1139
  { 0x00008000,0x00000000,0x00000000,0x00000000,0x00000000,0x0}, /* FDPIC_REGS */\
1140
  { 0x00004000,0x00000000,0x00000000,0x00000000,0x00000000,0x0}, /* FDPIC_FPTR_REGS */\
1141
  { 0x0000c000,0x00000000,0x00000000,0x00000000,0x00000000,0x0}, /* FDPIC_CALL_REGS */\
1142
  { 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x1e00}, /* SPR_REGS */\
1143
  { 0x00000000,0x00000000,0x00000000,0x00000000,0x0fff0000,0x0}, /* QUAD_ACC */\
1144
  { 0x00000000,0x00000000,0x00000000,0x00000000,0x0fff0000,0x0}, /* EVEN_ACC */\
1145
  { 0x00000000,0x00000000,0x00000000,0x00000000,0x0fff0000,0x0}, /* ACC_REGS */\
1146
  { 0x00000000,0x00000000,0x00000000,0x00000000,0xf0000000,0xff}, /* ACCG_REGS*/\
1147
  { 0x00000000,0x00000000,0xffffffff,0xffffffff,0x00000000,0x0}, /* QUAD_FPR */\
1148
  { 0x00000000,0x00000000,0xffffffff,0xffffffff,0x00000000,0x0}, /* FEVEN_REG*/\
1149
  { 0x00000000,0x00000000,0xffffffff,0xffffffff,0x00000000,0x0}, /* FPR_REGS */\
1150
  { 0x0ffffffc,0xffffffff,0x00000000,0x00000000,0x00000000,0x0}, /* QUAD_REGS*/\
1151
  { 0xfffffffc,0xffffffff,0x00000000,0x00000000,0x00000000,0x0}, /* EVEN_REGS*/\
1152
  { 0xffffffff,0xffffffff,0x00000000,0x00000000,0x00000000,0x100}, /* GPR_REGS */\
1153
  { 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x1fff}, /* ALL_REGS */\
1154
}
1155
 
1156
/* A C expression whose value is a register class containing hard register
1157
   REGNO.  In general there is more than one such class; choose a class which
1158
   is "minimal", meaning that no smaller class also contains the register.  */
1159
 
1160
extern enum reg_class regno_reg_class[];
1161
#define REGNO_REG_CLASS(REGNO) regno_reg_class [REGNO]
1162
 
1163
/* A macro whose definition is the name of the class to which a valid base
1164
   register must belong.  A base register is one used in an address which is
1165
   the register value plus a displacement.  */
1166
#define BASE_REG_CLASS GPR_REGS
1167
 
1168
/* A macro whose definition is the name of the class to which a valid index
1169
   register must belong.  An index register is one used in an address where its
1170
   value is either multiplied by a scale factor or added to another register
1171
   (as well as added to a displacement).  */
1172
#define INDEX_REG_CLASS GPR_REGS
1173
 
1174
/* A C expression which defines the machine-dependent operand constraint
1175
   letters for register classes.  If CHAR is such a letter, the value should be
1176
   the register class corresponding to it.  Otherwise, the value should be
1177
   `NO_REGS'.  The register letter `r', corresponding to class `GENERAL_REGS',
1178
   will not be passed to this macro; you do not need to handle it.
1179
 
1180
   The following letters are unavailable, due to being used as
1181
   constraints:
1182
        '0'..'9'
1183
        '<', '>'
1184
        'E', 'F', 'G', 'H'
1185
        'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P'
1186
        'Q', 'R', 'S', 'T', 'U'
1187
        'V', 'X'
1188
        'g', 'i', 'm', 'n', 'o', 'p', 'r', 's' */
1189
 
1190
extern enum reg_class reg_class_from_letter[];
1191
#define REG_CLASS_FROM_LETTER(CHAR) reg_class_from_letter [(unsigned char)(CHAR)]
1192
 
1193
/* A C expression which is nonzero if register number NUM is suitable for use
1194
   as a base register in operand addresses.  It may be either a suitable hard
1195
   register or a pseudo register that has been allocated such a hard register.  */
1196
#define REGNO_OK_FOR_BASE_P(NUM)           \
1197
  ((NUM) < FIRST_PSEUDO_REGISTER           \
1198
   ? GPR_P (NUM)                           \
1199
   : (reg_renumber [NUM] >= 0 && GPR_P (reg_renumber [NUM])))
1200
 
1201
/* A C expression which is nonzero if register number NUM is suitable for use
1202
   as an index register in operand addresses.  It may be either a suitable hard
1203
   register or a pseudo register that has been allocated such a hard register.
1204
 
1205
   The difference between an index register and a base register is that the
1206
   index register may be scaled.  If an address involves the sum of two
1207
   registers, neither one of them scaled, then either one may be labeled the
1208
   "base" and the other the "index"; but whichever labeling is used must fit
1209
   the machine's constraints of which registers may serve in each capacity.
1210
   The compiler will try both labelings, looking for one that is valid, and
1211
   will reload one or both registers only if neither labeling works.  */
1212
#define REGNO_OK_FOR_INDEX_P(NUM)                                       \
1213
  ((NUM) < FIRST_PSEUDO_REGISTER                                        \
1214
   ? GPR_P (NUM)                                                        \
1215
   : (reg_renumber [NUM] >= 0 && GPR_P (reg_renumber [NUM])))
1216
 
1217
/* A C expression that places additional restrictions on the register class to
1218
   use when it is necessary to copy value X into a register in class CLASS.
1219
   The value is a register class; perhaps CLASS, or perhaps another, smaller
1220
   class.  On many machines, the following definition is safe:
1221
 
1222
        #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
1223
 
1224
   Sometimes returning a more restrictive class makes better code.  For
1225
   example, on the 68000, when X is an integer constant that is in range for a
1226
   `moveq' instruction, the value of this macro is always `DATA_REGS' as long
1227
   as CLASS includes the data registers.  Requiring a data register guarantees
1228
   that a `moveq' will be used.
1229
 
1230
   If X is a `const_double', by returning `NO_REGS' you can force X into a
1231
   memory constant.  This is useful on certain machines where immediate
1232
   floating values cannot be loaded into certain kinds of registers.
1233
 
1234
   This declaration must be present.  */
1235
#define PREFERRED_RELOAD_CLASS(X, CLASS) CLASS
1236
 
1237
#define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, X) \
1238
  frv_secondary_reload_class (CLASS, MODE, X, TRUE)
1239
 
1240
#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, X) \
1241
  frv_secondary_reload_class (CLASS, MODE, X, FALSE)
1242
 
1243
/* A C expression whose value is nonzero if pseudos that have been assigned to
1244
   registers of class CLASS would likely be spilled because registers of CLASS
1245
   are needed for spill registers.
1246
 
1247
   The default value of this macro returns 1 if CLASS has exactly one register
1248
   and zero otherwise.  On most machines, this default should be used.  Only
1249
   define this macro to some other expression if pseudo allocated by
1250
   `local-alloc.c' end up in memory because their hard registers were needed
1251
   for spill registers.  If this macro returns nonzero for those classes, those
1252
   pseudos will only be allocated by `global.c', which knows how to reallocate
1253
   the pseudo to another register.  If there would not be another register
1254
   available for reallocation, you should not change the definition of this
1255
   macro since the only effect of such a definition would be to slow down
1256
   register allocation.  */
1257
#define CLASS_LIKELY_SPILLED_P(CLASS) frv_class_likely_spilled_p (CLASS)
1258
 
1259
/* A C expression for the maximum number of consecutive registers of
1260
   class CLASS needed to hold a value of mode MODE.
1261
 
1262
   This is closely related to the macro `HARD_REGNO_NREGS'.  In fact, the value
1263
   of the macro `CLASS_MAX_NREGS (CLASS, MODE)' should be the maximum value of
1264
   `HARD_REGNO_NREGS (REGNO, MODE)' for all REGNO values in the class CLASS.
1265
 
1266
   This macro helps control the handling of multiple-word values in
1267
   the reload pass.
1268
 
1269
   This declaration is required.  */
1270
#define CLASS_MAX_NREGS(CLASS, MODE) frv_class_max_nregs (CLASS, MODE)
1271
 
1272
#define ZERO_P(x) (x == CONST0_RTX (GET_MODE (x)))
1273
 
1274
/* 6 bit signed immediate.  */
1275
#define CONST_OK_FOR_I(VALUE) IN_RANGE_P(VALUE, -32, 31)
1276
/* 10 bit signed immediate.  */
1277
#define CONST_OK_FOR_J(VALUE) IN_RANGE_P(VALUE, -512, 511)
1278
/* Unused */
1279
#define CONST_OK_FOR_K(VALUE)  0
1280
/* 16 bit signed immediate.  */
1281
#define CONST_OK_FOR_L(VALUE) IN_RANGE_P(VALUE, -32768, 32767)
1282
/* 16 bit unsigned immediate.  */
1283
#define CONST_OK_FOR_M(VALUE)  IN_RANGE_P (VALUE, 0, 65535)
1284
/* 12 bit signed immediate that is negative.  */
1285
#define CONST_OK_FOR_N(VALUE) IN_RANGE_P(VALUE, -2048, -1)
1286
/* Zero */
1287
#define CONST_OK_FOR_O(VALUE) ((VALUE) == 0)
1288
/* 12 bit signed immediate that is negative.  */
1289
#define CONST_OK_FOR_P(VALUE) IN_RANGE_P(VALUE, 1, 2047)
1290
 
1291
/* A C expression that defines the machine-dependent operand constraint letters
1292
   (`I', `J', `K', .. 'P') that specify particular ranges of integer values.
1293
   If C is one of those letters, the expression should check that VALUE, an
1294
   integer, is in the appropriate range and return 1 if so, 0 otherwise.  If C
1295
   is not one of those letters, the value should be 0 regardless of VALUE.  */
1296
#define CONST_OK_FOR_LETTER_P(VALUE, C)         \
1297
  (  (C) == 'I' ? CONST_OK_FOR_I (VALUE)        \
1298
   : (C) == 'J' ? CONST_OK_FOR_J (VALUE)        \
1299
   : (C) == 'K' ? CONST_OK_FOR_K (VALUE)        \
1300
   : (C) == 'L' ? CONST_OK_FOR_L (VALUE)        \
1301
   : (C) == 'M' ? CONST_OK_FOR_M (VALUE)        \
1302
   : (C) == 'N' ? CONST_OK_FOR_N (VALUE)        \
1303
   : (C) == 'O' ? CONST_OK_FOR_O (VALUE)        \
1304
   : (C) == 'P' ? CONST_OK_FOR_P (VALUE)        \
1305
   : 0)
1306
 
1307
 
1308
/* A C expression that defines the machine-dependent operand constraint letters
1309
   (`G', `H') that specify particular ranges of `const_double' values.
1310
 
1311
   If C is one of those letters, the expression should check that VALUE, an RTX
1312
   of code `const_double', is in the appropriate range and return 1 if so, 0
1313
   otherwise.  If C is not one of those letters, the value should be 0
1314
   regardless of VALUE.
1315
 
1316
   `const_double' is used for all floating-point constants and for `DImode'
1317
   fixed-point constants.  A given letter can accept either or both kinds of
1318
   values.  It can use `GET_MODE' to distinguish between these kinds.  */
1319
 
1320
#define CONST_DOUBLE_OK_FOR_G(VALUE)                                    \
1321
  ((GET_MODE (VALUE) == VOIDmode                                        \
1322
    && CONST_DOUBLE_LOW (VALUE) == 0                                    \
1323
    && CONST_DOUBLE_HIGH (VALUE) == 0)                                  \
1324
   || ((GET_MODE (VALUE) == SFmode                                      \
1325
        || GET_MODE (VALUE) == DFmode)                                  \
1326
       && (VALUE) == CONST0_RTX (GET_MODE (VALUE))))
1327
 
1328
#define CONST_DOUBLE_OK_FOR_H(VALUE) 0
1329
 
1330
#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C)                          \
1331
  (  (C) == 'G' ? CONST_DOUBLE_OK_FOR_G (VALUE)                         \
1332
   : (C) == 'H' ? CONST_DOUBLE_OK_FOR_H (VALUE)                         \
1333
   : 0)
1334
 
1335
/* A C expression that defines the optional machine-dependent constraint
1336
   letters (`Q', `R', `S', `T', `U') that can be used to segregate specific
1337
   types of operands, usually memory references, for the target machine.
1338
   Normally this macro will not be defined.  If it is required for a particular
1339
   target machine, it should return 1 if VALUE corresponds to the operand type
1340
   represented by the constraint letter C.  If C is not defined as an extra
1341
   constraint, the value returned should be 0 regardless of VALUE.
1342
 
1343
   For example, on the ROMP, load instructions cannot have their output in r0
1344
   if the memory reference contains a symbolic address.  Constraint letter `Q'
1345
   is defined as representing a memory address that does *not* contain a
1346
   symbolic address.  An alternative is specified with a `Q' constraint on the
1347
   input and `r' on the output.  The next alternative specifies `m' on the
1348
   input and a register class that does not include r0 on the output.  */
1349
 
1350
/* 12-bit relocations.  */
1351
#define EXTRA_CONSTRAINT_FOR_Q(VALUE)                                   \
1352
  (got12_operand (VALUE, GET_MODE (VALUE)))
1353
 
1354
/* Double word memory ops that take one instruction.  */
1355
#define EXTRA_CONSTRAINT_FOR_R(VALUE)                                   \
1356
  (dbl_memory_one_insn_operand (VALUE, GET_MODE (VALUE)))
1357
 
1358
/* SYMBOL_REF */
1359
#define EXTRA_CONSTRAINT_FOR_S(VALUE) \
1360
  (CONSTANT_P (VALUE) && call_operand (VALUE, VOIDmode))
1361
 
1362
/* Double word memory ops that take two instructions.  */
1363
#define EXTRA_CONSTRAINT_FOR_T(VALUE)                                   \
1364
  (dbl_memory_two_insn_operand (VALUE, GET_MODE (VALUE)))
1365
 
1366
/* Memory operand for conditional execution.  */
1367
#define EXTRA_CONSTRAINT_FOR_U(VALUE)                                   \
1368
  (condexec_memory_operand (VALUE, GET_MODE (VALUE)))
1369
 
1370
#define EXTRA_CONSTRAINT(VALUE, C)                                      \
1371
  (  (C) == 'Q'   ? EXTRA_CONSTRAINT_FOR_Q (VALUE)                      \
1372
   : (C) == 'R' ? EXTRA_CONSTRAINT_FOR_R (VALUE)                        \
1373
   : (C) == 'S' ? EXTRA_CONSTRAINT_FOR_S (VALUE)                        \
1374
   : (C) == 'T' ? EXTRA_CONSTRAINT_FOR_T (VALUE)                        \
1375
   : (C) == 'U' ? EXTRA_CONSTRAINT_FOR_U (VALUE)                        \
1376
   : 0)
1377
 
1378
#define EXTRA_MEMORY_CONSTRAINT(C,STR) \
1379
  ((C) == 'U' || (C) == 'R' || (C) == 'T')
1380
 
1381
#define CONSTRAINT_LEN(C, STR) \
1382
  ((C) == 'D' ? 3 : DEFAULT_CONSTRAINT_LEN ((C), (STR)))
1383
 
1384
#define REG_CLASS_FROM_CONSTRAINT(C, STR) \
1385
  (((C) == 'D' && (STR)[1] == '8' && (STR)[2] == '9') ? GR89_REGS : \
1386
   ((C) == 'D' && (STR)[1] == '0' && (STR)[2] == '9') ? GR9_REGS : \
1387
   ((C) == 'D' && (STR)[1] == '0' && (STR)[2] == '8') ? GR8_REGS : \
1388
   ((C) == 'D' && (STR)[1] == '1' && (STR)[2] == '4') ? FDPIC_FPTR_REGS : \
1389
   ((C) == 'D' && (STR)[1] == '1' && (STR)[2] == '5') ? FDPIC_REGS : \
1390
   REG_CLASS_FROM_LETTER ((C)))
1391
 
1392
 
1393
/* Basic Stack Layout.  */
1394
 
1395
/* Structure to describe information about a saved range of registers */
1396
 
1397
typedef struct frv_stack_regs {
1398
  const char * name;            /* name of the register ranges */
1399
  int first;                    /* first register in the range */
1400
  int last;                     /* last register in the range */
1401
  int size_1word;               /* # of bytes to be stored via 1 word stores */
1402
  int size_2words;              /* # of bytes to be stored via 2 word stores */
1403
  unsigned char field_p;        /* true if the registers are a single SPR */
1404
  unsigned char dword_p;        /* true if we can do dword stores */
1405
  unsigned char special_p;      /* true if the regs have a fixed save loc.  */
1406
} frv_stack_regs_t;
1407
 
1408
/* Register ranges to look into saving.  */
1409
#define STACK_REGS_GPR          0        /* Gprs (normally gr16..gr31, gr48..gr63) */
1410
#define STACK_REGS_FPR          1       /* Fprs (normally fr16..fr31, fr48..fr63) */
1411
#define STACK_REGS_LR           2       /* LR register */
1412
#define STACK_REGS_CC           3       /* CCrs (normally not saved) */
1413
#define STACK_REGS_LCR          5       /* lcr register */
1414
#define STACK_REGS_STDARG       6       /* stdarg registers */
1415
#define STACK_REGS_STRUCT       7       /* structure return (gr3) */
1416
#define STACK_REGS_FP           8       /* FP register */
1417
#define STACK_REGS_MAX          9       /* # of register ranges */
1418
 
1419
/* Values for save_p field.  */
1420
#define REG_SAVE_NO_SAVE        0        /* register not saved */
1421
#define REG_SAVE_1WORD          1       /* save the register */
1422
#define REG_SAVE_2WORDS         2       /* save register and register+1 */
1423
 
1424
/* Structure used to define the frv stack.  */
1425
 
1426
typedef struct frv_stack {
1427
  int total_size;               /* total bytes allocated for stack */
1428
  int vars_size;                /* variable save area size */
1429
  int parameter_size;           /* outgoing parameter size */
1430
  int stdarg_size;              /* size of regs needed to be saved for stdarg */
1431
  int regs_size;                /* size of the saved registers */
1432
  int regs_size_1word;          /* # of bytes to be stored via 1 word stores */
1433
  int regs_size_2words;         /* # of bytes to be stored via 2 word stores */
1434
  int header_size;              /* size of the old FP, struct ret., LR save */
1435
  int pretend_size;             /* size of pretend args */
1436
  int vars_offset;              /* offset to save local variables from new SP*/
1437
  int regs_offset;              /* offset to save registers from new SP */
1438
                                /* register range information */
1439
  frv_stack_regs_t regs[STACK_REGS_MAX];
1440
                                /* offset to store each register */
1441
  int reg_offset[FIRST_PSEUDO_REGISTER];
1442
                                /* whether to save register (& reg+1) */
1443
  unsigned char save_p[FIRST_PSEUDO_REGISTER];
1444
} frv_stack_t;
1445
 
1446
/* Define this macro if pushing a word onto the stack moves the stack pointer
1447
   to a smaller address.  */
1448
#define STACK_GROWS_DOWNWARD 1
1449
 
1450
/* Define this macro to nonzero if the addresses of local variable slots
1451
   are at negative offsets from the frame pointer.  */
1452
#define FRAME_GROWS_DOWNWARD 1
1453
 
1454
/* Offset from the frame pointer to the first local variable slot to be
1455
   allocated.
1456
 
1457
   If `FRAME_GROWS_DOWNWARD', find the next slot's offset by subtracting the
1458
   first slot's length from `STARTING_FRAME_OFFSET'.  Otherwise, it is found by
1459
   adding the length of the first slot to the value `STARTING_FRAME_OFFSET'.  */
1460
#define STARTING_FRAME_OFFSET 0
1461
 
1462
/* Offset from the stack pointer register to the first location at which
1463
   outgoing arguments are placed.  If not specified, the default value of zero
1464
   is used.  This is the proper value for most machines.
1465
 
1466
   If `ARGS_GROW_DOWNWARD', this is the offset to the location above the first
1467
   location at which outgoing arguments are placed.  */
1468
#define STACK_POINTER_OFFSET 0
1469
 
1470
/* Offset from the argument pointer register to the first argument's address.
1471
   On some machines it may depend on the data type of the function.
1472
 
1473
   If `ARGS_GROW_DOWNWARD', this is the offset to the location above the first
1474
   argument's address.  */
1475
#define FIRST_PARM_OFFSET(FUNDECL) 0
1476
 
1477
/* A C expression whose value is RTL representing the address in a stack frame
1478
   where the pointer to the caller's frame is stored.  Assume that FRAMEADDR is
1479
   an RTL expression for the address of the stack frame itself.
1480
 
1481
   If you don't define this macro, the default is to return the value of
1482
   FRAMEADDR--that is, the stack frame address is also the address of the stack
1483
   word that points to the previous frame.  */
1484
#define DYNAMIC_CHAIN_ADDRESS(FRAMEADDR) frv_dynamic_chain_address (FRAMEADDR)
1485
 
1486
/* A C expression whose value is RTL representing the value of the return
1487
   address for the frame COUNT steps up from the current frame, after the
1488
   prologue.  FRAMEADDR is the frame pointer of the COUNT frame, or the frame
1489
   pointer of the COUNT - 1 frame if `RETURN_ADDR_IN_PREVIOUS_FRAME' is
1490
   defined.
1491
 
1492
   The value of the expression must always be the correct address when COUNT is
1493
   zero, but may be `NULL_RTX' if there is not way to determine the return
1494
   address of other frames.  */
1495
#define RETURN_ADDR_RTX(COUNT, FRAMEADDR) frv_return_addr_rtx (COUNT, FRAMEADDR)
1496
 
1497
#define RETURN_POINTER_REGNUM LR_REGNO
1498
 
1499
/* A C expression whose value is RTL representing the location of the incoming
1500
   return address at the beginning of any function, before the prologue.  This
1501
   RTL is either a `REG', indicating that the return value is saved in `REG',
1502
   or a `MEM' representing a location in the stack.
1503
 
1504
   You only need to define this macro if you want to support call frame
1505
   debugging information like that provided by DWARF 2.  */
1506
#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (SImode, RETURN_POINTER_REGNUM)
1507
 
1508
 
1509
/* Register That Address the Stack Frame.  */
1510
 
1511
/* The register number of the stack pointer register, which must also be a
1512
   fixed register according to `FIXED_REGISTERS'.  On most machines, the
1513
   hardware determines which register this is.  */
1514
#define STACK_POINTER_REGNUM (GPR_FIRST + 1)
1515
 
1516
/* The register number of the frame pointer register, which is used to access
1517
   automatic variables in the stack frame.  On some machines, the hardware
1518
   determines which register this is.  On other machines, you can choose any
1519
   register you wish for this purpose.  */
1520
#define FRAME_POINTER_REGNUM (GPR_FIRST + 2)
1521
 
1522
/* The register number of the arg pointer register, which is used to access the
1523
   function's argument list.  On some machines, this is the same as the frame
1524
   pointer register.  On some machines, the hardware determines which register
1525
   this is.  On other machines, you can choose any register you wish for this
1526
   purpose.  If this is not the same register as the frame pointer register,
1527
   then you must mark it as a fixed register according to `FIXED_REGISTERS', or
1528
   arrange to be able to eliminate it.  */
1529
 
1530
/* On frv this is a fake register that is eliminated in
1531
   terms of either the frame pointer or stack pointer.  */
1532
#define ARG_POINTER_REGNUM AP_FIRST
1533
 
1534
/* Register numbers used for passing a function's static chain pointer.  If
1535
   register windows are used, the register number as seen by the called
1536
   function is `STATIC_CHAIN_INCOMING_REGNUM', while the register number as
1537
   seen by the calling function is `STATIC_CHAIN_REGNUM'.  If these registers
1538
   are the same, `STATIC_CHAIN_INCOMING_REGNUM' need not be defined.
1539
 
1540
   The static chain register need not be a fixed register.
1541
 
1542
   If the static chain is passed in memory, these macros should not be defined;
1543
   instead, the next two macros should be defined.  */
1544
#define STATIC_CHAIN_REGNUM (GPR_FIRST + 7)
1545
#define STATIC_CHAIN_INCOMING_REGNUM (GPR_FIRST + 7)
1546
 
1547
 
1548
/* Eliminating the Frame Pointer and the Arg Pointer.  */
1549
 
1550
/* A C expression which is nonzero if a function must have and use a frame
1551
   pointer.  This expression is evaluated in the reload pass.  If its value is
1552
   nonzero the function will have a frame pointer.
1553
 
1554
   The expression can in principle examine the current function and decide
1555
   according to the facts, but on most machines the constant 0 or the constant
1556
   1 suffices.  Use 0 when the machine allows code to be generated with no
1557
   frame pointer, and doing so saves some time or space.  Use 1 when there is
1558
   no possible advantage to avoiding a frame pointer.
1559
 
1560
   In certain cases, the compiler does not know how to produce valid code
1561
   without a frame pointer.  The compiler recognizes those cases and
1562
   automatically gives the function a frame pointer regardless of what
1563
   `FRAME_POINTER_REQUIRED' says.  You don't need to worry about them.
1564
 
1565
   In a function that does not require a frame pointer, the frame pointer
1566
   register can be allocated for ordinary usage, unless you mark it as a fixed
1567
   register.  See `FIXED_REGISTERS' for more information.  */
1568
#define FRAME_POINTER_REQUIRED frv_frame_pointer_required ()
1569
 
1570
/* If defined, this macro specifies a table of register pairs used to eliminate
1571
   unneeded registers that point into the stack frame.  If it is not defined,
1572
   the only elimination attempted by the compiler is to replace references to
1573
   the frame pointer with references to the stack pointer.
1574
 
1575
   The definition of this macro is a list of structure initializations, each of
1576
   which specifies an original and replacement register.
1577
 
1578
   On some machines, the position of the argument pointer is not known until
1579
   the compilation is completed.  In such a case, a separate hard register must
1580
   be used for the argument pointer.  This register can be eliminated by
1581
   replacing it with either the frame pointer or the argument pointer,
1582
   depending on whether or not the frame pointer has been eliminated.
1583
 
1584
   In this case, you might specify:
1585
        #define ELIMINABLE_REGS  \
1586
        {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
1587
         {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
1588
         {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
1589
 
1590
   Note that the elimination of the argument pointer with the stack pointer is
1591
   specified first since that is the preferred elimination.  */
1592
 
1593
#define ELIMINABLE_REGS                                                 \
1594
{                                                                       \
1595
  {ARG_POINTER_REGNUM,   STACK_POINTER_REGNUM},                         \
1596
  {ARG_POINTER_REGNUM,   FRAME_POINTER_REGNUM},                         \
1597
  {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}                          \
1598
}
1599
 
1600
/* A C expression that returns nonzero if the compiler is allowed to try to
1601
   replace register number FROM with register number TO.  This macro need only
1602
   be defined if `ELIMINABLE_REGS' is defined, and will usually be the constant
1603
   1, since most of the cases preventing register elimination are things that
1604
   the compiler already knows about.  */
1605
 
1606
#define CAN_ELIMINATE(FROM, TO)                                         \
1607
  ((FROM) == ARG_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM         \
1608
   ? ! frame_pointer_needed                                             \
1609
   : 1)
1610
 
1611
/* This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'.  It specifies the
1612
   initial difference between the specified pair of registers.  This macro must
1613
   be defined if `ELIMINABLE_REGS' is defined.  */
1614
 
1615
#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET)                    \
1616
  (OFFSET) = frv_initial_elimination_offset (FROM, TO)
1617
 
1618
 
1619
/* Passing Function Arguments on the Stack.  */
1620
 
1621
/* If defined, the maximum amount of space required for outgoing arguments will
1622
   be computed and placed into the variable
1623
   `current_function_outgoing_args_size'.  No space will be pushed onto the
1624
   stack for each call; instead, the function prologue should increase the
1625
   stack frame size by this amount.
1626
 
1627
   Defining both `PUSH_ROUNDING' and `ACCUMULATE_OUTGOING_ARGS' is not
1628
   proper.  */
1629
#define ACCUMULATE_OUTGOING_ARGS 1
1630
 
1631
/* A C expression that should indicate the number of bytes of its own arguments
1632
   that a function pops on returning, or 0 if the function pops no arguments
1633
   and the caller must therefore pop them all after the function returns.
1634
 
1635
   FUNDECL is a C variable whose value is a tree node that describes the
1636
   function in question.  Normally it is a node of type `FUNCTION_DECL' that
1637
   describes the declaration of the function.  From this it is possible to
1638
   obtain the DECL_ATTRIBUTES of the function.
1639
 
1640
   FUNTYPE is a C variable whose value is a tree node that describes the
1641
   function in question.  Normally it is a node of type `FUNCTION_TYPE' that
1642
   describes the data type of the function.  From this it is possible to obtain
1643
   the data types of the value and arguments (if known).
1644
 
1645
   When a call to a library function is being considered, FUNTYPE will contain
1646
   an identifier node for the library function.  Thus, if you need to
1647
   distinguish among various library functions, you can do so by their names.
1648
   Note that "library function" in this context means a function used to
1649
   perform arithmetic, whose name is known specially in the compiler and was
1650
   not mentioned in the C code being compiled.
1651
 
1652
   STACK-SIZE is the number of bytes of arguments passed on the stack.  If a
1653
   variable number of bytes is passed, it is zero, and argument popping will
1654
   always be the responsibility of the calling function.
1655
 
1656
   On the VAX, all functions always pop their arguments, so the definition of
1657
   this macro is STACK-SIZE.  On the 68000, using the standard calling
1658
   convention, no functions pop their arguments, so the value of the macro is
1659
   always 0 in this case.  But an alternative calling convention is available
1660
   in which functions that take a fixed number of arguments pop them but other
1661
   functions (such as `printf') pop nothing (the caller pops all).  When this
1662
   convention is in use, FUNTYPE is examined to determine whether a function
1663
   takes a fixed number of arguments.  */
1664
#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0
1665
 
1666
 
1667
/* The number of register assigned to holding function arguments.  */
1668
 
1669
#define FRV_NUM_ARG_REGS        6
1670
 
1671
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED)                    \
1672
  frv_function_arg (&CUM, MODE, TYPE, NAMED, FALSE)
1673
 
1674
/* Define this macro if the target machine has "register windows", so that the
1675
   register in which a function sees an arguments is not necessarily the same
1676
   as the one in which the caller passed the argument.
1677
 
1678
   For such machines, `FUNCTION_ARG' computes the register in which the caller
1679
   passes the value, and `FUNCTION_INCOMING_ARG' should be defined in a similar
1680
   fashion to tell the function being called where the arguments will arrive.
1681
 
1682
   If `FUNCTION_INCOMING_ARG' is not defined, `FUNCTION_ARG' serves both
1683
   purposes.  */
1684
 
1685
#define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED)                   \
1686
  frv_function_arg (&CUM, MODE, TYPE, NAMED, TRUE)
1687
 
1688
/* A C type for declaring a variable that is used as the first argument of
1689
   `FUNCTION_ARG' and other related values.  For some target machines, the type
1690
   `int' suffices and can hold the number of bytes of argument so far.
1691
 
1692
   There is no need to record in `CUMULATIVE_ARGS' anything about the arguments
1693
   that have been passed on the stack.  The compiler has other variables to
1694
   keep track of that.  For target machines on which all arguments are passed
1695
   on the stack, there is no need to store anything in `CUMULATIVE_ARGS';
1696
   however, the data structure must exist and should not be empty, so use
1697
   `int'.  */
1698
#define CUMULATIVE_ARGS int
1699
 
1700
/* A C statement (sans semicolon) for initializing the variable CUM for the
1701
   state at the beginning of the argument list.  The variable has type
1702
   `CUMULATIVE_ARGS'.  The value of FNTYPE is the tree node for the data type
1703
   of the function which will receive the args, or 0 if the args are to a
1704
   compiler support library function.  The value of INDIRECT is nonzero when
1705
   processing an indirect call, for example a call through a function pointer.
1706
   The value of INDIRECT is zero for a call to an explicitly named function, a
1707
   library function call, or when `INIT_CUMULATIVE_ARGS' is used to find
1708
   arguments for the function being compiled.
1709
 
1710
   When processing a call to a compiler support library function, LIBNAME
1711
   identifies which one.  It is a `symbol_ref' rtx which contains the name of
1712
   the function, as a string.  LIBNAME is 0 when an ordinary C function call is
1713
   being processed.  Thus, each time this macro is called, either LIBNAME or
1714
   FNTYPE is nonzero, but never both of them at once.  */
1715
 
1716
#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
1717
  frv_init_cumulative_args (&CUM, FNTYPE, LIBNAME, FNDECL, FALSE)
1718
 
1719
/* Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of finding the
1720
   arguments for the function being compiled.  If this macro is undefined,
1721
   `INIT_CUMULATIVE_ARGS' is used instead.
1722
 
1723
   The value passed for LIBNAME is always 0, since library routines with
1724
   special calling conventions are never compiled with GCC.  The argument
1725
   LIBNAME exists for symmetry with `INIT_CUMULATIVE_ARGS'.  */
1726
 
1727
#define INIT_CUMULATIVE_INCOMING_ARGS(CUM, FNTYPE, LIBNAME) \
1728
  frv_init_cumulative_args (&CUM, FNTYPE, LIBNAME, NULL, TRUE)
1729
 
1730
/* A C statement (sans semicolon) to update the summarizer variable CUM to
1731
   advance past an argument in the argument list.  The values MODE, TYPE and
1732
   NAMED describe that argument.  Once this is done, the variable CUM is
1733
   suitable for analyzing the *following* argument with `FUNCTION_ARG', etc.
1734
 
1735
   This macro need not do anything if the argument in question was passed on
1736
   the stack.  The compiler knows how to track the amount of stack space used
1737
   for arguments without any special help.  */
1738
#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)                    \
1739
  frv_function_arg_advance (&CUM, MODE, TYPE, NAMED)
1740
 
1741
/* If defined, a C expression that gives the alignment boundary, in bits, of an
1742
   argument with the specified mode and type.  If it is not defined,
1743
   `PARM_BOUNDARY' is used for all arguments.  */
1744
 
1745
#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \
1746
  frv_function_arg_boundary (MODE, TYPE)
1747
 
1748
/* A C expression that is nonzero if REGNO is the number of a hard register in
1749
   which function arguments are sometimes passed.  This does *not* include
1750
   implicit arguments such as the static chain and the structure-value address.
1751
   On many machines, no registers can be used for this purpose since all
1752
   function arguments are pushed on the stack.  */
1753
#define FUNCTION_ARG_REGNO_P(REGNO) \
1754
  ((REGNO) >= FIRST_ARG_REGNUM && ((REGNO) <= LAST_ARG_REGNUM))
1755
 
1756
 
1757
/* How Scalar Function Values are Returned.  */
1758
 
1759
/* The number of the hard register that is used to return a scalar value from a
1760
   function call.  */
1761
#define RETURN_VALUE_REGNUM     (GPR_FIRST + 8)
1762
 
1763
/* A C expression to create an RTX representing the place where a function
1764
   returns a value of data type VALTYPE.  VALTYPE is a tree node representing a
1765
   data type.  Write `TYPE_MODE (VALTYPE)' to get the machine mode used to
1766
   represent that type.  On many machines, only the mode is relevant.
1767
   (Actually, on most machines, scalar values are returned in the same place
1768
   regardless of mode).
1769
 
1770
   If `TARGET_PROMOTE_FUNCTION_RETURN' is defined to return true, you
1771
   must apply the same promotion rules specified in `PROMOTE_MODE' if
1772
   VALTYPE is a scalar type.
1773
 
1774
   If the precise function being called is known, FUNC is a tree node
1775
   (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer.  This makes it
1776
   possible to use a different value-returning convention for specific
1777
   functions when all their calls are known.
1778
 
1779
   `FUNCTION_VALUE' is not used for return vales with aggregate data types,
1780
   because these are returned in another way.  See
1781
   `TARGET_STRUCT_VALUE_RTX' and related macros, below.  */
1782
#define FUNCTION_VALUE(VALTYPE, FUNC) \
1783
  gen_rtx_REG (TYPE_MODE (VALTYPE), RETURN_VALUE_REGNUM)
1784
 
1785
/* A C expression to create an RTX representing the place where a library
1786
   function returns a value of mode MODE.
1787
 
1788
   Note that "library function" in this context means a compiler support
1789
   routine, used to perform arithmetic, whose name is known specially by the
1790
   compiler and was not mentioned in the C code being compiled.
1791
 
1792
   The definition of `LIBRARY_VALUE' need not be concerned aggregate data
1793
   types, because none of the library functions returns such types.  */
1794
#define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, RETURN_VALUE_REGNUM)
1795
 
1796
/* A C expression that is nonzero if REGNO is the number of a hard register in
1797
   which the values of called function may come back.
1798
 
1799
   A register whose use for returning values is limited to serving as the
1800
   second of a pair (for a value of type `double', say) need not be recognized
1801
   by this macro.  So for most machines, this definition suffices:
1802
 
1803
        #define FUNCTION_VALUE_REGNO_P(N) ((N) == RETURN)
1804
 
1805
   If the machine has register windows, so that the caller and the called
1806
   function use different registers for the return value, this macro should
1807
   recognize only the caller's register numbers.  */
1808
#define FUNCTION_VALUE_REGNO_P(REGNO) ((REGNO) == RETURN_VALUE_REGNUM)
1809
 
1810
 
1811
/* How Large Values are Returned.  */
1812
 
1813
/* The number of the register that is used to pass the structure
1814
   value address.  */
1815
#define FRV_STRUCT_VALUE_REGNUM (GPR_FIRST + 3)
1816
 
1817
 
1818
/* Function Entry and Exit.  */
1819
 
1820
/* Define this macro as a C expression that is nonzero if the return
1821
   instruction or the function epilogue ignores the value of the stack pointer;
1822
   in other words, if it is safe to delete an instruction to adjust the stack
1823
   pointer before a return from the function.
1824
 
1825
   Note that this macro's value is relevant only for functions for which frame
1826
   pointers are maintained.  It is never safe to delete a final stack
1827
   adjustment in a function that has no frame pointer, and the compiler knows
1828
   this regardless of `EXIT_IGNORE_STACK'.  */
1829
#define EXIT_IGNORE_STACK 1
1830
 
1831
/* Generating Code for Profiling.  */
1832
 
1833
/* A C statement or compound statement to output to FILE some assembler code to
1834
   call the profiling subroutine `mcount'.  Before calling, the assembler code
1835
   must load the address of a counter variable into a register where `mcount'
1836
   expects to find the address.  The name of this variable is `LP' followed by
1837
   the number LABELNO, so you would generate the name using `LP%d' in a
1838
   `fprintf'.
1839
 
1840
   The details of how the address should be passed to `mcount' are determined
1841
   by your operating system environment, not by GCC.  To figure them out,
1842
   compile a small program for profiling using the system's installed C
1843
   compiler and look at the assembler code that results.
1844
 
1845
   This declaration must be present, but it can be an abort if profiling is
1846
   not implemented.  */
1847
 
1848
#define FUNCTION_PROFILER(FILE, LABELNO)
1849
 
1850
 
1851
/* Implementing the Varargs Macros.  */
1852
 
1853
/* Implement the stdarg/varargs va_start macro.  STDARG_P is nonzero if this
1854
   is stdarg.h instead of varargs.h.  VALIST is the tree of the va_list
1855
   variable to initialize.  NEXTARG is the machine independent notion of the
1856
   'next' argument after the variable arguments.  If not defined, a standard
1857
   implementation will be defined that works for arguments passed on the stack.  */
1858
 
1859
#define EXPAND_BUILTIN_VA_START(VALIST, NEXTARG)                \
1860
  (frv_expand_builtin_va_start(VALIST, NEXTARG))
1861
 
1862
 
1863
/* Trampolines for Nested Functions.  */
1864
 
1865
/* A C expression for the size in bytes of the trampoline, as an integer.  */
1866
#define TRAMPOLINE_SIZE frv_trampoline_size ()
1867
 
1868
/* Alignment required for trampolines, in bits.
1869
 
1870
   If you don't define this macro, the value of `BIGGEST_ALIGNMENT' is used for
1871
   aligning trampolines.  */
1872
#define TRAMPOLINE_ALIGNMENT (TARGET_FDPIC ? 64 : 32)
1873
 
1874
/* A C statement to initialize the variable parts of a trampoline.  ADDR is an
1875
   RTX for the address of the trampoline; FNADDR is an RTX for the address of
1876
   the nested function; STATIC_CHAIN is an RTX for the static chain value that
1877
   should be passed to the function when it is called.  */
1878
#define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, STATIC_CHAIN) \
1879
  frv_initialize_trampoline (ADDR, FNADDR, STATIC_CHAIN)
1880
 
1881
/* Define this macro if trampolines need a special subroutine to do their work.
1882
   The macro should expand to a series of `asm' statements which will be
1883
   compiled with GCC.  They go in a library function named
1884
   `__transfer_from_trampoline'.
1885
 
1886
   If you need to avoid executing the ordinary prologue code of a compiled C
1887
   function when you jump to the subroutine, you can do so by placing a special
1888
   label of your own in the assembler code.  Use one `asm' statement to
1889
   generate an assembler label, and another to make the label global.  Then
1890
   trampolines can use that label to jump directly to your special assembler
1891
   code.  */
1892
 
1893
#ifdef __FRV_UNDERSCORE__
1894
#define TRAMPOLINE_TEMPLATE_NAME "___trampoline_template"
1895
#else
1896
#define TRAMPOLINE_TEMPLATE_NAME "__trampoline_template"
1897
#endif
1898
 
1899
#define Twrite _write
1900
 
1901
#if ! __FRV_FDPIC__
1902
#define TRANSFER_FROM_TRAMPOLINE                                        \
1903
extern int Twrite (int, const void *, unsigned);                        \
1904
                                                                        \
1905
void                                                                    \
1906
__trampoline_setup (short * addr, int size, int fnaddr, int sc)         \
1907
{                                                                       \
1908
  extern short __trampoline_template[];                                 \
1909
  short * to = addr;                                                    \
1910
  short * from = &__trampoline_template[0];                             \
1911
  int i;                                                                \
1912
                                                                        \
1913
  if (size < 20)                                                        \
1914
    {                                                                   \
1915
      Twrite (2, "__trampoline_setup bad size\n",                       \
1916
              sizeof ("__trampoline_setup bad size\n") - 1);            \
1917
      exit (-1);                                                        \
1918
    }                                                                   \
1919
                                                                        \
1920
  to[0] = from[0];                                                      \
1921
  to[1] = (short)(fnaddr);                                              \
1922
  to[2] = from[2];                                                      \
1923
  to[3] = (short)(sc);                                                  \
1924
  to[4] = from[4];                                                      \
1925
  to[5] = (short)(fnaddr >> 16);                                        \
1926
  to[6] = from[6];                                                      \
1927
  to[7] = (short)(sc >> 16);                                            \
1928
  to[8] = from[8];                                                      \
1929
  to[9] = from[9];                                                      \
1930
                                                                        \
1931
  for (i = 0; i < 20; i++)                                              \
1932
    __asm__ volatile ("dcf @(%0,%1)\n\tici @(%0,%1)" :: "r" (to), "r" (i)); \
1933
}                                                                       \
1934
                                                                        \
1935
__asm__("\n"                                                            \
1936
        "\t.globl " TRAMPOLINE_TEMPLATE_NAME "\n"                       \
1937
        "\t.text\n"                                                     \
1938
        TRAMPOLINE_TEMPLATE_NAME ":\n"                                  \
1939
        "\tsetlos #0, gr6\n"    /* jump register */                     \
1940
        "\tsetlos #0, gr7\n"    /* static chain */                      \
1941
        "\tsethi #0, gr6\n"                                             \
1942
        "\tsethi #0, gr7\n"                                             \
1943
        "\tjmpl @(gr0,gr6)\n");
1944
#else
1945
#define TRANSFER_FROM_TRAMPOLINE                                        \
1946
extern int Twrite (int, const void *, unsigned);                        \
1947
                                                                        \
1948
void                                                                    \
1949
__trampoline_setup (addr, size, fnaddr, sc)                             \
1950
     short * addr;                                                      \
1951
     int size;                                                          \
1952
     int fnaddr;                                                        \
1953
     int sc;                                                            \
1954
{                                                                       \
1955
  extern short __trampoline_template[];                                 \
1956
  short * from = &__trampoline_template[0];                              \
1957
  int i;                                                                \
1958
  short **desc = (short **)addr;                                        \
1959
  short * to = addr + 4;                                                \
1960
                                                                        \
1961
  if (size != 32)                                                       \
1962
    {                                                                   \
1963
      Twrite (2, "__trampoline_setup bad size\n",                       \
1964
              sizeof ("__trampoline_setup bad size\n") - 1);            \
1965
      exit (-1);                                                        \
1966
    }                                                                   \
1967
                                                                        \
1968
  /* Create a function descriptor with the address of the code below
1969
     and NULL as the FDPIC value.  We don't need the real GOT value
1970
     here, since we don't use it, so we use NULL, that is just as
1971
     good.  */                                                          \
1972
  desc[0] = to;                                                          \
1973
  desc[1] = NULL;                                                       \
1974
  size -= 8;                                                            \
1975
                                                                        \
1976
  to[0] = from[0];                                                        \
1977
  to[1] = (short)(fnaddr);                                              \
1978
  to[2] = from[2];                                                      \
1979
  to[3] = (short)(sc);                                                  \
1980
  to[4] = from[4];                                                      \
1981
  to[5] = (short)(fnaddr >> 16);                                        \
1982
  to[6] = from[6];                                                      \
1983
  to[7] = (short)(sc >> 16);                                            \
1984
  to[8] = from[8];                                                      \
1985
  to[9] = from[9];                                                      \
1986
  to[10] = from[10];                                                    \
1987
  to[11] = from[11];                                                    \
1988
                                                                        \
1989
  for (i = 0; i < size; i++)                                             \
1990
    __asm__ volatile ("dcf @(%0,%1)\n\tici @(%0,%1)" :: "r" (to), "r" (i)); \
1991
}                                                                       \
1992
                                                                        \
1993
__asm__("\n"                                                            \
1994
        "\t.globl " TRAMPOLINE_TEMPLATE_NAME "\n"                       \
1995
        "\t.text\n"                                                     \
1996
        TRAMPOLINE_TEMPLATE_NAME ":\n"                                  \
1997
        "\tsetlos #0, gr6\n"    /* Jump register.  */                   \
1998
        "\tsetlos #0, gr7\n"    /* Static chain.  */                    \
1999
        "\tsethi #0, gr6\n"                                             \
2000
        "\tsethi #0, gr7\n"                                             \
2001
        "\tldd @(gr6,gr0),gr14\n"                                       \
2002
        "\tjmpl @(gr14,gr0)\n"                                          \
2003
        );
2004
#endif
2005
 
2006
 
2007
/* Addressing Modes.  */
2008
 
2009
/* A C expression that is 1 if the RTX X is a constant which is a valid
2010
   address.  On most machines, this can be defined as `CONSTANT_P (X)', but a
2011
   few machines are more restrictive in which constant addresses are supported.
2012
 
2013
   `CONSTANT_P' accepts integer-values expressions whose values are not
2014
   explicitly known, such as `symbol_ref', `label_ref', and `high' expressions
2015
   and `const' arithmetic expressions, in addition to `const_int' and
2016
   `const_double' expressions.  */
2017
#define CONSTANT_ADDRESS_P(X) CONSTANT_P (X)
2018
 
2019
/* A number, the maximum number of registers that can appear in a valid memory
2020
   address.  Note that it is up to you to specify a value equal to the maximum
2021
   number that `GO_IF_LEGITIMATE_ADDRESS' would ever accept.  */
2022
#define MAX_REGS_PER_ADDRESS 2
2023
 
2024
/* A C compound statement with a conditional `goto LABEL;' executed if X (an
2025
   RTX) is a legitimate memory address on the target machine for a memory
2026
   operand of mode MODE.
2027
 
2028
   It usually pays to define several simpler macros to serve as subroutines for
2029
   this one.  Otherwise it may be too complicated to understand.
2030
 
2031
   This macro must exist in two variants: a strict variant and a non-strict
2032
   one.  The strict variant is used in the reload pass.  It must be defined so
2033
   that any pseudo-register that has not been allocated a hard register is
2034
   considered a memory reference.  In contexts where some kind of register is
2035
   required, a pseudo-register with no hard register must be rejected.
2036
 
2037
   The non-strict variant is used in other passes.  It must be defined to
2038
   accept all pseudo-registers in every context where some kind of register is
2039
   required.
2040
 
2041
   Compiler source files that want to use the strict variant of this macro
2042
   define the macro `REG_OK_STRICT'.  You should use an `#ifdef REG_OK_STRICT'
2043
   conditional to define the strict variant in that case and the non-strict
2044
   variant otherwise.
2045
 
2046
   Subroutines to check for acceptable registers for various purposes (one for
2047
   base registers, one for index registers, and so on) are typically among the
2048
   subroutines used to define `GO_IF_LEGITIMATE_ADDRESS'.  Then only these
2049
   subroutine macros need have two variants; the higher levels of macros may be
2050
   the same whether strict or not.
2051
 
2052
   Normally, constant addresses which are the sum of a `symbol_ref' and an
2053
   integer are stored inside a `const' RTX to mark them as constant.
2054
   Therefore, there is no need to recognize such sums specifically as
2055
   legitimate addresses.  Normally you would simply recognize any `const' as
2056
   legitimate.
2057
 
2058
   Usually `PRINT_OPERAND_ADDRESS' is not prepared to handle constant sums that
2059
   are not marked with `const'.  It assumes that a naked `plus' indicates
2060
   indexing.  If so, then you *must* reject such naked constant sums as
2061
   illegitimate addresses, so that none of them will be given to
2062
   `PRINT_OPERAND_ADDRESS'.
2063
 
2064
   On some machines, whether a symbolic address is legitimate depends on the
2065
   section that the address refers to.  On these machines, define the macro
2066
   `ENCODE_SECTION_INFO' to store the information into the `symbol_ref', and
2067
   then check for it here.  When you see a `const', you will have to look
2068
   inside it to find the `symbol_ref' in order to determine the section.
2069
 
2070
   The best way to modify the name string is by adding text to the beginning,
2071
   with suitable punctuation to prevent any ambiguity.  Allocate the new name
2072
   in `saveable_obstack'.  You will have to modify `ASM_OUTPUT_LABELREF' to
2073
   remove and decode the added text and output the name accordingly, and define
2074
   `(* targetm.strip_name_encoding)' to access the original name string.
2075
 
2076
   You can check the information stored here into the `symbol_ref' in the
2077
   definitions of the macros `GO_IF_LEGITIMATE_ADDRESS' and
2078
   `PRINT_OPERAND_ADDRESS'.  */
2079
 
2080
#ifdef REG_OK_STRICT
2081
#define REG_OK_STRICT_P 1
2082
#else
2083
#define REG_OK_STRICT_P 0
2084
#endif
2085
 
2086
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, LABEL)                        \
2087
  do                                                                    \
2088
    {                                                                   \
2089
      if (frv_legitimate_address_p (MODE, X, REG_OK_STRICT_P,           \
2090
                                    FALSE, FALSE))                      \
2091
        goto LABEL;                                                     \
2092
    }                                                                   \
2093
  while (0)
2094
 
2095
/* A C expression that is nonzero if X (assumed to be a `reg' RTX) is valid for
2096
   use as a base register.  For hard registers, it should always accept those
2097
   which the hardware permits and reject the others.  Whether the macro accepts
2098
   or rejects pseudo registers must be controlled by `REG_OK_STRICT' as
2099
   described above.  This usually requires two variant definitions, of which
2100
   `REG_OK_STRICT' controls the one actually used.  */
2101
#ifdef REG_OK_STRICT
2102
#define REG_OK_FOR_BASE_P(X) GPR_P (REGNO (X))
2103
#else
2104
#define REG_OK_FOR_BASE_P(X) GPR_AP_OR_PSEUDO_P (REGNO (X))
2105
#endif
2106
 
2107
/* A C expression that is nonzero if X (assumed to be a `reg' RTX) is valid for
2108
   use as an index register.
2109
 
2110
   The difference between an index register and a base register is that the
2111
   index register may be scaled.  If an address involves the sum of two
2112
   registers, neither one of them scaled, then either one may be labeled the
2113
   "base" and the other the "index"; but whichever labeling is used must fit
2114
   the machine's constraints of which registers may serve in each capacity.
2115
   The compiler will try both labelings, looking for one that is valid, and
2116
   will reload one or both registers only if neither labeling works.  */
2117
#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X)
2118
 
2119
#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN)          \
2120
do {                                                    \
2121
  rtx new_x = frv_legitimize_address (X, OLDX, MODE);   \
2122
  if (new_x)                                            \
2123
    {                                                   \
2124
      (X) = new_x;                                      \
2125
      goto WIN;                                         \
2126
    }                                                   \
2127
} while (0)
2128
 
2129
#define FIND_BASE_TERM frv_find_base_term
2130
 
2131
/* A C statement or compound statement with a conditional `goto LABEL;'
2132
   executed if memory address X (an RTX) can have different meanings depending
2133
   on the machine mode of the memory reference it is used for or if the address
2134
   is valid for some modes but not others.
2135
 
2136
   Autoincrement and autodecrement addresses typically have mode-dependent
2137
   effects because the amount of the increment or decrement is the size of the
2138
   operand being addressed.  Some machines have other mode-dependent addresses.
2139
   Many RISC machines have no mode-dependent addresses.
2140
 
2141
   You may assume that ADDR is a valid address for the machine.  */
2142
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)
2143
 
2144
/* A C expression that is nonzero if X is a legitimate constant for an
2145
   immediate operand on the target machine.  You can assume that X satisfies
2146
   `CONSTANT_P', so you need not check this.  In fact, `1' is a suitable
2147
   definition for this macro on machines where anything `CONSTANT_P' is valid.  */
2148
#define LEGITIMATE_CONSTANT_P(X) frv_legitimate_constant_p (X)
2149
 
2150
/* The load-and-update commands allow pre-modification in addresses.
2151
   The index has to be in a register.  */
2152
#define HAVE_PRE_MODIFY_REG 1
2153
 
2154
 
2155
/* We define extra CC modes in frv-modes.def so we need a selector.  */
2156
 
2157
#define SELECT_CC_MODE frv_select_cc_mode
2158
 
2159
/* A C expression whose value is one if it is always safe to reverse a
2160
   comparison whose mode is MODE.  If `SELECT_CC_MODE' can ever return MODE for
2161
   a floating-point inequality comparison, then `REVERSIBLE_CC_MODE (MODE)'
2162
   must be zero.
2163
 
2164
   You need not define this macro if it would always returns zero or if the
2165
   floating-point format is anything other than `IEEE_FLOAT_FORMAT'.  For
2166
   example, here is the definition used on the SPARC, where floating-point
2167
   inequality comparisons are always given `CCFPEmode':
2168
 
2169
        #define REVERSIBLE_CC_MODE(MODE)  ((MODE) != CCFPEmode)  */
2170
 
2171
/* On frv, don't consider floating point comparisons to be reversible.  In
2172
   theory, fp equality comparisons can be reversible.  */
2173
#define REVERSIBLE_CC_MODE(MODE) \
2174
  ((MODE) == CCmode || (MODE) == CC_UNSmode || (MODE) == CC_NZmode)
2175
 
2176
/* Frv CCR_MODE's are not reversible.  */
2177
#define REVERSE_CONDEXEC_PREDICATES_P(x,y)      0
2178
 
2179
 
2180
/* Describing Relative Costs of Operations.  */
2181
 
2182
/* A C expression for the cost of moving data from a register in class FROM to
2183
   one in class TO.  The classes are expressed using the enumeration values
2184
   such as `GENERAL_REGS'.  A value of 4 is the default; other values are
2185
   interpreted relative to that.
2186
 
2187
   It is not required that the cost always equal 2 when FROM is the same as TO;
2188
   on some machines it is expensive to move between registers if they are not
2189
   general registers.
2190
 
2191
   If reload sees an insn consisting of a single `set' between two hard
2192
   registers, and if `REGISTER_MOVE_COST' applied to their classes returns a
2193
   value of 2, reload does not check to ensure that the constraints of the insn
2194
   are met.  Setting a cost of other than 2 will allow reload to verify that
2195
   the constraints are met.  You should do this if the `movM' pattern's
2196
   constraints do not allow such copying.  */
2197
#define REGISTER_MOVE_COST(MODE, FROM, TO) frv_register_move_cost (FROM, TO)
2198
 
2199
/* A C expression for the cost of moving data of mode M between a register and
2200
   memory.  A value of 2 is the default; this cost is relative to those in
2201
   `REGISTER_MOVE_COST'.
2202
 
2203
   If moving between registers and memory is more expensive than between two
2204
   registers, you should define this macro to express the relative cost.  */
2205
#define MEMORY_MOVE_COST(M,C,I) 4
2206
 
2207
/* A C expression for the cost of a branch instruction.  A value of 1 is the
2208
   default; other values are interpreted relative to that.  */
2209
#define BRANCH_COST frv_branch_cost_int
2210
 
2211
/* Define this macro as a C expression which is nonzero if accessing less than
2212
   a word of memory (i.e. a `char' or a `short') is no faster than accessing a
2213
   word of memory, i.e., if such access require more than one instruction or if
2214
   there is no difference in cost between byte and (aligned) word loads.
2215
 
2216
   When this macro is not defined, the compiler will access a field by finding
2217
   the smallest containing object; when it is defined, a fullword load will be
2218
   used if alignment permits.  Unless bytes accesses are faster than word
2219
   accesses, using word accesses is preferable since it may eliminate
2220
   subsequent memory access if subsequent accesses occur to other fields in the
2221
   same word of the structure, but to different bytes.  */
2222
#define SLOW_BYTE_ACCESS 1
2223
 
2224
/* Define this macro if it is as good or better to call a constant function
2225
   address than to call an address kept in a register.  */
2226
#define NO_FUNCTION_CSE
2227
 
2228
 
2229
/* Dividing the output into sections.  */
2230
 
2231
/* A C expression whose value is a string containing the assembler operation
2232
   that should precede instructions and read-only data.  Normally `".text"' is
2233
   right.  */
2234
#define TEXT_SECTION_ASM_OP "\t.text"
2235
 
2236
/* A C expression whose value is a string containing the assembler operation to
2237
   identify the following data as writable initialized data.  Normally
2238
   `".data"' is right.  */
2239
#define DATA_SECTION_ASM_OP "\t.data"
2240
 
2241
/* If defined, a C expression whose value is a string containing the
2242
   assembler operation to identify the following data as
2243
   uninitialized global data.  If not defined, and neither
2244
   `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined,
2245
   uninitialized global data will be output in the data section if
2246
   `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be
2247
   used.  */
2248
#define BSS_SECTION_ASM_OP "\t.section .bss,\"aw\""
2249
 
2250
/* Short Data Support */
2251
#define SDATA_SECTION_ASM_OP    "\t.section .sdata,\"aw\""
2252
 
2253
/* On svr4, we *do* have support for the .init and .fini sections, and we
2254
   can put stuff in there to be executed before and after `main'.  We let
2255
   crtstuff.c and other files know this by defining the following symbols.
2256
   The definitions say how to change sections to the .init and .fini
2257
   sections.  This is the same for all known svr4 assemblers.
2258
 
2259
   The standard System V.4 macros will work, but they look ugly in the
2260
   assembly output, so redefine them.  */
2261
 
2262
#undef  INIT_SECTION_ASM_OP
2263
#undef  FINI_SECTION_ASM_OP
2264
#define INIT_SECTION_ASM_OP     "\t.section .init,\"ax\""
2265
#define FINI_SECTION_ASM_OP     "\t.section .fini,\"ax\""
2266
 
2267
#undef CTORS_SECTION_ASM_OP
2268
#undef DTORS_SECTION_ASM_OP
2269
#define CTORS_SECTION_ASM_OP    "\t.section\t.ctors,\"a\""
2270
#define DTORS_SECTION_ASM_OP    "\t.section\t.dtors,\"a\""
2271
 
2272
/* A C expression whose value is a string containing the assembler operation to
2273
   switch to the fixup section that records all initialized pointers in a -fpic
2274
   program so they can be changed program startup time if the program is loaded
2275
   at a different address than linked for.  */
2276
#define FIXUP_SECTION_ASM_OP    "\t.section .rofixup,\"a\""
2277
 
2278
/* Position Independent Code.  */
2279
 
2280
/* A C expression that is nonzero if X is a legitimate immediate operand on the
2281
   target machine when generating position independent code.  You can assume
2282
   that X satisfies `CONSTANT_P', so you need not check this.  You can also
2283
   assume FLAG_PIC is true, so you need not check it either.  You need not
2284
   define this macro if all constants (including `SYMBOL_REF') can be immediate
2285
   operands when generating position independent code.  */
2286
#define LEGITIMATE_PIC_OPERAND_P(X)                                     \
2287
  (   GET_CODE (X) == CONST_INT                                         \
2288
   || GET_CODE (X) == CONST_DOUBLE                                      \
2289
   || (GET_CODE (X) == HIGH && GET_CODE (XEXP (X, 0)) == CONST_INT)      \
2290
   || got12_operand (X, VOIDmode))                                      \
2291
 
2292
 
2293
/* The Overall Framework of an Assembler File.  */
2294
 
2295
/* A C string constant describing how to begin a comment in the target
2296
   assembler language.  The compiler assumes that the comment will end at the
2297
   end of the line.  */
2298
#define ASM_COMMENT_START ";"
2299
 
2300
/* A C string constant for text to be output before each `asm' statement or
2301
   group of consecutive ones.  Normally this is `"#APP"', which is a comment
2302
   that has no effect on most assemblers but tells the GNU assembler that it
2303
   must check the lines that follow for all valid assembler constructs.  */
2304
#define ASM_APP_ON "#APP\n"
2305
 
2306
/* A C string constant for text to be output after each `asm' statement or
2307
   group of consecutive ones.  Normally this is `"#NO_APP"', which tells the
2308
   GNU assembler to resume making the time-saving assumptions that are valid
2309
   for ordinary compiler output.  */
2310
#define ASM_APP_OFF "#NO_APP\n"
2311
 
2312
 
2313
/* Output of Data.  */
2314
 
2315
/* This is how to output a label to dwarf/dwarf2.  */
2316
#define ASM_OUTPUT_DWARF_ADDR(STREAM, LABEL)                            \
2317
do {                                                                    \
2318
  fprintf (STREAM, "\t.picptr\t");                                      \
2319
  assemble_name (STREAM, LABEL);                                        \
2320
} while (0)
2321
 
2322
/* Whether to emit the gas specific dwarf2 line number support.  */
2323
#define DWARF2_ASM_LINE_DEBUG_INFO (TARGET_DEBUG_LOC)
2324
 
2325
/* Output of Uninitialized Variables.  */
2326
 
2327
/* A C statement (sans semicolon) to output to the stdio stream STREAM the
2328
   assembler definition of a local-common-label named NAME whose size is SIZE
2329
   bytes.  The variable ROUNDED is the size rounded up to whatever alignment
2330
   the caller wants.
2331
 
2332
   Use the expression `assemble_name (STREAM, NAME)' to output the name itself;
2333
   before and after that, output the additional assembler syntax for defining
2334
   the name, and a newline.
2335
 
2336
   This macro controls how the assembler definitions of uninitialized static
2337
   variables are output.  */
2338
#undef ASM_OUTPUT_LOCAL
2339
 
2340
/* Like `ASM_OUTPUT_LOCAL' except takes the required alignment as a separate,
2341
   explicit argument.  If you define this macro, it is used in place of
2342
   `ASM_OUTPUT_LOCAL', and gives you more flexibility in handling the required
2343
   alignment of the variable.  The alignment is specified as the number of
2344
   bits.
2345
 
2346
   Defined in svr4.h.  */
2347
#undef ASM_OUTPUT_ALIGNED_LOCAL
2348
 
2349
/* This is for final.c, because it is used by ASM_DECLARE_OBJECT_NAME.  */
2350
extern int size_directive_output;
2351
 
2352
/* Like `ASM_OUTPUT_ALIGNED_LOCAL' except that it takes an additional
2353
   parameter - the DECL of variable to be output, if there is one.
2354
   This macro can be called with DECL == NULL_TREE.  If you define
2355
   this macro, it is used in place of `ASM_OUTPUT_LOCAL' and
2356
   `ASM_OUTPUT_ALIGNED_LOCAL', and gives you more flexibility in
2357
   handling the destination of the variable.  */
2358
#undef ASM_OUTPUT_ALIGNED_DECL_LOCAL
2359
#define ASM_OUTPUT_ALIGNED_DECL_LOCAL(STREAM, DECL, NAME, SIZE, ALIGN)  \
2360
do {                                                                    \
2361
  if ((SIZE) > 0 && (SIZE) <= g_switch_value)                            \
2362
    switch_to_section (get_named_section (NULL, ".sbss", 0));           \
2363
  else                                                                  \
2364
    switch_to_section (bss_section);                                    \
2365
  ASM_OUTPUT_ALIGN (STREAM, floor_log2 ((ALIGN) / BITS_PER_UNIT));      \
2366
  ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL);                         \
2367
  ASM_OUTPUT_SKIP (STREAM, (SIZE) ? (SIZE) : 1);                        \
2368
} while (0)
2369
 
2370
 
2371
/* Output and Generation of Labels.  */
2372
 
2373
/* A C statement (sans semicolon) to output to the stdio stream STREAM the
2374
   assembler definition of a label named NAME.  Use the expression
2375
   `assemble_name (STREAM, NAME)' to output the name itself; before and after
2376
   that, output the additional assembler syntax for defining the name, and a
2377
   newline.  */
2378
#define ASM_OUTPUT_LABEL(STREAM, NAME)                                  \
2379
do {                                                                    \
2380
  assemble_name (STREAM, NAME);                                         \
2381
  fputs (":\n", STREAM);                                                \
2382
} while (0)
2383
 
2384
/* Globalizing directive for a label.  */
2385
#define GLOBAL_ASM_OP "\t.globl "
2386
 
2387
/* A C statement to store into the string STRING a label whose name is made
2388
   from the string PREFIX and the number NUM.
2389
 
2390
   This string, when output subsequently by `assemble_name', should produce the
2391
   output that `(*targetm.asm_out.internal_label)' would produce with the same PREFIX
2392
   and NUM.
2393
 
2394
   If the string begins with `*', then `assemble_name' will output the rest of
2395
   the string unchanged.  It is often convenient for
2396
   `ASM_GENERATE_INTERNAL_LABEL' to use `*' in this way.  If the string doesn't
2397
   start with `*', then `ASM_OUTPUT_LABELREF' gets to output the string, and
2398
   may change it.  (Of course, `ASM_OUTPUT_LABELREF' is also part of your
2399
   machine description, so you should know what it does on your machine.)
2400
 
2401
   Defined in svr4.h.  */
2402
#undef ASM_GENERATE_INTERNAL_LABEL
2403
#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM)                 \
2404
do {                                                                    \
2405
  sprintf (LABEL, "*.%s%ld", PREFIX, (long)NUM);                        \
2406
} while (0)
2407
 
2408
 
2409
/* Macros Controlling Initialization Routines.  */
2410
 
2411
/* If defined, a C string constant for the assembler operation to identify the
2412
   following data as initialization code.  If not defined, GCC will assume
2413
   such a section does not exist.  When you are using special sections for
2414
   initialization and termination functions, this macro also controls how
2415
   `crtstuff.c' and `libgcc2.c' arrange to run the initialization functions.
2416
 
2417
   Defined in svr4.h.  */
2418
#undef INIT_SECTION_ASM_OP
2419
 
2420
/* If defined, `main' will call `__main' despite the presence of
2421
   `INIT_SECTION_ASM_OP'.  This macro should be defined for systems where the
2422
   init section is not actually run automatically, but is still useful for
2423
   collecting the lists of constructors and destructors.  */
2424
#define INVOKE__main
2425
 
2426
/* Output of Assembler Instructions.  */
2427
 
2428
/* A C initializer containing the assembler's names for the machine registers,
2429
   each one as a C string constant.  This is what translates register numbers
2430
   in the compiler into assembler language.  */
2431
#define REGISTER_NAMES                                                  \
2432
{                                                                       \
2433
 "gr0",  "sp",   "fp",   "gr3",  "gr4",  "gr5",  "gr6",  "gr7",         \
2434
  "gr8",  "gr9",  "gr10", "gr11", "gr12", "gr13", "gr14", "gr15",       \
2435
  "gr16", "gr17", "gr18", "gr19", "gr20", "gr21", "gr22", "gr23",       \
2436
  "gr24", "gr25", "gr26", "gr27", "gr28", "gr29", "gr30", "gr31",       \
2437
  "gr32", "gr33", "gr34", "gr35", "gr36", "gr37", "gr38", "gr39",       \
2438
  "gr40", "gr41", "gr42", "gr43", "gr44", "gr45", "gr46", "gr47",       \
2439
  "gr48", "gr49", "gr50", "gr51", "gr52", "gr53", "gr54", "gr55",       \
2440
  "gr56", "gr57", "gr58", "gr59", "gr60", "gr61", "gr62", "gr63",       \
2441
                                                                        \
2442
  "fr0",  "fr1",  "fr2",  "fr3",  "fr4",  "fr5",  "fr6",  "fr7",        \
2443
  "fr8",  "fr9",  "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",       \
2444
  "fr16", "fr17", "fr18", "fr19", "fr20", "fr21", "fr22", "fr23",       \
2445
  "fr24", "fr25", "fr26", "fr27", "fr28", "fr29", "fr30", "fr31",       \
2446
  "fr32", "fr33", "fr34", "fr35", "fr36", "fr37", "fr38", "fr39",       \
2447
  "fr40", "fr41", "fr42", "fr43", "fr44", "fr45", "fr46", "fr47",       \
2448
  "fr48", "fr49", "fr50", "fr51", "fr52", "fr53", "fr54", "fr55",       \
2449
  "fr56", "fr57", "fr58", "fr59", "fr60", "fr61", "fr62", "fr63",       \
2450
                                                                        \
2451
  "fcc0", "fcc1", "fcc2", "fcc3", "icc0", "icc1", "icc2", "icc3",       \
2452
  "cc0",  "cc1",  "cc2",  "cc3",  "cc4",  "cc5",  "cc6",  "cc7",        \
2453
  "acc0", "acc1", "acc2", "acc3", "acc4", "acc5", "acc6", "acc7",       \
2454
  "acc8", "acc9", "acc10", "acc11",                                     \
2455
  "accg0","accg1","accg2","accg3","accg4","accg5","accg6","accg7",      \
2456
  "accg8", "accg9", "accg10", "accg11",                                 \
2457
  "ap",   "lr",   "lcr",  "iacc0h", "iacc0l"                            \
2458
}
2459
 
2460
/* Define this macro if you are using an unusual assembler that
2461
   requires different names for the machine instructions.
2462
 
2463
   The definition is a C statement or statements which output an
2464
   assembler instruction opcode to the stdio stream STREAM.  The
2465
   macro-operand PTR is a variable of type `char *' which points to
2466
   the opcode name in its "internal" form--the form that is written
2467
   in the machine description.  The definition should output the
2468
   opcode name to STREAM, performing any translation you desire, and
2469
   increment the variable PTR to point at the end of the opcode so
2470
   that it will not be output twice.
2471
 
2472
   In fact, your macro definition may process less than the entire
2473
   opcode name, or more than the opcode name; but if you want to
2474
   process text that includes `%'-sequences to substitute operands,
2475
   you must take care of the substitution yourself.  Just be sure to
2476
   increment PTR over whatever text should not be output normally.
2477
 
2478
   If you need to look at the operand values, they can be found as the
2479
   elements of `recog_operand'.
2480
 
2481
   If the macro definition does nothing, the instruction is output in
2482
   the usual way.  */
2483
 
2484
#define ASM_OUTPUT_OPCODE(STREAM, PTR)\
2485
   (PTR) = frv_asm_output_opcode (STREAM, PTR)
2486
 
2487
/* If defined, a C statement to be executed just prior to the output
2488
   of assembler code for INSN, to modify the extracted operands so
2489
   they will be output differently.
2490
 
2491
   Here the argument OPVEC is the vector containing the operands
2492
   extracted from INSN, and NOPERANDS is the number of elements of
2493
   the vector which contain meaningful data for this insn.  The
2494
   contents of this vector are what will be used to convert the insn
2495
   template into assembler code, so you can change the assembler
2496
   output by changing the contents of the vector.
2497
 
2498
   This macro is useful when various assembler syntaxes share a single
2499
   file of instruction patterns; by defining this macro differently,
2500
   you can cause a large class of instructions to be output
2501
   differently (such as with rearranged operands).  Naturally,
2502
   variations in assembler syntax affecting individual insn patterns
2503
   ought to be handled by writing conditional output routines in
2504
   those patterns.
2505
 
2506
   If this macro is not defined, it is equivalent to a null statement.  */
2507
 
2508
#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS)\
2509
  frv_final_prescan_insn (INSN, OPVEC, NOPERANDS)
2510
 
2511
 
2512
/* A C compound statement to output to stdio stream STREAM the assembler syntax
2513
   for an instruction operand X.  X is an RTL expression.
2514
 
2515
   CODE is a value that can be used to specify one of several ways of printing
2516
   the operand.  It is used when identical operands must be printed differently
2517
   depending on the context.  CODE comes from the `%' specification that was
2518
   used to request printing of the operand.  If the specification was just
2519
   `%DIGIT' then CODE is 0; if the specification was `%LTR DIGIT' then CODE is
2520
   the ASCII code for LTR.
2521
 
2522
   If X is a register, this macro should print the register's name.  The names
2523
   can be found in an array `reg_names' whose type is `char *[]'.  `reg_names'
2524
   is initialized from `REGISTER_NAMES'.
2525
 
2526
   When the machine description has a specification `%PUNCT' (a `%' followed by
2527
   a punctuation character), this macro is called with a null pointer for X and
2528
   the punctuation character for CODE.  */
2529
#define PRINT_OPERAND(STREAM, X, CODE) frv_print_operand (STREAM, X, CODE)
2530
 
2531
/* A C expression which evaluates to true if CODE is a valid punctuation
2532
   character for use in the `PRINT_OPERAND' macro.  If
2533
   `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no punctuation
2534
   characters (except for the standard one, `%') are used in this way.  */
2535
/* . == gr0
2536
   # == hint operand -- always zero for now
2537
   @ == small data base register (gr16)
2538
   ~ == pic register (gr17)
2539
   * == temporary integer CCR register (cr3)
2540
   & == temporary integer ICC register (icc3)  */
2541
#define PRINT_OPERAND_PUNCT_VALID_P(CODE)                               \
2542
((CODE) == '.' || (CODE) == '#' || (CODE) == '@' || (CODE) == '~'       \
2543
 || (CODE) == '*' || (CODE) == '&')
2544
 
2545
/* A C compound statement to output to stdio stream STREAM the assembler syntax
2546
   for an instruction operand that is a memory reference whose address is X.  X
2547
   is an RTL expression.
2548
 
2549
   On some machines, the syntax for a symbolic address depends on the section
2550
   that the address refers to.  On these machines, define the macro
2551
   `ENCODE_SECTION_INFO' to store the information into the `symbol_ref', and
2552
   then check for it here.
2553
 
2554
   This declaration must be present.  */
2555
#define PRINT_OPERAND_ADDRESS(STREAM, X) frv_print_operand_address (STREAM, X)
2556
 
2557
/* If defined, C string expressions to be used for the `%R', `%L', `%U', and
2558
   `%I' options of `asm_fprintf' (see `final.c').  These are useful when a
2559
   single `md' file must support multiple assembler formats.  In that case, the
2560
   various `tm.h' files can define these macros differently.
2561
 
2562
   USER_LABEL_PREFIX is defined in svr4.h.  */
2563
#undef USER_LABEL_PREFIX
2564
#define USER_LABEL_PREFIX ""
2565
#define REGISTER_PREFIX ""
2566
#define LOCAL_LABEL_PREFIX "."
2567
#define IMMEDIATE_PREFIX "#"
2568
 
2569
 
2570
/* Output of dispatch tables.  */
2571
 
2572
/* This macro should be provided on machines where the addresses in a dispatch
2573
   table are relative to the table's own address.
2574
 
2575
   The definition should be a C statement to output to the stdio stream STREAM
2576
   an assembler pseudo-instruction to generate a difference between two labels.
2577
   VALUE and REL are the numbers of two internal labels.  The definitions of
2578
   these labels are output using `(*targetm.asm_out.internal_label)', and they must be
2579
   printed in the same way here.  For example,
2580
 
2581
        fprintf (STREAM, "\t.word L%d-L%d\n", VALUE, REL)  */
2582
#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \
2583
fprintf (STREAM, "\t.word .L%d-.L%d\n", VALUE, REL)
2584
 
2585
/* This macro should be provided on machines where the addresses in a dispatch
2586
   table are absolute.
2587
 
2588
   The definition should be a C statement to output to the stdio stream STREAM
2589
   an assembler pseudo-instruction to generate a reference to a label.  VALUE
2590
   is the number of an internal label whose definition is output using
2591
   `(*targetm.asm_out.internal_label)'.  For example,
2592
 
2593
        fprintf (STREAM, "\t.word L%d\n", VALUE)  */
2594
#define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) \
2595
fprintf (STREAM, "\t.word .L%d\n", VALUE)
2596
 
2597
/* Define this if the label before a jump-table needs to be output specially.
2598
   The first three arguments are the same as for `(*targetm.asm_out.internal_label)';
2599
   the fourth argument is the jump-table which follows (a `jump_insn'
2600
   containing an `addr_vec' or `addr_diff_vec').
2601
 
2602
   This feature is used on system V to output a `swbeg' statement for the
2603
   table.
2604
 
2605
   If this macro is not defined, these labels are output with
2606
   `(*targetm.asm_out.internal_label)'.
2607
 
2608
   Defined in svr4.h.  */
2609
/* When generating embedded PIC or mips16 code we want to put the jump
2610
   table in the .text section.  In all other cases, we want to put the
2611
   jump table in the .rdata section.  Unfortunately, we can't use
2612
   JUMP_TABLES_IN_TEXT_SECTION, because it is not conditional.
2613
   Instead, we use ASM_OUTPUT_CASE_LABEL to switch back to the .text
2614
   section if appropriate.  */
2615
 
2616
#undef  ASM_OUTPUT_CASE_LABEL
2617
#define ASM_OUTPUT_CASE_LABEL(STREAM, PREFIX, NUM, TABLE)               \
2618
do {                                                                    \
2619
  if (flag_pic)                                                         \
2620
    switch_to_section (function_section (current_function_decl));       \
2621
  (*targetm.asm_out.internal_label) (STREAM, PREFIX, NUM);              \
2622
} while (0)
2623
 
2624
 
2625
/* Assembler Commands for Exception Regions.  */
2626
 
2627
/* Define this macro to 0 if your target supports DWARF 2 frame unwind
2628
   information, but it does not yet work with exception handling.  Otherwise,
2629
   if your target supports this information (if it defines
2630
   `INCOMING_RETURN_ADDR_RTX' and either `UNALIGNED_INT_ASM_OP' or
2631
   `OBJECT_FORMAT_ELF'), GCC will provide a default definition of 1.
2632
 
2633
   If this macro is defined to 1, the DWARF 2 unwinder will be the default
2634
   exception handling mechanism; otherwise, setjmp/longjmp will be used by
2635
   default.
2636
 
2637
   If this macro is defined to anything, the DWARF 2 unwinder will be used
2638
   instead of inline unwinders and __unwind_function in the non-setjmp case.  */
2639
#define DWARF2_UNWIND_INFO 1
2640
 
2641
#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (LR_REGNO)
2642
 
2643
/* Assembler Commands for Alignment.  */
2644
 
2645
/* A C statement to output to the stdio stream STREAM an assembler instruction
2646
   to advance the location counter by NBYTES bytes.  Those bytes should be zero
2647
   when loaded.  NBYTES will be a C expression of type `int'.
2648
 
2649
   Defined in svr4.h.  */
2650
#undef  ASM_OUTPUT_SKIP
2651
#define ASM_OUTPUT_SKIP(STREAM, NBYTES) \
2652
  fprintf (STREAM, "\t.zero\t%u\n", (int)(NBYTES))
2653
 
2654
/* A C statement to output to the stdio stream STREAM an assembler command to
2655
   advance the location counter to a multiple of 2 to the POWER bytes.  POWER
2656
   will be a C expression of type `int'.  */
2657
#define ASM_OUTPUT_ALIGN(STREAM, POWER) \
2658
  fprintf ((STREAM), "\t.p2align %d\n", (POWER))
2659
 
2660
/* Inside the text section, align with unpacked nops rather than zeros.  */
2661
#define ASM_OUTPUT_ALIGN_WITH_NOP(STREAM, POWER) \
2662
  fprintf ((STREAM), "\t.p2alignl %d,0x80880000\n", (POWER))
2663
 
2664
/* Macros Affecting all Debug Formats.  */
2665
 
2666
/* A C expression that returns the DBX register number for the compiler
2667
   register number REGNO.  In simple cases, the value of this expression may be
2668
   REGNO itself.  But sometimes there are some registers that the compiler
2669
   knows about and DBX does not, or vice versa.  In such cases, some register
2670
   may need to have one number in the compiler and another for DBX.
2671
 
2672
   If two registers have consecutive numbers inside GCC, and they can be
2673
   used as a pair to hold a multiword value, then they *must* have consecutive
2674
   numbers after renumbering with `DBX_REGISTER_NUMBER'.  Otherwise, debuggers
2675
   will be unable to access such a pair, because they expect register pairs to
2676
   be consecutive in their own numbering scheme.
2677
 
2678
   If you find yourself defining `DBX_REGISTER_NUMBER' in way that does not
2679
   preserve register pairs, then what you must do instead is redefine the
2680
   actual register numbering scheme.
2681
 
2682
   This declaration is required.  */
2683
#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
2684
 
2685
/* A C expression that returns the type of debugging output GCC produces
2686
   when the user specifies `-g' or `-ggdb'.  Define this if you have arranged
2687
   for GCC to support more than one format of debugging output.  Currently,
2688
   the allowable values are `DBX_DEBUG', `SDB_DEBUG', `DWARF_DEBUG',
2689
   `DWARF2_DEBUG', and `XCOFF_DEBUG'.
2690
 
2691
   The value of this macro only affects the default debugging output; the user
2692
   can always get a specific type of output by using `-gstabs', `-gcoff',
2693
   `-gdwarf-1', `-gdwarf-2', or `-gxcoff'.
2694
 
2695
   Defined in svr4.h.  */
2696
#undef  PREFERRED_DEBUGGING_TYPE
2697
#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
2698
 
2699
/* Miscellaneous Parameters.  */
2700
 
2701
/* An alias for a machine mode name.  This is the machine mode that elements of
2702
   a jump-table should have.  */
2703
#define CASE_VECTOR_MODE SImode
2704
 
2705
/* Define this macro if operations between registers with integral mode smaller
2706
   than a word are always performed on the entire register.  Most RISC machines
2707
   have this property and most CISC machines do not.  */
2708
#define WORD_REGISTER_OPERATIONS
2709
 
2710
/* Define this macro to be a C expression indicating when insns that read
2711
   memory in MODE, an integral mode narrower than a word, set the bits outside
2712
   of MODE to be either the sign-extension or the zero-extension of the data
2713
   read.  Return `SIGN_EXTEND' for values of MODE for which the insn
2714
   sign-extends, `ZERO_EXTEND' for which it zero-extends, and `UNKNOWN' for other
2715
   modes.
2716
 
2717
   This macro is not called with MODE non-integral or with a width greater than
2718
   or equal to `BITS_PER_WORD', so you may return any value in this case.  Do
2719
   not define this macro if it would always return `UNKNOWN'.  On machines where
2720
   this macro is defined, you will normally define it as the constant
2721
   `SIGN_EXTEND' or `ZERO_EXTEND'.  */
2722
#define LOAD_EXTEND_OP(MODE) SIGN_EXTEND
2723
 
2724
/* Define if loading short immediate values into registers sign extends.  */
2725
#define SHORT_IMMEDIATES_SIGN_EXTEND
2726
 
2727
/* The maximum number of bytes that a single instruction can move quickly from
2728
   memory to memory.  */
2729
#define MOVE_MAX 8
2730
 
2731
/* A C expression which is nonzero if on this machine it is safe to "convert"
2732
   an integer of INPREC bits to one of OUTPREC bits (where OUTPREC is smaller
2733
   than INPREC) by merely operating on it as if it had only OUTPREC bits.
2734
 
2735
   On many machines, this expression can be 1.
2736
 
2737
   When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for modes for
2738
   which `MODES_TIEABLE_P' is 0, suboptimal code can result.  If this is the
2739
   case, making `TRULY_NOOP_TRUNCATION' return 0 in such cases may improve
2740
   things.  */
2741
#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
2742
 
2743
/* An alias for the machine mode for pointers.  On most machines, define this
2744
   to be the integer mode corresponding to the width of a hardware pointer;
2745
   `SImode' on 32-bit machine or `DImode' on 64-bit machines.  On some machines
2746
   you must define this to be one of the partial integer modes, such as
2747
   `PSImode'.
2748
 
2749
   The width of `Pmode' must be at least as large as the value of
2750
   `POINTER_SIZE'.  If it is not equal, you must define the macro
2751
   `POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to `Pmode'.  */
2752
#define Pmode SImode
2753
 
2754
/* An alias for the machine mode used for memory references to functions being
2755
   called, in `call' RTL expressions.  On most machines this should be
2756
   `QImode'.  */
2757
#define FUNCTION_MODE QImode
2758
 
2759
/* Define this macro to handle System V style pragmas: #pragma pack and
2760
   #pragma weak.  Note, #pragma weak will only be supported if SUPPORT_WEAK is
2761
   defined.
2762
 
2763
   Defined in svr4.h.  */
2764
#define HANDLE_SYSV_PRAGMA 1
2765
 
2766
/* A C expression for the maximum number of instructions to execute via
2767
   conditional execution instructions instead of a branch.  A value of
2768
   BRANCH_COST+1 is the default if the machine does not use
2769
   cc0, and 1 if it does use cc0.  */
2770
#define MAX_CONDITIONAL_EXECUTE frv_condexec_insns
2771
 
2772
/* A C expression to modify the code described by the conditional if
2773
   information CE_INFO, possibly updating the tests in TRUE_EXPR, and
2774
   FALSE_EXPR for converting if-then and if-then-else code to conditional
2775
   instructions.  Set either TRUE_EXPR or FALSE_EXPR to a null pointer if the
2776
   tests cannot be converted.  */
2777
#define IFCVT_MODIFY_TESTS(CE_INFO, TRUE_EXPR, FALSE_EXPR)              \
2778
frv_ifcvt_modify_tests (CE_INFO, &TRUE_EXPR, &FALSE_EXPR)
2779
 
2780
/* A C expression to modify the code described by the conditional if
2781
   information CE_INFO, for the basic block BB, possibly updating the tests in
2782
   TRUE_EXPR, and FALSE_EXPR for converting the && and || parts of if-then or
2783
   if-then-else code to conditional instructions.  OLD_TRUE and OLD_FALSE are
2784
   the previous tests.  Set either TRUE_EXPR or FALSE_EXPR to a null pointer if
2785
   the tests cannot be converted.  */
2786
#define IFCVT_MODIFY_MULTIPLE_TESTS(CE_INFO, BB, TRUE_EXPR, FALSE_EXPR) \
2787
frv_ifcvt_modify_multiple_tests (CE_INFO, BB, &TRUE_EXPR, &FALSE_EXPR)
2788
 
2789
/* A C expression to modify the code described by the conditional if
2790
   information CE_INFO with the new PATTERN in INSN.  If PATTERN is a null
2791
   pointer after the IFCVT_MODIFY_INSN macro executes, it is assumed that that
2792
   insn cannot be converted to be executed conditionally.  */
2793
#define IFCVT_MODIFY_INSN(CE_INFO, PATTERN, INSN) \
2794
(PATTERN) = frv_ifcvt_modify_insn (CE_INFO, PATTERN, INSN)
2795
 
2796
/* A C expression to perform any final machine dependent modifications in
2797
   converting code to conditional execution in the code described by the
2798
   conditional if information CE_INFO.  */
2799
#define IFCVT_MODIFY_FINAL(CE_INFO) frv_ifcvt_modify_final (CE_INFO)
2800
 
2801
/* A C expression to cancel any machine dependent modifications in converting
2802
   code to conditional execution in the code described by the conditional if
2803
   information CE_INFO.  */
2804
#define IFCVT_MODIFY_CANCEL(CE_INFO) frv_ifcvt_modify_cancel (CE_INFO)
2805
 
2806
/* Initialize the extra fields provided by IFCVT_EXTRA_FIELDS.  */
2807
#define IFCVT_INIT_EXTRA_FIELDS(CE_INFO) frv_ifcvt_init_extra_fields (CE_INFO)
2808
 
2809
/* The definition of the following macro results in that the 2nd jump
2810
   optimization (after the 2nd insn scheduling) is minimal.  It is
2811
   necessary to define when start cycle marks of insns (TImode is used
2812
   for this) is used for VLIW insn packing.  Some jump optimizations
2813
   make such marks invalid.  These marks are corrected for some
2814
   (minimal) optimizations.  ??? Probably the macro is temporary.
2815
   Final solution could making the 2nd jump optimizations before the
2816
   2nd instruction scheduling or corrections of the marks for all jump
2817
   optimizations.  Although some jump optimizations are actually
2818
   deoptimizations for VLIW (super-scalar) processors.  */
2819
 
2820
#define MINIMAL_SECOND_JUMP_OPTIMIZATION
2821
 
2822
 
2823
/* If the following macro is defined and nonzero and deterministic
2824
   finite state automata are used for pipeline hazard recognition, the
2825
   code making resource-constrained software pipelining is on.  */
2826
#define RCSP_SOFTWARE_PIPELINING 1
2827
 
2828
/* If the following macro is defined and nonzero and deterministic
2829
   finite state automata are used for pipeline hazard recognition, we
2830
   will try to exchange insns in queue ready to improve the schedule.
2831
   The more macro value, the more tries will be made.  */
2832
#define FIRST_CYCLE_MULTIPASS_SCHEDULING 1
2833
 
2834
/* The following macro is used only when value of
2835
   FIRST_CYCLE_MULTIPASS_SCHEDULING is nonzero.  The more macro value,
2836
   the more tries will be made to choose better schedule.  If the
2837
   macro value is zero or negative there will be no multi-pass
2838
   scheduling.  */
2839
#define FIRST_CYCLE_MULTIPASS_SCHEDULING_LOOKAHEAD frv_sched_lookahead
2840
 
2841
enum frv_builtins
2842
{
2843
  FRV_BUILTIN_MAND,
2844
  FRV_BUILTIN_MOR,
2845
  FRV_BUILTIN_MXOR,
2846
  FRV_BUILTIN_MNOT,
2847
  FRV_BUILTIN_MAVEH,
2848
  FRV_BUILTIN_MSATHS,
2849
  FRV_BUILTIN_MSATHU,
2850
  FRV_BUILTIN_MADDHSS,
2851
  FRV_BUILTIN_MADDHUS,
2852
  FRV_BUILTIN_MSUBHSS,
2853
  FRV_BUILTIN_MSUBHUS,
2854
  FRV_BUILTIN_MPACKH,
2855
  FRV_BUILTIN_MQADDHSS,
2856
  FRV_BUILTIN_MQADDHUS,
2857
  FRV_BUILTIN_MQSUBHSS,
2858
  FRV_BUILTIN_MQSUBHUS,
2859
  FRV_BUILTIN_MUNPACKH,
2860
  FRV_BUILTIN_MDPACKH,
2861
  FRV_BUILTIN_MBTOH,
2862
  FRV_BUILTIN_MHTOB,
2863
  FRV_BUILTIN_MCOP1,
2864
  FRV_BUILTIN_MCOP2,
2865
  FRV_BUILTIN_MROTLI,
2866
  FRV_BUILTIN_MROTRI,
2867
  FRV_BUILTIN_MWCUT,
2868
  FRV_BUILTIN_MSLLHI,
2869
  FRV_BUILTIN_MSRLHI,
2870
  FRV_BUILTIN_MSRAHI,
2871
  FRV_BUILTIN_MEXPDHW,
2872
  FRV_BUILTIN_MEXPDHD,
2873
  FRV_BUILTIN_MMULHS,
2874
  FRV_BUILTIN_MMULHU,
2875
  FRV_BUILTIN_MMULXHS,
2876
  FRV_BUILTIN_MMULXHU,
2877
  FRV_BUILTIN_MMACHS,
2878
  FRV_BUILTIN_MMACHU,
2879
  FRV_BUILTIN_MMRDHS,
2880
  FRV_BUILTIN_MMRDHU,
2881
  FRV_BUILTIN_MQMULHS,
2882
  FRV_BUILTIN_MQMULHU,
2883
  FRV_BUILTIN_MQMULXHU,
2884
  FRV_BUILTIN_MQMULXHS,
2885
  FRV_BUILTIN_MQMACHS,
2886
  FRV_BUILTIN_MQMACHU,
2887
  FRV_BUILTIN_MCPXRS,
2888
  FRV_BUILTIN_MCPXRU,
2889
  FRV_BUILTIN_MCPXIS,
2890
  FRV_BUILTIN_MCPXIU,
2891
  FRV_BUILTIN_MQCPXRS,
2892
  FRV_BUILTIN_MQCPXRU,
2893
  FRV_BUILTIN_MQCPXIS,
2894
  FRV_BUILTIN_MQCPXIU,
2895
  FRV_BUILTIN_MCUT,
2896
  FRV_BUILTIN_MCUTSS,
2897
  FRV_BUILTIN_MWTACC,
2898
  FRV_BUILTIN_MWTACCG,
2899
  FRV_BUILTIN_MRDACC,
2900
  FRV_BUILTIN_MRDACCG,
2901
  FRV_BUILTIN_MTRAP,
2902
  FRV_BUILTIN_MCLRACC,
2903
  FRV_BUILTIN_MCLRACCA,
2904
  FRV_BUILTIN_MDUNPACKH,
2905
  FRV_BUILTIN_MBTOHE,
2906
  FRV_BUILTIN_MQXMACHS,
2907
  FRV_BUILTIN_MQXMACXHS,
2908
  FRV_BUILTIN_MQMACXHS,
2909
  FRV_BUILTIN_MADDACCS,
2910
  FRV_BUILTIN_MSUBACCS,
2911
  FRV_BUILTIN_MASACCS,
2912
  FRV_BUILTIN_MDADDACCS,
2913
  FRV_BUILTIN_MDSUBACCS,
2914
  FRV_BUILTIN_MDASACCS,
2915
  FRV_BUILTIN_MABSHS,
2916
  FRV_BUILTIN_MDROTLI,
2917
  FRV_BUILTIN_MCPLHI,
2918
  FRV_BUILTIN_MCPLI,
2919
  FRV_BUILTIN_MDCUTSSI,
2920
  FRV_BUILTIN_MQSATHS,
2921
  FRV_BUILTIN_MQLCLRHS,
2922
  FRV_BUILTIN_MQLMTHS,
2923
  FRV_BUILTIN_MQSLLHI,
2924
  FRV_BUILTIN_MQSRAHI,
2925
  FRV_BUILTIN_MHSETLOS,
2926
  FRV_BUILTIN_MHSETLOH,
2927
  FRV_BUILTIN_MHSETHIS,
2928
  FRV_BUILTIN_MHSETHIH,
2929
  FRV_BUILTIN_MHDSETS,
2930
  FRV_BUILTIN_MHDSETH,
2931
  FRV_BUILTIN_SMUL,
2932
  FRV_BUILTIN_UMUL,
2933
  FRV_BUILTIN_PREFETCH0,
2934
  FRV_BUILTIN_PREFETCH,
2935
  FRV_BUILTIN_SMASS,
2936
  FRV_BUILTIN_SMSSS,
2937
  FRV_BUILTIN_SMU,
2938
  FRV_BUILTIN_SCUTSS,
2939
  FRV_BUILTIN_ADDSS,
2940
  FRV_BUILTIN_SUBSS,
2941
  FRV_BUILTIN_SLASS,
2942
  FRV_BUILTIN_IACCreadll,
2943
  FRV_BUILTIN_IACCreadl,
2944
  FRV_BUILTIN_IACCsetll,
2945
  FRV_BUILTIN_IACCsetl,
2946
  FRV_BUILTIN_SCAN,
2947
  FRV_BUILTIN_READ8,
2948
  FRV_BUILTIN_READ16,
2949
  FRV_BUILTIN_READ32,
2950
  FRV_BUILTIN_READ64,
2951
  FRV_BUILTIN_WRITE8,
2952
  FRV_BUILTIN_WRITE16,
2953
  FRV_BUILTIN_WRITE32,
2954
  FRV_BUILTIN_WRITE64
2955
};
2956
#define FRV_BUILTIN_FIRST_NONMEDIA FRV_BUILTIN_SMUL
2957
 
2958
/* Enable prototypes on the call rtl functions.  */
2959
#define MD_CALL_PROTOTYPES 1
2960
 
2961
extern GTY(()) rtx frv_compare_op0;                     /* operand save for */
2962
extern GTY(()) rtx frv_compare_op1;                     /* comparison generation */
2963
 
2964
#define CPU_UNITS_QUERY 1
2965
 
2966
#ifdef __FRV_FDPIC__
2967
#define CRT_GET_RFIB_DATA(dbase) \
2968
  ({ extern void *_GLOBAL_OFFSET_TABLE_; (dbase) = &_GLOBAL_OFFSET_TABLE_; })
2969
#endif
2970
 
2971
#endif /* __FRV_H__ */

powered by: WebSVN 2.1.0

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