Use MODE_BASE_REG_CLASS in legitimize macros.
[official-gcc.git] / gcc / halfpic.h
blob37bc49962b6a5757db1ce3e8346774bd4a3f640d
1 /* OSF/rose half-pic support definitions.
2 Copyright (C) 1992, 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 2, or (at your option) any later
9 version.
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 for more details.
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING. If not, write to the Free
18 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19 02111-1307, USA. */
21 #ifndef NO_HALF_PIC
23 /* Declare the variable flag_half_pic as 'int' instead of 'extern
24 int', so that BSS variables are created (even though this is not
25 strict ANSI). This is because rtl.c now refers to the
26 CONSTANT_ADDRESS_P macro, which in turn refers to flag_half_pic,
27 and wants to call half_pic_address_p, whose address we also store
28 in a BSS variable. This way, the gen* programs won't get
29 unknown symbol errors when being linked (flag_half_pic will never
30 be true in the gen* programs). */
32 int flag_half_pic; /* Global half-pic flag. */
33 int (*ptr_half_pic_address_p) PARAMS ((struct rtx_def *)); /* ptr to half_pic_address_p () */
35 extern int half_pic_number_ptrs; /* # distinct pointers found */
36 extern int half_pic_number_refs; /* # half-pic references */
37 extern void half_pic_encode PARAMS ((union tree_node *)); /* encode whether half-pic */
38 extern void half_pic_declare PARAMS ((const char *)); /* declare object local */
39 extern void half_pic_external PARAMS ((const char *)); /* declare object external */
40 extern void half_pic_init PARAMS ((void)); /* half_pic initialization */
41 extern int half_pic_address_p PARAMS ((struct rtx_def *)); /* true if an address is half-pic */
42 extern struct rtx_def *half_pic_ptr PARAMS ((struct rtx_def *)); /* return RTX for half-pic pointer */
43 #ifdef BUFSIZ
44 extern void half_pic_finish PARAMS ((FILE *)); /* half_pic termination */
45 #endif
47 /* Macros to provide access to the half-pic stuff (so they can easily
48 be stubbed out. */
50 #define HALF_PIC_P() (flag_half_pic)
51 #define HALF_PIC_NUMBER_PTRS (half_pic_number_ptrs)
52 #define HALF_PIC_NUMBER_REFS (half_pic_number_refs)
54 #define HALF_PIC_ENCODE(DECL) half_pic_encode (DECL)
55 #define HALF_PIC_DECLARE(NAME) half_pic_declare (NAME)
56 #define HALF_PIC_EXTERNAL(NAME) half_pic_external (NAME)
57 #define HALF_PIC_INIT() half_pic_init ()
58 #define HALF_PIC_FINISH(STREAM) half_pic_finish (STREAM)
59 #define HALF_PIC_ADDRESS_P(X) ((*ptr_half_pic_address_p) (X))
60 #define HALF_PIC_PTR(X) half_pic_ptr (X)
62 /* Prefix for half-pic names */
63 #ifndef HALF_PIC_PREFIX
64 #define HALF_PIC_PREFIX "__pic_"
65 #endif
67 #endif /* NO_HALF_PIC */