diff options
Diffstat (limited to 'gcc/libfuncs.h')
-rw-r--r-- | gcc/libfuncs.h | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/gcc/libfuncs.h b/gcc/libfuncs.h index 9916d2f..68b090e 100644 --- a/gcc/libfuncs.h +++ b/gcc/libfuncs.h @@ -20,6 +20,8 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_LIBFUNCS_H #define GCC_LIBFUNCS_H +#include "hashtab.h" + /* Enumeration of indexes into libfunc_table. */ enum libfunc_index { @@ -45,9 +47,34 @@ enum libfunc_index LTI_MAX }; -/* SYMBOL_REF rtx's for the library functions that are called - implicitly and not via optabs. */ -extern GTY(()) rtx libfunc_table[LTI_MAX]; +/* Information about an optab-related libfunc. We use the same hashtable + for normal optabs and conversion optabs. In the first case mode2 + is unused. */ +struct GTY(()) libfunc_entry { + size_t optab; + enum machine_mode mode1, mode2; + rtx libfunc; +}; + +/* Target-dependent globals. */ +struct GTY(()) target_libfuncs { + /* SYMBOL_REF rtx's for the library functions that are called + implicitly and not via optabs. */ + rtx x_libfunc_table[LTI_MAX]; + + /* Hash table used to convert declarations into nodes. */ + htab_t GTY((param_is (struct libfunc_entry))) x_libfunc_hash; +}; + +extern GTY(()) struct target_libfuncs default_target_libfuncs; +#if SWITCHABLE_TARGET +extern struct target_libfuncs *this_target_libfuncs; +#else +#define this_target_libfuncs (&default_target_libfuncs) +#endif + +#define libfunc_table \ + (this_target_libfuncs->x_libfunc_table) /* Accessor macros for libfunc_table. */ |