]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/libfuncs.h
backport: As described in http://gcc.gnu.org/ml/gcc/2012-08/msg00015.html...
[thirdparty/gcc.git] / gcc / libfuncs.h
CommitLineData
e78d8e51 1/* Definitions for code generation pass of GNU compiler.
5714c34f 2 Copyright (C) 2001-2012 Free Software Foundation, Inc.
e78d8e51 3
40803cd5 4This file is part of GCC.
e78d8e51 5
40803cd5 6GCC is free software; you can redistribute it and/or modify
e78d8e51 7it under the terms of the GNU General Public License as published by
9dcd6f09 8the Free Software Foundation; either version 3, or (at your option)
e78d8e51
ZW
9any later version.
10
40803cd5 11GCC is distributed in the hope that it will be useful,
e78d8e51
ZW
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
9dcd6f09
NC
17along with GCC; see the file COPYING3. If not see
18<http://www.gnu.org/licenses/>. */
e78d8e51
ZW
19
20#ifndef GCC_LIBFUNCS_H
21#define GCC_LIBFUNCS_H
22
3e9c326a
RS
23#include "hashtab.h"
24
e78d8e51
ZW
25/* Enumeration of indexes into libfunc_table. */
26enum libfunc_index
27{
9602f5a0 28 LTI_abort,
e78d8e51
ZW
29 LTI_memcpy,
30 LTI_memmove,
e78d8e51 31 LTI_memcmp,
e78d8e51 32 LTI_memset,
68d28100 33 LTI_setbits,
e78d8e51 34
e78d8e51
ZW
35 LTI_setjmp,
36 LTI_longjmp,
37 LTI_unwind_sjlj_register,
38 LTI_unwind_sjlj_unregister,
39
e78d8e51
ZW
40 LTI_profile_function_entry,
41 LTI_profile_function_exit,
42
e2ff10a9
RS
43 LTI_synchronize,
44
68d28100 45 LTI_gcov_flush,
68d28100 46
e78d8e51
ZW
47 LTI_MAX
48};
49
5714c34f
RH
50/* Information about an optab-related libfunc. The op field is logically
51 an enum optab_d, and the mode fields are logically enum machine_mode.
52 However, in the absence of forward-declared enums, there's no practical
53 benefit of pulling in the defining headers.
54
55 We use the same hashtable for normal optabs and conversion optabs. In
56 the first case mode2 is forced to VOIDmode. */
57
3e9c326a 58struct GTY(()) libfunc_entry {
5714c34f 59 int op, mode1, mode2;
3e9c326a
RS
60 rtx libfunc;
61};
62
63/* Target-dependent globals. */
64struct GTY(()) target_libfuncs {
65 /* SYMBOL_REF rtx's for the library functions that are called
66 implicitly and not via optabs. */
67 rtx x_libfunc_table[LTI_MAX];
68
69 /* Hash table used to convert declarations into nodes. */
70 htab_t GTY((param_is (struct libfunc_entry))) x_libfunc_hash;
71};
72
73extern GTY(()) struct target_libfuncs default_target_libfuncs;
74#if SWITCHABLE_TARGET
75extern struct target_libfuncs *this_target_libfuncs;
76#else
77#define this_target_libfuncs (&default_target_libfuncs)
78#endif
79
80#define libfunc_table \
81 (this_target_libfuncs->x_libfunc_table)
e78d8e51
ZW
82
83/* Accessor macros for libfunc_table. */
e78d8e51 84
9602f5a0 85#define abort_libfunc (libfunc_table[LTI_abort])
e78d8e51
ZW
86#define memcpy_libfunc (libfunc_table[LTI_memcpy])
87#define memmove_libfunc (libfunc_table[LTI_memmove])
e78d8e51 88#define memcmp_libfunc (libfunc_table[LTI_memcmp])
e78d8e51 89#define memset_libfunc (libfunc_table[LTI_memset])
68d28100 90#define setbits_libfunc (libfunc_table[LTI_setbits])
e78d8e51 91
e78d8e51
ZW
92#define setjmp_libfunc (libfunc_table[LTI_setjmp])
93#define longjmp_libfunc (libfunc_table[LTI_longjmp])
94#define unwind_sjlj_register_libfunc (libfunc_table[LTI_unwind_sjlj_register])
95#define unwind_sjlj_unregister_libfunc \
96 (libfunc_table[LTI_unwind_sjlj_unregister])
97
e78d8e51
ZW
98#define profile_function_entry_libfunc (libfunc_table[LTI_profile_function_entry])
99#define profile_function_exit_libfunc (libfunc_table[LTI_profile_function_exit])
100
e2ff10a9
RS
101#define synchronize_libfunc (libfunc_table[LTI_synchronize])
102
68d28100 103#define gcov_flush_libfunc (libfunc_table[LTI_gcov_flush])
68d28100 104
d477d1fe
SB
105/* In explow.c */
106extern void set_stack_check_libfunc (const char *);
107
e78d8e51 108#endif /* GCC_LIBFUNCS_H */