xref: /dragonfly/contrib/gcc-8.0/gcc/builtins.h (revision 38fd1498)
1*38fd1498Szrj /* Expand builtin functions.
2*38fd1498Szrj    Copyright (C) 1988-2018 Free Software Foundation, Inc.
3*38fd1498Szrj 
4*38fd1498Szrj This file is part of GCC.
5*38fd1498Szrj 
6*38fd1498Szrj GCC is free software; you can redistribute it and/or modify it under
7*38fd1498Szrj the terms of the GNU General Public License as published by the Free
8*38fd1498Szrj Software Foundation; either version 3, or (at your option) any later
9*38fd1498Szrj version.
10*38fd1498Szrj 
11*38fd1498Szrj GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12*38fd1498Szrj WARRANTY; without even the implied warranty of MERCHANTABILITY or
13*38fd1498Szrj FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14*38fd1498Szrj for more details.
15*38fd1498Szrj 
16*38fd1498Szrj You should have received a copy of the GNU General Public License
17*38fd1498Szrj along with GCC; see the file COPYING3.  If not see
18*38fd1498Szrj <http://www.gnu.org/licenses/>.  */
19*38fd1498Szrj 
20*38fd1498Szrj #ifndef GCC_BUILTINS_H
21*38fd1498Szrj #define GCC_BUILTINS_H
22*38fd1498Szrj 
23*38fd1498Szrj #include <mpc.h>
24*38fd1498Szrj 
25*38fd1498Szrj /* Target-dependent globals.  */
26*38fd1498Szrj struct target_builtins {
27*38fd1498Szrj   /* For each register that may be used for calling a function, this
28*38fd1498Szrj      gives a mode used to copy the register's value.  VOIDmode indicates
29*38fd1498Szrj      the register is not used for calling a function.  If the machine
30*38fd1498Szrj      has register windows, this gives only the outbound registers.
31*38fd1498Szrj      INCOMING_REGNO gives the corresponding inbound register.  */
32*38fd1498Szrj   fixed_size_mode_pod x_apply_args_mode[FIRST_PSEUDO_REGISTER];
33*38fd1498Szrj 
34*38fd1498Szrj   /* For each register that may be used for returning values, this gives
35*38fd1498Szrj      a mode used to copy the register's value.  VOIDmode indicates the
36*38fd1498Szrj      register is not used for returning values.  If the machine has
37*38fd1498Szrj      register windows, this gives only the outbound registers.
38*38fd1498Szrj      INCOMING_REGNO gives the corresponding inbound register.  */
39*38fd1498Szrj   fixed_size_mode_pod x_apply_result_mode[FIRST_PSEUDO_REGISTER];
40*38fd1498Szrj };
41*38fd1498Szrj 
42*38fd1498Szrj extern struct target_builtins default_target_builtins;
43*38fd1498Szrj #if SWITCHABLE_TARGET
44*38fd1498Szrj extern struct target_builtins *this_target_builtins;
45*38fd1498Szrj #else
46*38fd1498Szrj #define this_target_builtins (&default_target_builtins)
47*38fd1498Szrj #endif
48*38fd1498Szrj 
49*38fd1498Szrj /* Non-zero if __builtin_constant_p should be folded right away.  */
50*38fd1498Szrj extern bool force_folding_builtin_constant_p;
51*38fd1498Szrj 
52*38fd1498Szrj extern bool is_builtin_fn (tree);
53*38fd1498Szrj extern bool called_as_built_in (tree);
54*38fd1498Szrj extern bool get_object_alignment_1 (tree, unsigned int *,
55*38fd1498Szrj 				    unsigned HOST_WIDE_INT *);
56*38fd1498Szrj extern unsigned int get_object_alignment (tree);
57*38fd1498Szrj extern bool get_pointer_alignment_1 (tree, unsigned int *,
58*38fd1498Szrj 				     unsigned HOST_WIDE_INT *);
59*38fd1498Szrj extern unsigned int get_pointer_alignment (tree);
60*38fd1498Szrj extern tree c_strlen (tree, int);
61*38fd1498Szrj extern void expand_builtin_setjmp_setup (rtx, rtx);
62*38fd1498Szrj extern void expand_builtin_setjmp_receiver (rtx);
63*38fd1498Szrj extern void expand_builtin_update_setjmp_buf (rtx);
64*38fd1498Szrj extern tree mathfn_built_in (tree, enum built_in_function fn);
65*38fd1498Szrj extern tree mathfn_built_in (tree, combined_fn);
66*38fd1498Szrj extern rtx builtin_strncpy_read_str (void *, HOST_WIDE_INT, scalar_int_mode);
67*38fd1498Szrj extern rtx builtin_memset_read_str (void *, HOST_WIDE_INT, scalar_int_mode);
68*38fd1498Szrj extern rtx expand_builtin_saveregs (void);
69*38fd1498Szrj extern tree std_build_builtin_va_list (void);
70*38fd1498Szrj extern tree std_fn_abi_va_list (tree);
71*38fd1498Szrj extern tree std_canonical_va_list_type (tree);
72*38fd1498Szrj extern void std_expand_builtin_va_start (tree, rtx);
73*38fd1498Szrj extern void expand_builtin_trap (void);
74*38fd1498Szrj extern void expand_ifn_atomic_bit_test_and (gcall *);
75*38fd1498Szrj extern void expand_ifn_atomic_compare_exchange (gcall *);
76*38fd1498Szrj extern rtx expand_builtin (tree, rtx, rtx, machine_mode, int);
77*38fd1498Szrj extern rtx expand_builtin_with_bounds (tree, rtx, rtx, machine_mode, int);
78*38fd1498Szrj extern enum built_in_function builtin_mathfn_code (const_tree);
79*38fd1498Szrj extern tree fold_builtin_expect (location_t, tree, tree, tree);
80*38fd1498Szrj extern bool avoid_folding_inline_builtin (tree);
81*38fd1498Szrj extern tree fold_call_expr (location_t, tree, bool);
82*38fd1498Szrj extern tree fold_builtin_call_array (location_t, tree, tree, int, tree *);
83*38fd1498Szrj extern tree fold_builtin_n (location_t, tree, tree *, int, bool);
84*38fd1498Szrj extern bool validate_gimple_arglist (const gcall *, ...);
85*38fd1498Szrj extern rtx default_expand_builtin (tree, rtx, rtx, machine_mode, int);
86*38fd1498Szrj extern bool fold_builtin_next_arg (tree, bool);
87*38fd1498Szrj extern tree do_mpc_arg2 (tree, tree, tree, int, int (*)(mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t));
88*38fd1498Szrj extern tree fold_call_stmt (gcall *, bool);
89*38fd1498Szrj extern void set_builtin_user_assembler_name (tree decl, const char *asmspec);
90*38fd1498Szrj extern bool is_simple_builtin (tree);
91*38fd1498Szrj extern bool is_inexpensive_builtin (tree);
92*38fd1498Szrj extern tree compute_objsize (tree, int);
93*38fd1498Szrj 
94*38fd1498Szrj extern bool readonly_data_expr (tree exp);
95*38fd1498Szrj extern bool init_target_chars (void);
96*38fd1498Szrj extern unsigned HOST_WIDE_INT target_newline;
97*38fd1498Szrj extern unsigned HOST_WIDE_INT target_percent;
98*38fd1498Szrj extern char target_percent_s[3];
99*38fd1498Szrj extern char target_percent_c[3];
100*38fd1498Szrj extern char target_percent_s_newline[4];
101*38fd1498Szrj extern bool target_char_cst_p (tree t, char *p);
102*38fd1498Szrj 
103*38fd1498Szrj extern internal_fn associated_internal_fn (tree);
104*38fd1498Szrj extern internal_fn replacement_internal_fn (gcall *);
105*38fd1498Szrj 
106*38fd1498Szrj extern tree max_object_size ();
107*38fd1498Szrj 
108*38fd1498Szrj #endif /* GCC_BUILTINS_H */
109