xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/libfuncs.h (revision 8feb0f0b7eaff0608f8350bbfa3098827b4bb91b)
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