hppa: Revise REG+D address support to allow long displacements before reload
[official-gcc.git] / gcc / config / pa / pa64-linux.h
blob33fed023643d42d9d566d8065558d2969a0b9b01
1 /* Definitions for PA_RISC with ELF format on 64-bit Linux
2 Copyright (C) 1999-2023 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
11 GCC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
20 /* 64-bit ELF target. */
21 #undef TARGET_ELF64
22 #define TARGET_ELF64 1
24 #if 0 /* needs some work :-( */
25 /* If defined, this macro specifies a table of register pairs used to
26 eliminate unneeded registers that point into the stack frame. */
28 #define ELIMINABLE_REGS \
29 { \
30 {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
31 {ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
32 {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
35 /* This macro returns the initial difference between the specified pair
36 of registers. */
37 #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
38 do \
39 { \
40 int fsize; \
42 fsize = pa_compute_frame_size (get_frame_size (), 0); \
43 if ((TO) == FRAME_POINTER_REGNUM \
44 && (FROM) == ARG_POINTER_REGNUM) \
45 { \
46 (OFFSET) = -16; \
47 break; \
48 } \
50 gcc_assert ((TO) == STACK_POINTER_REGNUM); \
52 switch (FROM) \
53 { \
54 case FRAME_POINTER_REGNUM: \
55 (OFFSET) = - fsize; \
56 break; \
58 case ARG_POINTER_REGNUM: \
59 (OFFSET) = - fsize - 16; \
60 break; \
62 default: \
63 gcc_unreachable (); \
64 } \
65 } while (0)
66 #endif