Mercurial > hg > CbC > CbC_gcc
diff gcc/libfuncs.h @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | f6334be47118 |
children | 84e7813d76e9 |
line wrap: on
line diff
--- a/gcc/libfuncs.h Sun Aug 21 07:07:55 2011 +0900 +++ b/gcc/libfuncs.h Fri Oct 27 22:46:09 2017 +0900 @@ -1,5 +1,5 @@ /* Definitions for code generation pass of GNU compiler. - Copyright (C) 2001, 2004, 2007, 2008, 2010 Free Software Foundation, Inc. + Copyright (C) 2001-2017 Free Software Foundation, Inc. This file is part of GCC. @@ -20,42 +20,37 @@ #ifndef GCC_LIBFUNCS_H #define GCC_LIBFUNCS_H -#include "hashtab.h" /* Enumeration of indexes into libfunc_table. */ enum libfunc_index { - LTI_abort, - LTI_memcpy, - LTI_memmove, - LTI_memcmp, - LTI_memset, - LTI_setbits, - - LTI_setjmp, - LTI_longjmp, LTI_unwind_sjlj_register, LTI_unwind_sjlj_unregister, - - LTI_profile_function_entry, - LTI_profile_function_exit, - LTI_synchronize, - - LTI_gcov_flush, - LTI_MAX }; -/* Information about an optab-related libfunc. We use the same hashtable - for normal optabs and conversion optabs. In the first case mode2 - is unused. */ -struct GTY(()) libfunc_entry { - size_t optab; - enum machine_mode mode1, mode2; +/* Information about an optab-related libfunc. The op field is logically + an enum optab_d, and the mode fields are logically machine_mode. + However, in the absence of forward-declared enums, there's no practical + benefit of pulling in the defining headers. + + We use the same hashtable for normal optabs and conversion optabs. In + the first case mode2 is forced to VOIDmode. */ + +struct GTY((for_user)) libfunc_entry { + int op, mode1, mode2; rtx libfunc; }; +/* Descriptor for libfunc_entry. */ + +struct libfunc_hasher : ggc_ptr_hash<libfunc_entry> +{ + static hashval_t hash (libfunc_entry *); + static bool equal (libfunc_entry *, libfunc_entry *); +}; + /* Target-dependent globals. */ struct GTY(()) target_libfuncs { /* SYMBOL_REF rtx's for the library functions that are called @@ -63,7 +58,7 @@ rtx x_libfunc_table[LTI_MAX]; /* Hash table used to convert declarations into nodes. */ - htab_t GTY((param_is (struct libfunc_entry))) x_libfunc_hash; + hash_table<libfunc_hasher> *GTY(()) x_libfunc_hash; }; extern GTY(()) struct target_libfuncs default_target_libfuncs; @@ -78,26 +73,11 @@ /* Accessor macros for libfunc_table. */ -#define abort_libfunc (libfunc_table[LTI_abort]) -#define memcpy_libfunc (libfunc_table[LTI_memcpy]) -#define memmove_libfunc (libfunc_table[LTI_memmove]) -#define memcmp_libfunc (libfunc_table[LTI_memcmp]) -#define memset_libfunc (libfunc_table[LTI_memset]) -#define setbits_libfunc (libfunc_table[LTI_setbits]) - -#define setjmp_libfunc (libfunc_table[LTI_setjmp]) -#define longjmp_libfunc (libfunc_table[LTI_longjmp]) #define unwind_sjlj_register_libfunc (libfunc_table[LTI_unwind_sjlj_register]) #define unwind_sjlj_unregister_libfunc \ (libfunc_table[LTI_unwind_sjlj_unregister]) - -#define profile_function_entry_libfunc (libfunc_table[LTI_profile_function_entry]) -#define profile_function_exit_libfunc (libfunc_table[LTI_profile_function_exit]) - #define synchronize_libfunc (libfunc_table[LTI_synchronize]) -#define gcov_flush_libfunc (libfunc_table[LTI_gcov_flush]) - /* In explow.c */ extern void set_stack_check_libfunc (const char *);