00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "varray.h"
00026 #include "gtype-desc.h"
00027
00028
00029
00030
00031 #ifdef SGI_MONGOOSE
00032
00033
00034
00035 extern int ggc_p;
00036 #endif
00037
00038
00039 extern const char empty_string[];
00040 extern const char digit_vector[];
00041 #define digit_string(d) (digit_vector + ((d) * 2))
00042
00043
00044
00045 extern void ggc_add_root PARAMS ((void *base, int nelt,
00046 int size, void (*)(void *)));
00047
00048
00049
00050 struct ggc_root_tab {
00051 void *base;
00052 size_t nelt;
00053 size_t stride;
00054 void (*cb) PARAMS ((void *));
00055 };
00056 #define LAST_GGC_ROOT_TAB { NULL, 0, 0, NULL }
00057
00058 extern const struct ggc_root_tab * const gt_ggc_rtab[];
00059 extern const struct ggc_root_tab * const gt_ggc_deletable_rtab[];
00060
00061
00062 struct htab;
00063 struct ggc_cache_tab {
00064 struct htab * *base;
00065 size_t nelt;
00066 size_t stride;
00067 void (*cb) PARAMS ((void *));
00068 int (*marked_p) PARAMS ((const void *));
00069 };
00070 #define LAST_GGC_CACHE_TAB { NULL, 0, 0, NULL, NULL }
00071
00072 extern const struct ggc_cache_tab * const gt_ggc_cache_rtab[];
00073
00074 extern void ggc_mark_roots PARAMS ((void));
00075
00076
00077
00078 #define ggc_test_and_set_mark(EXPR) \
00079 ((EXPR) != NULL && ((void *) (EXPR)) != (void *) 1 && ! ggc_set_mark (EXPR))
00080
00081 #define ggc_mark_rtx gt_ggc_m_7rtx_def
00082 #define ggc_mark_tree gt_ggc_m_9tree_node
00083
00084 #define ggc_mark(EXPR) \
00085 do { \
00086 const void *const a__ = (EXPR); \
00087 if (a__ != NULL && a__ != (void *) 1) \
00088 ggc_set_mark (a__); \
00089 } while (0)
00090
00091
00092
00093
00094 extern void init_ggc PARAMS ((void));
00095 extern void init_stringpool PARAMS ((void));
00096
00097
00098
00099 extern void ggc_push_context PARAMS ((void));
00100
00101
00102
00103 extern void ggc_pop_context PARAMS ((void));
00104
00105
00106
00107
00108 extern void *ggc_alloc PARAMS ((size_t));
00109
00110 extern void *ggc_alloc_cleared PARAMS ((size_t));
00111
00112 extern void *ggc_realloc PARAMS ((void *, size_t));
00113
00114 extern void *ggc_calloc PARAMS ((size_t, size_t));
00115
00116 #define ggc_alloc_rtx(NSLOTS) \
00117 ((struct rtx_def *) ggc_alloc (sizeof (struct rtx_def) \
00118 + ((NSLOTS) - 1) * sizeof (rtunion)))
00119
00120 #define ggc_alloc_rtvec(NELT) \
00121 ((struct rtvec_def *) ggc_alloc (sizeof (struct rtvec_def) \
00122 + ((NELT) - 1) * sizeof (rtx)))
00123
00124 #define ggc_alloc_tree(LENGTH) ((union tree_node *) ggc_alloc (LENGTH))
00125
00126 #define htab_create_ggc(SIZE, HASH, EQ, DEL) \
00127 htab_create_alloc (SIZE, HASH, EQ, DEL, ggc_calloc, NULL)
00128
00129
00130
00131
00132 extern const char *ggc_alloc_string PARAMS ((const char *contents,
00133 int length));
00134
00135
00136 #define ggc_strdup(S) ggc_alloc_string((S), -1)
00137
00138
00139
00140 extern void ggc_collect PARAMS ((void));
00141
00142
00143
00144
00145
00146
00147 extern int ggc_set_mark PARAMS ((const void *));
00148
00149
00150
00151
00152 extern int ggc_marked_p PARAMS ((const void *));
00153
00154
00155
00156
00157
00158 typedef struct ggc_statistics
00159 {
00160
00161 unsigned num_trees[256];
00162
00163
00164 size_t size_trees[256];
00165
00166 unsigned num_rtxs[256];
00167
00168
00169 size_t size_rtxs[256];
00170
00171 size_t total_size_trees;
00172
00173 size_t total_size_rtxs;
00174
00175 unsigned total_num_trees;
00176
00177 unsigned total_num_rtxs;
00178 } ggc_statistics;
00179
00180
00181 extern size_t ggc_get_size PARAMS ((const void *));
00182
00183
00184
00185 extern void ggc_print_common_statistics PARAMS ((FILE *, ggc_statistics *));
00186
00187
00188 extern void ggc_print_statistics PARAMS ((void));
00189 extern void stringpool_statistics PARAMS ((void));
00190
00191
00192 extern int ggc_min_expand_heuristic PARAMS ((void));
00193 extern int ggc_min_heapsize_heuristic PARAMS ((void));
00194 extern void init_ggc_heuristics PARAMS ((void));