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