aboutsummaryrefslogtreecommitdiff
path: root/gcc/libfuncs.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/libfuncs.h')
-rw-r--r--gcc/libfuncs.h33
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. */