Mercurial > hg > CbC > CbC_gcc
comparison gcc/expr.h @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children | 1830386684a0 |
comparison
equal
deleted
inserted
replaced
111:04ced10e8804 | 131:84e7813d76e9 |
---|---|
1 /* Definitions for code generation pass of GNU compiler. | 1 /* Definitions for code generation pass of GNU compiler. |
2 Copyright (C) 1987-2017 Free Software Foundation, Inc. | 2 Copyright (C) 1987-2018 Free Software Foundation, Inc. |
3 | 3 |
4 This file is part of GCC. | 4 This file is part of GCC. |
5 | 5 |
6 GCC is free software; you can redistribute it and/or modify it under | 6 GCC is free software; you can redistribute it and/or modify it under |
7 the terms of the GNU General Public License as published by the Free | 7 the terms of the GNU General Public License as published by the Free |
98 { | 98 { |
99 BLOCK_OP_NORMAL, | 99 BLOCK_OP_NORMAL, |
100 BLOCK_OP_NO_LIBCALL, | 100 BLOCK_OP_NO_LIBCALL, |
101 BLOCK_OP_CALL_PARM, | 101 BLOCK_OP_CALL_PARM, |
102 /* Like BLOCK_OP_NORMAL, but the libcall can be tail call optimized. */ | 102 /* Like BLOCK_OP_NORMAL, but the libcall can be tail call optimized. */ |
103 BLOCK_OP_TAILCALL | 103 BLOCK_OP_TAILCALL, |
104 /* Like BLOCK_OP_NO_LIBCALL, but instead of emitting a libcall return | |
105 pc_rtx to indicate nothing has been emitted and let the caller handle | |
106 it. */ | |
107 BLOCK_OP_NO_LIBCALL_RET | |
104 }; | 108 }; |
105 | 109 |
106 typedef rtx (*by_pieces_constfn) (void *, HOST_WIDE_INT, scalar_int_mode); | 110 typedef rtx (*by_pieces_constfn) (void *, HOST_WIDE_INT, scalar_int_mode); |
107 | 111 |
108 extern rtx emit_block_move (rtx, rtx, rtx, enum block_op_methods); | 112 extern rtx emit_block_move (rtx, rtx, rtx, enum block_op_methods); |
126 /* Generate a non-consecutive group of registers represented by a PARALLEL. */ | 130 /* Generate a non-consecutive group of registers represented by a PARALLEL. */ |
127 extern rtx gen_group_rtx (rtx); | 131 extern rtx gen_group_rtx (rtx); |
128 | 132 |
129 /* Load a BLKmode value into non-consecutive registers represented by a | 133 /* Load a BLKmode value into non-consecutive registers represented by a |
130 PARALLEL. */ | 134 PARALLEL. */ |
131 extern void emit_group_load (rtx, rtx, tree, int); | 135 extern void emit_group_load (rtx, rtx, tree, poly_int64); |
132 | 136 |
133 /* Similarly, but load into new temporaries. */ | 137 /* Similarly, but load into new temporaries. */ |
134 extern rtx emit_group_load_into_temps (rtx, rtx, tree, int); | 138 extern rtx emit_group_load_into_temps (rtx, rtx, tree, poly_int64); |
135 | 139 |
136 /* Move a non-consecutive group of registers represented by a PARALLEL into | 140 /* Move a non-consecutive group of registers represented by a PARALLEL into |
137 a non-consecutive group of registers represented by a PARALLEL. */ | 141 a non-consecutive group of registers represented by a PARALLEL. */ |
138 extern void emit_group_move (rtx, rtx); | 142 extern void emit_group_move (rtx, rtx); |
139 | 143 |
140 /* Move a group of registers represented by a PARALLEL into pseudos. */ | 144 /* Move a group of registers represented by a PARALLEL into pseudos. */ |
141 extern rtx emit_group_move_into_temps (rtx); | 145 extern rtx emit_group_move_into_temps (rtx); |
142 | 146 |
143 /* Store a BLKmode value from non-consecutive registers represented by a | 147 /* Store a BLKmode value from non-consecutive registers represented by a |
144 PARALLEL. */ | 148 PARALLEL. */ |
145 extern void emit_group_store (rtx, rtx, tree, int); | 149 extern void emit_group_store (rtx, rtx, tree, poly_int64); |
146 | 150 |
147 extern rtx maybe_emit_group_store (rtx, tree); | 151 extern rtx maybe_emit_group_store (rtx, tree); |
148 | 152 |
149 /* Mark REG as holding a parameter for the next CALL_INSN. | 153 /* Mark REG as holding a parameter for the next CALL_INSN. |
150 Mode is TYPE_MODE of the non-promoted parameter, or VOIDmode. */ | 154 Mode is TYPE_MODE of the non-promoted parameter, or VOIDmode. */ |
231 extern rtx read_complex_part (rtx, bool); | 235 extern rtx read_complex_part (rtx, bool); |
232 extern rtx emit_move_resolve_push (machine_mode, rtx); | 236 extern rtx emit_move_resolve_push (machine_mode, rtx); |
233 | 237 |
234 /* Push a block of length SIZE (perhaps variable) | 238 /* Push a block of length SIZE (perhaps variable) |
235 and return an rtx to address the beginning of the block. */ | 239 and return an rtx to address the beginning of the block. */ |
236 extern rtx push_block (rtx, int, int); | 240 extern rtx push_block (rtx, poly_int64, int); |
237 | 241 |
238 /* Generate code to push something onto the stack, given its mode and type. */ | 242 /* Generate code to push something onto the stack, given its mode and type. */ |
239 extern bool emit_push_insn (rtx, machine_mode, tree, rtx, unsigned int, | 243 extern bool emit_push_insn (rtx, machine_mode, tree, rtx, unsigned int, |
240 int, rtx, int, rtx, rtx, int, rtx, bool); | 244 int, rtx, poly_int64, rtx, rtx, int, rtx, bool); |
241 | 245 |
242 /* Extract the accessible bit-range from a COMPONENT_REF. */ | 246 /* Extract the accessible bit-range from a COMPONENT_REF. */ |
243 extern void get_bit_range (unsigned HOST_WIDE_INT *, unsigned HOST_WIDE_INT *, | 247 extern void get_bit_range (poly_uint64_pod *, poly_uint64_pod *, tree, |
244 tree, HOST_WIDE_INT *, tree *); | 248 poly_int64_pod *, tree *); |
245 | 249 |
246 /* Expand an assignment that stores the value of FROM into TO. */ | 250 /* Expand an assignment that stores the value of FROM into TO. */ |
247 extern void expand_assignment (tree, tree, bool); | 251 extern void expand_assignment (tree, tree, bool); |
248 | 252 |
249 /* Generate code for computing expression EXP, | 253 /* Generate code for computing expression EXP, |
250 and storing the value into TARGET. | 254 and storing the value into TARGET. |
251 If SUGGEST_REG is nonzero, copy the value through a register | 255 If SUGGEST_REG is nonzero, copy the value through a register |
252 and return that register, if that is possible. */ | 256 and return that register, if that is possible. */ |
253 extern rtx store_expr_with_bounds (tree, rtx, int, bool, bool, tree); | |
254 extern rtx store_expr (tree, rtx, int, bool, bool); | 257 extern rtx store_expr (tree, rtx, int, bool, bool); |
255 | 258 |
256 /* Given an rtx that may include add and multiply operations, | 259 /* Given an rtx that may include add and multiply operations, |
257 generate them as insns and return a pseudo-reg containing the value. | 260 generate them as insns and return a pseudo-reg containing the value. |
258 Useful after calling expand_expr with 1 as sum_ok. */ | 261 Useful after calling expand_expr with 1 as sum_ok. */ |
283 } | 286 } |
284 | 287 |
285 | 288 |
286 /* Return the tree node and offset if a given argument corresponds to | 289 /* Return the tree node and offset if a given argument corresponds to |
287 a string constant. */ | 290 a string constant. */ |
288 extern tree string_constant (tree, tree *); | 291 extern tree string_constant (tree, tree *, tree *, tree *); |
292 | |
293 extern enum tree_code maybe_optimize_mod_cmp (enum tree_code, tree *, tree *); | |
289 | 294 |
290 /* Two different ways of generating switch statements. */ | 295 /* Two different ways of generating switch statements. */ |
291 extern int try_casesi (tree, tree, tree, tree, rtx, rtx, rtx, profile_probability); | 296 extern int try_casesi (tree, tree, tree, tree, rtx, rtx, rtx, profile_probability); |
292 extern int try_tablejump (tree, tree, tree, tree, rtx, rtx, profile_probability); | 297 extern int try_tablejump (tree, tree, tree, tree, rtx, rtx, profile_probability); |
293 | 298 |