]> gcc.gnu.org Git - gcc.git/blame - gcc/config/m68k/m68k.h
200x-xx-xx Kazu Hirata <kazu@codesourcery.com> Richard Sandiford <richard@codesourcer...
[gcc.git] / gcc / config / m68k / m68k.h
CommitLineData
01bbf777 1/* Definitions of target machine for GCC for Motorola 680x0/ColdFire.
cf011243 2 Copyright (C) 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
dcc21c4c 3 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
25a1b918 4
7ec022b2 5This file is part of GCC.
3d339ad2 6
7ec022b2 7GCC is free software; you can redistribute it and/or modify
3d339ad2
RS
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
7ec022b2 12GCC is distributed in the hope that it will be useful,
3d339ad2
RS
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
7ec022b2 18along with GCC; see the file COPYING. If not, write to
39d14dda
KC
19the Free Software Foundation, 51 Franklin Street, Fifth Floor,
20Boston, MA 02110-1301, USA. */
3d339ad2 21
f082d7a9
GN
22/* We need to have MOTOROLA always defined (either 0 or 1) because we use
23 if-statements and ?: on it. This way we have compile-time error checking
24 for both the MOTOROLA and MIT code paths. We do rely on the host compiler
25 to optimize away all constant tests. */
a96533d5 26#if MOTOROLA /* Use the Motorola assembly syntax. */
f082d7a9
GN
27# define TARGET_VERSION fprintf (stderr, " (68k, Motorola syntax)")
28#else
f082d7a9 29# define MOTOROLA 0 /* Use the MIT assembly syntax. */
a96533d5 30# define TARGET_VERSION fprintf (stderr, " (68k, MIT syntax)")
f082d7a9 31#endif
3d339ad2 32
59fbf3cb
NS
33/* Handle --with-cpu default option from configure script. */
34#define OPTION_DEFAULT_SPECS \
35 { "cpu", "%{!mc68000:%{!m68000:%{!m68302:%{!m68010:%{!mc68020:%{!m68020:\
36%{!m68030:%{!m68040:%{!m68020-40:%{!m68020-60:%{!m68060:%{!mcpu32:\
37%{!m68332:%{!m5200:%{!m5206e:%{!m528x:%{!m5307:%{!m5407:%{!mcfv4e:\
900ec02d 38%{!mcpu=*:%{!march=*:-%(VALUE)}}}}}}}}}}}}}}}}}}}}}" },
59fbf3cb 39
0c004537
RS
40/* Pass flags to gas indicating which type of processor we have. This
41 can be simplified when we can rely on the assembler supporting .cpu
42 and .arch directives. */
43
44#define ASM_CPU_SPEC "\
45%{m68851}%{mno-68851} %{m68881}%{mno-68881} %{msoft-float:-mno-float} \
46%{m68000}%{m68302}%{mc68000}%{m68010}%{m68020}%{mc68020}%{m68030}\
47%{m68040}%{m68020-40:-m68040}%{m68020-60:-m68040}\
48%{m68060}%{mcpu32}%{m68332}%{m5200}%{m5206e}%{m528x}%{m5307}%{m5407}%{mcfv4e}\
900ec02d 49%{mcpu=*:-mcpu=%*}%{march=*:-march=%*}\
0c004537
RS
50"
51
52#define ASM_SPEC "%(asm_cpu_spec)"
53
54#define EXTRA_SPECS \
55 { "asm_cpu_spec", ASM_CPU_SPEC }, \
56 SUBTARGET_EXTRA_SPECS
57
58#define SUBTARGET_EXTRA_SPECS
59
3d339ad2
RS
60/* Note that some other tm.h files include this one and then override
61 many of the definitions that relate to assembler syntax. */
62
9c6de4a1
RS
63#define TARGET_CPU_CPP_BUILTINS() \
64 do \
65 { \
66 builtin_define ("__m68k__"); \
67 builtin_define_std ("mc68000"); \
9321405c
RS
68 /* The other mc680x0 macros have traditionally been derived \
69 from the tuning setting. For example, -m68020-60 defines \
70 m68060, even though it generates pure 68020 code. */ \
71 switch (m68k_tune) \
9c6de4a1 72 { \
9321405c
RS
73 case u68010: \
74 builtin_define_std ("mc68010"); \
75 break; \
76 \
77 case u68020: \
78 builtin_define_std ("mc68020"); \
79 break; \
80 \
81 case u68030: \
82 builtin_define_std ("mc68030"); \
83 break; \
84 \
85 case u68040: \
86 builtin_define_std ("mc68040"); \
87 break; \
88 \
89 case u68060: \
90 builtin_define_std ("mc68060"); \
91 break; \
92 \
93 case u68020_60: \
9c6de4a1 94 builtin_define_std ("mc68060"); \
9321405c
RS
95 /* Fall through. */ \
96 case u68020_40: \
9c6de4a1
RS
97 builtin_define_std ("mc68040"); \
98 builtin_define_std ("mc68030"); \
99 builtin_define_std ("mc68020"); \
9321405c
RS
100 break; \
101 \
102 case ucpu32: \
103 builtin_define_std ("mc68332"); \
104 builtin_define_std ("mcpu32"); \
9c6de4a1 105 builtin_define_std ("mc68020"); \
9321405c
RS
106 break; \
107 \
7eb4f044
NS
108 case ucfv2: \
109 builtin_define ("__mcfv2__"); \
110 break; \
111 \
112 case ucfv3: \
113 builtin_define ("__mcfv3__"); \
114 break; \
115 \
116 case ucfv4: \
117 builtin_define ("__mcfv4__"); \
118 break; \
119 \
120 case ucfv4e: \
121 builtin_define ("__mcfv4e__"); \
122 break; \
123 \
124 case ucfv5: \
125 builtin_define ("__mcfv5__"); \
126 break; \
127 \
9321405c
RS
128 default: \
129 break; \
9c6de4a1 130 } \
9321405c 131 \
9c6de4a1
RS
132 if (TARGET_68881) \
133 builtin_define ("__HAVE_68881__"); \
9321405c 134 \
9c6de4a1 135 if (TARGET_COLDFIRE) \
9c6de4a1 136 { \
7eb4f044
NS
137 const char *tmp; \
138 \
139 tmp = m68k_cpp_cpu_ident ("cf"); \
140 if (tmp) \
141 builtin_define (tmp); \
142 tmp = m68k_cpp_cpu_family ("cf"); \
143 if (tmp) \
144 builtin_define (tmp); \
900ec02d 145 builtin_define ("__mcoldfire__"); \
7eb4f044 146 \
900ec02d
JB
147 if (TARGET_ISAC) \
148 builtin_define ("__mcfisac__"); \
149 else if (TARGET_ISAB) \
150 { \
151 builtin_define ("__mcfisab__"); \
152 /* ISA_B: Legacy 5407 defines. */ \
153 builtin_define ("__mcf5400__"); \
154 builtin_define ("__mcf5407__"); \
155 } \
156 else if (TARGET_ISAAPLUS) \
157 { \
158 builtin_define ("__mcfisaaplus__"); \
159 /* ISA_A+: legacy defines. */ \
160 builtin_define ("__mcf528x__"); \
161 builtin_define ("__mcf5200__"); \
162 } \
163 else \
164 { \
165 builtin_define ("__mcfisaa__"); \
166 /* ISA_A: legacy defines. */ \
167 switch (m68k_tune) \
168 { \
169 case ucfv2: \
170 builtin_define ("__mcf5200__"); \
171 break; \
172 \
173 case ucfv3: \
174 builtin_define ("__mcf5307__"); \
175 builtin_define ("__mcf5300__"); \
176 break; \
177 \
178 default: \
179 break; \
180 } \
181 } \
9c6de4a1 182 } \
900ec02d 183 \
7eb4f044
NS
184 if (TARGET_COLDFIRE_FPU) \
185 builtin_define ("__mcffpu__"); \
186 \
9c6de4a1
RS
187 if (TARGET_CF_HWDIV) \
188 builtin_define ("__mcfhwdiv__"); \
900ec02d 189 \
9c6de4a1
RS
190 builtin_assert ("cpu=m68k"); \
191 builtin_assert ("machine=m68k"); \
192 } \
a7fbe404
NB
193 while (0)
194
301d03af
RS
195/* Classify the groups of pseudo-ops used to assemble QI, HI and SI
196 quantities. */
197#define INT_OP_STANDARD 0 /* .byte, .short, .long */
198#define INT_OP_DOT_WORD 1 /* .byte, .word, .long */
199#define INT_OP_NO_DOT 2 /* byte, short, long */
200#define INT_OP_DC 3 /* dc.b, dc.w, dc.l */
201
859711c5 202/* Set the default. */
301d03af
RS
203#define INT_OP_GROUP INT_OP_DOT_WORD
204
900ec02d
JB
205/* Bit values used by m68k-devices.def to identify processor capabilities. */
206#define FL_BITFIELD (1 << 0) /* Support bitfield instructions. */
207#define FL_68881 (1 << 1) /* (Default) support for 68881/2. */
208#define FL_COLDFIRE (1 << 2) /* ColdFire processor. */
209#define FL_CF_HWDIV (1 << 3) /* ColdFire hardware divide supported. */
210#define FL_CF_MAC (1 << 4) /* ColdFire MAC unit supported. */
211#define FL_CF_EMAC (1 << 5) /* ColdFire eMAC unit supported. */
212#define FL_CF_EMAC_B (1 << 6) /* ColdFire eMAC-B unit supported. */
213#define FL_CF_USP (1 << 7) /* ColdFire User Stack Pointer supported. */
214#define FL_CF_FPU (1 << 8) /* ColdFire FPU supported. */
215#define FL_ISA_68000 (1 << 9)
216#define FL_ISA_68010 (1 << 10)
217#define FL_ISA_68020 (1 << 11)
218#define FL_ISA_68040 (1 << 12)
219#define FL_ISA_A (1 << 13)
220#define FL_ISA_APLUS (1 << 14)
221#define FL_ISA_B (1 << 15)
222#define FL_ISA_C (1 << 16)
223#define FL_MMU 0 /* Used by multilib machinery. */
224
225#define TARGET_68010 ((m68k_cpu_flags & FL_ISA_68010) != 0)
226#define TARGET_68020 ((m68k_cpu_flags & FL_ISA_68020) != 0)
b101567e 227#define TARGET_68040 ((m68k_cpu_flags & FL_ISA_68040) != 0)
900ec02d
JB
228#define TARGET_COLDFIRE ((m68k_cpu_flags & FL_COLDFIRE) != 0)
229#define TARGET_COLDFIRE_FPU (m68k_fpu == FPUTYPE_COLDFIRE)
230#define TARGET_68881 (m68k_fpu == FPUTYPE_68881)
9e62c7f2 231
dcc21c4c
PB
232/* Size (in bytes) of FPU registers. */
233#define TARGET_FP_REG_SIZE (TARGET_COLDFIRE ? 8 : 12)
234
900ec02d
JB
235#define TARGET_ISAAPLUS ((m68k_cpu_flags & FL_ISA_APLUS) != 0)
236#define TARGET_ISAB ((m68k_cpu_flags & FL_ISA_B) != 0)
237#define TARGET_ISAC ((m68k_cpu_flags & FL_ISA_C) != 0)
238
239#define TUNE_68000 (m68k_tune == u68000)
240#define TUNE_68010 (m68k_tune == u68010)
241#define TUNE_68000_10 (TUNE_68000 || TUNE_68010)
242#define TUNE_68030 (m68k_tune == u68030 \
243 || m68k_tune == u68020_40 \
244 || m68k_tune == u68020_60)
245#define TUNE_68040 (m68k_tune == u68040 \
246 || m68k_tune == u68020_40 \
247 || m68k_tune == u68020_60)
248#define TUNE_68060 (m68k_tune == u68060 || m68k_tune == u68020_60)
9cf106c8 249#define TUNE_68040_60 (TUNE_68040 || TUNE_68060)
900ec02d
JB
250#define TUNE_CPU32 (m68k_tune == ucpu32)
251#define TUNE_CFV2 (m68k_tune == ucfv2)
dcc21c4c 252
adf2ac37 253#define OVERRIDE_OPTIONS override_options()
84ab3bfb 254
9e62c7f2 255/* These are meant to be redefined in the host dependent files */
84ab3bfb 256#define SUBTARGET_OVERRIDE_OPTIONS
3d339ad2
RS
257\f
258/* target machine storage layout */
259
5189ab94
JB
260/* "long double" is the same as "double" on ColdFire targets. */
261
262#define LONG_DOUBLE_TYPE_SIZE (TARGET_COLDFIRE ? 64 : 80)
263
264/* We need to know the size of long double at compile-time in libgcc2. */
265
266#ifdef __mcoldfire__
267#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
268#else
269#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 80
270#endif
ade83c33
BI
271
272/* Set the value of FLT_EVAL_METHOD in float.h. When using 68040 fp
273 instructions, we get proper intermediate rounding, otherwise we
274 get extended precision results. */
b101567e 275#define TARGET_FLT_EVAL_METHOD ((TARGET_68040 || ! TARGET_68881) ? 0 : 2)
d57a4b98 276
3d339ad2 277#define BITS_BIG_ENDIAN 1
3d339ad2 278#define BYTES_BIG_ENDIAN 1
3d339ad2
RS
279#define WORDS_BIG_ENDIAN 1
280
3d339ad2
RS
281#define UNITS_PER_WORD 4
282
3d339ad2 283#define PARM_BOUNDARY (TARGET_SHORT ? 16 : 32)
3d339ad2 284#define STACK_BOUNDARY 16
225d221a 285#define FUNCTION_BOUNDARY 16
3d339ad2 286#define EMPTY_FIELD_BOUNDARY 16
aaacff32
RS
287/* ColdFire strongly prefers a 32-bit aligned stack. */
288#define PREFERRED_STACK_BOUNDARY (TARGET_COLDFIRE ? 32 : 16)
3d339ad2 289
859711c5 290/* No data type wants to be aligned rounder than this.
85f65093 291 Most published ABIs say that ints should be aligned on 16-bit
859711c5 292 boundaries, but CPUs with 32-bit busses get better performance
c16eadc7
KH
293 aligned on 32-bit boundaries. ColdFires without a misalignment
294 module require 32-bit alignment. */
dcd13066 295#define BIGGEST_ALIGNMENT (TARGET_ALIGN_INT ? 32 : 16)
3d339ad2 296
b71733d5 297#define STRICT_ALIGNMENT (TARGET_STRICT_ALIGNMENT)
3d339ad2 298
3d339ad2
RS
299#define INT_TYPE_SIZE (TARGET_SHORT ? 16 : 32)
300
86702e31 301/* Define these to avoid dependence on meaning of `int'. */
3d339ad2
RS
302#define WCHAR_TYPE "long int"
303#define WCHAR_TYPE_SIZE 32
859711c5
BI
304
305/* Maximum number of library IDs we permit with -mid-shared-library. */
306#define MAX_LIBRARY_ID 255
307
3d339ad2
RS
308\f
309/* Standard register usage. */
310
859711c5
BI
311/* For the m68k, we give the data registers numbers 0-7,
312 the address registers numbers 010-017 (8-15),
c8832aae
AS
313 and the 68881 floating point registers numbers 020-027 (16-23).
314 We also have a fake `arg-pointer' register 030 (24) used for
859711c5 315 register elimination. */
860c4900 316#define FIRST_PSEUDO_REGISTER 25
3d339ad2 317
859711c5 318/* All m68k targets (except AmigaOS) use %a5 as the PIC register */
5b43fed1 319#define PIC_OFFSET_TABLE_REGNUM (flag_pic ? 13 : INVALID_REGNUM)
3d339ad2 320
3d339ad2
RS
321/* 1 for registers that have pervasive standard uses
322 and are not available for the register allocator.
859711c5
BI
323 On the m68k, only the stack pointer is such.
324 Our fake arg-pointer is obviously fixed as well. */
3d339ad2
RS
325#define FIXED_REGISTERS \
326 {/* Data registers. */ \
327 0, 0, 0, 0, 0, 0, 0, 0, \
328 \
329 /* Address registers. */ \
330 0, 0, 0, 0, 0, 0, 0, 1, \
331 \
332 /* Floating point registers \
333 (if available). */ \
a4e9467d
RZ
334 0, 0, 0, 0, 0, 0, 0, 0, \
335 \
336 /* Arg pointer. */ \
337 1 }
3d339ad2
RS
338
339/* 1 for registers not available across function calls.
340 These must include the FIXED_REGISTERS and also any
341 registers that can be used without being saved.
342 The latter must include the registers where values are returned
343 and the register where structure-value addresses are passed.
344 Aside from that, you can include as many other registers as you like. */
859711c5
BI
345#define CALL_USED_REGISTERS \
346 {/* Data registers. */ \
347 1, 1, 0, 0, 0, 0, 0, 0, \
348 \
349 /* Address registers. */ \
350 1, 1, 0, 0, 0, 0, 0, 1, \
351 \
352 /* Floating point registers \
353 (if available). */ \
354 1, 1, 0, 0, 0, 0, 0, 0, \
355 \
356 /* Arg pointer. */ \
357 1 }
a4e9467d
RZ
358
359#define REG_ALLOC_ORDER \
360{ /* d0/d1/a0/a1 */ \
361 0, 1, 8, 9, \
362 /* d2-d7 */ \
363 2, 3, 4, 5, 6, 7, \
364 /* a2-a7/arg */ \
365 10, 11, 12, 13, 14, 15, 24, \
366 /* fp0-fp7 */ \
367 16, 17, 18, 19, 20, 21, 22, 23\
368}
3d339ad2 369
3d339ad2
RS
370
371/* Make sure everything's fine if we *don't* have a given processor.
372 This assumes that putting a register in fixed_regs will keep the
373 compiler's mitts completely off it. We don't bother to zero it out
15a17b72 374 of register classes. */
5b43fed1 375#define CONDITIONAL_REGISTER_USAGE \
859711c5
BI
376{ \
377 int i; \
378 HARD_REG_SET x; \
dcc21c4c 379 if (!TARGET_HARD_FLOAT) \
859711c5 380 { \
5b43fed1 381 COPY_HARD_REG_SET (x, reg_class_contents[(int)FP_REGS]); \
859711c5
BI
382 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) \
383 if (TEST_HARD_REG_BIT (x, i)) \
384 fixed_regs[i] = call_used_regs[i] = 1; \
385 } \
5b43fed1
RH
386 if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM) \
387 fixed_regs[PIC_OFFSET_TABLE_REGNUM] \
388 = call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
3d339ad2
RS
389}
390
859711c5 391/* On the m68k, ordinary registers hold 32 bits worth;
3d339ad2
RS
392 for the 68881 registers, a single register is always enough for
393 anything that can be stored in them at all. */
394#define HARD_REGNO_NREGS(REGNO, MODE) \
395 ((REGNO) >= 16 ? GET_MODE_NUNITS (MODE) \
396 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
397
cfca21cb
PB
398/* A C expression that is nonzero if hard register NEW_REG can be
399 considered for use as a rename register for OLD_REG register. */
400
401#define HARD_REGNO_RENAME_OK(OLD_REG, NEW_REG) \
402 m68k_hard_regno_rename_ok (OLD_REG, NEW_REG)
403
70028b61
PB
404/* Value is true if hard register REGNO can hold a value of machine-mode MODE.
405 On the 68000, the cpu registers can hold any mode except bytes in
406 address registers, the 68881 registers can hold only SFmode or DFmode. */
407
3d339ad2 408#define HARD_REGNO_MODE_OK(REGNO, MODE) \
70028b61 409 m68k_regno_mode_ok ((REGNO), (MODE))
3d339ad2 410
3d339ad2 411#define MODES_TIEABLE_P(MODE1, MODE2) \
dcc21c4c 412 (! TARGET_HARD_FLOAT \
3d339ad2
RS
413 || ((GET_MODE_CLASS (MODE1) == MODE_FLOAT \
414 || GET_MODE_CLASS (MODE1) == MODE_COMPLEX_FLOAT) \
415 == (GET_MODE_CLASS (MODE2) == MODE_FLOAT \
416 || GET_MODE_CLASS (MODE2) == MODE_COMPLEX_FLOAT)))
417
418/* Specify the registers used for certain standard purposes.
419 The values of these macros are register numbers. */
420
3d339ad2
RS
421#define STACK_POINTER_REGNUM 15
422
859711c5
BI
423/* Most m68k targets use %a6 as a frame pointer. The AmigaOS
424 ABI uses %a6 for shared library calls, therefore the frame
425 pointer is shifted to %a5 on this target. */
3d339ad2
RS
426#define FRAME_POINTER_REGNUM 14
427
3d339ad2
RS
428#define FRAME_POINTER_REQUIRED 0
429
860c4900
BI
430/* Base register for access to arguments of the function.
431 * This isn't a hardware register. It will be eliminated to the
432 * stack pointer or frame pointer.
433 */
434#define ARG_POINTER_REGNUM 24
3d339ad2 435
3d339ad2 436#define STATIC_CHAIN_REGNUM 8
835b4008 437#define M68K_STATIC_CHAIN_REG_NAME REGISTER_PREFIX "a0"
3d339ad2
RS
438
439/* Register in which address to store a structure value
440 is passed to a function. */
8636be86 441#define M68K_STRUCT_VALUE_REGNUM 9
3d339ad2 442
859711c5 443\f
3d339ad2 444
859711c5 445/* The m68k has three kinds of registers, so eight classes would be
3d339ad2 446 a complete set. One of them is not needed. */
3d339ad2
RS
447enum reg_class {
448 NO_REGS, DATA_REGS,
449 ADDR_REGS, FP_REGS,
450 GENERAL_REGS, DATA_OR_FP_REGS,
451 ADDR_OR_FP_REGS, ALL_REGS,
452 LIM_REG_CLASSES };
453
454#define N_REG_CLASSES (int) LIM_REG_CLASSES
455
3d339ad2
RS
456#define REG_CLASS_NAMES \
457 { "NO_REGS", "DATA_REGS", \
458 "ADDR_REGS", "FP_REGS", \
459 "GENERAL_REGS", "DATA_OR_FP_REGS", \
460 "ADDR_OR_FP_REGS", "ALL_REGS" }
461
3d339ad2
RS
462#define REG_CLASS_CONTENTS \
463{ \
7a87758d
AS
464 {0x00000000}, /* NO_REGS */ \
465 {0x000000ff}, /* DATA_REGS */ \
a4e9467d 466 {0x0100ff00}, /* ADDR_REGS */ \
7a87758d 467 {0x00ff0000}, /* FP_REGS */ \
a4e9467d 468 {0x0100ffff}, /* GENERAL_REGS */ \
7a87758d 469 {0x00ff00ff}, /* DATA_OR_FP_REGS */ \
a4e9467d
RZ
470 {0x01ffff00}, /* ADDR_OR_FP_REGS */ \
471 {0x01ffffff}, /* ALL_REGS */ \
3d339ad2
RS
472}
473
a4e9467d
RZ
474extern enum reg_class regno_reg_class[];
475#define REGNO_REG_CLASS(REGNO) (regno_reg_class[(REGNO)])
3d339ad2
RS
476#define INDEX_REG_CLASS GENERAL_REGS
477#define BASE_REG_CLASS ADDR_REGS
478
859711c5 479/* We do a trick here to modify the effective constraints on the
3d339ad2
RS
480 machine description; we zorch the constraint letters that aren't
481 appropriate for a specific target. This allows us to guarantee
482 that a specific kind of register will not be used for a given target
7a1929e1 483 without fiddling with the register classes above. */
3d339ad2
RS
484#define REG_CLASS_FROM_LETTER(C) \
485 ((C) == 'a' ? ADDR_REGS : \
486 ((C) == 'd' ? DATA_REGS : \
dcc21c4c
PB
487 ((C) == 'f' ? (TARGET_HARD_FLOAT ? \
488 FP_REGS : NO_REGS) : \
3d339ad2
RS
489 NO_REGS)))
490
859711c5 491/* For the m68k, `I' is used for the range 1 to 8
3d339ad2
RS
492 allowed as immediate shift counts and in addq.
493 `J' is used for the range of signed numbers that fit in 16 bits.
494 `K' is for numbers that moveq can't handle.
a9f6f5aa 495 `L' is for range -8 to -1, range of values that can be added with subq.
d8fa884b
RK
496 `M' is for numbers that moveq+notb can't handle.
497 'N' is for range 24 to 31, rotatert:SI 8 to 1 expressed as rotate.
498 'O' is for 16 (for rotate using swap).
f233b84c
RS
499 'P' is for range 8 to 15, rotatert:HI 8 to 1 expressed as rotate.
500 'R' is for numbers that mov3q can handle. */
a9f6f5aa
RK
501#define CONST_OK_FOR_LETTER_P(VALUE, C) \
502 ((C) == 'I' ? (VALUE) > 0 && (VALUE) <= 8 : \
503 (C) == 'J' ? (VALUE) >= -0x8000 && (VALUE) <= 0x7FFF : \
504 (C) == 'K' ? (VALUE) < -0x80 || (VALUE) >= 0x80 : \
505 (C) == 'L' ? (VALUE) < 0 && (VALUE) >= -8 : \
68137318 506 (C) == 'M' ? (VALUE) < -0x100 || (VALUE) >= 0x100 : \
d8fa884b
RK
507 (C) == 'N' ? (VALUE) >= 24 && (VALUE) <= 31 : \
508 (C) == 'O' ? (VALUE) == 16 : \
f233b84c
RS
509 (C) == 'P' ? (VALUE) >= 8 && (VALUE) <= 15 : \
510 (C) == 'R' ? valid_mov3q_const (VALUE) : 0)
3d339ad2 511
859711c5
BI
512/* "G" defines all of the floating constants that are *NOT* 68881
513 constants. This is so 68881 constants get reloaded and the
514 fpmovecr is used. */
3d339ad2
RS
515#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
516 ((C) == 'G' ? ! (TARGET_68881 && standard_68881_constant_p (VALUE)) : 0 )
3d339ad2 517
859711c5 518/* `Q' means address register indirect addressing mode.
2c8ec431 519 `S' is for operands that satisfy 'm' when -mpcrel is in effect.
d1fe6168 520 `T' is for operands that satisfy 's' when -mpcrel is not in effect.
29ca003a
RS
521 `U' is for register offset addressing.
522 `W' is for const_call_operands. */
2c8ec431 523#define EXTRA_CONSTRAINT(OP,CODE) \
29ca003a 524 ((CODE) == 'S' \
2c8ec431
DL
525 ? (TARGET_PCREL \
526 && GET_CODE (OP) == MEM \
527 && (GET_CODE (XEXP (OP, 0)) == SYMBOL_REF \
528 || GET_CODE (XEXP (OP, 0)) == LABEL_REF \
529 || GET_CODE (XEXP (OP, 0)) == CONST)) \
530 : \
29ca003a 531 (CODE) == 'T' \
fe0cc776 532 ? (!flag_pic \
2c8ec431
DL
533 && (GET_CODE (OP) == SYMBOL_REF \
534 || GET_CODE (OP) == LABEL_REF \
535 || GET_CODE (OP) == CONST)) \
536 : \
29ca003a 537 (CODE) == 'Q' \
fc2241eb 538 ? m68k_matches_q_p (OP) \
2c8ec431 539 : \
29ca003a 540 (CODE) == 'U' \
fc2241eb 541 ? m68k_matches_u_p (OP) \
d1fe6168 542 : \
29ca003a
RS
543 (CODE) == 'W' \
544 ? const_call_operand (OP, VOIDmode) \
545 : 0)
02385fc5 546
859711c5 547/* On the m68k, use a data reg if possible when the
3d339ad2 548 value is a constant in the range where moveq could be used
9839cd62 549 and we ensure that QImodes are reloaded into data regs. */
3d339ad2
RS
550#define PREFERRED_RELOAD_CLASS(X,CLASS) \
551 ((GET_CODE (X) == CONST_INT \
552 && (unsigned) (INTVAL (X) + 0x80) < 0x100 \
553 && (CLASS) != ADDR_REGS) \
554 ? DATA_REGS \
555 : (GET_MODE (X) == QImode && (CLASS) != ADDR_REGS) \
556 ? DATA_REGS \
9839cd62
RH
557 : (GET_CODE (X) == CONST_DOUBLE \
558 && GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT) \
dcc21c4c 559 ? (TARGET_HARD_FLOAT && (CLASS == FP_REGS || CLASS == DATA_OR_FP_REGS) \
9839cd62 560 ? FP_REGS : NO_REGS) \
2c8ec431
DL
561 : (TARGET_PCREL \
562 && (GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == CONST \
563 || GET_CODE (X) == LABEL_REF)) \
564 ? ADDR_REGS \
3d339ad2
RS
565 : (CLASS))
566
6c13d910
JW
567/* Force QImode output reloads from subregs to be allocated to data regs,
568 since QImode stores from address regs are not supported. We make the
569 assumption that if the class is not ADDR_REGS, then it must be a superset
570 of DATA_REGS. */
6c13d910
JW
571#define LIMIT_RELOAD_CLASS(MODE, CLASS) \
572 (((MODE) == QImode && (CLASS) != ADDR_REGS) \
573 ? DATA_REGS \
574 : (CLASS))
575
859711c5 576/* On the m68k, this is the size of MODE in words,
3d339ad2 577 except in the FP regs, where a single reg is always enough. */
3d339ad2
RS
578#define CLASS_MAX_NREGS(CLASS, MODE) \
579 ((CLASS) == FP_REGS ? 1 \
580 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
581
582/* Moves between fp regs and other regs are two insns. */
cf011243 583#define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \
85dbf7e2 584 ((((CLASS1) == FP_REGS) != ((CLASS2) == FP_REGS)) ? 4 : 2)
3d339ad2
RS
585\f
586/* Stack layout; function entry, exit and calling. */
587
85dbf7e2 588#define STACK_GROWS_DOWNWARD 1
f62c8a5c 589#define FRAME_GROWS_DOWNWARD 1
3d339ad2
RS
590#define STARTING_FRAME_OFFSET 0
591
859711c5
BI
592/* On the 680x0, sp@- in a byte insn really pushes a word.
593 On the ColdFire, sp@- in a byte insn pushes just a byte. */
9425fb04 594#define PUSH_ROUNDING(BYTES) (TARGET_COLDFIRE ? BYTES : ((BYTES) + 1) & ~1)
3d339ad2 595
3d339ad2
RS
596#define FIRST_PARM_OFFSET(FNDECL) 8
597
859711c5 598/* On the 68000, the RTS insn cannot pop anything.
6b475ad5
BI
599 On the 68010, the RTD insn may be used to pop them if the number
600 of args is fixed, but if the number is variable then the caller
601 must pop them all. RTD can't be used for library calls now
602 because the library is compiled with the Unix compiler.
603 Use of RTD is a selectable option, since it is incompatible with
604 standard Unix calling sequences. If the option is not selected,
605 the caller must always pop the args. */
6b475ad5
BI
606#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) \
607 ((TARGET_RTD && (!(FUNDECL) || TREE_CODE (FUNDECL) != IDENTIFIER_NODE) \
608 && (TYPE_ARG_TYPES (FUNTYPE) == 0 \
609 || (TREE_VALUE (tree_last (TYPE_ARG_TYPES (FUNTYPE))) \
610 == void_type_node))) \
611 ? (SIZE) : 0)
3d339ad2 612
85dbf7e2 613/* On the m68k the return value defaults to D0. */
3d339ad2 614#define FUNCTION_VALUE(VALTYPE, FUNC) \
1d8eaa6b 615 gen_rtx_REG (TYPE_MODE (VALTYPE), 0)
3d339ad2 616
85dbf7e2 617/* On the m68k the return value defaults to D0. */
1d8eaa6b 618#define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, 0)
3d339ad2 619
85dbf7e2 620/* On the m68k, D0 is usually the only register used. */
3d339ad2
RS
621#define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
622
7972af82 623/* Define this to be true when FUNCTION_VALUE_REGNO_P is true for
859711c5
BI
624 more than one register.
625 XXX This macro is m68k specific and used only for m68kemb.h. */
7972af82
TW
626#define NEEDS_UNTYPED_CALL 0
627
859711c5 628/* On the m68k, all arguments are usually pushed on the stack. */
3d339ad2
RS
629#define FUNCTION_ARG_REGNO_P(N) 0
630\f
859711c5 631/* On the m68k, this is a single integer, which is a number of bytes
3d339ad2 632 of arguments scanned so far. */
3d339ad2
RS
633#define CUMULATIVE_ARGS int
634
859711c5 635/* On the m68k, the offset starts at 0. */
0f6937fe 636#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
3d339ad2
RS
637 ((CUM) = 0)
638
3d339ad2
RS
639#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
640 ((CUM) += ((MODE) != BLKmode \
641 ? (GET_MODE_SIZE (MODE) + 3) & ~3 \
642 : (int_size_in_bytes (TYPE) + 3) & ~3))
643
859711c5 644/* On the m68k all args are always pushed. */
0988b758 645#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) 0
3d339ad2 646
3d339ad2
RS
647#define FUNCTION_PROFILER(FILE, LABELNO) \
648 asm_fprintf (FILE, "\tlea %LLP%d,%Ra0\n\tjsr mcount\n", (LABELNO))
649
3d339ad2
RS
650#define EXIT_IGNORE_STACK 1
651
3d339ad2 652/* Output assembler code for a block containing the constant parts
859711c5 653 of a trampoline, leaving space for the variable parts.
3d339ad2 654
859711c5 655 On the m68k, the trampoline looks like this:
27a55d6b
RK
656 movl #STATIC,a0
657 jmp FUNCTION
658
659 WARNING: Targets that may run on 68040+ cpus must arrange for
660 the instruction cache to be flushed. Previous incarnations of
661 the m68k trampoline code attempted to get around this by either
662 using an out-of-line transfer function or pc-relative data, but
663 the fact remains that the code to jump to the transfer function
664 or the code to load the pc-relative data needs to be flushed
859711c5 665 just as much as the "variable" portion of the trampoline.
27a55d6b 666 Recognizing that a cache flush is going to be required anyway,
859711c5 667 dispense with such notions and build a smaller trampoline.
27a55d6b 668
859711c5 669 Since more instructions are required to move a template into
27a55d6b 670 place than to create it on the spot, don't use a template. */
3d339ad2 671
27a55d6b 672#define TRAMPOLINE_SIZE 12
27a55d6b 673#define TRAMPOLINE_ALIGNMENT 16
3d339ad2 674
27a55d6b
RK
675/* Targets redefine this to invoke code to either flush the cache,
676 or enable stack execution (or both). */
27a55d6b
RK
677#ifndef FINALIZE_TRAMPOLINE
678#define FINALIZE_TRAMPOLINE(TRAMP)
679#endif
3d339ad2 680
859711c5 681/* We generate a two-instructions program at address TRAMP :
c85f7c16 682 movea.l &CXT,%a0
859711c5 683 jmp FNADDR */
3d339ad2
RS
684#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
685{ \
835b4008
NS
686 emit_move_insn (gen_rtx_MEM (HImode, TRAMP), \
687 GEN_INT(0x207C + ((STATIC_CHAIN_REGNUM-8) << 9))); \
1d8eaa6b
AS
688 emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 2)), CXT); \
689 emit_move_insn (gen_rtx_MEM (HImode, plus_constant (TRAMP, 6)), \
27a55d6b 690 GEN_INT(0x4EF9)); \
1d8eaa6b 691 emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 8)), FNADDR); \
27a55d6b 692 FINALIZE_TRAMPOLINE(TRAMP); \
3d339ad2
RS
693}
694
859711c5
BI
695/* This is the library routine that is used to transfer control from the
696 trampoline to the actual nested function. It is defined for backward
697 compatibility, for linking with object code that used the old trampoline
698 definition.
3d339ad2 699
859711c5
BI
700 A colon is used with no explicit operands to cause the template string
701 to be scanned for %-constructs.
702
703 The function name __transfer_from_trampoline is not actually used.
3d339ad2
RS
704 The function definition just permits use of "asm with operands"
705 (though the operand list is empty). */
706#define TRANSFER_FROM_TRAMPOLINE \
707void \
708__transfer_from_trampoline () \
709{ \
835b4008 710 register char *a0 asm (M68K_STATIC_CHAIN_REG_NAME); \
016c8440 711 asm (GLOBAL_ASM_OP "___trampoline"); \
3d339ad2 712 asm ("___trampoline:"); \
338818c7
RK
713 asm volatile ("move%.l %0,%@" : : "m" (a0[22])); \
714 asm volatile ("move%.l %1,%0" : "=a" (a0) : "m" (a0[18])); \
3d339ad2
RS
715 asm ("rts":); \
716}
717\f
859711c5 718/* There are two registers that can always be eliminated on the m68k.
860c4900
BI
719 The frame pointer and the arg pointer can be replaced by either the
720 hard frame pointer or to the stack pointer, depending upon the
721 circumstances. The hard frame pointer is not used before reload and
722 so it is not eligible for elimination. */
860c4900
BI
723#define ELIMINABLE_REGS \
724{{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM }, \
859711c5 725 { ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM }, \
860c4900
BI
726 { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM }}
727
860c4900
BI
728#define CAN_ELIMINATE(FROM, TO) \
729 ((TO) == STACK_POINTER_REGNUM ? ! frame_pointer_needed : 1)
730
860c4900
BI
731#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
732 (OFFSET) = m68k_initial_elimination_offset(FROM, TO)
733\f
3d339ad2
RS
734/* Addressing modes, and classification of registers for them. */
735
940da324 736#define HAVE_POST_INCREMENT 1
940da324 737#define HAVE_PRE_DECREMENT 1
3d339ad2
RS
738
739/* Macros to check register numbers against specific register classes. */
740
36e04090
KH
741/* True for data registers, D0 through D7. */
742#define DATA_REGNO_P(REGNO) ((unsigned int) (REGNO) < 8)
743
744/* True for address registers, A0 through A7. */
745#define ADDRESS_REGNO_P(REGNO) (((unsigned int) (REGNO) - 8) < 8)
746
747/* True for integer registers, D0 through D7 and A0 through A7. */
748#define INT_REGNO_P(REGNO) ((unsigned int) (REGNO) < 16)
749
750/* True for floating point registers, FP0 through FP7. */
751#define FP_REGNO_P(REGNO) (((unsigned int) (REGNO) - 16) < 8)
752
753#define REGNO_OK_FOR_INDEX_P(REGNO) \
754 (INT_REGNO_P (REGNO) \
755 || INT_REGNO_P (reg_renumber[REGNO]))
756
757#define REGNO_OK_FOR_BASE_P(REGNO) \
758 (ADDRESS_REGNO_P (REGNO) \
759 || ADDRESS_REGNO_P (reg_renumber[REGNO]))
760
761#define REGNO_OK_FOR_DATA_P(REGNO) \
762 (DATA_REGNO_P (REGNO) \
763 || DATA_REGNO_P (reg_renumber[REGNO]))
764
765#define REGNO_OK_FOR_FP_P(REGNO) \
766 (FP_REGNO_P (REGNO) \
767 || FP_REGNO_P (reg_renumber[REGNO]))
3d339ad2
RS
768
769/* Now macros that check whether X is a register and also,
770 strictly, whether it is in a specified class.
771
859711c5 772 These macros are specific to the m68k, and may be used only
3d339ad2
RS
773 in code for printing assembler insns and in conditions for
774 define_optimization. */
775
776/* 1 if X is a data register. */
3d339ad2
RS
777#define DATA_REG_P(X) (REG_P (X) && REGNO_OK_FOR_DATA_P (REGNO (X)))
778
779/* 1 if X is an fp register. */
3d339ad2
RS
780#define FP_REG_P(X) (REG_P (X) && REGNO_OK_FOR_FP_P (REGNO (X)))
781
782/* 1 if X is an address register */
3d339ad2 783#define ADDRESS_REG_P(X) (REG_P (X) && REGNO_OK_FOR_BASE_P (REGNO (X)))
3d339ad2 784\f
7ffb5e78
RS
785/* True if SYMBOL + OFFSET constants must refer to something within
786 SYMBOL's section. */
787#ifndef M68K_OFFSETS_MUST_BE_WITHIN_SECTIONS_P
788#define M68K_OFFSETS_MUST_BE_WITHIN_SECTIONS_P 0
789#endif
3d339ad2
RS
790
791#define MAX_REGS_PER_ADDRESS 2
792
7ffb5e78
RS
793#define CONSTANT_ADDRESS_P(X) \
794 ((GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \
795 || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST \
796 || GET_CODE (X) == HIGH) \
797 && LEGITIMATE_CONSTANT_P (X))
3d339ad2
RS
798
799/* Nonzero if the constant value X is a legitimate general operand.
800 It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */
7ffb5e78
RS
801#define LEGITIMATE_CONSTANT_P(X) \
802 (GET_MODE (X) != XFmode \
803 && !m68k_illegitimate_symbolic_constant_p (X))
3d339ad2 804
2c8ec431 805#ifndef REG_OK_STRICT
fc2241eb 806#define REG_STRICT_P 0
2c8ec431 807#else
fc2241eb 808#define REG_STRICT_P 1
2c8ec431 809#endif
3d339ad2 810
fc2241eb
RS
811#define LEGITIMATE_PIC_OPERAND_P(X) \
812 (!symbolic_operand (X, VOIDmode) \
813 || (TARGET_PCREL && REG_STRICT_P))
3d339ad2 814
36e04090 815#define REG_OK_FOR_BASE_P(X) \
fc2241eb 816 m68k_legitimate_base_reg_p (X, REG_STRICT_P)
3d339ad2 817
fc2241eb
RS
818#define REG_OK_FOR_INDEX_P(X) \
819 m68k_legitimate_index_reg_p (X, REG_STRICT_P)
3d339ad2 820
04e61bd4 821#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
fc2241eb 822 do \
dcc21c4c 823 { \
fc2241eb
RS
824 if (m68k_legitimate_address_p (MODE, X, REG_STRICT_P)) \
825 goto ADDR; \
dcc21c4c 826 } \
fc2241eb 827 while (0)
04e61bd4
RS
828
829/* Don't call memory_address_noforce for the address to fetch
fc2241eb 830 the switch offset. This address is ok as it stands,
04e61bd4
RS
831 but memory_address_noforce would alter it. */
832#define PIC_CASE_VECTOR_ADDRESS(index) index
3d339ad2 833\f
859711c5 834/* For the 68000, we handle X+REG by loading X into a register R and
3d339ad2
RS
835 using R+REG. R will go in an address reg and indexing will be used.
836 However, if REG is a broken-out memory address or multiplication,
837 nothing needs to be done because REG can certainly go in an address reg. */
3d339ad2
RS
838#define COPY_ONCE(Y) if (!copied) { Y = copy_rtx (Y); copied = ch = 1; }
839#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) \
840{ register int ch = (X) != (OLDX); \
841 if (GET_CODE (X) == PLUS) \
842 { int copied = 0; \
843 if (GET_CODE (XEXP (X, 0)) == MULT) \
844 { COPY_ONCE (X); XEXP (X, 0) = force_operand (XEXP (X, 0), 0);} \
845 if (GET_CODE (XEXP (X, 1)) == MULT) \
846 { COPY_ONCE (X); XEXP (X, 1) = force_operand (XEXP (X, 1), 0);} \
847 if (ch && GET_CODE (XEXP (X, 1)) == REG \
848 && GET_CODE (XEXP (X, 0)) == REG) \
bb5bdf70
JB
849 { if (TARGET_COLDFIRE_FPU \
850 && GET_MODE_CLASS (MODE) == MODE_FLOAT) \
dcc21c4c
PB
851 { COPY_ONCE (X); X = force_operand (X, 0);} \
852 goto WIN; } \
3d339ad2
RS
853 if (ch) { GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN); } \
854 if (GET_CODE (XEXP (X, 0)) == REG \
855 || (GET_CODE (XEXP (X, 0)) == SIGN_EXTEND \
856 && GET_CODE (XEXP (XEXP (X, 0), 0)) == REG \
857 && GET_MODE (XEXP (XEXP (X, 0), 0)) == HImode)) \
858 { register rtx temp = gen_reg_rtx (Pmode); \
859 register rtx val = force_operand (XEXP (X, 1), 0); \
860 emit_move_insn (temp, val); \
861 COPY_ONCE (X); \
862 XEXP (X, 1) = temp; \
dcc21c4c
PB
863 if (TARGET_COLDFIRE_FPU && GET_MODE_CLASS (MODE) == MODE_FLOAT \
864 && GET_CODE (XEXP (X, 0)) == REG) \
865 X = force_operand (X, 0); \
3d339ad2
RS
866 goto WIN; } \
867 else if (GET_CODE (XEXP (X, 1)) == REG \
868 || (GET_CODE (XEXP (X, 1)) == SIGN_EXTEND \
869 && GET_CODE (XEXP (XEXP (X, 1), 0)) == REG \
870 && GET_MODE (XEXP (XEXP (X, 1), 0)) == HImode)) \
871 { register rtx temp = gen_reg_rtx (Pmode); \
872 register rtx val = force_operand (XEXP (X, 0), 0); \
873 emit_move_insn (temp, val); \
874 COPY_ONCE (X); \
875 XEXP (X, 0) = temp; \
dcc21c4c
PB
876 if (TARGET_COLDFIRE_FPU && GET_MODE_CLASS (MODE) == MODE_FLOAT \
877 && GET_CODE (XEXP (X, 1)) == REG) \
878 X = force_operand (X, 0); \
3d339ad2
RS
879 goto WIN; }}}
880
859711c5 881/* On the 68000, only predecrement and postincrement address depend thus
b9a76028
MS
882 (the amount of decrement or increment being the length of the operand).
883 These are now treated generically in recog.c. */
884#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
3d339ad2 885\f
3d339ad2 886#define CASE_VECTOR_MODE HImode
18543a22 887#define CASE_VECTOR_PC_RELATIVE 1
3d339ad2 888
3d339ad2 889#define DEFAULT_SIGNED_CHAR 1
3d339ad2 890#define MOVE_MAX 4
3d339ad2
RS
891#define SLOW_BYTE_ACCESS 0
892
3d339ad2
RS
893#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
894
7a6525d6
SL
895/* The ColdFire FF1 instruction returns 32 for zero. */
896#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1)
897
37941398 898#define STORE_FLAG_VALUE (-1)
3d339ad2 899
3d339ad2 900#define Pmode SImode
3d339ad2
RS
901#define FUNCTION_MODE QImode
902
3d339ad2
RS
903\f
904/* Tell final.c how to eliminate redundant test instructions. */
905
906/* Here we define machine-dependent flags and fields in cc_status
907 (see `conditions.h'). */
908
909/* Set if the cc value is actually in the 68881, so a floating point
910 conditional branch must be output. */
911#define CC_IN_68881 04000
912
3d339ad2
RS
913/* On the 68000, all the insns to store in an address register fail to
914 set the cc's. However, in some cases these instructions can make it
915 possibly invalid to use the saved cc's. In those cases we clear out
916 some or all of the saved cc's so they won't be used. */
3d339ad2
RS
917#define NOTICE_UPDATE_CC(EXP,INSN) notice_update_cc (EXP, INSN)
918
919#define OUTPUT_JUMP(NORMAL, FLOAT, NO_OV) \
f082d7a9 920do { if (cc_prev_status.flags & CC_IN_68881) \
3d339ad2
RS
921 return FLOAT; \
922 if (cc_prev_status.flags & CC_NO_OVERFLOW) \
923 return NO_OV; \
f082d7a9 924 return NORMAL; } while (0)
3d339ad2
RS
925\f
926/* Control the assembler format that we output. */
927
3d339ad2 928#define ASM_APP_ON "#APP\n"
3d339ad2 929#define ASM_APP_OFF "#NO_APP\n"
6e7b07a7 930#define TEXT_SECTION_ASM_OP "\t.text"
6e7b07a7 931#define DATA_SECTION_ASM_OP "\t.data"
2cff4a6e 932#define GLOBAL_ASM_OP "\t.globl\t"
3d339ad2 933#define REGISTER_PREFIX ""
3d339ad2 934#define LOCAL_LABEL_PREFIX ""
3d339ad2 935#define USER_LABEL_PREFIX "_"
3d339ad2
RS
936#define IMMEDIATE_PREFIX "#"
937
3d339ad2 938#define REGISTER_NAMES \
cfe084c8
BI
939{REGISTER_PREFIX"d0", REGISTER_PREFIX"d1", REGISTER_PREFIX"d2", \
940 REGISTER_PREFIX"d3", REGISTER_PREFIX"d4", REGISTER_PREFIX"d5", \
941 REGISTER_PREFIX"d6", REGISTER_PREFIX"d7", \
942 REGISTER_PREFIX"a0", REGISTER_PREFIX"a1", REGISTER_PREFIX"a2", \
943 REGISTER_PREFIX"a3", REGISTER_PREFIX"a4", REGISTER_PREFIX"a5", \
944 REGISTER_PREFIX"a6", REGISTER_PREFIX"sp", \
945 REGISTER_PREFIX"fp0", REGISTER_PREFIX"fp1", REGISTER_PREFIX"fp2", \
946 REGISTER_PREFIX"fp3", REGISTER_PREFIX"fp4", REGISTER_PREFIX"fp5", \
947 REGISTER_PREFIX"fp6", REGISTER_PREFIX"fp7", REGISTER_PREFIX"argptr" }
948
949#define M68K_FP_REG_NAME REGISTER_PREFIX"fp"
950
951/* Return a register name by index, handling %fp nicely.
952 We don't replace %fp for targets that don't map it to %a6
953 since it may confuse GAS. */
954#define M68K_REGNAME(r) ( \
955 ((FRAME_POINTER_REGNUM == 14) \
956 && ((r) == FRAME_POINTER_REGNUM) \
957 && frame_pointer_needed) ? \
958 M68K_FP_REG_NAME : reg_names[(r)])
3d339ad2 959
859711c5 960/* On the Sun-3, the floating point registers have numbers
3d339ad2 961 18 to 25, not 16 to 23 as they do in the compiler. */
3d339ad2
RS
962#define DBX_REGISTER_NUMBER(REGNO) ((REGNO) < 16 ? (REGNO) : (REGNO) + 2)
963
078e983e
AS
964/* Before the prologue, RA is at 0(%sp). */
965#define INCOMING_RETURN_ADDR_RTX \
1d8eaa6b 966 gen_rtx_MEM (VOIDmode, gen_rtx_REG (VOIDmode, STACK_POINTER_REGNUM))
078e983e 967
42b67c06
PB
968/* After the prologue, RA is at 4(AP) in the current frame. */
969#define RETURN_ADDR_RTX(COUNT, FRAME) \
970 ((COUNT) == 0 \
971 ? gen_rtx_MEM (Pmode, plus_constant (arg_pointer_rtx, UNITS_PER_WORD)) \
972 : gen_rtx_MEM (Pmode, plus_constant (FRAME, UNITS_PER_WORD)))
973
078e983e
AS
974/* We must not use the DBX register numbers for the DWARF 2 CFA column
975 numbers because that maps to numbers beyond FIRST_PSEUDO_REGISTER.
976 Instead use the identity mapping. */
5cd0f915
RS
977#define DWARF_FRAME_REGNUM(REG) \
978 (INT_REGNO_P (REG) || FP_REGNO_P (REG) ? (REG) : INVALID_REGNUM)
979
980/* The return column was originally 24, but gcc used 25 for a while too.
981 Define both registers 24 and 25 as Pmode ones and use 24 in our own
982 unwind information. */
983#define DWARF_FRAME_REGISTERS 25
984#define DWARF_FRAME_RETURN_COLUMN 24
985#define DWARF_ALT_FRAME_RETURN_COLUMN 25
078e983e
AS
986
987/* Before the prologue, the top of the frame is at 4(%sp). */
988#define INCOMING_FRAME_SP_OFFSET 4
989
a40ed0f3
KH
990/* All registers are live on exit from an interrupt routine. */
991#define EPILOGUE_USES(REGNO) \
992 (reload_completed && m68k_interrupt_function_p (current_function_decl))
993
2cff4a6e
AS
994/* Describe how we implement __builtin_eh_return. */
995#define EH_RETURN_DATA_REGNO(N) \
996 ((N) < 2 ? (N) : INVALID_REGNUM)
36e04090 997#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, A0_REG)
2cff4a6e
AS
998#define EH_RETURN_HANDLER_RTX \
999 gen_rtx_MEM (Pmode, \
1000 gen_rtx_PLUS (Pmode, arg_pointer_rtx, \
1001 plus_constant (EH_RETURN_STACKADJ_RTX, \
1002 UNITS_PER_WORD)))
1003
1004/* Select a format to encode pointers in exception handling data. CODE
1005 is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is
abe92a04
RS
1006 true if the symbol may be affected by dynamic relocations.
1007
1008 TARGET_ID_SHARED_LIBRARY and TARGET_SEP_DATA are designed to support
1009 a read-only text segment without imposing a fixed gap between the
1010 text and data segments. As a result, the text segment cannot refer
1011 to anything in the data segment, even in PC-relative form. Because
1012 .eh_frame refers to both code and data, it follows that .eh_frame
1013 must be in the data segment itself, and that the offset between
1014 .eh_frame and code will not be a link-time constant.
1015
1016 In theory, we could create a read-only .eh_frame by using DW_EH_PE_pcrel
1017 | DW_EH_PE_indirect for all code references. However, gcc currently
1018 handles indirect references using a per-TU constant pool. This means
1019 that if a function and its eh_frame are removed by the linker, the
1020 eh_frame's indirect references to the removed function will not be
1021 removed, leading to an unresolved symbol error.
1022
1023 It isn't clear that any -msep-data or -mid-shared-library target
1024 would benefit from a read-only .eh_frame anyway. In particular,
1025 no known target that supports these options has a feature like
1026 PT_GNU_RELRO. Without any such feature to motivate them, indirect
1027 references would be unnecessary bloat, so we simply use an absolute
1028 pointer for code and global references. We still use pc-relative
1029 references to data, as this avoids a relocation. */
859711c5 1030#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \
2cff4a6e 1031 (flag_pic \
abe92a04
RS
1032 && !((TARGET_ID_SHARED_LIBRARY || TARGET_SEP_DATA) \
1033 && ((GLOBAL) || (CODE))) \
2cff4a6e
AS
1034 ? ((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4 \
1035 : DW_EH_PE_absptr)
3d339ad2 1036
3d339ad2 1037#define ASM_OUTPUT_LABELREF(FILE,NAME) \
1f85a612 1038 asm_fprintf (FILE, "%U%s", NAME)
3d339ad2 1039
3d339ad2 1040#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
e59f7d3d 1041 sprintf (LABEL, "*%s%s%ld", LOCAL_LABEL_PREFIX, PREFIX, (long)(NUM))
3d339ad2 1042
ba5f7c88
RS
1043#define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \
1044 asm_fprintf (FILE, (MOTOROLA \
1045 ? "\tmove.l %s,-(%Rsp)\n" \
1046 : "\tmovel %s,%Rsp@-\n"), \
1047 reg_names[REGNO])
1048
1049#define ASM_OUTPUT_REG_POP(FILE,REGNO) \
1050 asm_fprintf (FILE, (MOTOROLA \
1051 ? "\tmove.l (%Rsp)+,%s\n" \
1052 : "\tmovel %Rsp@+,%s\n"), \
1053 reg_names[REGNO])
3d339ad2 1054
859711c5
BI
1055/* The m68k does not use absolute case-vectors, but we must define this macro
1056 anyway. */
3d339ad2
RS
1057#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
1058 asm_fprintf (FILE, "\t.long %LL%d\n", VALUE)
1059
33f7f353 1060#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
3d339ad2
RS
1061 asm_fprintf (FILE, "\t.word %LL%d-%LL%d\n", VALUE, REL)
1062
b4ac57ab
RS
1063/* We don't have a way to align to more than a two-byte boundary, so do the
1064 best we can and don't complain. */
3d339ad2 1065#define ASM_OUTPUT_ALIGN(FILE,LOG) \
b4ac57ab
RS
1066 if ((LOG) >= 1) \
1067 fprintf (FILE, "\t.even\n");
3d339ad2
RS
1068
1069#define ASM_OUTPUT_SKIP(FILE,SIZE) \
58e15542 1070 fprintf (FILE, "\t.skip %u\n", (int)(SIZE))
3d339ad2 1071
3d339ad2
RS
1072#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
1073( fputs (".comm ", (FILE)), \
1074 assemble_name ((FILE), (NAME)), \
58e15542 1075 fprintf ((FILE), ",%u\n", (int)(ROUNDED)))
3d339ad2 1076
3d339ad2
RS
1077#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
1078( fputs (".lcomm ", (FILE)), \
1079 assemble_name ((FILE), (NAME)), \
58e15542 1080 fprintf ((FILE), ",%u\n", (int)(ROUNDED)))
3d339ad2 1081
3d339ad2 1082/* Output a float value (represented as a C double) as an immediate operand.
859711c5 1083 This macro is m68k-specific. */
f6ba6a91
RS
1084#define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \
1085 do { \
1086 if (CODE == 'f') \
1087 { \
1088 char dstr[30]; \
859711c5 1089 real_to_decimal (dstr, &(VALUE), sizeof (dstr), 9, 0); \
f6ba6a91
RS
1090 asm_fprintf ((FILE), "%I0r%s", dstr); \
1091 } \
1092 else \
1093 { \
1094 long l; \
1095 REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \
97b57a81 1096 asm_fprintf ((FILE), "%I0x%lx", l); \
f6ba6a91
RS
1097 } \
1098 } while (0)
3d339ad2
RS
1099
1100/* Output a double value (represented as a C double) as an immediate operand.
859711c5 1101 This macro is m68k-specific. */
3d339ad2 1102#define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \
f6ba6a91 1103 do { char dstr[30]; \
da6eec72 1104 real_to_decimal (dstr, &(VALUE), sizeof (dstr), 0, 1); \
f6ba6a91
RS
1105 asm_fprintf (FILE, "%I0r%s", dstr); \
1106 } while (0)
1107
1108/* Note, long double immediate operands are not actually
1109 generated by m68k.md. */
1110#define ASM_OUTPUT_LONG_DOUBLE_OPERAND(FILE,VALUE) \
1111 do { char dstr[30]; \
da6eec72 1112 real_to_decimal (dstr, &(VALUE), sizeof (dstr), 0, 1); \
f6ba6a91
RS
1113 asm_fprintf (FILE, "%I0r%s", dstr); \
1114 } while (0)
3d339ad2 1115
859711c5 1116/* On the 68000, we use several CODE characters:
3d339ad2
RS
1117 '.' for dot needed in Motorola-style opcode names.
1118 '-' for an operand pushing on the stack:
1119 sp@-, -(sp) or -(%sp) depending on the style of syntax.
1120 '+' for an operand pushing on the stack:
1121 sp@+, (sp)+ or (%sp)+ depending on the style of syntax.
1122 '@' for a reference to the top word on the stack:
1123 sp@, (sp) or (%sp) depending on the style of syntax.
ac5f9961
BI
1124 '#' for an immediate operand prefix (# in MIT and Motorola syntax
1125 but & in SGS syntax).
7c129456 1126 '!' for the fpcr register (used in some float-to-fixed conversions).
3d339ad2
RS
1127 '$' for the letter `s' in an op code, but only on the 68040.
1128 '&' for the letter `d' in an op code, but only on the 68040.
2ac5f14a 1129 '/' for register prefix needed by longlong.h.
a40ed0f3 1130 '?' for m68k_library_id_string
3d339ad2
RS
1131
1132 'b' for byte insn (no effect, on the Sun; this is for the ISI).
1133 'd' to force memory addressing to be absolute, not relative.
1134 'f' for float insn (print a CONST_DOUBLE as a float rather than in hex)
3d339ad2 1135 'x' for float insn (print a CONST_DOUBLE as a float rather than in hex),
1a8965c4 1136 or print pair of registers as rx:ry. */
3d339ad2
RS
1137
1138#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
ac5f9961
BI
1139 ((CODE) == '.' || (CODE) == '#' || (CODE) == '-' \
1140 || (CODE) == '+' || (CODE) == '@' || (CODE) == '!' \
a40ed0f3 1141 || (CODE) == '$' || (CODE) == '&' || (CODE) == '/' || (CODE) == '?')
3d339ad2 1142
3d339ad2 1143
859711c5 1144/* See m68k.c for the m68k specific codes. */
3d339ad2
RS
1145#define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
1146
3d339ad2
RS
1147#define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR)
1148
900ec02d
JB
1149/* Values used in the MICROARCH argument to M68K_DEVICE. */
1150enum uarch_type
1151{
1152 u68000,
1153 u68010,
1154 u68020,
1155 u68020_40,
1156 u68020_60,
1157 u68030,
1158 u68040,
1159 u68060,
1160 ucpu32,
1161 ucfv2,
1162 ucfv3,
1163 ucfv4,
1164 ucfv4e,
1165 ucfv5,
1166 unk_arch
1167};
1168
1169/* An enumeration of all supported target devices. */
1170enum target_device
1171{
1172#define M68K_DEVICE(NAME,ENUM_VALUE,FAMILY,MULTILIB,MICROARCH,ISA,FLAGS) \
1173 ENUM_VALUE,
1174#include "m68k-devices.def"
1175#undef M68K_DEVICE
1176 unk_device
1177};
1178
1179enum fpu_type
1180{
1181 FPUTYPE_NONE,
1182 FPUTYPE_68881,
1183 FPUTYPE_COLDFIRE
1184};
1185
1186/* Variables in m68k.c; see there for details. */
a2ef3db7 1187extern const char *m68k_library_id_string;
2b3600ac 1188extern int m68k_last_compare_had_fp_operands;
900ec02d
JB
1189extern enum target_device m68k_cpu;
1190extern enum uarch_type m68k_tune;
1191extern enum fpu_type m68k_fpu;
1192extern unsigned int m68k_cpu_flags;
29ca003a
RS
1193extern const char *m68k_symbolic_call;
1194extern const char *m68k_symbolic_jump;
This page took 2.521583 seconds and 5 git commands to generate.