]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/s390/s390.h
s390.c (s390_alloc_pool, [...]): Use BITMAP_ALLOC and BITMAP_FREE.
[thirdparty/gcc.git] / gcc / config / s390 / s390.h
CommitLineData
9db1d521 1/* Definitions of target machine for GNU compiler, for IBM S/390
deeec1d8 2 Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
283334f0 3 Free Software Foundation, Inc.
9db1d521 4 Contributed by Hartmut Penner (hpenner@de.ibm.com) and
f314b9b1 5 Ulrich Weigand (uweigand@de.ibm.com).
9db1d521 6
58add37a 7This file is part of GCC.
9db1d521 8
58add37a
UW
9GCC is free software; you can redistribute it and/or modify it under
10the terms of the GNU General Public License as published by the Free
11Software Foundation; either version 2, or (at your option) any later
12version.
13
14GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15WARRANTY; without even the implied warranty of MERCHANTABILITY or
16FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17for more details.
9db1d521
HP
18
19You should have received a copy of the GNU General Public License
58add37a
UW
20along with GCC; see the file COPYING. If not, write to the Free
21Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2202111-1307, USA. */
9db1d521
HP
23
24#ifndef _S390_H
25#define _S390_H
26
42c78618
UW
27/* Override the __fixdfdi etc. routines when building libgcc2.
28 ??? This should be done in a cleaner way ... */
fe86047c 29#if defined (IN_LIBGCC2) && !defined (__s390x__)
ca11c37c 30#include <config/s390/fixdfdi.h>
42c78618
UW
31#endif
32
c7453384 33/* Which processor to generate code or schedule for. The cpu attribute
1fec52be
HP
34 defines a list that mirrors this list, so changes to s390.md must be
35 made at the same time. */
36
37enum processor_type
38{
c7453384
EC
39 PROCESSOR_9672_G5,
40 PROCESSOR_9672_G6,
41 PROCESSOR_2064_Z900,
f13e0d4e 42 PROCESSOR_2084_Z990,
1fec52be
HP
43 PROCESSOR_max
44};
45
f13e0d4e
UW
46/* Optional architectural facilities supported by the processor. */
47
48enum processor_flags
49{
50 PF_IEEE_FLOAT = 1,
51 PF_ZARCH = 2,
52 PF_LONG_DISPLACEMENT = 4
53};
54
55extern enum processor_type s390_tune;
56extern enum processor_flags s390_tune_flags;
be2c2a4b 57extern const char *s390_tune_string;
1fec52be
HP
58
59extern enum processor_type s390_arch;
f13e0d4e 60extern enum processor_flags s390_arch_flags;
1fec52be
HP
61extern const char *s390_arch_string;
62
d75f90f1
AK
63extern const char *s390_warn_framesize_string;
64extern const char *s390_warn_dynamicstack_string;
65extern const char *s390_stack_size_string;
66extern const char *s390_stack_guard_string;
67
f13e0d4e
UW
68#define TARGET_CPU_IEEE_FLOAT \
69 (s390_arch_flags & PF_IEEE_FLOAT)
70#define TARGET_CPU_ZARCH \
71 (s390_arch_flags & PF_ZARCH)
72#define TARGET_CPU_LONG_DISPLACEMENT \
73 (s390_arch_flags & PF_LONG_DISPLACEMENT)
74
75#define TARGET_LONG_DISPLACEMENT \
76 (TARGET_ZARCH && TARGET_CPU_LONG_DISPLACEMENT)
1fec52be 77
42c78618 78
862a2d83 79/* Run-time target specification. */
9db1d521 80
4798630c
D
81/* This will be overridden by OS headers. */
82#define TARGET_TPF 0
83
862a2d83
UW
84/* Target CPU builtins. */
85#define TARGET_CPU_CPP_BUILTINS() \
86 do \
87 { \
88 builtin_assert ("cpu=s390"); \
89 builtin_assert ("machine=s390"); \
90 builtin_define ("__s390__"); \
91 if (TARGET_64BIT) \
92 builtin_define ("__s390x__"); \
93 } \
94 while (0)
9db1d521 95
862a2d83 96/* Optional target features. */
9db1d521
HP
97extern int target_flags;
98
1fec52be 99#define MASK_HARD_FLOAT 0x01
1fec52be
HP
100#define MASK_SMALL_EXEC 0x04
101#define MASK_DEBUG_ARG 0x08
102#define MASK_64BIT 0x10
103#define MASK_ZARCH 0x20
104#define MASK_MVCLE 0x40
3839e36a 105#define MASK_TPF_PROFILING 0x80
f2d226e1 106#define MASK_NO_FUSED_MADD 0x100
b3d31392
AK
107#define MASK_BACKCHAIN 0x200
108#define MASK_PACKED_STACK 0x400
1fec52be
HP
109
110#define TARGET_HARD_FLOAT (target_flags & MASK_HARD_FLOAT)
111#define TARGET_SOFT_FLOAT (!(target_flags & MASK_HARD_FLOAT))
1fec52be
HP
112#define TARGET_SMALL_EXEC (target_flags & MASK_SMALL_EXEC)
113#define TARGET_DEBUG_ARG (target_flags & MASK_DEBUG_ARG)
114#define TARGET_64BIT (target_flags & MASK_64BIT)
115#define TARGET_ZARCH (target_flags & MASK_ZARCH)
116#define TARGET_MVCLE (target_flags & MASK_MVCLE)
3839e36a 117#define TARGET_TPF_PROFILING (target_flags & MASK_TPF_PROFILING)
f2d226e1
AK
118#define TARGET_NO_FUSED_MADD (target_flags & MASK_NO_FUSED_MADD)
119#define TARGET_FUSED_MADD (! TARGET_NO_FUSED_MADD)
b3d31392
AK
120#define TARGET_BACKCHAIN (target_flags & MASK_BACKCHAIN)
121#define TARGET_PACKED_STACK (target_flags & MASK_PACKED_STACK)
adf39f8f 122
8e509cf9
UW
123/* ??? Once this actually works, it could be made a runtime option. */
124#define TARGET_IBM_FLOAT 0
125#define TARGET_IEEE_FLOAT 1
126
58d10f89 127#ifdef DEFAULT_TARGET_64BIT
064e93c2 128#define TARGET_DEFAULT (MASK_64BIT | MASK_ZARCH | MASK_HARD_FLOAT)
58d10f89 129#else
064e93c2 130#define TARGET_DEFAULT MASK_HARD_FLOAT
58d10f89
UW
131#endif
132
b3d31392
AK
133#define TARGET_SWITCHES \
134{ { "hard-float", 1, N_("Use hardware fp")}, \
135 { "soft-float", -1, N_("Don't use hardware fp")}, \
136 { "small-exec", 4, N_("Use bras for executable < 64k")}, \
137 { "no-small-exec", -4, N_("Don't use bras")}, \
138 { "debug", 8, N_("Additional debug prints")}, \
139 { "no-debug", -8, N_("Don't print additional debug prints")}, \
140 { "64", 16, N_("64 bit ABI")}, \
141 { "31", -16, N_("31 bit ABI")}, \
142 { "zarch", 32, N_("z/Architecture")}, \
143 { "esa", -32, N_("ESA/390 architecture")}, \
144 { "mvcle", 64, N_("mvcle use")}, \
145 { "no-mvcle", -64, N_("mvc&ex")}, \
146 { "tpf-trace", 128, N_("Enable tpf OS tracing code")}, \
147 { "no-tpf-trace", -128, N_("Disable tpf OS tracing code")}, \
148 { "no-fused-madd", 256, N_("Disable fused multiply/add instructions")},\
149 { "fused-madd", -256, N_("Enable fused multiply/add instructions")}, \
150 { "backchain", 512, N_("Maintain backchain pointer")}, \
151 { "no-backchain", -512, N_("Don't maintain backchain pointer")}, \
152 { "packed-stack", 1024, N_("Use packed stack layout")}, \
153 { "no-packed-stack", -1024, N_("Don't use packed stack layout")}, \
9db1d521
HP
154 { "", TARGET_DEFAULT, 0 } }
155
d75f90f1
AK
156#define TARGET_OPTIONS \
157{ { "tune=", &s390_tune_string, \
158 N_("Schedule code for given CPU"), 0}, \
159 { "arch=", &s390_arch_string, \
160 N_("Generate code for given CPU"), 0}, \
d75f90f1
AK
161 { "warn-framesize=", &s390_warn_framesize_string, \
162 N_("Warn if a single function's framesize exceeds the given framesize"), \
163 0}, \
164 { "warn-dynamicstack", &s390_warn_dynamicstack_string, \
165 N_("Warn if a function uses alloca or creates an array with dynamic size"),\
166 0}, \
167 { "stack-size=", &s390_stack_size_string, \
168 N_("Emit extra code in the function prologue in order to trap if the stack"\
169 "size exceeds the given limit"), 0}, \
170 { "stack-guard=", &s390_stack_guard_string, \
171 N_("Set the max. number of bytes which has to be left to stack size " \
172 "before a trap instruction is triggered"), 0}, \
1fec52be
HP
173}
174
f13e0d4e
UW
175/* Support for configure-time defaults. */
176#define OPTION_DEFAULT_SPECS \
177 { "mode", "%{!mesa:%{!mzarch:-m%(VALUE)}}" }, \
178 { "arch", "%{!march=*:-march=%(VALUE)}" }, \
179 { "tune", "%{!mtune=*:-mtune=%(VALUE)}" }
180
181/* Defaulting rules. */
182#ifdef DEFAULT_TARGET_64BIT
183#define DRIVER_SELF_SPECS \
184 "%{!m31:%{!m64:-m64}}", \
185 "%{!mesa:%{!mzarch:%{m31:-mesa}%{m64:-mzarch}}}", \
186 "%{!march=*:%{mesa:-march=g5}%{mzarch:-march=z900}}"
187#else
188#define DRIVER_SELF_SPECS \
189 "%{!m31:%{!m64:-m31}}", \
190 "%{!mesa:%{!mzarch:%{m31:-mesa}%{m64:-mzarch}}}", \
191 "%{!march=*:%{mesa:-march=g5}%{mzarch:-march=z900}}"
192#endif
193
862a2d83
UW
194/* Target version string. Overridden by the OS header. */
195#ifdef DEFAULT_TARGET_64BIT
196#define TARGET_VERSION fprintf (stderr, " (zSeries)");
197#else
198#define TARGET_VERSION fprintf (stderr, " (S/390)");
199#endif
9db1d521 200
862a2d83
UW
201/* Hooks to override options. */
202#define OPTIMIZATION_OPTIONS(LEVEL, SIZE) optimization_options(LEVEL, SIZE)
4023fb28
UW
203#define OVERRIDE_OPTIONS override_options ()
204
862a2d83
UW
205/* Frame pointer is not used for debugging. */
206#define CAN_DEBUG_WITHOUT_FP
9db1d521 207
9db1d521 208
fe86047c
UW
209/* In libgcc2, determine target settings as compile-time constants. */
210#ifdef IN_LIBGCC2
211#undef TARGET_64BIT
212#ifdef __s390x__
213#define TARGET_64BIT 1
214#else
215#define TARGET_64BIT 0
216#endif
217#endif
218
219
9db1d521
HP
220/* Target machine storage layout. */
221
862a2d83 222/* Everything is big-endian. */
9db1d521 223#define BITS_BIG_ENDIAN 1
9db1d521 224#define BYTES_BIG_ENDIAN 1
9db1d521
HP
225#define WORDS_BIG_ENDIAN 1
226
9db1d521 227/* Width of a word, in units (bytes). */
9db1d521 228#define UNITS_PER_WORD (TARGET_64BIT ? 8 : 4)
fe86047c 229#ifndef IN_LIBGCC2
9db1d521 230#define MIN_UNITS_PER_WORD 4
fe86047c 231#endif
862a2d83 232#define MAX_BITS_PER_WORD 64
9db1d521 233
862a2d83 234/* Function arguments and return values are promoted to word size. */
d4453b7a 235#define PROMOTE_FUNCTION_MODE(MODE, UNSIGNEDP, TYPE) \
9db1d521
HP
236if (INTEGRAL_MODE_P (MODE) && \
237 GET_MODE_SIZE (MODE) < UNITS_PER_WORD) { \
238 (MODE) = Pmode; \
239 }
240
9db1d521 241/* Allocation boundary (in *bits*) for storing arguments in argument list. */
9db1d521
HP
242#define PARM_BOUNDARY (TARGET_64BIT ? 64 : 32)
243
244/* Boundary (in *bits*) on which stack pointer should be aligned. */
9db1d521
HP
245#define STACK_BOUNDARY 64
246
247/* Allocation boundary (in *bits*) for the code of a function. */
9db1d521
HP
248#define FUNCTION_BOUNDARY 32
249
250/* There is no point aligning anything to a rounder boundary than this. */
9db1d521
HP
251#define BIGGEST_ALIGNMENT 64
252
253/* Alignment of field after `int : 0' in a structure. */
9db1d521
HP
254#define EMPTY_FIELD_BOUNDARY 32
255
f710504c 256/* Alignment on even addresses for LARL instruction. */
9db1d521 257#define CONSTANT_ALIGNMENT(EXP, ALIGN) (ALIGN) < 16 ? 16 : (ALIGN)
9db1d521
HP
258#define DATA_ALIGNMENT(TYPE, ALIGN) (ALIGN) < 16 ? 16 : (ALIGN)
259
862a2d83 260/* Alignment is not required by the hardware. */
9db1d521
HP
261#define STRICT_ALIGNMENT 0
262
862a2d83
UW
263/* Mode of stack savearea.
264 FUNCTION is VOIDmode because calling convention maintains SP.
265 BLOCK needs Pmode for SP.
266 NONLOCAL needs twice Pmode to maintain both backchain and SP. */
267#define STACK_SAVEAREA_MODE(LEVEL) \
268 (LEVEL == SAVE_FUNCTION ? VOIDmode \
43ab026f 269 : LEVEL == SAVE_NONLOCAL ? (TARGET_64BIT ? OImode : TImode) : Pmode)
862a2d83 270
9db1d521 271/* Define target floating point format. */
8e509cf9 272#define TARGET_FLOAT_FORMAT \
862a2d83 273 (TARGET_IEEE_FLOAT? IEEE_FLOAT_FORMAT : IBM_FLOAT_FORMAT)
9db1d521 274
9db1d521 275
862a2d83 276/* Type layout. */
9db1d521 277
862a2d83
UW
278/* Sizes in bits of the source language data types. */
279#define SHORT_TYPE_SIZE 16
280#define INT_TYPE_SIZE 32
281#define LONG_TYPE_SIZE (TARGET_64BIT ? 64 : 32)
862a2d83
UW
282#define LONG_LONG_TYPE_SIZE 64
283#define FLOAT_TYPE_SIZE 32
284#define DOUBLE_TYPE_SIZE 64
285#define LONG_DOUBLE_TYPE_SIZE 64 /* ??? Should support extended format. */
286
287/* We use "unsigned char" as default. */
288#define DEFAULT_SIGNED_CHAR 0
289
290
291/* Register usage. */
292
293/* We have 16 general purpose registers (registers 0-15),
294 and 16 floating point registers (registers 16-31).
295 (On non-IEEE machines, we have only 4 fp registers.)
c7453384 296
862a2d83
UW
297 Amongst the general purpose registers, some are used
298 for specific purposes:
299 GPR 11: Hard frame pointer (if needed)
300 GPR 12: Global offset table pointer (if needed)
301 GPR 13: Literal pool base register
302 GPR 14: Return address register
303 GPR 15: Stack pointer
c7453384 304
c5aa1d12 305 Registers 32-35 are 'fake' hard registers that do not
862a2d83
UW
306 correspond to actual hardware:
307 Reg 32: Argument pointer
308 Reg 33: Condition code
c5aa1d12
UW
309 Reg 34: Frame pointer
310 Reg 35: Return address pointer
862a2d83 311
c5aa1d12
UW
312 Registers 36 and 37 are mapped to access registers
313 0 and 1, used to implement thread-local storage. */
314
315#define FIRST_PSEUDO_REGISTER 38
862a2d83
UW
316
317/* Standard register usage. */
8e509cf9
UW
318#define GENERAL_REGNO_P(N) ((int)(N) >= 0 && (N) < 16)
319#define ADDR_REGNO_P(N) ((N) >= 1 && (N) < 16)
320#define FP_REGNO_P(N) ((N) >= 16 && (N) < (TARGET_IEEE_FLOAT? 32 : 20))
321#define CC_REGNO_P(N) ((N) == 33)
a38e09bc 322#define FRAME_REGNO_P(N) ((N) == 32 || (N) == 34 || (N) == 35)
c5aa1d12 323#define ACCESS_REGNO_P(N) ((N) == 36 || (N) == 37)
8e509cf9
UW
324
325#define GENERAL_REG_P(X) (REG_P (X) && GENERAL_REGNO_P (REGNO (X)))
326#define ADDR_REG_P(X) (REG_P (X) && ADDR_REGNO_P (REGNO (X)))
327#define FP_REG_P(X) (REG_P (X) && FP_REGNO_P (REGNO (X)))
328#define CC_REG_P(X) (REG_P (X) && CC_REGNO_P (REGNO (X)))
4888ec5d 329#define FRAME_REG_P(X) (REG_P (X) && FRAME_REGNO_P (REGNO (X)))
c5aa1d12 330#define ACCESS_REG_P(X) (REG_P (X) && ACCESS_REGNO_P (REGNO (X)))
9db1d521 331
ed9676cf 332#define SIBCALL_REGNUM 1
490ceeb4 333#define BASE_REGNUM 13
862a2d83
UW
334#define RETURN_REGNUM 14
335#define CC_REGNUM 33
c5aa1d12 336#define TP_REGNUM 36
4023fb28 337
862a2d83 338/* Set up fixed registers and calling convention:
9db1d521 339
862a2d83
UW
340 GPRs 0-5 are always call-clobbered,
341 GPRs 6-15 are always call-saved.
342 GPR 12 is fixed if used as GOT pointer.
343 GPR 13 is always fixed (as literal pool pointer).
545d16ff 344 GPR 14 is always fixed on S/390 machines (as return address).
862a2d83
UW
345 GPR 15 is always fixed (as stack pointer).
346 The 'fake' hard registers are call-clobbered and fixed.
c5aa1d12 347 The access registers are call-saved and fixed.
9db1d521 348
862a2d83
UW
349 On 31-bit, FPRs 18-19 are call-clobbered;
350 on 64-bit, FPRs 24-31 are call-clobbered.
351 The remaining FPRs are call-saved. */
9db1d521
HP
352
353#define FIXED_REGISTERS \
354{ 0, 0, 0, 0, \
355 0, 0, 0, 0, \
356 0, 0, 0, 0, \
357 0, 1, 1, 1, \
358 0, 0, 0, 0, \
359 0, 0, 0, 0, \
360 0, 0, 0, 0, \
361 0, 0, 0, 0, \
c5aa1d12
UW
362 1, 1, 1, 1, \
363 1, 1 }
9db1d521 364
9db1d521
HP
365#define CALL_USED_REGISTERS \
366{ 1, 1, 1, 1, \
367 1, 1, 0, 0, \
368 0, 0, 0, 0, \
369 0, 1, 1, 1, \
4023fb28
UW
370 1, 1, 1, 1, \
371 1, 1, 1, 1, \
372 1, 1, 1, 1, \
373 1, 1, 1, 1, \
c5aa1d12
UW
374 1, 1, 1, 1, \
375 1, 1 }
4023fb28 376
4023fb28
UW
377#define CALL_REALLY_USED_REGISTERS \
378{ 1, 1, 1, 1, \
9db1d521 379 1, 1, 0, 0, \
4023fb28
UW
380 0, 0, 0, 0, \
381 0, 0, 0, 0, \
9db1d521
HP
382 1, 1, 1, 1, \
383 1, 1, 1, 1, \
384 1, 1, 1, 1, \
4023fb28 385 1, 1, 1, 1, \
c5aa1d12
UW
386 1, 1, 1, 1, \
387 0, 0 }
9db1d521 388
38899e29 389#define CONDITIONAL_REGISTER_USAGE s390_conditional_register_usage ()
9db1d521 390
862a2d83
UW
391/* Preferred register allocation order. */
392#define REG_ALLOC_ORDER \
545d16ff 393{ 1, 2, 3, 4, 5, 0, 13, 12, 11, 10, 9, 8, 7, 6, 14, \
862a2d83
UW
394 16, 17, 18, 19, 20, 21, 22, 23, \
395 24, 25, 26, 27, 28, 29, 30, 31, \
c5aa1d12 396 15, 32, 33, 34, 35, 36, 37 }
9db1d521 397
9db1d521 398
862a2d83 399/* Fitting values into registers. */
c7453384 400
862a2d83
UW
401/* Integer modes <= word size fit into any GPR.
402 Integer modes > word size fit into successive GPRs, starting with
403 an even-numbered register.
404 SImode and DImode fit into FPRs as well.
c7453384 405
862a2d83
UW
406 Floating point modes <= word size fit into any FPR or GPR.
407 Floating point modes > word size (i.e. DFmode on 32-bit) fit
408 into any FPR, or an even-odd GPR pair.
c7453384 409
862a2d83
UW
410 Complex floating point modes fit either into two FPRs, or into
411 successive GPRs (again starting with an even number).
c7453384 412
862a2d83 413 Condition code modes fit only into the CC register. */
9db1d521
HP
414
415#define HARD_REGNO_NREGS(REGNO, MODE) \
8e509cf9 416 (FP_REGNO_P(REGNO)? \
9db1d521 417 (GET_MODE_CLASS(MODE) == MODE_COMPLEX_FLOAT ? 2 : 1) : \
8e509cf9 418 GENERAL_REGNO_P(REGNO)? \
9db1d521 419 ((GET_MODE_SIZE(MODE)+UNITS_PER_WORD-1) / UNITS_PER_WORD) : \
c5aa1d12 420 ACCESS_REGNO_P(REGNO)? \
3776ada0 421 ((GET_MODE_SIZE(MODE)+4-1) / 4) : \
9db1d521
HP
422 1)
423
9db1d521 424#define HARD_REGNO_MODE_OK(REGNO, MODE) \
8e509cf9 425 (FP_REGNO_P(REGNO)? \
5d4d885c
UW
426 ((MODE) == SImode || (MODE) == DImode || \
427 GET_MODE_CLASS(MODE) == MODE_FLOAT || \
428 GET_MODE_CLASS(MODE) == MODE_COMPLEX_FLOAT) : \
8e509cf9 429 GENERAL_REGNO_P(REGNO)? \
f314b9b1 430 (HARD_REGNO_NREGS(REGNO, MODE) == 1 || !((REGNO) & 1)) : \
9db1d521
HP
431 CC_REGNO_P(REGNO)? \
432 GET_MODE_CLASS (MODE) == MODE_CC : \
4888ec5d 433 FRAME_REGNO_P(REGNO)? \
bab0b43b 434 (enum machine_mode) (MODE) == Pmode : \
c5aa1d12
UW
435 ACCESS_REGNO_P(REGNO)? \
436 (((MODE) == SImode || ((enum machine_mode) (MODE) == Pmode)) \
437 && (HARD_REGNO_NREGS(REGNO, MODE) == 1 || !((REGNO) & 1))) : \
9db1d521
HP
438 0)
439
9db1d521
HP
440#define MODES_TIEABLE_P(MODE1, MODE2) \
441 (((MODE1) == SFmode || (MODE1) == DFmode) \
442 == ((MODE2) == SFmode || (MODE2) == DFmode))
443
862a2d83
UW
444/* Maximum number of registers to represent a value of mode MODE
445 in a register of class CLASS. */
446#define CLASS_MAX_NREGS(CLASS, MODE) \
447 ((CLASS) == FP_REGS ? \
448 (GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT ? 2 : 1) : \
c5aa1d12 449 (CLASS) == ACCESS_REGS ? \
3776ada0 450 (GET_MODE_SIZE (MODE) + 4 - 1) / 4 : \
862a2d83 451 (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
4023fb28 452
862a2d83
UW
453/* If a 4-byte value is loaded into a FPR, it is placed into the
454 *upper* half of the register, not the lower. Therefore, we
c5aa1d12
UW
455 cannot use SUBREGs to switch between modes in FP registers.
456 Likewise for access registers, since they have only half the
457 word size on 64-bit. */
b0c42aed
JH
458#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
459 (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
c5aa1d12
UW
460 ? reg_classes_intersect_p (FP_REGS, CLASS) \
461 || reg_classes_intersect_p (ACCESS_REGS, CLASS) : 0)
9db1d521 462
862a2d83 463/* Register classes. */
c7453384 464
862a2d83
UW
465/* We use the following register classes:
466 GENERAL_REGS All general purpose registers
467 ADDR_REGS All general purpose registers except %r0
468 (These registers can be used in address generation)
469 FP_REGS All floating point registers
c5aa1d12
UW
470 CC_REGS The condition code register
471 ACCESS_REGS The access registers
c7453384 472
862a2d83
UW
473 GENERAL_FP_REGS Union of GENERAL_REGS and FP_REGS
474 ADDR_FP_REGS Union of ADDR_REGS and FP_REGS
c5aa1d12
UW
475 GENERAL_CC_REGS Union of GENERAL_REGS and CC_REGS
476 ADDR_CC_REGS Union of ADDR_REGS and CC_REGS
c7453384 477
862a2d83
UW
478 NO_REGS No registers
479 ALL_REGS All registers
c7453384 480
862a2d83 481 Note that the 'fake' frame pointer and argument pointer registers
c5aa1d12 482 are included amongst the address registers here. */
9db1d521
HP
483
484enum reg_class
485{
c5aa1d12 486 NO_REGS, CC_REGS, ADDR_REGS, GENERAL_REGS, ACCESS_REGS,
9dc62c00 487 ADDR_CC_REGS, GENERAL_CC_REGS,
4023fb28
UW
488 FP_REGS, ADDR_FP_REGS, GENERAL_FP_REGS,
489 ALL_REGS, LIM_REG_CLASSES
9db1d521 490};
9db1d521
HP
491#define N_REG_CLASSES (int) LIM_REG_CLASSES
492
c5aa1d12
UW
493#define REG_CLASS_NAMES \
494{ "NO_REGS", "CC_REGS", "ADDR_REGS", "GENERAL_REGS", "ACCESS_REGS", \
495 "ADDR_CC_REGS", "GENERAL_CC_REGS", \
496 "FP_REGS", "ADDR_FP_REGS", "GENERAL_FP_REGS", "ALL_REGS" }
9db1d521 497
862a2d83 498/* Class -> register mapping. */
9db1d521
HP
499#define REG_CLASS_CONTENTS \
500{ \
501 { 0x00000000, 0x00000000 }, /* NO_REGS */ \
9dc62c00 502 { 0x00000000, 0x00000002 }, /* CC_REGS */ \
a38e09bc
AK
503 { 0x0000fffe, 0x0000000d }, /* ADDR_REGS */ \
504 { 0x0000ffff, 0x0000000d }, /* GENERAL_REGS */ \
c5aa1d12 505 { 0x00000000, 0x00000030 }, /* ACCESS_REGS */ \
9dc62c00
AK
506 { 0x0000fffe, 0x0000000f }, /* ADDR_CC_REGS */ \
507 { 0x0000ffff, 0x0000000f }, /* GENERAL_CC_REGS */ \
9db1d521 508 { 0xffff0000, 0x00000000 }, /* FP_REGS */ \
a38e09bc
AK
509 { 0xfffffffe, 0x0000000d }, /* ADDR_FP_REGS */ \
510 { 0xffffffff, 0x0000000d }, /* GENERAL_FP_REGS */ \
c5aa1d12 511 { 0xffffffff, 0x0000003f }, /* ALL_REGS */ \
9db1d521
HP
512}
513
862a2d83
UW
514/* Register -> class mapping. */
515extern const enum reg_class regclass_map[FIRST_PSEUDO_REGISTER];
516#define REGNO_REG_CLASS(REGNO) (regclass_map[REGNO])
9db1d521 517
862a2d83
UW
518/* ADDR_REGS can be used as base or index register. */
519#define INDEX_REG_CLASS ADDR_REGS
520#define BASE_REG_CLASS ADDR_REGS
9db1d521 521
862a2d83
UW
522/* Check whether REGNO is a hard register of the suitable class
523 or a pseudo register currently allocated to one such. */
524#define REGNO_OK_FOR_INDEX_P(REGNO) \
525 (((REGNO) < FIRST_PSEUDO_REGISTER \
526 && REGNO_REG_CLASS ((REGNO)) == ADDR_REGS) \
527 || (reg_renumber[REGNO] > 0 && reg_renumber[REGNO] < 16))
528#define REGNO_OK_FOR_BASE_P(REGNO) REGNO_OK_FOR_INDEX_P (REGNO)
9db1d521 529
9db1d521 530
862a2d83
UW
531/* Given an rtx X being reloaded into a reg required to be in class CLASS,
532 return the class of reg to actually use. */
533#define PREFERRED_RELOAD_CLASS(X, CLASS) \
534 s390_preferred_reload_class ((X), (CLASS))
9db1d521 535
862a2d83
UW
536/* We need a secondary reload when loading a PLUS which is
537 not a valid operand for LOAD ADDRESS. */
538#define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, IN) \
539 s390_secondary_input_reload_class ((CLASS), (MODE), (IN))
9db1d521 540
dc65c307
UW
541/* We need a secondary reload when storing a double-word
542 to a non-offsettable memory address. */
543#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, OUT) \
544 s390_secondary_output_reload_class ((CLASS), (MODE), (OUT))
545
862a2d83
UW
546/* We need secondary memory to move data between GPRs and FPRs. */
547#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \
548 ((CLASS1) != (CLASS2) && ((CLASS1) == FP_REGS || (CLASS2) == FP_REGS))
549
550/* Get_secondary_mem widens its argument to BITS_PER_WORD which loses on 64bit
551 because the movsi and movsf patterns don't handle r/f moves. */
552#define SECONDARY_MEMORY_NEEDED_MODE(MODE) \
553 (GET_MODE_BITSIZE (MODE) < 32 \
554 ? mode_for_size (32, GET_MODE_CLASS (MODE), 0) \
555 : MODE)
556
557
558/* Define various machine-dependent constraint letters. */
9db1d521
HP
559
560#define REG_CLASS_FROM_LETTER(C) \
561 ((C) == 'a' ? ADDR_REGS : \
562 (C) == 'd' ? GENERAL_REGS : \
9dc62c00 563 (C) == 'f' ? FP_REGS : \
c5aa1d12
UW
564 (C) == 'c' ? CC_REGS : \
565 (C) == 't' ? ACCESS_REGS : NO_REGS)
9db1d521 566
f19a9af7
AK
567#define CONST_OK_FOR_CONSTRAINT_P(VALUE, C, STR) \
568 s390_const_ok_for_constraint_p ((VALUE), (C), (STR))
9db1d521 569
f19a9af7 570#define CONST_DOUBLE_OK_FOR_CONSTRAINT_P(VALUE, C, STR) 1
9db1d521 571
f19a9af7
AK
572#define EXTRA_CONSTRAINT_STR(OP, C, STR) \
573 s390_extra_constraint_str ((OP), (C), (STR))
0dfa6c5e
UW
574#define EXTRA_MEMORY_CONSTRAINT(C, STR) \
575 ((C) == 'Q' || (C) == 'R' || (C) == 'S' || (C) == 'T' || (C) == 'A')
576#define EXTRA_ADDRESS_CONSTRAINT(C, STR) \
ac32b25e 577 ((C) == 'U' || (C) == 'W' || (C) == 'Y')
ccfc6cc8 578
0dfa6c5e
UW
579#define CONSTRAINT_LEN(C, STR) \
580 ((C) == 'N' ? 5 : \
e221ef54
UW
581 (C) == 'A' ? 2 : \
582 (C) == 'B' ? 2 : DEFAULT_CONSTRAINT_LEN ((C), (STR)))
9db1d521 583
862a2d83 584/* Stack layout and calling conventions. */
c7453384 585
862a2d83
UW
586/* Our stack grows from higher to lower addresses. However, local variables
587 are accessed by positive offsets, and function arguments are stored at
588 increasing addresses. */
589#define STACK_GROWS_DOWNWARD
590/* #undef FRAME_GROWS_DOWNWARD */
591/* #undef ARGS_GROW_DOWNWARD */
9db1d521 592
862a2d83
UW
593/* The basic stack layout looks like this: the stack pointer points
594 to the register save area for called functions. Above that area
595 is the location to place outgoing arguments. Above those follow
596 dynamic allocations (alloca), and finally the local variables. */
9db1d521 597
862a2d83
UW
598/* Offset from stack-pointer to first location of outgoing args. */
599#define STACK_POINTER_OFFSET (TARGET_64BIT ? 160 : 96)
9db1d521 600
862a2d83
UW
601/* Offset within stack frame to start allocating local variables at. */
602extern int current_function_outgoing_args_size;
603#define STARTING_FRAME_OFFSET \
604 (STACK_POINTER_OFFSET + current_function_outgoing_args_size)
9db1d521 605
862a2d83
UW
606/* Offset from the stack pointer register to an item dynamically
607 allocated on the stack, e.g., by `alloca'. */
608#define STACK_DYNAMIC_OFFSET(FUNDECL) (STARTING_FRAME_OFFSET)
9db1d521 609
862a2d83
UW
610/* Offset of first parameter from the argument pointer register value.
611 We have a fake argument pointer register that points directly to
612 the argument area. */
613#define FIRST_PARM_OFFSET(FNDECL) 0
9db1d521 614
c7453384 615/* The return address of the current frame is retrieved
4023fb28
UW
616 from the initial value of register RETURN_REGNUM.
617 For frames farther back, we use the stack slot where
618 the corresponding RETURN_REGNUM register was saved. */
619
adf39f8f 620#define DYNAMIC_CHAIN_ADDRESS(FRAME) \
b3d31392 621 (TARGET_PACKED_STACK ? \
adf39f8f
AK
622 ((FRAME) != hard_frame_pointer_rtx ? \
623 plus_constant ((FRAME), STACK_POINTER_OFFSET - UNITS_PER_WORD) : \
b3d31392
AK
624 plus_constant (arg_pointer_rtx, -UNITS_PER_WORD)) : \
625 ((FRAME) != hard_frame_pointer_rtx ? (FRAME) : \
626 plus_constant (arg_pointer_rtx, -STACK_POINTER_OFFSET)))
c7453384 627
4023fb28 628#define RETURN_ADDR_RTX(COUNT, FRAME) \
5d4d885c 629 s390_return_addr_rtx ((COUNT), DYNAMIC_CHAIN_ADDRESS ((FRAME)))
9db1d521 630
862a2d83 631/* In 31-bit mode, we need to mask off the high bit of return addresses. */
a556fd39 632#define MASK_RETURN_ADDR (TARGET_64BIT ? constm1_rtx : GEN_INT (0x7fffffff))
9db1d521 633
4023fb28 634
862a2d83 635/* Exception handling. */
c7453384 636
862a2d83
UW
637/* Describe calling conventions for DWARF-2 exception handling. */
638#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, RETURN_REGNUM)
4023fb28 639#define INCOMING_FRAME_SP_OFFSET STACK_POINTER_OFFSET
9db1d521
HP
640#define DWARF_FRAME_RETURN_COLUMN 14
641
642/* Describe how we implement __builtin_eh_return. */
643#define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N) + 6 : INVALID_REGNUM)
a38e09bc
AK
644#define EH_RETURN_HANDLER_RTX gen_rtx_MEM (Pmode, return_address_pointer_rtx)
645
18789f4e
UW
646/* Select a format to encode pointers in exception handling data. */
647#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \
648 (flag_pic \
649 ? ((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4 \
650 : DW_EH_PE_absptr)
651
9db1d521 652
862a2d83 653/* Frame registers. */
9db1d521 654
862a2d83
UW
655#define STACK_POINTER_REGNUM 15
656#define FRAME_POINTER_REGNUM 34
657#define HARD_FRAME_POINTER_REGNUM 11
658#define ARG_POINTER_REGNUM 32
a38e09bc 659#define RETURN_ADDRESS_POINTER_REGNUM 35
9db1d521 660
c7453384
EC
661/* The static chain must be call-clobbered, but not used for
662 function argument passing. As register 1 is clobbered by
862a2d83
UW
663 the trampoline code, we only have one option. */
664#define STATIC_CHAIN_REGNUM 0
9db1d521 665
862a2d83
UW
666/* Number of hardware registers that go into the DWARF-2 unwind info.
667 To avoid ABI incompatibility, this number must not change even as
668 'fake' hard registers are added or removed. */
669#define DWARF_FRAME_REGISTERS 34
9db1d521 670
9db1d521 671
862a2d83 672/* Frame pointer and argument pointer elimination. */
9db1d521 673
862a2d83 674#define FRAME_POINTER_REQUIRED 0
9db1d521
HP
675
676#define INITIAL_FRAME_POINTER_OFFSET(DEPTH) (DEPTH) = 0
677
a38e09bc
AK
678#define ELIMINABLE_REGS \
679{{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
680 { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \
681 { ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
682 { ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \
683 { RETURN_ADDRESS_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
684 { RETURN_ADDRESS_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}}
9db1d521 685
91086990
UW
686#define CAN_ELIMINATE(FROM, TO) \
687 s390_can_eliminate ((FROM), (TO))
688
689#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
690 (OFFSET) = s390_initial_elimination_offset ((FROM), (TO))
9db1d521 691
9db1d521 692
862a2d83 693/* Stack arguments. */
c7453384 694
862a2d83
UW
695/* We need current_function_outgoing_args to be valid. */
696#define ACCUMULATE_OUTGOING_ARGS 1
9db1d521 697
862a2d83
UW
698/* Return doesn't modify the stack. */
699#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, SIZE) 0
9db1d521 700
9db1d521 701
862a2d83 702/* Register arguments. */
c7453384 703
9db1d521
HP
704typedef struct s390_arg_structure
705{
706 int gprs; /* gpr so far */
707 int fprs; /* fpr so far */
708}
709CUMULATIVE_ARGS;
710
07711f53 711#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, NN, N_NAMED_ARGS) \
9db1d521
HP
712 ((CUM).gprs=0, (CUM).fprs=0)
713
9db1d521 714#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
994fe660 715 s390_function_arg_advance (&CUM, MODE, TYPE, NAMED)
9db1d521 716
9db1d521 717#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
994fe660 718 s390_function_arg (&CUM, MODE, TYPE, NAMED)
9db1d521 719
862a2d83
UW
720/* Arguments can be placed in general registers 2 to 6,
721 or in floating point registers 0 and 2. */
722#define FUNCTION_ARG_REGNO_P(N) (((N) >=2 && (N) <7) || \
723 (N) == 16 || (N) == 17)
9db1d521 724
9db1d521 725
862a2d83 726/* Scalar return values. */
c7453384 727
8c17530e
UW
728#define FUNCTION_VALUE(VALTYPE, FUNC) \
729 s390_function_value ((VALTYPE), VOIDmode)
730
731#define LIBCALL_VALUE(MODE) \
732 s390_function_value (NULL, (MODE))
9db1d521 733
862a2d83 734/* Only gpr 2 and fpr 0 are ever used as return registers. */
9db1d521
HP
735#define FUNCTION_VALUE_REGNO_P(N) ((N) == 2 || (N) == 16)
736
9db1d521 737
862a2d83 738/* Function entry and exit. */
c7453384 739
862a2d83
UW
740/* When returning from a function, the stack pointer does not matter. */
741#define EXIT_IGNORE_STACK 1
9db1d521 742
9db1d521 743
862a2d83 744/* Profiling. */
9db1d521
HP
745
746#define FUNCTION_PROFILER(FILE, LABELNO) \
862a2d83 747 s390_function_profiler ((FILE), ((LABELNO)))
9db1d521 748
c52a375d 749#define PROFILE_BEFORE_PROLOGUE 1
9db1d521 750
9db1d521 751
862a2d83 752/* Implementing the varargs macros. */
9db1d521 753
862a2d83
UW
754#define EXPAND_BUILTIN_VA_START(valist, nextarg) \
755 s390_va_start (valist, nextarg)
9db1d521 756
862a2d83 757/* Trampolines for nested functions. */
9db1d521 758
cadc42db 759#define TRAMPOLINE_SIZE (TARGET_64BIT ? 32 : 16)
9db1d521 760
862a2d83
UW
761#define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, CXT) \
762 s390_initialize_trampoline ((ADDR), (FNADDR), (CXT))
9db1d521 763
862a2d83
UW
764#define TRAMPOLINE_TEMPLATE(FILE) \
765 s390_trampoline_template (FILE)
9db1d521 766
9db1d521 767
862a2d83 768/* Addressing modes, and classification of registers for them. */
9db1d521 769
862a2d83
UW
770/* Recognize any constant value that is a valid address. */
771#define CONSTANT_ADDRESS_P(X) 0
9db1d521 772
862a2d83
UW
773/* Maximum number of registers that can appear in a valid memory address. */
774#define MAX_REGS_PER_ADDRESS 2
9db1d521
HP
775
776/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx and check
777 its validity for a certain class. We have two alternate definitions
778 for each of them. The usual definition accepts all pseudo regs; the
779 other rejects them all. The symbol REG_OK_STRICT causes the latter
780 definition to be used.
781
782 Most source files want to accept pseudo regs in the hope that they will
783 get allocated to the class that the insn wants them to be in.
784 Some source files that are used after register allocation
785 need to be strict. */
786
4023fb28
UW
787#define REG_OK_FOR_INDEX_NONSTRICT_P(X) \
788((GET_MODE (X) == Pmode) && \
789 ((REGNO (X) >= FIRST_PSEUDO_REGISTER) \
c7453384 790 || REGNO_REG_CLASS (REGNO (X)) == ADDR_REGS))
9db1d521 791
9db1d521
HP
792#define REG_OK_FOR_BASE_NONSTRICT_P(X) REG_OK_FOR_INDEX_NONSTRICT_P (X)
793
9db1d521
HP
794#define REG_OK_FOR_INDEX_STRICT_P(X) \
795((GET_MODE (X) == Pmode) && (REGNO_OK_FOR_INDEX_P (REGNO (X))))
796
9db1d521
HP
797#define REG_OK_FOR_BASE_STRICT_P(X) \
798((GET_MODE (X) == Pmode) && (REGNO_OK_FOR_BASE_P (REGNO (X))))
799
9db1d521
HP
800#ifndef REG_OK_STRICT
801#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_INDEX_NONSTRICT_P(X)
802#define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_NONSTRICT_P(X)
803#else
804#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_INDEX_STRICT_P(X)
805#define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_STRICT_P(X)
806#endif
807
862a2d83
UW
808/* S/390 has no mode dependent addresses. */
809#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)
9db1d521
HP
810
811/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression that is a
812 valid memory address for an instruction.
813 The MODE argument is the machine mode for the MEM expression
862a2d83 814 that wants to use this address. */
9db1d521
HP
815#ifdef REG_OK_STRICT
816#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
817{ \
818 if (legitimate_address_p (MODE, X, 1)) \
819 goto ADDR; \
820}
821#else
822#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
823{ \
824 if (legitimate_address_p (MODE, X, 0)) \
825 goto ADDR; \
826}
827#endif
828
9db1d521
HP
829/* Try machine-dependent ways of modifying an illegitimate address
830 to be legitimate. If we find one, return the new, valid address.
831 This macro is used in only one place: `memory_address' in explow.c. */
9db1d521
HP
832#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) \
833{ \
834 (X) = legitimize_address (X, OLDX, MODE); \
835 if (memory_address_p (MODE, X)) \
836 goto WIN; \
837}
838
0b540f12
UW
839/* Try a machine-dependent way of reloading an illegitimate address
840 operand. If we find one, push the reload and jump to WIN. This
841 macro is used in only one place: `find_reloads_address' in reload.c. */
842#define LEGITIMIZE_RELOAD_ADDRESS(AD, MODE, OPNUM, TYPE, IND, WIN) \
843do { \
844 rtx new = legitimize_reload_address (AD, MODE, OPNUM, (int)(TYPE)); \
845 if (new) \
846 { \
847 (AD) = new; \
848 goto WIN; \
849 } \
850} while (0)
851
862a2d83
UW
852/* Nonzero if the constant value X is a legitimate general operand.
853 It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */
854#define LEGITIMATE_CONSTANT_P(X) \
855 legitimate_constant_p (X)
9db1d521 856
862a2d83
UW
857/* Helper macro for s390.c and s390.md to check for symbolic constants. */
858#define SYMBOLIC_CONST(X) \
859(GET_CODE (X) == SYMBOL_REF \
860 || GET_CODE (X) == LABEL_REF \
861 || (GET_CODE (X) == CONST && symbolic_reference_mentioned_p (X)))
9db1d521 862
fd3cd001
UW
863#define TLS_SYMBOLIC_CONST(X) \
864((GET_CODE (X) == SYMBOL_REF && tls_symbolic_operand (X)) \
865 || (GET_CODE (X) == CONST && tls_symbolic_reference_mentioned_p (X)))
866
9db1d521 867
862a2d83 868/* Condition codes. */
9db1d521 869
862a2d83
UW
870/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
871 return the mode to be used for the comparison. */
872#define SELECT_CC_MODE(OP, X, Y) s390_select_ccmode ((OP), (X), (Y))
c7453384 873
68f9c5e2
UW
874/* Canonicalize a comparison from one we don't have to one we do have. */
875#define CANONICALIZE_COMPARISON(CODE, OP0, OP1) \
876 s390_canonicalize_comparison (&(CODE), &(OP0), &(OP1))
877
862a2d83
UW
878/* Define the information needed to generate branch and scc insns. This is
879 stored from the compare operation. Note that we can't use "rtx" here
880 since it hasn't been defined! */
881extern struct rtx_def *s390_compare_op0, *s390_compare_op1;
9db1d521 882
9db1d521 883
862a2d83 884/* Relative costs of operations. */
9db1d521 885
9db1d521 886/* On s390, copy between fprs and gprs is expensive. */
9db1d521 887#define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \
14b3e8ef
UW
888 (( ( reg_classes_intersect_p ((CLASS1), GENERAL_REGS) \
889 && reg_classes_intersect_p ((CLASS2), FP_REGS)) \
890 || ( reg_classes_intersect_p ((CLASS1), FP_REGS) \
891 && reg_classes_intersect_p ((CLASS2), GENERAL_REGS))) ? 10 : 1)
9db1d521 892
9db1d521
HP
893/* A C expression for the cost of moving data of mode M between a
894 register and memory. A value of 2 is the default; this cost is
862a2d83 895 relative to those in `REGISTER_MOVE_COST'. */
9db1d521
HP
896#define MEMORY_MOVE_COST(M, C, I) 1
897
898/* A C expression for the cost of a branch instruction. A value of 1
899 is the default; other values are interpreted relative to that. */
9db1d521
HP
900#define BRANCH_COST 1
901
862a2d83
UW
902/* Nonzero if access to memory by bytes is slow and undesirable. */
903#define SLOW_BYTE_ACCESS 1
904
c5443745
UW
905/* An integer expression for the size in bits of the largest integer machine
906 mode that should actually be used. We allow pairs of registers. */
907#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TARGET_64BIT ? TImode : DImode)
908
862a2d83 909/* The maximum number of bytes that a single instruction can move quickly
ff482c8d 910 between memory and registers or between two memory locations. */
862a2d83 911#define MOVE_MAX (TARGET_64BIT ? 16 : 8)
c5443745 912#define MOVE_MAX_PIECES (TARGET_64BIT ? 8 : 4)
862a2d83 913#define MAX_MOVE_MAX 16
9db1d521 914
862a2d83
UW
915/* Determine whether to use move_by_pieces or block move insn. */
916#define MOVE_BY_PIECES_P(SIZE, ALIGN) \
917 ( (SIZE) == 1 || (SIZE) == 2 || (SIZE) == 4 \
918 || (TARGET_64BIT && (SIZE) == 8) )
919
920/* Determine whether to use clear_by_pieces or block clear insn. */
921#define CLEAR_BY_PIECES_P(SIZE, ALIGN) \
922 ( (SIZE) == 1 || (SIZE) == 2 || (SIZE) == 4 \
923 || (TARGET_64BIT && (SIZE) == 8) )
924
45d78e7f
JJ
925/* This macro is used to determine whether store_by_pieces should be
926 called to "memset" storage with byte values other than zero, or
927 to "memcpy" storage when the source is a constant string. */
928#define STORE_BY_PIECES_P(SIZE, ALIGN) MOVE_BY_PIECES_P (SIZE, ALIGN)
929
862a2d83
UW
930/* Don't perform CSE on function addresses. */
931#define NO_FUNCTION_CSE
932
933
934/* Sections. */
935
936/* Output before read-only data. */
937#define TEXT_SECTION_ASM_OP ".text"
938
939/* Output before writable (initialized) data. */
940#define DATA_SECTION_ASM_OP ".data"
941
942/* Output before writable (uninitialized) data. */
943#define BSS_SECTION_ASM_OP ".bss"
944
945/* S/390 constant pool breaks the devices in crtstuff.c to control section
946 in where code resides. We have to write it as asm code. */
947#ifndef __s390x__
948#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
949 asm (SECTION_OP "\n\
950 bras\t%r2,1f\n\
9510: .long\t" USER_LABEL_PREFIX #FUNC " - 0b\n\
9521: l\t%r3,0(%r2)\n\
953 bas\t%r14,0(%r3,%r2)\n\
954 .previous");
955#endif
63a1ff86 956
862a2d83
UW
957
958/* Position independent code. */
959
c7453384 960extern int flag_pic;
862a2d83
UW
961
962#define PIC_OFFSET_TABLE_REGNUM (flag_pic ? 12 : INVALID_REGNUM)
963
964#define LEGITIMATE_PIC_OPERAND_P(X) legitimate_pic_operand_p (X)
63a1ff86
UW
965
966
967/* Assembler file format. */
968
969/* Character to start a comment. */
970#define ASM_COMMENT_START "#"
971
972/* Declare an uninitialized external linkage data object. */
973#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
974 asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
975
976/* Globalizing directive for a label. */
977#define GLOBAL_ASM_OP ".globl "
978
979/* Advance the location counter to a multiple of 2**LOG bytes. */
980#define ASM_OUTPUT_ALIGN(FILE, LOG) \
981 if ((LOG)) fprintf ((FILE), "\t.align\t%d\n", 1 << (LOG))
982
983/* Advance the location counter by SIZE bytes. */
984#define ASM_OUTPUT_SKIP(FILE, SIZE) \
58e15542 985 fprintf ((FILE), "\t.set\t.,.+"HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE))
63a1ff86 986
63a1ff86
UW
987/* The LOCAL_LABEL_PREFIX variable is used by dbxelf.h. */
988#define LOCAL_LABEL_PREFIX "."
9db1d521
HP
989
990/* How to refer to registers in assembler output. This sequence is
991 indexed by compiler's hard-register-number (see above). */
9db1d521
HP
992#define REGISTER_NAMES \
993{ "%r0", "%r1", "%r2", "%r3", "%r4", "%r5", "%r6", "%r7", \
a38e09bc 994 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15", \
9db1d521 995 "%f0", "%f2", "%f4", "%f6", "%f1", "%f3", "%f5", "%f7", \
a38e09bc 996 "%f8", "%f10", "%f12", "%f14", "%f9", "%f11", "%f13", "%f15", \
c5aa1d12 997 "%ap", "%cc", "%fp", "%rp", "%a0", "%a1" \
9db1d521
HP
998}
999
6b2300b3
JJ
1000/* Emit a dtp-relative reference to a TLS variable. */
1001
1002#ifdef HAVE_AS_TLS
1003#define ASM_OUTPUT_DWARF_DTPREL(FILE, SIZE, X) \
1004 s390_output_dwarf_dtprel (FILE, SIZE, X)
1005#endif
1006
63a1ff86 1007/* Print operand X (an rtx) in assembler syntax to file FILE. */
9db1d521 1008#define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
9db1d521
HP
1009#define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR)
1010
faeb9bb6
UW
1011/* Output machine-dependent UNSPECs in address constants. */
1012#define OUTPUT_ADDR_CONST_EXTRA(FILE, X, FAIL) \
1013do { \
1014 if (!s390_output_addr_const_extra (FILE, (X))) \
1015 goto FAIL; \
1016} while (0);
1017
63a1ff86
UW
1018/* Output an element of a case-vector that is absolute. */
1019#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
1020do { \
1021 char buf[32]; \
1022 fputs (integer_asm_op (UNITS_PER_WORD, TRUE), (FILE)); \
1023 ASM_GENERATE_INTERNAL_LABEL (buf, "L", (VALUE)); \
1024 assemble_name ((FILE), buf); \
1025 fputc ('\n', (FILE)); \
1026} while (0)
1027
1028/* Output an element of a case-vector that is relative. */
1029#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
1030do { \
1031 char buf[32]; \
1032 fputs (integer_asm_op (UNITS_PER_WORD, TRUE), (FILE)); \
1033 ASM_GENERATE_INTERNAL_LABEL (buf, "L", (VALUE)); \
1034 assemble_name ((FILE), buf); \
1035 fputc ('-', (FILE)); \
1036 ASM_GENERATE_INTERNAL_LABEL (buf, "L", (REL)); \
1037 assemble_name ((FILE), buf); \
1038 fputc ('\n', (FILE)); \
1039} while (0)
1040
9db1d521 1041
862a2d83
UW
1042/* Miscellaneous parameters. */
1043
1044/* Define the codes that are matched by predicates in aux-output.c. */
1045#define PREDICATE_CODES \
1046 {"s_operand", { SUBREG, MEM }}, \
ac32b25e 1047 {"shift_count_operand", { REG, SUBREG, PLUS, CONST_INT }}, \
862a2d83
UW
1048 {"bras_sym_operand",{ SYMBOL_REF, CONST }}, \
1049 {"larl_operand", { SYMBOL_REF, CONST, CONST_INT, CONST_DOUBLE }}, \
1050 {"load_multiple_operation", {PARALLEL}}, \
1051 {"store_multiple_operation", {PARALLEL}}, \
1052 {"const0_operand", { CONST_INT, CONST_DOUBLE }}, \
1053 {"consttable_operand", { SYMBOL_REF, LABEL_REF, CONST, \
1054 CONST_INT, CONST_DOUBLE }}, \
e69166de 1055 {"s390_plus_operand", { PLUS }}, \
5b022de5
UW
1056 {"s390_comparison", { EQ, NE, LT, GT, LE, GE, LTU, GTU, LEU, GEU, \
1057 UNEQ, UNLT, UNGT, UNLE, UNGE, LTGT, \
1058 UNORDERED, ORDERED }}, \
5d880bd2
UW
1059 {"s390_alc_comparison", { ZERO_EXTEND, SIGN_EXTEND, \
1060 LTU, GTU, LEU, GEU }}, \
1061 {"s390_slb_comparison", { ZERO_EXTEND, SIGN_EXTEND, \
1062 LTU, GTU, LEU, GEU }},
862a2d83
UW
1063
1064/* Specify the machine mode that this machine uses for the index in the
1065 tablejump instruction. */
1066#define CASE_VECTOR_MODE (TARGET_64BIT ? DImode : SImode)
1067
862a2d83
UW
1068/* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
1069 is done just by pretending it is already truncated. */
1070#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
1071
1072/* Specify the machine mode that pointers have.
1073 After generation of rtl, the compiler makes no further distinction
1074 between pointers and any other objects of this machine mode. */
1075#define Pmode ((enum machine_mode) (TARGET_64BIT ? DImode : SImode))
1076
c7453384
EC
1077/* This is -1 for "pointer mode" extend. See ptr_extend in s390.md. */
1078#define POINTERS_EXTEND_UNSIGNED -1
1079
862a2d83
UW
1080/* A function address in a call instruction is a byte address (for
1081 indexing purposes) so give the MEM rtx a byte's mode. */
1082#define FUNCTION_MODE QImode
1083
c7453384 1084#endif