11debfc3dSmrg /* Definitions for code generation pass of GNU compiler. 2*8feb0f0bSmrg Copyright (C) 2001-2020 Free Software Foundation, Inc. 31debfc3dSmrg 41debfc3dSmrg This file is part of GCC. 51debfc3dSmrg 61debfc3dSmrg GCC is free software; you can redistribute it and/or modify 71debfc3dSmrg it under the terms of the GNU General Public License as published by 81debfc3dSmrg the Free Software Foundation; either version 3, or (at your option) 91debfc3dSmrg any later version. 101debfc3dSmrg 111debfc3dSmrg GCC is distributed in the hope that it will be useful, 121debfc3dSmrg but WITHOUT ANY WARRANTY; without even the implied warranty of 131debfc3dSmrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 141debfc3dSmrg GNU General Public License for more details. 151debfc3dSmrg 161debfc3dSmrg You should have received a copy of the GNU General Public License 171debfc3dSmrg along with GCC; see the file COPYING3. If not see 181debfc3dSmrg <http://www.gnu.org/licenses/>. */ 191debfc3dSmrg 201debfc3dSmrg #ifndef GCC_LIBFUNCS_H 211debfc3dSmrg #define GCC_LIBFUNCS_H 221debfc3dSmrg 231debfc3dSmrg 241debfc3dSmrg /* Enumeration of indexes into libfunc_table. */ 251debfc3dSmrg enum libfunc_index 261debfc3dSmrg { 271debfc3dSmrg LTI_unwind_sjlj_register, 281debfc3dSmrg LTI_unwind_sjlj_unregister, 291debfc3dSmrg LTI_synchronize, 301debfc3dSmrg LTI_MAX 311debfc3dSmrg }; 321debfc3dSmrg 331debfc3dSmrg /* Information about an optab-related libfunc. The op field is logically 341debfc3dSmrg an enum optab_d, and the mode fields are logically machine_mode. 351debfc3dSmrg However, in the absence of forward-declared enums, there's no practical 361debfc3dSmrg benefit of pulling in the defining headers. 371debfc3dSmrg 381debfc3dSmrg We use the same hashtable for normal optabs and conversion optabs. In 391debfc3dSmrg the first case mode2 is forced to VOIDmode. */ 401debfc3dSmrg 411debfc3dSmrg struct GTY((for_user)) libfunc_entry { 421debfc3dSmrg int op, mode1, mode2; 431debfc3dSmrg rtx libfunc; 441debfc3dSmrg }; 451debfc3dSmrg 461debfc3dSmrg /* Descriptor for libfunc_entry. */ 471debfc3dSmrg 481debfc3dSmrg struct libfunc_hasher : ggc_ptr_hash<libfunc_entry> 491debfc3dSmrg { 501debfc3dSmrg static hashval_t hash (libfunc_entry *); 511debfc3dSmrg static bool equal (libfunc_entry *, libfunc_entry *); 521debfc3dSmrg }; 531debfc3dSmrg 541debfc3dSmrg /* Target-dependent globals. */ 551debfc3dSmrg struct GTY(()) target_libfuncs { 561debfc3dSmrg /* SYMBOL_REF rtx's for the library functions that are called 571debfc3dSmrg implicitly and not via optabs. */ 581debfc3dSmrg rtx x_libfunc_table[LTI_MAX]; 591debfc3dSmrg 601debfc3dSmrg /* Hash table used to convert declarations into nodes. */ 611debfc3dSmrg hash_table<libfunc_hasher> *GTY(()) x_libfunc_hash; 621debfc3dSmrg }; 631debfc3dSmrg 641debfc3dSmrg extern GTY(()) struct target_libfuncs default_target_libfuncs; 651debfc3dSmrg #if SWITCHABLE_TARGET 661debfc3dSmrg extern struct target_libfuncs *this_target_libfuncs; 671debfc3dSmrg #else 681debfc3dSmrg #define this_target_libfuncs (&default_target_libfuncs) 691debfc3dSmrg #endif 701debfc3dSmrg 711debfc3dSmrg #define libfunc_table \ 721debfc3dSmrg (this_target_libfuncs->x_libfunc_table) 731debfc3dSmrg 741debfc3dSmrg /* Accessor macros for libfunc_table. */ 751debfc3dSmrg 761debfc3dSmrg #define unwind_sjlj_register_libfunc (libfunc_table[LTI_unwind_sjlj_register]) 771debfc3dSmrg #define unwind_sjlj_unregister_libfunc \ 781debfc3dSmrg (libfunc_table[LTI_unwind_sjlj_unregister]) 791debfc3dSmrg #define synchronize_libfunc (libfunc_table[LTI_synchronize]) 801debfc3dSmrg 811debfc3dSmrg /* In explow.c */ 821debfc3dSmrg extern void set_stack_check_libfunc (const char *); 831debfc3dSmrg 841debfc3dSmrg #endif /* GCC_LIBFUNCS_H */ 85