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