123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /* Definitions for code generation pass of GNU compiler.
- Copyright (C) 2001-2015 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
- #include "hashtab.h"
- /* Enumeration of indexes into libfunc_table. */
- enum libfunc_index
- {
- LTI_abort,
- LTI_memcpy,
- LTI_memmove,
- LTI_memcmp,
- LTI_memset,
- LTI_setbits,
- LTI_setjmp,
- LTI_longjmp,
- LTI_unwind_sjlj_register,
- LTI_unwind_sjlj_unregister,
- LTI_profile_function_entry,
- LTI_profile_function_exit,
- LTI_synchronize,
- LTI_gcov_flush,
- 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_hasher<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 abort_libfunc (libfunc_table[LTI_abort])
- #define memcpy_libfunc (libfunc_table[LTI_memcpy])
- #define memmove_libfunc (libfunc_table[LTI_memmove])
- #define memcmp_libfunc (libfunc_table[LTI_memcmp])
- #define memset_libfunc (libfunc_table[LTI_memset])
- #define setbits_libfunc (libfunc_table[LTI_setbits])
- #define setjmp_libfunc (libfunc_table[LTI_setjmp])
- #define longjmp_libfunc (libfunc_table[LTI_longjmp])
- #define unwind_sjlj_register_libfunc (libfunc_table[LTI_unwind_sjlj_register])
- #define unwind_sjlj_unregister_libfunc \
- (libfunc_table[LTI_unwind_sjlj_unregister])
- #define profile_function_entry_libfunc (libfunc_table[LTI_profile_function_entry])
- #define profile_function_exit_libfunc (libfunc_table[LTI_profile_function_exit])
- #define synchronize_libfunc (libfunc_table[LTI_synchronize])
- #define gcov_flush_libfunc (libfunc_table[LTI_gcov_flush])
- /* In explow.c */
- extern void set_stack_check_libfunc (const char *);
- #endif /* GCC_LIBFUNCS_H */
|