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