builtins.h 4.32 KB
Newer Older
1
/* Expand builtin functions.
Jakub Jelinek committed
2
   Copyright (C) 1988-2015 Free Software Foundation, Inc.
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */

#ifndef GCC_BUILTINS_H
#define GCC_BUILTINS_H

23 24
#include <mpc.h>

25 26 27 28 29 30 31
/* Target-dependent globals.  */
struct target_builtins {
  /* For each register that may be used for calling a function, this
     gives a mode used to copy the register's value.  VOIDmode indicates
     the register is not used for calling a function.  If the machine
     has register windows, this gives only the outbound registers.
     INCOMING_REGNO gives the corresponding inbound register.  */
32
  machine_mode x_apply_args_mode[FIRST_PSEUDO_REGISTER];
33 34 35 36 37 38

  /* For each register that may be used for returning values, this gives
     a mode used to copy the register's value.  VOIDmode indicates the
     register is not used for returning values.  If the machine has
     register windows, this gives only the outbound registers.
     INCOMING_REGNO gives the corresponding inbound register.  */
39
  machine_mode x_apply_result_mode[FIRST_PSEUDO_REGISTER];
40 41
};

42
extern struct target_builtins default_target_builtins;
43 44 45 46 47 48
#if SWITCHABLE_TARGET
extern struct target_builtins *this_target_builtins;
#else
#define this_target_builtins (&default_target_builtins)
#endif

49 50 51 52
/* Non-zero if __builtin_constant_p should be folded right away.  */
extern bool force_folding_builtin_constant_p;

extern bool is_builtin_fn (tree);
53
extern bool called_as_built_in (tree);
54 55 56 57 58 59 60 61 62
extern bool get_object_alignment_1 (tree, unsigned int *,
				    unsigned HOST_WIDE_INT *);
extern unsigned int get_object_alignment (tree);
extern bool get_pointer_alignment_1 (tree, unsigned int *,
				     unsigned HOST_WIDE_INT *);
extern unsigned int get_pointer_alignment (tree);
extern tree c_strlen (tree, int);
extern void expand_builtin_setjmp_setup (rtx, rtx);
extern void expand_builtin_setjmp_receiver (rtx);
63
extern void expand_builtin_update_setjmp_buf (rtx);
64
extern tree mathfn_built_in (tree, enum built_in_function fn);
65
extern tree mathfn_built_in (tree, combined_fn);
66 67
extern rtx builtin_strncpy_read_str (void *, HOST_WIDE_INT, machine_mode);
extern rtx builtin_memset_read_str (void *, HOST_WIDE_INT, machine_mode);
68 69 70 71 72 73
extern rtx expand_builtin_saveregs (void);
extern tree std_build_builtin_va_list (void);
extern tree std_fn_abi_va_list (tree);
extern tree std_canonical_va_list_type (tree);
extern void std_expand_builtin_va_start (tree, rtx);
extern void expand_builtin_trap (void);
74
extern rtx expand_builtin (tree, rtx, rtx, machine_mode, int);
75
extern rtx expand_builtin_with_bounds (tree, rtx, rtx, machine_mode, int);
76 77 78 79 80
extern enum built_in_function builtin_mathfn_code (const_tree);
extern tree fold_builtin_expect (location_t, tree, tree, tree);
extern bool avoid_folding_inline_builtin (tree);
extern tree fold_call_expr (location_t, tree, bool);
extern tree fold_builtin_call_array (location_t, tree, tree, int, tree *);
81
extern tree fold_builtin_n (location_t, tree, tree *, int, bool);
82
extern bool validate_gimple_arglist (const gcall *, ...);
83
extern rtx default_expand_builtin (tree, rtx, rtx, machine_mode, int);
84 85
extern bool fold_builtin_next_arg (tree, bool);
extern tree do_mpc_arg2 (tree, tree, tree, int, int (*)(mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t));
86
extern tree fold_call_stmt (gcall *, bool);
87 88 89
extern void set_builtin_user_assembler_name (tree decl, const char *asmspec);
extern bool is_simple_builtin (tree);
extern bool is_inexpensive_builtin (tree);
90

91 92
extern bool readonly_data_expr (tree exp);
extern bool init_target_chars (void);
93
extern unsigned HOST_WIDE_INT target_newline;
94 95
extern unsigned HOST_WIDE_INT target_percent;
extern char target_percent_s[3];
96
extern char target_percent_c[3];
97
extern char target_percent_s_newline[4];
98

99 100 101
extern internal_fn associated_internal_fn (tree);
extern internal_fn replacement_internal_fn (gcall *);

102
#endif