diff options
Diffstat (limited to 'lib/gcc/aarch64-none-linux-gnu/13.2.1/plugin/include/libfuncs.h')
-rw-r--r-- | lib/gcc/aarch64-none-linux-gnu/13.2.1/plugin/include/libfuncs.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/lib/gcc/aarch64-none-linux-gnu/13.2.1/plugin/include/libfuncs.h b/lib/gcc/aarch64-none-linux-gnu/13.2.1/plugin/include/libfuncs.h new file mode 100644 index 0000000..6f1bc70 --- /dev/null +++ b/lib/gcc/aarch64-none-linux-gnu/13.2.1/plugin/include/libfuncs.h @@ -0,0 +1,84 @@ +/* Definitions for code generation pass of GNU compiler. + Copyright (C) 2001-2023 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#ifndef GCC_LIBFUNCS_H +#define GCC_LIBFUNCS_H + + +/* Enumeration of indexes into libfunc_table. */ +enum libfunc_index +{ + LTI_unwind_sjlj_register, + LTI_unwind_sjlj_unregister, + LTI_synchronize, + LTI_MAX +}; + +/* Information about an optab-related libfunc. The op field is logically + an enum optab_d, and the mode fields are logically machine_mode. + However, in the absence of forward-declared enums, there's no practical + benefit of pulling in the defining headers. + + We use the same hashtable for normal optabs and conversion optabs. In + the first case mode2 is forced to VOIDmode. */ + +struct GTY((for_user)) libfunc_entry { + int op, mode1, mode2; + rtx libfunc; +}; + +/* Descriptor for libfunc_entry. */ + +struct libfunc_hasher : ggc_ptr_hash<libfunc_entry> +{ + static hashval_t hash (libfunc_entry *); + static bool equal (libfunc_entry *, libfunc_entry *); +}; + +/* 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. */ + hash_table<libfunc_hasher> *GTY(()) 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. */ + +#define unwind_sjlj_register_libfunc (libfunc_table[LTI_unwind_sjlj_register]) +#define unwind_sjlj_unregister_libfunc \ + (libfunc_table[LTI_unwind_sjlj_unregister]) +#define synchronize_libfunc (libfunc_table[LTI_synchronize]) + +/* In explow.cc */ +extern void set_stack_check_libfunc (const char *); + +#endif /* GCC_LIBFUNCS_H */ |