diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2010-07-12 18:55:48 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2010-07-12 18:55:48 +0000 |
commit | 3e9c326a88c289e25d58d2e9efb8517ef272410d (patch) | |
tree | 3386f4b0b387575b31aa4559e02d101b1270353f /gcc/libfuncs.h | |
parent | 9f7f18923aa399f15f5ba5f7f5bd4c76def90265 (diff) | |
download | gcc-3e9c326a88c289e25d58d2e9efb8517ef272410d.zip gcc-3e9c326a88c289e25d58d2e9efb8517ef272410d.tar.gz gcc-3e9c326a88c289e25d58d2e9efb8517ef272410d.tar.bz2 |
Makefile.in (LIBFUNCS_H): Add $(HASHTAB_H).
gcc/
* Makefile.in (LIBFUNCS_H): Add $(HASHTAB_H).
(target-globals.o): Depend on $(LIBFUNCS_H).
* libfuncs.h: Include hashtab.h.
(libfunc_entry): Moved from optabs.c.
(target_libfuncs): New structure.
(default_target_libfuncs): Declare.
(this_target_libfuncs): Declare as a variable or define as a macro.
(libfunc_table): Redefine as a macro.
* optabs.c (default_target_libfuncs): New variable.
(this_target_libfuncs): New conditional variable.
(libfunc_table): Delete.
(libfunc_entry): Moved to optabs.h.
(libfunc_hash): Redefine as a macro.
(hash_libfunc, eq_libfunc): Fix comments.
(init_optabs): Use libfunc_hash to detect cases where the function
has already been called. Clear the hash table instead of
recreating it.
* target-globals.h (this_target_libfuncs): Declare.
(target_globals): Add a libfuncs field.
(restore_target_globals): Copy the libfuncs field to
this_target_libfuncs.
* target-globals.c: Include libfuncs.h.
(default_target_globals): Initialize the libfuncs field.
(save_target_globals): Likewise.
From-SVN: r162099
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. */ |