]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/libfuncs.h
gcc/
[thirdparty/gcc.git] / gcc / libfuncs.h
CommitLineData
d8fc4d0b 1/* Definitions for code generation pass of GNU compiler.
d353bf18 2 Copyright (C) 2001-2015 Free Software Foundation, Inc.
d8fc4d0b 3
049df704 4This file is part of GCC.
d8fc4d0b 5
049df704 6GCC is free software; you can redistribute it and/or modify
d8fc4d0b 7it under the terms of the GNU General Public License as published by
8c4c00c1 8the Free Software Foundation; either version 3, or (at your option)
d8fc4d0b 9any later version.
10
049df704 11GCC is distributed in the hope that it will be useful,
d8fc4d0b 12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
8c4c00c1 17along with GCC; see the file COPYING3. If not see
18<http://www.gnu.org/licenses/>. */
d8fc4d0b 19
20#ifndef GCC_LIBFUNCS_H
21#define GCC_LIBFUNCS_H
22
d0f03375 23
d8fc4d0b 24/* Enumeration of indexes into libfunc_table. */
25enum libfunc_index
26{
a0ef1725 27 LTI_abort,
d8fc4d0b 28 LTI_memcpy,
29 LTI_memmove,
d8fc4d0b 30 LTI_memcmp,
d8fc4d0b 31 LTI_memset,
62f615b1 32 LTI_setbits,
d8fc4d0b 33
d8fc4d0b 34 LTI_setjmp,
35 LTI_longjmp,
36 LTI_unwind_sjlj_register,
37 LTI_unwind_sjlj_unregister,
38
d8fc4d0b 39 LTI_profile_function_entry,
40 LTI_profile_function_exit,
41
047a7e40 42 LTI_synchronize,
43
62f615b1 44 LTI_gcov_flush,
62f615b1 45
d8fc4d0b 46 LTI_MAX
47};
48
6eb29590 49/* Information about an optab-related libfunc. The op field is logically
3754d046 50 an enum optab_d, and the mode fields are logically machine_mode.
6eb29590 51 However, in the absence of forward-declared enums, there's no practical
52 benefit of pulling in the defining headers.
53
54 We use the same hashtable for normal optabs and conversion optabs. In
55 the first case mode2 is forced to VOIDmode. */
56
2ef51f0e 57struct GTY((for_user)) libfunc_entry {
6eb29590 58 int op, mode1, mode2;
d0f03375 59 rtx libfunc;
60};
61
2ef51f0e 62/* Descriptor for libfunc_entry. */
63
64struct libfunc_hasher : ggc_hasher<libfunc_entry *>
65{
66 static hashval_t hash (libfunc_entry *);
67 static bool equal (libfunc_entry *, libfunc_entry *);
68};
69
d0f03375 70/* Target-dependent globals. */
71struct GTY(()) target_libfuncs {
72 /* SYMBOL_REF rtx's for the library functions that are called
73 implicitly and not via optabs. */
74 rtx x_libfunc_table[LTI_MAX];
75
76 /* Hash table used to convert declarations into nodes. */
2ef51f0e 77 hash_table<libfunc_hasher> *GTY(()) x_libfunc_hash;
d0f03375 78};
79
80extern GTY(()) struct target_libfuncs default_target_libfuncs;
81#if SWITCHABLE_TARGET
82extern struct target_libfuncs *this_target_libfuncs;
83#else
84#define this_target_libfuncs (&default_target_libfuncs)
85#endif
86
87#define libfunc_table \
88 (this_target_libfuncs->x_libfunc_table)
d8fc4d0b 89
90/* Accessor macros for libfunc_table. */
d8fc4d0b 91
a0ef1725 92#define abort_libfunc (libfunc_table[LTI_abort])
d8fc4d0b 93#define memcpy_libfunc (libfunc_table[LTI_memcpy])
94#define memmove_libfunc (libfunc_table[LTI_memmove])
d8fc4d0b 95#define memcmp_libfunc (libfunc_table[LTI_memcmp])
d8fc4d0b 96#define memset_libfunc (libfunc_table[LTI_memset])
62f615b1 97#define setbits_libfunc (libfunc_table[LTI_setbits])
d8fc4d0b 98
d8fc4d0b 99#define setjmp_libfunc (libfunc_table[LTI_setjmp])
100#define longjmp_libfunc (libfunc_table[LTI_longjmp])
101#define unwind_sjlj_register_libfunc (libfunc_table[LTI_unwind_sjlj_register])
102#define unwind_sjlj_unregister_libfunc \
103 (libfunc_table[LTI_unwind_sjlj_unregister])
104
d8fc4d0b 105#define profile_function_entry_libfunc (libfunc_table[LTI_profile_function_entry])
106#define profile_function_exit_libfunc (libfunc_table[LTI_profile_function_exit])
107
047a7e40 108#define synchronize_libfunc (libfunc_table[LTI_synchronize])
109
62f615b1 110#define gcov_flush_libfunc (libfunc_table[LTI_gcov_flush])
62f615b1 111
e3805e9e 112/* In explow.c */
113extern void set_stack_check_libfunc (const char *);
114
d8fc4d0b 115#endif /* GCC_LIBFUNCS_H */