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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [config/] [alpha/] [alpha.h] - Blame information for rev 12

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 jlechner
/* Definitions of target machine for GNU compiler, for DEC Alpha.
2
   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3
   2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
4
   Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
5
 
6
This file is part of GCC.
7
 
8
GCC is free software; you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation; either version 2, or (at your option)
11
any later version.
12
 
13
GCC is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
GNU General Public License for more details.
17
 
18
You should have received a copy of the GNU General Public License
19
along with GCC; see the file COPYING.  If not, write to
20
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21
Boston, MA 02110-1301, USA.  */
22
 
23
/* Target CPU builtins.  */
24
#define TARGET_CPU_CPP_BUILTINS()                       \
25
  do                                                    \
26
    {                                                   \
27
        builtin_define ("__alpha");                     \
28
        builtin_define ("__alpha__");                   \
29
        builtin_assert ("cpu=alpha");                   \
30
        builtin_assert ("machine=alpha");               \
31
        if (TARGET_CIX)                                 \
32
          {                                             \
33
            builtin_define ("__alpha_cix__");           \
34
            builtin_assert ("cpu=cix");                 \
35
          }                                             \
36
        if (TARGET_FIX)                                 \
37
          {                                             \
38
            builtin_define ("__alpha_fix__");           \
39
            builtin_assert ("cpu=fix");                 \
40
          }                                             \
41
        if (TARGET_BWX)                                 \
42
          {                                             \
43
            builtin_define ("__alpha_bwx__");           \
44
            builtin_assert ("cpu=bwx");                 \
45
          }                                             \
46
        if (TARGET_MAX)                                 \
47
          {                                             \
48
            builtin_define ("__alpha_max__");           \
49
            builtin_assert ("cpu=max");                 \
50
          }                                             \
51
        if (alpha_cpu == PROCESSOR_EV6)                 \
52
          {                                             \
53
            builtin_define ("__alpha_ev6__");           \
54
            builtin_assert ("cpu=ev6");                 \
55
          }                                             \
56
        else if (alpha_cpu == PROCESSOR_EV5)            \
57
          {                                             \
58
            builtin_define ("__alpha_ev5__");           \
59
            builtin_assert ("cpu=ev5");                 \
60
          }                                             \
61
        else    /* Presumably ev4.  */                  \
62
          {                                             \
63
            builtin_define ("__alpha_ev4__");           \
64
            builtin_assert ("cpu=ev4");                 \
65
          }                                             \
66
        if (TARGET_IEEE || TARGET_IEEE_WITH_INEXACT)    \
67
          builtin_define ("_IEEE_FP");                  \
68
        if (TARGET_IEEE_WITH_INEXACT)                   \
69
          builtin_define ("_IEEE_FP_INEXACT");          \
70
        if (TARGET_LONG_DOUBLE_128)                     \
71
          builtin_define ("__LONG_DOUBLE_128__");       \
72
                                                        \
73
        /* Macros dependent on the C dialect.  */       \
74
        SUBTARGET_LANGUAGE_CPP_BUILTINS();              \
75
} while (0)
76
 
77
#ifndef SUBTARGET_LANGUAGE_CPP_BUILTINS
78
#define SUBTARGET_LANGUAGE_CPP_BUILTINS()               \
79
  do                                                    \
80
    {                                                   \
81
      if (preprocessing_asm_p ())                       \
82
        builtin_define_std ("LANGUAGE_ASSEMBLY");       \
83
      else if (c_dialect_cxx ())                        \
84
        {                                               \
85
          builtin_define ("__LANGUAGE_C_PLUS_PLUS");    \
86
          builtin_define ("__LANGUAGE_C_PLUS_PLUS__");  \
87
        }                                               \
88
      else                                              \
89
        builtin_define_std ("LANGUAGE_C");              \
90
      if (c_dialect_objc ())                            \
91
        {                                               \
92
          builtin_define ("__LANGUAGE_OBJECTIVE_C");    \
93
          builtin_define ("__LANGUAGE_OBJECTIVE_C__");  \
94
        }                                               \
95
    }                                                   \
96
  while (0)
97
#endif
98
 
99
#define CPP_SPEC "%(cpp_subtarget)"
100
 
101
#ifndef CPP_SUBTARGET_SPEC
102
#define CPP_SUBTARGET_SPEC ""
103
#endif
104
 
105
#define WORD_SWITCH_TAKES_ARG(STR)              \
106
 (!strcmp (STR, "rpath") || DEFAULT_WORD_SWITCH_TAKES_ARG(STR))
107
 
108
/* Print subsidiary information on the compiler version in use.  */
109
#define TARGET_VERSION
110
 
111
/* Run-time compilation parameters selecting different hardware subsets.  */
112
 
113
/* Which processor to schedule for. The cpu attribute defines a list that
114
   mirrors this list, so changes to alpha.md must be made at the same time.  */
115
 
116
enum processor_type
117
{
118
  PROCESSOR_EV4,                        /* 2106[46]{a,} */
119
  PROCESSOR_EV5,                        /* 21164{a,pc,} */
120
  PROCESSOR_EV6,                        /* 21264 */
121
  PROCESSOR_MAX
122
};
123
 
124
extern enum processor_type alpha_cpu;
125
extern enum processor_type alpha_tune;
126
 
127
enum alpha_trap_precision
128
{
129
  ALPHA_TP_PROG,        /* No precision (default).  */
130
  ALPHA_TP_FUNC,        /* Trap contained within originating function.  */
131
  ALPHA_TP_INSN         /* Instruction accuracy and code is resumption safe.  */
132
};
133
 
134
enum alpha_fp_rounding_mode
135
{
136
  ALPHA_FPRM_NORM,      /* Normal rounding mode.  */
137
  ALPHA_FPRM_MINF,      /* Round towards minus-infinity.  */
138
  ALPHA_FPRM_CHOP,      /* Chopped rounding mode (towards 0).  */
139
  ALPHA_FPRM_DYN        /* Dynamic rounding mode.  */
140
};
141
 
142
enum alpha_fp_trap_mode
143
{
144
  ALPHA_FPTM_N,         /* Normal trap mode.  */
145
  ALPHA_FPTM_U,         /* Underflow traps enabled.  */
146
  ALPHA_FPTM_SU,        /* Software completion, w/underflow traps */
147
  ALPHA_FPTM_SUI        /* Software completion, w/underflow & inexact traps */
148
};
149
 
150
extern int target_flags;
151
 
152
extern enum alpha_trap_precision alpha_tp;
153
extern enum alpha_fp_rounding_mode alpha_fprm;
154
extern enum alpha_fp_trap_mode alpha_fptm;
155
 
156
/* Invert the easy way to make options work.  */
157
#define TARGET_FP       (!TARGET_SOFT_FP)
158
 
159
/* These are for target os support and cannot be changed at runtime.  */
160
#define TARGET_ABI_WINDOWS_NT 0
161
#define TARGET_ABI_OPEN_VMS 0
162
#define TARGET_ABI_UNICOSMK 0
163
#define TARGET_ABI_OSF (!TARGET_ABI_WINDOWS_NT  \
164
                        && !TARGET_ABI_OPEN_VMS \
165
                        && !TARGET_ABI_UNICOSMK)
166
 
167
#ifndef TARGET_AS_CAN_SUBTRACT_LABELS
168
#define TARGET_AS_CAN_SUBTRACT_LABELS TARGET_GAS
169
#endif
170
#ifndef TARGET_AS_SLASH_BEFORE_SUFFIX
171
#define TARGET_AS_SLASH_BEFORE_SUFFIX TARGET_GAS
172
#endif
173
#ifndef TARGET_CAN_FAULT_IN_PROLOGUE
174
#define TARGET_CAN_FAULT_IN_PROLOGUE 0
175
#endif
176
#ifndef TARGET_HAS_XFLOATING_LIBS
177
#define TARGET_HAS_XFLOATING_LIBS TARGET_LONG_DOUBLE_128
178
#endif
179
#ifndef TARGET_PROFILING_NEEDS_GP
180
#define TARGET_PROFILING_NEEDS_GP 0
181
#endif
182
#ifndef TARGET_LD_BUGGY_LDGP
183
#define TARGET_LD_BUGGY_LDGP 0
184
#endif
185
#ifndef TARGET_FIXUP_EV5_PREFETCH
186
#define TARGET_FIXUP_EV5_PREFETCH 0
187
#endif
188
#ifndef HAVE_AS_TLS
189
#define HAVE_AS_TLS 0
190
#endif
191
 
192
#define TARGET_DEFAULT MASK_FPREGS
193
 
194
#ifndef TARGET_CPU_DEFAULT
195
#define TARGET_CPU_DEFAULT 0
196
#endif
197
 
198
#ifndef TARGET_DEFAULT_EXPLICIT_RELOCS
199
#ifdef HAVE_AS_EXPLICIT_RELOCS
200
#define TARGET_DEFAULT_EXPLICIT_RELOCS MASK_EXPLICIT_RELOCS
201
#define TARGET_SUPPORT_ARCH 1
202
#else
203
#define TARGET_DEFAULT_EXPLICIT_RELOCS 0
204
#endif
205
#endif
206
 
207
#ifndef TARGET_SUPPORT_ARCH
208
#define TARGET_SUPPORT_ARCH 0
209
#endif
210
 
211
/* Support for a compile-time default CPU, et cetera.  The rules are:
212
   --with-cpu is ignored if -mcpu is specified.
213
   --with-tune is ignored if -mtune is specified.  */
214
#define OPTION_DEFAULT_SPECS \
215
  {"cpu", "%{!mcpu=*:-mcpu=%(VALUE)}" }, \
216
  {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }
217
 
218
/* This macro defines names of additional specifications to put in the
219
   specs that can be used in various specifications like CC1_SPEC.  Its
220
   definition is an initializer with a subgrouping for each command option.
221
 
222
   Each subgrouping contains a string constant, that defines the
223
   specification name, and a string constant that used by the GCC driver
224
   program.
225
 
226
   Do not define this macro if it does not need to do anything.  */
227
 
228
#ifndef SUBTARGET_EXTRA_SPECS
229
#define SUBTARGET_EXTRA_SPECS
230
#endif
231
 
232
#define EXTRA_SPECS                             \
233
  { "cpp_subtarget", CPP_SUBTARGET_SPEC },      \
234
  SUBTARGET_EXTRA_SPECS
235
 
236
 
237
/* Sometimes certain combinations of command options do not make sense
238
   on a particular target machine.  You can define a macro
239
   `OVERRIDE_OPTIONS' to take account of this.  This macro, if
240
   defined, is executed once just after all the command options have
241
   been parsed.
242
 
243
   On the Alpha, it is used to translate target-option strings into
244
   numeric values.  */
245
 
246
#define OVERRIDE_OPTIONS override_options ()
247
 
248
 
249
/* Define this macro to change register usage conditional on target flags.
250
 
251
   On the Alpha, we use this to disable the floating-point registers when
252
   they don't exist.  */
253
 
254
#define CONDITIONAL_REGISTER_USAGE              \
255
{                                               \
256
  int i;                                        \
257
  if (! TARGET_FPREGS)                          \
258
    for (i = 32; i < 63; i++)                   \
259
      fixed_regs[i] = call_used_regs[i] = 1;    \
260
}
261
 
262
 
263
/* Show we can debug even without a frame pointer.  */
264
#define CAN_DEBUG_WITHOUT_FP
265
 
266
/* target machine storage layout */
267
 
268
/* Define the size of `int'.  The default is the same as the word size.  */
269
#define INT_TYPE_SIZE 32
270
 
271
/* Define the size of `long long'.  The default is the twice the word size.  */
272
#define LONG_LONG_TYPE_SIZE 64
273
 
274
/* We're IEEE unless someone says to use VAX.  */
275
#define TARGET_FLOAT_FORMAT \
276
  (TARGET_FLOAT_VAX ? VAX_FLOAT_FORMAT : IEEE_FLOAT_FORMAT)
277
 
278
/* The two floating-point formats we support are S-floating, which is
279
   4 bytes, and T-floating, which is 8 bytes.  `float' is S and `double'
280
   and `long double' are T.  */
281
 
282
#define FLOAT_TYPE_SIZE 32
283
#define DOUBLE_TYPE_SIZE 64
284
#define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_128 ? 128 : 64)
285
 
286
/* Define this to set long double type size to use in libgcc2.c, which can
287
   not depend on target_flags.  */
288
#ifdef __LONG_DOUBLE_128__
289
#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128
290
#else
291
#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
292
#endif
293
 
294
/* Work around target_flags dependency in ada/targtyps.c.  */
295
#define WIDEST_HARDWARE_FP_SIZE 64
296
 
297
#define WCHAR_TYPE "unsigned int"
298
#define WCHAR_TYPE_SIZE 32
299
 
300
/* Define this macro if it is advisable to hold scalars in registers
301
   in a wider mode than that declared by the program.  In such cases,
302
   the value is constrained to be within the bounds of the declared
303
   type, but kept valid in the wider mode.  The signedness of the
304
   extension may differ from that of the type.
305
 
306
   For Alpha, we always store objects in a full register.  32-bit integers
307
   are always sign-extended, but smaller objects retain their signedness.
308
 
309
   Note that small vector types can get mapped onto integer modes at the
310
   whim of not appearing in alpha-modes.def.  We never promoted these
311
   values before; don't do so now that we've trimmed the set of modes to
312
   those actually implemented in the backend.  */
313
 
314
#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE)                       \
315
  if (GET_MODE_CLASS (MODE) == MODE_INT                         \
316
      && (TYPE == NULL || TREE_CODE (TYPE) != VECTOR_TYPE)      \
317
      && GET_MODE_SIZE (MODE) < UNITS_PER_WORD)                 \
318
    {                                                           \
319
      if ((MODE) == SImode)                                     \
320
        (UNSIGNEDP) = 0;                                 \
321
      (MODE) = DImode;                                          \
322
    }
323
 
324
/* Define this if most significant bit is lowest numbered
325
   in instructions that operate on numbered bit-fields.
326
 
327
   There are no such instructions on the Alpha, but the documentation
328
   is little endian.  */
329
#define BITS_BIG_ENDIAN 0
330
 
331
/* Define this if most significant byte of a word is the lowest numbered.
332
   This is false on the Alpha.  */
333
#define BYTES_BIG_ENDIAN 0
334
 
335
/* Define this if most significant word of a multiword number is lowest
336
   numbered.
337
 
338
   For Alpha we can decide arbitrarily since there are no machine instructions
339
   for them.  Might as well be consistent with bytes.  */
340
#define WORDS_BIG_ENDIAN 0
341
 
342
/* Width of a word, in units (bytes).  */
343
#define UNITS_PER_WORD 8
344
 
345
/* Width in bits of a pointer.
346
   See also the macro `Pmode' defined below.  */
347
#define POINTER_SIZE 64
348
 
349
/* Allocation boundary (in *bits*) for storing arguments in argument list.  */
350
#define PARM_BOUNDARY 64
351
 
352
/* Boundary (in *bits*) on which stack pointer should be aligned.  */
353
#define STACK_BOUNDARY 128
354
 
355
/* Allocation boundary (in *bits*) for the code of a function.  */
356
#define FUNCTION_BOUNDARY 32
357
 
358
/* Alignment of field after `int : 0' in a structure.  */
359
#define EMPTY_FIELD_BOUNDARY 64
360
 
361
/* Every structure's size must be a multiple of this.  */
362
#define STRUCTURE_SIZE_BOUNDARY 8
363
 
364
/* A bit-field declared as `int' forces `int' alignment for the struct.  */
365
#define PCC_BITFIELD_TYPE_MATTERS 1
366
 
367
/* No data type wants to be aligned rounder than this.  */
368
#define BIGGEST_ALIGNMENT 128
369
 
370
/* For atomic access to objects, must have at least 32-bit alignment
371
   unless the machine has byte operations.  */
372
#define MINIMUM_ATOMIC_ALIGNMENT ((unsigned int) (TARGET_BWX ? 8 : 32))
373
 
374
/* Align all constants and variables to at least a word boundary so
375
   we can pick up pieces of them faster.  */
376
/* ??? Only if block-move stuff knows about different source/destination
377
   alignment.  */
378
#if 0
379
#define CONSTANT_ALIGNMENT(EXP, ALIGN) MAX ((ALIGN), BITS_PER_WORD)
380
#define DATA_ALIGNMENT(EXP, ALIGN) MAX ((ALIGN), BITS_PER_WORD)
381
#endif
382
 
383
/* Set this nonzero if move instructions will actually fail to work
384
   when given unaligned data.
385
 
386
   Since we get an error message when we do one, call them invalid.  */
387
 
388
#define STRICT_ALIGNMENT 1
389
 
390
/* Set this nonzero if unaligned move instructions are extremely slow.
391
 
392
   On the Alpha, they trap.  */
393
 
394
#define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) 1
395
 
396
/* Standard register usage.  */
397
 
398
/* Number of actual hardware registers.
399
   The hardware registers are assigned numbers for the compiler
400
   from 0 to just below FIRST_PSEUDO_REGISTER.
401
   All registers that the compiler knows about must be given numbers,
402
   even those that are not normally considered general registers.
403
 
404
   We define all 32 integer registers, even though $31 is always zero,
405
   and all 32 floating-point registers, even though $f31 is also
406
   always zero.  We do not bother defining the FP status register and
407
   there are no other registers.
408
 
409
   Since $31 is always zero, we will use register number 31 as the
410
   argument pointer.  It will never appear in the generated code
411
   because we will always be eliminating it in favor of the stack
412
   pointer or hardware frame pointer.
413
 
414
   Likewise, we use $f31 for the frame pointer, which will always
415
   be eliminated in favor of the hardware frame pointer or the
416
   stack pointer.  */
417
 
418
#define FIRST_PSEUDO_REGISTER 64
419
 
420
/* 1 for registers that have pervasive standard uses
421
   and are not available for the register allocator.  */
422
 
423
#define FIXED_REGISTERS  \
424
 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
425
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, \
426
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
427
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }
428
 
429
/* 1 for registers not available across function calls.
430
   These must include the FIXED_REGISTERS and also any
431
   registers that can be used without being saved.
432
   The latter must include the registers where values are returned
433
   and the register where structure-value addresses are passed.
434
   Aside from that, you can include as many other registers as you like.  */
435
#define CALL_USED_REGISTERS  \
436
 {1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \
437
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, \
438
  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, \
439
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
440
 
441
/* List the order in which to allocate registers.  Each register must be
442
   listed once, even those in FIXED_REGISTERS.  */
443
 
444
#define REG_ALLOC_ORDER { \
445
   1, 2, 3, 4, 5, 6, 7, 8,      /* nonsaved integer registers */        \
446
   22, 23, 24, 25, 28,          /* likewise */                          \
447
   0,                            /* likewise, but return value */        \
448
   21, 20, 19, 18, 17, 16,      /* likewise, but input args */          \
449
   27,                          /* likewise, but OSF procedure value */ \
450
                                                                        \
451
   42, 43, 44, 45, 46, 47,      /* nonsaved floating-point registers */ \
452
   54, 55, 56, 57, 58, 59,      /* likewise */                          \
453
   60, 61, 62,                  /* likewise */                          \
454
   32, 33,                      /* likewise, but return values */       \
455
   53, 52, 51, 50, 49, 48,      /* likewise, but input args */          \
456
                                                                        \
457
   9, 10, 11, 12, 13, 14,       /* saved integer registers */           \
458
   26,                          /* return address */                    \
459
   15,                          /* hard frame pointer */                \
460
                                                                        \
461
   34, 35, 36, 37, 38, 39,      /* saved floating-point registers */    \
462
   40, 41,                      /* likewise */                          \
463
                                                                        \
464
   29, 30, 31, 63               /* gp, sp, ap, sfp */                   \
465
}
466
 
467
/* Return number of consecutive hard regs needed starting at reg REGNO
468
   to hold something of mode MODE.
469
   This is ordinarily the length in words of a value of mode MODE
470
   but can be less for certain modes in special long registers.  */
471
 
472
#define HARD_REGNO_NREGS(REGNO, MODE)   \
473
  ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
474
 
475
/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
476
   On Alpha, the integer registers can hold any mode.  The floating-point
477
   registers can hold 64-bit integers as well, but not smaller values.  */
478
 
479
#define HARD_REGNO_MODE_OK(REGNO, MODE)                                 \
480
  ((REGNO) >= 32 && (REGNO) <= 62                                       \
481
   ? (MODE) == SFmode || (MODE) == DFmode || (MODE) == DImode           \
482
     || (MODE) == SCmode || (MODE) == DCmode                            \
483
   : 1)
484
 
485
/* A C expression that is nonzero if a value of mode
486
   MODE1 is accessible in mode MODE2 without copying.
487
 
488
   This asymmetric test is true when MODE1 could be put
489
   in an FP register but MODE2 could not.  */
490
 
491
#define MODES_TIEABLE_P(MODE1, MODE2)                           \
492
  (HARD_REGNO_MODE_OK (32, (MODE1))                             \
493
   ? HARD_REGNO_MODE_OK (32, (MODE2))                           \
494
   : 1)
495
 
496
/* Specify the registers used for certain standard purposes.
497
   The values of these macros are register numbers.  */
498
 
499
/* Alpha pc isn't overloaded on a register that the compiler knows about.  */
500
/* #define PC_REGNUM  */
501
 
502
/* Register to use for pushing function arguments.  */
503
#define STACK_POINTER_REGNUM 30
504
 
505
/* Base register for access to local variables of the function.  */
506
#define HARD_FRAME_POINTER_REGNUM 15
507
 
508
/* Value should be nonzero if functions must have frame pointers.
509
   Zero means the frame pointer need not be set up (and parms
510
   may be accessed via the stack pointer) in functions that seem suitable.
511
   This is computed in `reload', in reload1.c.  */
512
#define FRAME_POINTER_REQUIRED 0
513
 
514
/* Base register for access to arguments of the function.  */
515
#define ARG_POINTER_REGNUM 31
516
 
517
/* Base register for access to local variables of function.  */
518
#define FRAME_POINTER_REGNUM 63
519
 
520
/* Register in which static-chain is passed to a function.
521
 
522
   For the Alpha, this is based on an example; the calling sequence
523
   doesn't seem to specify this.  */
524
#define STATIC_CHAIN_REGNUM 1
525
 
526
/* The register number of the register used to address a table of
527
   static data addresses in memory.  */
528
#define PIC_OFFSET_TABLE_REGNUM 29
529
 
530
/* Define this macro if the register defined by `PIC_OFFSET_TABLE_REGNUM'
531
   is clobbered by calls.  */
532
/* ??? It is and it isn't.  It's required to be valid for a given
533
   function when the function returns.  It isn't clobbered by
534
   current_file functions.  Moreover, we do not expose the ldgp
535
   until after reload, so we're probably safe.  */
536
/* #define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED */
537
 
538
/* Define the classes of registers for register constraints in the
539
   machine description.  Also define ranges of constants.
540
 
541
   One of the classes must always be named ALL_REGS and include all hard regs.
542
   If there is more than one class, another class must be named NO_REGS
543
   and contain no registers.
544
 
545
   The name GENERAL_REGS must be the name of a class (or an alias for
546
   another name such as ALL_REGS).  This is the class of registers
547
   that is allowed by "g" or "r" in a register constraint.
548
   Also, registers outside this class are allocated only when
549
   instructions express preferences for them.
550
 
551
   The classes must be numbered in nondecreasing order; that is,
552
   a larger-numbered class must never be contained completely
553
   in a smaller-numbered class.
554
 
555
   For any two classes, it is very desirable that there be another
556
   class that represents their union.  */
557
 
558
enum reg_class {
559
  NO_REGS, R0_REG, R24_REG, R25_REG, R27_REG,
560
  GENERAL_REGS, FLOAT_REGS, ALL_REGS,
561
  LIM_REG_CLASSES
562
};
563
 
564
#define N_REG_CLASSES (int) LIM_REG_CLASSES
565
 
566
/* Give names of register classes as strings for dump file.  */
567
 
568
#define REG_CLASS_NAMES                                 \
569
 {"NO_REGS", "R0_REG", "R24_REG", "R25_REG", "R27_REG", \
570
  "GENERAL_REGS", "FLOAT_REGS", "ALL_REGS" }
571
 
572
/* Define which registers fit in which classes.
573
   This is an initializer for a vector of HARD_REG_SET
574
   of length N_REG_CLASSES.  */
575
 
576
#define REG_CLASS_CONTENTS                              \
577
{ {0x00000000, 0x00000000},     /* NO_REGS */           \
578
  {0x00000001, 0x00000000},     /* R0_REG */            \
579
  {0x01000000, 0x00000000},     /* R24_REG */           \
580
  {0x02000000, 0x00000000},     /* R25_REG */           \
581
  {0x08000000, 0x00000000},     /* R27_REG */           \
582
  {0xffffffff, 0x80000000},     /* GENERAL_REGS */      \
583
  {0x00000000, 0x7fffffff},     /* FLOAT_REGS */        \
584
  {0xffffffff, 0xffffffff} }
585
 
586
/* The same information, inverted:
587
   Return the class number of the smallest class containing
588
   reg number REGNO.  This could be a conditional expression
589
   or could index an array.  */
590
 
591
#define REGNO_REG_CLASS(REGNO)                  \
592
 ((REGNO) == 0 ? R0_REG                          \
593
  : (REGNO) == 24 ? R24_REG                     \
594
  : (REGNO) == 25 ? R25_REG                     \
595
  : (REGNO) == 27 ? R27_REG                     \
596
  : (REGNO) >= 32 && (REGNO) <= 62 ? FLOAT_REGS \
597
  : GENERAL_REGS)
598
 
599
/* The class value for index registers, and the one for base regs.  */
600
#define INDEX_REG_CLASS NO_REGS
601
#define BASE_REG_CLASS GENERAL_REGS
602
 
603
/* Get reg_class from a letter such as appears in the machine description.  */
604
 
605
#define REG_CLASS_FROM_LETTER(C)        \
606
 ((C) == 'a' ? R24_REG                  \
607
  : (C) == 'b' ? R25_REG                \
608
  : (C) == 'c' ? R27_REG                \
609
  : (C) == 'f' ? FLOAT_REGS             \
610
  : (C) == 'v' ? R0_REG                 \
611
  : NO_REGS)
612
 
613
/* Define this macro to change register usage conditional on target flags.  */
614
/* #define CONDITIONAL_REGISTER_USAGE  */
615
 
616
/* The letters I, J, K, L, M, N, O, and P in a register constraint string
617
   can be used to stand for particular ranges of immediate operands.
618
   This macro defines what the ranges are.
619
   C is the letter, and VALUE is a constant value.
620
   Return 1 if VALUE is in the range specified by C.
621
 
622
   For Alpha:
623
   `I' is used for the range of constants most insns can contain.
624
   `J' is the constant zero.
625
   `K' is used for the constant in an LDA insn.
626
   `L' is used for the constant in a LDAH insn.
627
   `M' is used for the constants that can be AND'ed with using a ZAP insn.
628
   `N' is used for complemented 8-bit constants.
629
   `O' is used for negated 8-bit constants.
630
   `P' is used for the constants 1, 2 and 3.  */
631
 
632
#define CONST_OK_FOR_LETTER_P   alpha_const_ok_for_letter_p
633
 
634
/* Similar, but for floating or large integer constants, and defining letters
635
   G and H.   Here VALUE is the CONST_DOUBLE rtx itself.
636
 
637
   For Alpha, `G' is the floating-point constant zero.  `H' is a CONST_DOUBLE
638
   that is the operand of a ZAP insn.  */
639
 
640
#define CONST_DOUBLE_OK_FOR_LETTER_P  alpha_const_double_ok_for_letter_p
641
 
642
/* Optional extra constraints for this machine.
643
 
644
   For the Alpha, `Q' means that this is a memory operand but not a
645
   reference to an unaligned location.
646
 
647
   `R' is a SYMBOL_REF that has SYMBOL_REF_FLAG set or is the current
648
   function.
649
 
650
   'S' is a 6-bit constant (valid for a shift insn).
651
 
652
   'T' is a HIGH.
653
 
654
   'U' is a symbolic operand.
655
 
656
   'W' is a vector zero.  */
657
 
658
#define EXTRA_CONSTRAINT  alpha_extra_constraint
659
 
660
/* Given an rtx X being reloaded into a reg required to be
661
   in class CLASS, return the class of reg to actually use.
662
   In general this is just CLASS; but on some machines
663
   in some cases it is preferable to use a more restrictive class.  */
664
 
665
#define PREFERRED_RELOAD_CLASS  alpha_preferred_reload_class
666
 
667
/* Loading and storing HImode or QImode values to and from memory
668
   usually requires a scratch register.  The exceptions are loading
669
   QImode and HImode from an aligned address to a general register
670
   unless byte instructions are permitted.
671
   We also cannot load an unaligned address or a paradoxical SUBREG into an
672
   FP register.  */
673
 
674
#define SECONDARY_INPUT_RELOAD_CLASS(CLASS,MODE,IN) \
675
  secondary_reload_class((CLASS), (MODE), (IN), 1)
676
 
677
#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS,MODE,OUT) \
678
  secondary_reload_class((CLASS), (MODE), (OUT), 0)
679
 
680
/* If we are copying between general and FP registers, we need a memory
681
   location unless the FIX extension is available.  */
682
 
683
#define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) \
684
 (! TARGET_FIX && (((CLASS1) == FLOAT_REGS && (CLASS2) != FLOAT_REGS) \
685
                   || ((CLASS2) == FLOAT_REGS && (CLASS1) != FLOAT_REGS)))
686
 
687
/* Specify the mode to be used for memory when a secondary memory
688
   location is needed.  If MODE is floating-point, use it.  Otherwise,
689
   widen to a word like the default.  This is needed because we always
690
   store integers in FP registers in quadword format.  This whole
691
   area is very tricky! */
692
#define SECONDARY_MEMORY_NEEDED_MODE(MODE)              \
693
  (GET_MODE_CLASS (MODE) == MODE_FLOAT ? (MODE)         \
694
   : GET_MODE_SIZE (MODE) >= 4 ? (MODE)                 \
695
   : mode_for_size (BITS_PER_WORD, GET_MODE_CLASS (MODE), 0))
696
 
697
/* Return the maximum number of consecutive registers
698
   needed to represent mode MODE in a register of class CLASS.  */
699
 
700
#define CLASS_MAX_NREGS(CLASS, MODE)                            \
701
 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
702
 
703
/* Return the class of registers that cannot change mode from FROM to TO.  */
704
 
705
#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS)               \
706
  (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO)                   \
707
   ? reg_classes_intersect_p (FLOAT_REGS, CLASS) : 0)
708
 
709
/* Define the cost of moving between registers of various classes.  Moving
710
   between FLOAT_REGS and anything else except float regs is expensive.
711
   In fact, we make it quite expensive because we really don't want to
712
   do these moves unless it is clearly worth it.  Optimizations may
713
   reduce the impact of not being able to allocate a pseudo to a
714
   hard register.  */
715
 
716
#define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2)                \
717
  (((CLASS1) == FLOAT_REGS) == ((CLASS2) == FLOAT_REGS) ? 2     \
718
   : TARGET_FIX ? ((CLASS1) == FLOAT_REGS ? 6 : 8)              \
719
   : 4+2*alpha_memory_latency)
720
 
721
/* A C expressions returning the cost of moving data of MODE from a register to
722
   or from memory.
723
 
724
   On the Alpha, bump this up a bit.  */
725
 
726
extern int alpha_memory_latency;
727
#define MEMORY_MOVE_COST(MODE,CLASS,IN)  (2*alpha_memory_latency)
728
 
729
/* Provide the cost of a branch.  Exact meaning under development.  */
730
#define BRANCH_COST 5
731
 
732
/* Stack layout; function entry, exit and calling.  */
733
 
734
/* Define this if pushing a word on the stack
735
   makes the stack pointer a smaller address.  */
736
#define STACK_GROWS_DOWNWARD
737
 
738
/* Define this to nonzero if the nominal address of the stack frame
739
   is at the high-address end of the local variables;
740
   that is, each additional local variable allocated
741
   goes at a more negative offset in the frame.  */
742
/* #define FRAME_GROWS_DOWNWARD 0 */
743
 
744
/* Offset within stack frame to start allocating local variables at.
745
   If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
746
   first local allocated.  Otherwise, it is the offset to the BEGINNING
747
   of the first local allocated.  */
748
 
749
#define STARTING_FRAME_OFFSET 0
750
 
751
/* If we generate an insn to push BYTES bytes,
752
   this says how many the stack pointer really advances by.
753
   On Alpha, don't define this because there are no push insns.  */
754
/*  #define PUSH_ROUNDING(BYTES) */
755
 
756
/* Define this to be nonzero if stack checking is built into the ABI.  */
757
#define STACK_CHECK_BUILTIN 1
758
 
759
/* Define this if the maximum size of all the outgoing args is to be
760
   accumulated and pushed during the prologue.  The amount can be
761
   found in the variable current_function_outgoing_args_size.  */
762
#define ACCUMULATE_OUTGOING_ARGS 1
763
 
764
/* Offset of first parameter from the argument pointer register value.  */
765
 
766
#define FIRST_PARM_OFFSET(FNDECL) 0
767
 
768
/* Definitions for register eliminations.
769
 
770
   We have two registers that can be eliminated on the Alpha.  First, the
771
   frame pointer register can often be eliminated in favor of the stack
772
   pointer register.  Secondly, the argument pointer register can always be
773
   eliminated; it is replaced with either the stack or frame pointer.  */
774
 
775
/* This is an array of structures.  Each structure initializes one pair
776
   of eliminable registers.  The "from" register number is given first,
777
   followed by "to".  Eliminations of the same "from" register are listed
778
   in order of preference.  */
779
 
780
#define ELIMINABLE_REGS                              \
781
{{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM},        \
782
 { ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM},   \
783
 { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM},      \
784
 { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}}
785
 
786
/* Given FROM and TO register numbers, say whether this elimination is allowed.
787
   Frame pointer elimination is automatically handled.
788
 
789
   All eliminations are valid since the cases where FP can't be
790
   eliminated are already handled.  */
791
 
792
#define CAN_ELIMINATE(FROM, TO) 1
793
 
794
/* Round up to a multiple of 16 bytes.  */
795
#define ALPHA_ROUND(X) (((X) + 15) & ~ 15)
796
 
797
/* Define the offset between two registers, one to be eliminated, and the other
798
   its replacement, at the start of a routine.  */
799
#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
800
  ((OFFSET) = alpha_initial_elimination_offset(FROM, TO))
801
 
802
/* Define this if stack space is still allocated for a parameter passed
803
   in a register.  */
804
/* #define REG_PARM_STACK_SPACE */
805
 
806
/* Value is the number of bytes of arguments automatically
807
   popped when returning from a subroutine call.
808
   FUNDECL is the declaration node of the function (as a tree),
809
   FUNTYPE is the data type of the function (as a tree),
810
   or for a library call it is an identifier node for the subroutine name.
811
   SIZE is the number of bytes of arguments passed on the stack.  */
812
 
813
#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0
814
 
815
/* Define how to find the value returned by a function.
816
   VALTYPE is the data type of the value (as a tree).
817
   If the precise function being called is known, FUNC is its FUNCTION_DECL;
818
   otherwise, FUNC is 0.
819
 
820
   On Alpha the value is found in $0 for integer functions and
821
   $f0 for floating-point functions.  */
822
 
823
#define FUNCTION_VALUE(VALTYPE, FUNC) \
824
  function_value (VALTYPE, FUNC, VOIDmode)
825
 
826
/* Define how to find the value returned by a library function
827
   assuming the value has mode MODE.  */
828
 
829
#define LIBCALL_VALUE(MODE) \
830
  function_value (NULL, NULL, MODE)
831
 
832
/* 1 if N is a possible register number for a function value
833
   as seen by the caller.  */
834
 
835
#define FUNCTION_VALUE_REGNO_P(N)  \
836
  ((N) == 0 || (N) == 1 || (N) == 32 || (N) == 33)
837
 
838
/* 1 if N is a possible register number for function argument passing.
839
   On Alpha, these are $16-$21 and $f16-$f21.  */
840
 
841
#define FUNCTION_ARG_REGNO_P(N) \
842
  (((N) >= 16 && (N) <= 21) || ((N) >= 16 + 32 && (N) <= 21 + 32))
843
 
844
/* Define a data type for recording info about an argument list
845
   during the scan of that argument list.  This data type should
846
   hold all necessary information about the function itself
847
   and about the args processed so far, enough to enable macros
848
   such as FUNCTION_ARG to determine where the next arg should go.
849
 
850
   On Alpha, this is a single integer, which is a number of words
851
   of arguments scanned so far.
852
   Thus 6 or more means all following args should go on the stack.  */
853
 
854
#define CUMULATIVE_ARGS int
855
 
856
/* Initialize a variable CUM of type CUMULATIVE_ARGS
857
   for a call to a function whose data type is FNTYPE.
858
   For a library call, FNTYPE is 0.  */
859
 
860
#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
861
  (CUM) = 0
862
 
863
/* Define intermediate macro to compute the size (in registers) of an argument
864
   for the Alpha.  */
865
 
866
#define ALPHA_ARG_SIZE(MODE, TYPE, NAMED)                               \
867
  ((MODE) == TFmode || (MODE) == TCmode ? 1                             \
868
   : (((MODE) == BLKmode ? int_size_in_bytes (TYPE) : GET_MODE_SIZE (MODE)) \
869
      + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
870
 
871
/* Update the data in CUM to advance over an argument
872
   of mode MODE and data type TYPE.
873
   (TYPE is null for libcalls where that information may not be available.)  */
874
 
875
#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)                    \
876
  ((CUM) +=                                                             \
877
   (targetm.calls.must_pass_in_stack (MODE, TYPE))                      \
878
    ? 6 : ALPHA_ARG_SIZE (MODE, TYPE, NAMED))
879
 
880
/* Determine where to put an argument to a function.
881
   Value is zero to push the argument on the stack,
882
   or a hard register in which to store the argument.
883
 
884
   MODE is the argument's machine mode.
885
   TYPE is the data type of the argument (as a tree).
886
    This is null for libcalls where that information may
887
    not be available.
888
   CUM is a variable of type CUMULATIVE_ARGS which gives info about
889
    the preceding args and about the function being called.
890
   NAMED is nonzero if this argument is a named parameter
891
    (otherwise it is an extra parameter matching an ellipsis).
892
 
893
   On Alpha the first 6 words of args are normally in registers
894
   and the rest are pushed.  */
895
 
896
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED)    \
897
  function_arg((CUM), (MODE), (TYPE), (NAMED))
898
 
899
/* Try to output insns to set TARGET equal to the constant C if it can be
900
   done in less than N insns.  Do all computations in MODE.  Returns the place
901
   where the output has been placed if it can be done and the insns have been
902
   emitted.  If it would take more than N insns, zero is returned and no
903
   insns and emitted.  */
904
 
905
/* Define the information needed to generate branch and scc insns.  This is
906
   stored from the compare operation.  Note that we can't use "rtx" here
907
   since it hasn't been defined!  */
908
 
909
struct alpha_compare
910
{
911
  struct rtx_def *op0, *op1;
912
  int fp_p;
913
};
914
 
915
extern struct alpha_compare alpha_compare;
916
 
917
/* Make (or fake) .linkage entry for function call.
918
   IS_LOCAL is 0 if name is used in call, 1 if name is used in definition.  */
919
 
920
/* This macro defines the start of an assembly comment.  */
921
 
922
#define ASM_COMMENT_START " #"
923
 
924
/* This macro produces the initial definition of a function.  */
925
 
926
#define ASM_DECLARE_FUNCTION_NAME(FILE,NAME,DECL) \
927
  alpha_start_function(FILE,NAME,DECL);
928
 
929
/* This macro closes up a function definition for the assembler.  */
930
 
931
#define ASM_DECLARE_FUNCTION_SIZE(FILE,NAME,DECL) \
932
  alpha_end_function(FILE,NAME,DECL)
933
 
934
/* Output any profiling code before the prologue.  */
935
 
936
#define PROFILE_BEFORE_PROLOGUE 1
937
 
938
/* Never use profile counters.  */
939
 
940
#define NO_PROFILE_COUNTERS 1
941
 
942
/* Output assembler code to FILE to increment profiler label # LABELNO
943
   for profiling a function entry.  Under OSF/1, profiling is enabled
944
   by simply passing -pg to the assembler and linker.  */
945
 
946
#define FUNCTION_PROFILER(FILE, LABELNO)
947
 
948
/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
949
   the stack pointer does not matter.  The value is tested only in
950
   functions that have frame pointers.
951
   No definition is equivalent to always zero.  */
952
 
953
#define EXIT_IGNORE_STACK 1
954
 
955
/* Define registers used by the epilogue and return instruction.  */
956
 
957
#define EPILOGUE_USES(REGNO)    ((REGNO) == 26)
958
 
959
/* Output assembler code for a block containing the constant parts
960
   of a trampoline, leaving space for the variable parts.
961
 
962
   The trampoline should set the static chain pointer to value placed
963
   into the trampoline and should branch to the specified routine.
964
   Note that $27 has been set to the address of the trampoline, so we can
965
   use it for addressability of the two data items.  */
966
 
967
#define TRAMPOLINE_TEMPLATE(FILE)               \
968
do {                                            \
969
  fprintf (FILE, "\tldq $1,24($27)\n");         \
970
  fprintf (FILE, "\tldq $27,16($27)\n");        \
971
  fprintf (FILE, "\tjmp $31,($27),0\n");        \
972
  fprintf (FILE, "\tnop\n");                    \
973
  fprintf (FILE, "\t.quad 0,0\n");              \
974
} while (0)
975
 
976
/* Section in which to place the trampoline.  On Alpha, instructions
977
   may only be placed in a text segment.  */
978
 
979
#define TRAMPOLINE_SECTION text_section
980
 
981
/* Length in units of the trampoline for entering a nested function.  */
982
 
983
#define TRAMPOLINE_SIZE    32
984
 
985
/* The alignment of a trampoline, in bits.  */
986
 
987
#define TRAMPOLINE_ALIGNMENT  64
988
 
989
/* Emit RTL insns to initialize the variable parts of a trampoline.
990
   FNADDR is an RTX for the address of the function's pure code.
991
   CXT is an RTX for the static chain value for the function.  */
992
 
993
#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
994
  alpha_initialize_trampoline (TRAMP, FNADDR, CXT, 16, 24, 8)
995
 
996
/* A C expression whose value is RTL representing the value of the return
997
   address for the frame COUNT steps up from the current frame.
998
   FRAMEADDR is the frame pointer of the COUNT frame, or the frame pointer of
999
   the COUNT-1 frame if RETURN_ADDR_IN_PREVIOUS_FRAME is defined.  */
1000
 
1001
#define RETURN_ADDR_RTX  alpha_return_addr
1002
 
1003
/* Before the prologue, RA lives in $26.  */
1004
#define INCOMING_RETURN_ADDR_RTX  gen_rtx_REG (Pmode, 26)
1005
#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (26)
1006
#define DWARF_ALT_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (64)
1007
#define DWARF_ZERO_REG 31
1008
 
1009
/* Describe how we implement __builtin_eh_return.  */
1010
#define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N) + 16 : INVALID_REGNUM)
1011
#define EH_RETURN_STACKADJ_RTX  gen_rtx_REG (Pmode, 28)
1012
#define EH_RETURN_HANDLER_RTX \
1013
  gen_rtx_MEM (Pmode, plus_constant (stack_pointer_rtx, \
1014
                                     current_function_outgoing_args_size))
1015
 
1016
/* Addressing modes, and classification of registers for them.  */
1017
 
1018
/* Macros to check register numbers against specific register classes.  */
1019
 
1020
/* These assume that REGNO is a hard or pseudo reg number.
1021
   They give nonzero only if REGNO is a hard reg of the suitable class
1022
   or a pseudo reg currently allocated to a suitable hard reg.
1023
   Since they use reg_renumber, they are safe only once reg_renumber
1024
   has been allocated, which happens in local-alloc.c.  */
1025
 
1026
#define REGNO_OK_FOR_INDEX_P(REGNO) 0
1027
#define REGNO_OK_FOR_BASE_P(REGNO) \
1028
((REGNO) < 32 || (unsigned) reg_renumber[REGNO] < 32  \
1029
 || (REGNO) == 63 || reg_renumber[REGNO] == 63)
1030
 
1031
/* Maximum number of registers that can appear in a valid memory address.  */
1032
#define MAX_REGS_PER_ADDRESS 1
1033
 
1034
/* Recognize any constant value that is a valid address.  For the Alpha,
1035
   there are only constants none since we want to use LDA to load any
1036
   symbolic addresses into registers.  */
1037
 
1038
#define CONSTANT_ADDRESS_P(X)   \
1039
  (GET_CODE (X) == CONST_INT    \
1040
   && (unsigned HOST_WIDE_INT) (INTVAL (X) + 0x8000) < 0x10000)
1041
 
1042
/* Include all constant integers and constant doubles, but not
1043
   floating-point, except for floating-point zero.  */
1044
 
1045
#define LEGITIMATE_CONSTANT_P  alpha_legitimate_constant_p
1046
 
1047
/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
1048
   and check its validity for a certain class.
1049
   We have two alternate definitions for each of them.
1050
   The usual definition accepts all pseudo regs; the other rejects
1051
   them unless they have been allocated suitable hard regs.
1052
   The symbol REG_OK_STRICT causes the latter definition to be used.
1053
 
1054
   Most source files want to accept pseudo regs in the hope that
1055
   they will get allocated to the class that the insn wants them to be in.
1056
   Source files for reload pass need to be strict.
1057
   After reload, it makes no difference, since pseudo regs have
1058
   been eliminated by then.  */
1059
 
1060
/* Nonzero if X is a hard reg that can be used as an index
1061
   or if it is a pseudo reg.  */
1062
#define REG_OK_FOR_INDEX_P(X) 0
1063
 
1064
/* Nonzero if X is a hard reg that can be used as a base reg
1065
   or if it is a pseudo reg.  */
1066
#define NONSTRICT_REG_OK_FOR_BASE_P(X)  \
1067
  (REGNO (X) < 32 || REGNO (X) == 63 || REGNO (X) >= FIRST_PSEUDO_REGISTER)
1068
 
1069
/* ??? Nonzero if X is the frame pointer, or some virtual register
1070
   that may eliminate to the frame pointer.  These will be allowed to
1071
   have offsets greater than 32K.  This is done because register
1072
   elimination offsets will change the hi/lo split, and if we split
1073
   before reload, we will require additional instructions.  */
1074
#define NONSTRICT_REG_OK_FP_BASE_P(X)           \
1075
  (REGNO (X) == 31 || REGNO (X) == 63           \
1076
   || (REGNO (X) >= FIRST_PSEUDO_REGISTER       \
1077
       && REGNO (X) < LAST_VIRTUAL_REGISTER))
1078
 
1079
/* Nonzero if X is a hard reg that can be used as a base reg.  */
1080
#define STRICT_REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
1081
 
1082
#ifdef REG_OK_STRICT
1083
#define REG_OK_FOR_BASE_P(X)    STRICT_REG_OK_FOR_BASE_P (X)
1084
#else
1085
#define REG_OK_FOR_BASE_P(X)    NONSTRICT_REG_OK_FOR_BASE_P (X)
1086
#endif
1087
 
1088
/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression that is a
1089
   valid memory address for an instruction.  */
1090
 
1091
#ifdef REG_OK_STRICT
1092
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, WIN)  \
1093
do {                                            \
1094
  if (alpha_legitimate_address_p (MODE, X, 1))  \
1095
    goto WIN;                                   \
1096
} while (0)
1097
#else
1098
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, WIN)  \
1099
do {                                            \
1100
  if (alpha_legitimate_address_p (MODE, X, 0))   \
1101
    goto WIN;                                   \
1102
} while (0)
1103
#endif
1104
 
1105
/* Try machine-dependent ways of modifying an illegitimate address
1106
   to be legitimate.  If we find one, return the new, valid address.
1107
   This macro is used in only one place: `memory_address' in explow.c.  */
1108
 
1109
#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN)                     \
1110
do {                                                            \
1111
  rtx new_x = alpha_legitimize_address (X, NULL_RTX, MODE);     \
1112
  if (new_x)                                                    \
1113
    {                                                           \
1114
      X = new_x;                                                \
1115
      goto WIN;                                                 \
1116
    }                                                           \
1117
} while (0)
1118
 
1119
/* Try a machine-dependent way of reloading an illegitimate address
1120
   operand.  If we find one, push the reload and jump to WIN.  This
1121
   macro is used in only one place: `find_reloads_address' in reload.c.  */
1122
 
1123
#define LEGITIMIZE_RELOAD_ADDRESS(X,MODE,OPNUM,TYPE,IND_L,WIN)               \
1124
do {                                                                         \
1125
  rtx new_x = alpha_legitimize_reload_address (X, MODE, OPNUM, TYPE, IND_L); \
1126
  if (new_x)                                                                 \
1127
    {                                                                        \
1128
      X = new_x;                                                             \
1129
      goto WIN;                                                              \
1130
    }                                                                        \
1131
} while (0)
1132
 
1133
/* Go to LABEL if ADDR (a legitimate address expression)
1134
   has an effect that depends on the machine mode it is used for.
1135
   On the Alpha this is true only for the unaligned modes.   We can
1136
   simplify this test since we know that the address must be valid.  */
1137
 
1138
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)  \
1139
{ if (GET_CODE (ADDR) == AND) goto LABEL; }
1140
 
1141
/* Specify the machine mode that this machine uses
1142
   for the index in the tablejump instruction.  */
1143
#define CASE_VECTOR_MODE SImode
1144
 
1145
/* Define as C expression which evaluates to nonzero if the tablejump
1146
   instruction expects the table to contain offsets from the address of the
1147
   table.
1148
 
1149
   Do not define this if the table should contain absolute addresses.
1150
   On the Alpha, the table is really GP-relative, not relative to the PC
1151
   of the table, but we pretend that it is PC-relative; this should be OK,
1152
   but we should try to find some better way sometime.  */
1153
#define CASE_VECTOR_PC_RELATIVE 1
1154
 
1155
/* Define this as 1 if `char' should by default be signed; else as 0.  */
1156
#define DEFAULT_SIGNED_CHAR 1
1157
 
1158
/* Max number of bytes we can move to or from memory
1159
   in one reasonably fast instruction.  */
1160
 
1161
#define MOVE_MAX 8
1162
 
1163
/* If a memory-to-memory move would take MOVE_RATIO or more simple
1164
   move-instruction pairs, we will do a movmem or libcall instead.
1165
 
1166
   Without byte/word accesses, we want no more than four instructions;
1167
   with, several single byte accesses are better.  */
1168
 
1169
#define MOVE_RATIO  (TARGET_BWX ? 7 : 2)
1170
 
1171
/* Largest number of bytes of an object that can be placed in a register.
1172
   On the Alpha we have plenty of registers, so use TImode.  */
1173
#define MAX_FIXED_MODE_SIZE     GET_MODE_BITSIZE (TImode)
1174
 
1175
/* Nonzero if access to memory by bytes is no faster than for words.
1176
   Also nonzero if doing byte operations (specifically shifts) in registers
1177
   is undesirable.
1178
 
1179
   On the Alpha, we want to not use the byte operation and instead use
1180
   masking operations to access fields; these will save instructions.  */
1181
 
1182
#define SLOW_BYTE_ACCESS        1
1183
 
1184
/* Define if operations between registers always perform the operation
1185
   on the full register even if a narrower mode is specified.  */
1186
#define WORD_REGISTER_OPERATIONS
1187
 
1188
/* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
1189
   will either zero-extend or sign-extend.  The value of this macro should
1190
   be the code that says which one of the two operations is implicitly
1191
   done, UNKNOWN if none.  */
1192
#define LOAD_EXTEND_OP(MODE) ((MODE) == SImode ? SIGN_EXTEND : ZERO_EXTEND)
1193
 
1194
/* Define if loading short immediate values into registers sign extends.  */
1195
#define SHORT_IMMEDIATES_SIGN_EXTEND
1196
 
1197
/* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
1198
   is done just by pretending it is already truncated.  */
1199
#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
1200
 
1201
/* The CIX ctlz and cttz instructions return 64 for zero.  */
1202
#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE)  ((VALUE) = 64, TARGET_CIX)
1203
#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE)  ((VALUE) = 64, TARGET_CIX)
1204
 
1205
/* Define the value returned by a floating-point comparison instruction.  */
1206
 
1207
#define FLOAT_STORE_FLAG_VALUE(MODE) \
1208
  REAL_VALUE_ATOF ((TARGET_FLOAT_VAX ? "0.5" : "2.0"), (MODE))
1209
 
1210
/* Canonicalize a comparison from one we don't have to one we do have.  */
1211
 
1212
#define CANONICALIZE_COMPARISON(CODE,OP0,OP1) \
1213
  do {                                                                  \
1214
    if (((CODE) == GE || (CODE) == GT || (CODE) == GEU || (CODE) == GTU) \
1215
        && (GET_CODE (OP1) == REG || (OP1) == const0_rtx))              \
1216
      {                                                                 \
1217
        rtx tem = (OP0);                                                \
1218
        (OP0) = (OP1);                                                  \
1219
        (OP1) = tem;                                                    \
1220
        (CODE) = swap_condition (CODE);                                 \
1221
      }                                                                 \
1222
    if (((CODE) == LT || (CODE) == LTU)                                 \
1223
        && GET_CODE (OP1) == CONST_INT && INTVAL (OP1) == 256)          \
1224
      {                                                                 \
1225
        (CODE) = (CODE) == LT ? LE : LEU;                               \
1226
        (OP1) = GEN_INT (255);                                          \
1227
      }                                                                 \
1228
  } while (0)
1229
 
1230
/* Specify the machine mode that pointers have.
1231
   After generation of rtl, the compiler makes no further distinction
1232
   between pointers and any other objects of this machine mode.  */
1233
#define Pmode DImode
1234
 
1235
/* Mode of a function address in a call instruction (for indexing purposes).  */
1236
 
1237
#define FUNCTION_MODE Pmode
1238
 
1239
/* Define this if addresses of constant functions
1240
   shouldn't be put through pseudo regs where they can be cse'd.
1241
   Desirable on machines where ordinary constants are expensive
1242
   but a CALL with constant address is cheap.
1243
 
1244
   We define this on the Alpha so that gen_call and gen_call_value
1245
   get to see the SYMBOL_REF (for the hint field of the jsr).  It will
1246
   then copy it into a register, thus actually letting the address be
1247
   cse'ed.  */
1248
 
1249
#define NO_FUNCTION_CSE
1250
 
1251
/* Define this to be nonzero if shift instructions ignore all but the low-order
1252
   few bits.  */
1253
#define SHIFT_COUNT_TRUNCATED 1
1254
 
1255
/* Control the assembler format that we output.  */
1256
 
1257
/* Output to assembler file text saying following lines
1258
   may contain character constants, extra white space, comments, etc.  */
1259
#define ASM_APP_ON (TARGET_EXPLICIT_RELOCS ? "\t.set\tmacro\n" : "")
1260
 
1261
/* Output to assembler file text saying following lines
1262
   no longer contain unusual constructs.  */
1263
#define ASM_APP_OFF (TARGET_EXPLICIT_RELOCS ? "\t.set\tnomacro\n" : "")
1264
 
1265
#define TEXT_SECTION_ASM_OP "\t.text"
1266
 
1267
/* Output before read-only data.  */
1268
 
1269
#define READONLY_DATA_SECTION_ASM_OP "\t.rdata"
1270
 
1271
/* Output before writable data.  */
1272
 
1273
#define DATA_SECTION_ASM_OP "\t.data"
1274
 
1275
/* How to refer to registers in assembler output.
1276
   This sequence is indexed by compiler's hard-register-number (see above).  */
1277
 
1278
#define REGISTER_NAMES                                          \
1279
{"$0", "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8",          \
1280
 "$9", "$10", "$11", "$12", "$13", "$14", "$15",                \
1281
 "$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23",        \
1282
 "$24", "$25", "$26", "$27", "$28", "$29", "$30", "AP",         \
1283
 "$f0", "$f1", "$f2", "$f3", "$f4", "$f5", "$f6", "$f7", "$f8", \
1284
 "$f9", "$f10", "$f11", "$f12", "$f13", "$f14", "$f15",         \
1285
 "$f16", "$f17", "$f18", "$f19", "$f20", "$f21", "$f22", "$f23",\
1286
 "$f24", "$f25", "$f26", "$f27", "$f28", "$f29", "$f30", "FP"}
1287
 
1288
/* Strip name encoding when emitting labels.  */
1289
 
1290
#define ASM_OUTPUT_LABELREF(STREAM, NAME)       \
1291
do {                                            \
1292
  const char *name_ = NAME;                     \
1293
  if (*name_ == '@' || *name_ == '%')           \
1294
    name_ += 2;                                 \
1295
  if (*name_ == '*')                            \
1296
    name_++;                                    \
1297
  else                                          \
1298
    fputs (user_label_prefix, STREAM);          \
1299
  fputs (name_, STREAM);                        \
1300
} while (0)
1301
 
1302
/* Globalizing directive for a label.  */
1303
#define GLOBAL_ASM_OP "\t.globl "
1304
 
1305
/* The prefix to add to user-visible assembler symbols.  */
1306
 
1307
#define USER_LABEL_PREFIX ""
1308
 
1309
/* This is how to output a label for a jump table.  Arguments are the same as
1310
   for (*targetm.asm_out.internal_label), except the insn for the jump table is
1311
   passed.  */
1312
 
1313
#define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN)        \
1314
{ ASM_OUTPUT_ALIGN (FILE, 2); (*targetm.asm_out.internal_label) (FILE, PREFIX, NUM); }
1315
 
1316
/* This is how to store into the string LABEL
1317
   the symbol_ref name of an internal numbered label where
1318
   PREFIX is the class of label and NUM is the number within the class.
1319
   This is suitable for output with `assemble_name'.  */
1320
 
1321
#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM)   \
1322
  sprintf ((LABEL), "*$%s%ld", (PREFIX), (long)(NUM))
1323
 
1324
/* We use the default ASCII-output routine, except that we don't write more
1325
   than 50 characters since the assembler doesn't support very long lines.  */
1326
 
1327
#define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \
1328
  do {                                                                        \
1329
    FILE *_hide_asm_out_file = (MYFILE);                                      \
1330
    const unsigned char *_hide_p = (const unsigned char *) (MYSTRING);        \
1331
    int _hide_thissize = (MYLENGTH);                                          \
1332
    int _size_so_far = 0;                                                      \
1333
    {                                                                         \
1334
      FILE *asm_out_file = _hide_asm_out_file;                                \
1335
      const unsigned char *p = _hide_p;                                       \
1336
      int thissize = _hide_thissize;                                          \
1337
      int i;                                                                  \
1338
      fprintf (asm_out_file, "\t.ascii \"");                                  \
1339
                                                                              \
1340
      for (i = 0; i < thissize; i++)                                           \
1341
        {                                                                     \
1342
          register int c = p[i];                                              \
1343
                                                                              \
1344
          if (_size_so_far ++ > 50 && i < thissize - 4)                       \
1345
            _size_so_far = 0, fprintf (asm_out_file, "\"\n\t.ascii \"");      \
1346
                                                                              \
1347
          if (c == '\"' || c == '\\')                                         \
1348
            putc ('\\', asm_out_file);                                        \
1349
          if (c >= ' ' && c < 0177)                                           \
1350
            putc (c, asm_out_file);                                           \
1351
          else                                                                \
1352
            {                                                                 \
1353
              fprintf (asm_out_file, "\\%o", c);                              \
1354
              /* After an octal-escape, if a digit follows,                   \
1355
                 terminate one string constant and start another.             \
1356
                 The VAX assembler fails to stop reading the escape           \
1357
                 after three digits, so this is the only way we               \
1358
                 can get it to parse the data properly.  */                   \
1359
              if (i < thissize - 1 && ISDIGIT (p[i + 1]))                     \
1360
                _size_so_far = 0, fprintf (asm_out_file, "\"\n\t.ascii \"");  \
1361
          }                                                                   \
1362
        }                                                                     \
1363
      fprintf (asm_out_file, "\"\n");                                         \
1364
    }                                                                         \
1365
  }                                                                           \
1366
  while (0)
1367
 
1368
/* This is how to output an element of a case-vector that is relative.  */
1369
 
1370
#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
1371
  fprintf (FILE, "\t.%s $L%d\n", TARGET_ABI_WINDOWS_NT ? "long" : "gprel32", \
1372
           (VALUE))
1373
 
1374
/* This is how to output an assembler line
1375
   that says to advance the location counter
1376
   to a multiple of 2**LOG bytes.  */
1377
 
1378
#define ASM_OUTPUT_ALIGN(FILE,LOG)      \
1379
  if ((LOG) != 0)                        \
1380
    fprintf (FILE, "\t.align %d\n", LOG);
1381
 
1382
/* This is how to advance the location counter by SIZE bytes.  */
1383
 
1384
#define ASM_OUTPUT_SKIP(FILE,SIZE)  \
1385
  fprintf (FILE, "\t.space "HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE))
1386
 
1387
/* This says how to output an assembler line
1388
   to define a global common symbol.  */
1389
 
1390
#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED)  \
1391
( fputs ("\t.comm ", (FILE)),                   \
1392
  assemble_name ((FILE), (NAME)),               \
1393
  fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE)))
1394
 
1395
/* This says how to output an assembler line
1396
   to define a local common symbol.  */
1397
 
1398
#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE,ROUNDED)      \
1399
( fputs ("\t.lcomm ", (FILE)),                          \
1400
  assemble_name ((FILE), (NAME)),                       \
1401
  fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE)))
1402
 
1403
 
1404
/* Print operand X (an rtx) in assembler syntax to file FILE.
1405
   CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
1406
   For `%' followed by punctuation, CODE is the punctuation and X is null.  */
1407
 
1408
#define PRINT_OPERAND(FILE, X, CODE)  print_operand (FILE, X, CODE)
1409
 
1410
/* Determine which codes are valid without a following integer.  These must
1411
   not be alphabetic.
1412
 
1413
   ~    Generates the name of the current function.
1414
 
1415
   /    Generates the instruction suffix.  The TRAP_SUFFIX and ROUND_SUFFIX
1416
        attributes are examined to determine what is appropriate.
1417
 
1418
   ,    Generates single precision suffix for floating point
1419
        instructions (s for IEEE, f for VAX)
1420
 
1421
   -    Generates double precision suffix for floating point
1422
        instructions (t for IEEE, g for VAX)
1423
 
1424
   +    Generates a nop instruction after a noreturn call at the very end
1425
        of the function
1426
   */
1427
 
1428
#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
1429
  ((CODE) == '/' || (CODE) == ',' || (CODE) == '-' || (CODE) == '~' \
1430
   || (CODE) == '#' || (CODE) == '*' || (CODE) == '&' || (CODE) == '+')
1431
 
1432
/* Print a memory address as an operand to reference that memory location.  */
1433
 
1434
#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
1435
  print_operand_address((FILE), (ADDR))
1436
 
1437
/* Implement `va_start' for varargs and stdarg.  */
1438
#define EXPAND_BUILTIN_VA_START(valist, nextarg) \
1439
  alpha_va_start (valist, nextarg)
1440
 
1441
/* Tell collect that the object format is ECOFF.  */
1442
#define OBJECT_FORMAT_COFF
1443
#define EXTENDED_COFF
1444
 
1445
/* If we use NM, pass -g to it so it only lists globals.  */
1446
#define NM_FLAGS "-pg"
1447
 
1448
/* Definitions for debugging.  */
1449
 
1450
#define SDB_DEBUGGING_INFO 1            /* generate info for mips-tfile */
1451
#define DBX_DEBUGGING_INFO 1            /* generate embedded stabs */
1452
#define MIPS_DEBUGGING_INFO 1           /* MIPS specific debugging info */
1453
 
1454
#ifndef PREFERRED_DEBUGGING_TYPE        /* assume SDB_DEBUGGING_INFO */
1455
#define PREFERRED_DEBUGGING_TYPE  SDB_DEBUG
1456
#endif
1457
 
1458
 
1459
/* Correct the offset of automatic variables and arguments.  Note that
1460
   the Alpha debug format wants all automatic variables and arguments
1461
   to be in terms of two different offsets from the virtual frame pointer,
1462
   which is the stack pointer before any adjustment in the function.
1463
   The offset for the argument pointer is fixed for the native compiler,
1464
   it is either zero (for the no arguments case) or large enough to hold
1465
   all argument registers.
1466
   The offset for the auto pointer is the fourth argument to the .frame
1467
   directive (local_offset).
1468
   To stay compatible with the native tools we use the same offsets
1469
   from the virtual frame pointer and adjust the debugger arg/auto offsets
1470
   accordingly. These debugger offsets are set up in output_prolog.  */
1471
 
1472
extern long alpha_arg_offset;
1473
extern long alpha_auto_offset;
1474
#define DEBUGGER_AUTO_OFFSET(X) \
1475
  ((GET_CODE (X) == PLUS ? INTVAL (XEXP (X, 1)) : 0) + alpha_auto_offset)
1476
#define DEBUGGER_ARG_OFFSET(OFFSET, X) (OFFSET + alpha_arg_offset)
1477
 
1478
/* mips-tfile doesn't understand .stabd directives.  */
1479
#define DBX_OUTPUT_SOURCE_LINE(STREAM, LINE, COUNTER) do {      \
1480
  dbxout_begin_stabn_sline (LINE);                              \
1481
  dbxout_stab_value_internal_label ("LM", &COUNTER);            \
1482
} while (0)
1483
 
1484
/* We want to use MIPS-style .loc directives for SDB line numbers.  */
1485
extern int num_source_filenames;
1486
#define SDB_OUTPUT_SOURCE_LINE(STREAM, LINE)    \
1487
  fprintf (STREAM, "\t.loc\t%d %d\n", num_source_filenames, LINE)
1488
 
1489
#define ASM_OUTPUT_SOURCE_FILENAME(STREAM, NAME)                        \
1490
  alpha_output_filename (STREAM, NAME)
1491
 
1492
/* mips-tfile.c limits us to strings of one page.  We must underestimate this
1493
   number, because the real length runs past this up to the next
1494
   continuation point.  This is really a dbxout.c bug.  */
1495
#define DBX_CONTIN_LENGTH 3000
1496
 
1497
/* By default, turn on GDB extensions.  */
1498
#define DEFAULT_GDB_EXTENSIONS 1
1499
 
1500
/* Stabs-in-ECOFF can't handle dbxout_function_end().  */
1501
#define NO_DBX_FUNCTION_END 1
1502
 
1503
/* If we are smuggling stabs through the ALPHA ECOFF object
1504
   format, put a comment in front of the .stab<x> operation so
1505
   that the ALPHA assembler does not choke.  The mips-tfile program
1506
   will correctly put the stab into the object file.  */
1507
 
1508
#define ASM_STABS_OP    ((TARGET_GAS) ? "\t.stabs\t" : " #.stabs\t")
1509
#define ASM_STABN_OP    ((TARGET_GAS) ? "\t.stabn\t" : " #.stabn\t")
1510
#define ASM_STABD_OP    ((TARGET_GAS) ? "\t.stabd\t" : " #.stabd\t")
1511
 
1512
/* Forward references to tags are allowed.  */
1513
#define SDB_ALLOW_FORWARD_REFERENCES
1514
 
1515
/* Unknown tags are also allowed.  */
1516
#define SDB_ALLOW_UNKNOWN_REFERENCES
1517
 
1518
#define PUT_SDB_DEF(a)                                  \
1519
do {                                                    \
1520
  fprintf (asm_out_file, "\t%s.def\t",                  \
1521
           (TARGET_GAS) ? "" : "#");                    \
1522
  ASM_OUTPUT_LABELREF (asm_out_file, a);                \
1523
  fputc (';', asm_out_file);                            \
1524
} while (0)
1525
 
1526
#define PUT_SDB_PLAIN_DEF(a)                            \
1527
do {                                                    \
1528
  fprintf (asm_out_file, "\t%s.def\t.%s;",              \
1529
           (TARGET_GAS) ? "" : "#", (a));               \
1530
} while (0)
1531
 
1532
#define PUT_SDB_TYPE(a)                                 \
1533
do {                                                    \
1534
  fprintf (asm_out_file, "\t.type\t0x%x;", (a));        \
1535
} while (0)
1536
 
1537
/* For block start and end, we create labels, so that
1538
   later we can figure out where the correct offset is.
1539
   The normal .ent/.end serve well enough for functions,
1540
   so those are just commented out.  */
1541
 
1542
extern int sdb_label_count;             /* block start/end next label # */
1543
 
1544
#define PUT_SDB_BLOCK_START(LINE)                       \
1545
do {                                                    \
1546
  fprintf (asm_out_file,                                \
1547
           "$Lb%d:\n\t%s.begin\t$Lb%d\t%d\n",           \
1548
           sdb_label_count,                             \
1549
           (TARGET_GAS) ? "" : "#",                     \
1550
           sdb_label_count,                             \
1551
           (LINE));                                     \
1552
  sdb_label_count++;                                    \
1553
} while (0)
1554
 
1555
#define PUT_SDB_BLOCK_END(LINE)                         \
1556
do {                                                    \
1557
  fprintf (asm_out_file,                                \
1558
           "$Le%d:\n\t%s.bend\t$Le%d\t%d\n",            \
1559
           sdb_label_count,                             \
1560
           (TARGET_GAS) ? "" : "#",                     \
1561
           sdb_label_count,                             \
1562
           (LINE));                                     \
1563
  sdb_label_count++;                                    \
1564
} while (0)
1565
 
1566
#define PUT_SDB_FUNCTION_START(LINE)
1567
 
1568
#define PUT_SDB_FUNCTION_END(LINE)
1569
 
1570
#define PUT_SDB_EPILOGUE_END(NAME) ((void)(NAME))
1571
 
1572
/* Macros for mips-tfile.c to encapsulate stabs in ECOFF, and for
1573
   mips-tdump.c to print them out.
1574
 
1575
   These must match the corresponding definitions in gdb/mipsread.c.
1576
   Unfortunately, gcc and gdb do not currently share any directories.  */
1577
 
1578
#define CODE_MASK 0x8F300
1579
#define MIPS_IS_STAB(sym) (((sym)->index & 0xFFF00) == CODE_MASK)
1580
#define MIPS_MARK_STAB(code) ((code)+CODE_MASK)
1581
#define MIPS_UNMARK_STAB(code) ((code)-CODE_MASK)
1582
 
1583
/* Override some mips-tfile definitions.  */
1584
 
1585
#define SHASH_SIZE 511
1586
#define THASH_SIZE 55
1587
 
1588
/* Align ecoff symbol tables to avoid OSF1/1.3 nm complaints.  */
1589
 
1590
#define ALIGN_SYMTABLE_OFFSET(OFFSET) (((OFFSET) + 7) & ~7)
1591
 
1592
/* The system headers under Alpha systems are generally C++-aware.  */
1593
#define NO_IMPLICIT_EXTERN_C

powered by: WebSVN 2.1.0

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