xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/config/pa/pa64-linux.h (revision bdc22b2e01993381dcefeff2bc9b56ca75a4235c)
1 /* Definitions for PA_RISC with ELF format on 64-bit Linux
2    Copyright (C) 1999-2015 Free Software Foundation, Inc.
3 
4 This file is part of GCC.
5 
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.
10 
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.
15 
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/>.  */
19 
20 #if 0 /* needs some work :-( */
21 /* If defined, this macro specifies a table of register pairs used to
22    eliminate unneeded registers that point into the stack frame.  */
23 
24 #define ELIMINABLE_REGS							\
25 {									\
26   {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM},				\
27   {ARG_POINTER_REGNUM,	 STACK_POINTER_REGNUM},				\
28   {ARG_POINTER_REGNUM,	 FRAME_POINTER_REGNUM},				\
29 }
30 
31 /* This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'.  It
32    specifies the initial difference between the specified pair of
33    registers.  This macro must be defined if `ELIMINABLE_REGS' is
34    defined.  */
35 #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
36   do								\
37     {								\
38       int fsize;						\
39 								\
40       fsize = pa_compute_frame_size (get_frame_size (), 0);	\
41       if ((TO) == FRAME_POINTER_REGNUM				\
42 	  && (FROM) == ARG_POINTER_REGNUM)			\
43 	{							\
44 	  (OFFSET) = -16;					\
45 	  break;						\
46 	}							\
47 								\
48       gcc_assert ((TO) == STACK_POINTER_REGNUM);		\
49 								\
50       switch (FROM)						\
51 	{							\
52 	case FRAME_POINTER_REGNUM:				\
53 	  (OFFSET) = - fsize;					\
54 	  break;						\
55 								\
56 	case ARG_POINTER_REGNUM:				\
57 	  (OFFSET) = - fsize - 16;				\
58 	  break;						\
59 								\
60 	default:						\
61 	  gcc_unreachable ();					\
62 	}							\
63     } while (0)
64 #endif
65