Functions |
bool | default_legitimate_address_p (enum machine_mode mode, rtx addr, bool strict) |
void | default_external_libcall () |
int | default_unspec_may_trap_p () |
enum machine_mode | default_promote_function_mode (const_tree type, enum machine_mode mode, int *punsignedp, const_tree funtype, int for_return) |
enum machine_mode | default_promote_function_mode_always_promote (const_tree type, enum machine_mode mode, int *punsignedp, const_tree funtype, int for_return) |
enum machine_mode | default_cc_modes_compatible () |
bool | default_return_in_memory (const_tree type, const_tree fntype) |
rtx | default_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode) |
rtx | default_expand_builtin_saveregs () |
void | default_setup_incoming_varargs (cumulative_args_t ca, enum machine_mode mode, tree type, int *pretend_arg_size, int second_time) |
rtx | default_builtin_setjmp_frame_value () |
bool | hook_bool_CUMULATIVE_ARGS_false () |
bool | default_pretend_outgoing_varargs_named () |
enum machine_mode | default_eh_return_filter_mode () |
enum machine_mode | default_libgcc_cmp_return_mode () |
enum machine_mode | default_libgcc_shift_count_mode () |
enum machine_mode | default_unwind_word_mode () |
unsigned HOST_WIDE_INT | default_shift_truncation_mask () |
unsigned int | default_min_divisions_for_recip_mul () |
int | default_mode_rep_extended (enum machine_mode mode, enum machine_mode mode_rep) |
bool | hook_bool_CUMULATIVE_ARGS_true () |
enum machine_mode | default_mode_for_suffix () |
tree | default_cxx_guard_type () |
tree | default_cxx_get_cookie_size () |
bool | hook_pass_by_reference_must_pass_in_stack (cumulative_args_t c, enum machine_mode mode, const_tree type, bool named_arg) |
bool | hook_callee_copies_named (cumulative_args_t ca, enum machine_mode mode, const_tree type, bool named) |
void | default_print_operand (FILE *stream, rtx x, int code) |
void | default_print_operand_address (FILE *stream, rtx x) |
bool | default_print_operand_punct_valid_p () |
tree | default_mangle_assembler_name () |
bool | default_scalar_mode_supported_p () |
bool | targhook_words_big_endian () |
bool | targhook_float_words_big_endian () |
bool | default_decimal_float_supported_p () |
bool | default_fixed_point_supported_p () |
bool | default_has_ifunc_p () |
const char * | default_invalid_within_doloop () |
tree | default_builtin_vectorized_function (tree fndecl, tree type_out, tree type_in) |
tree | default_builtin_vectorized_conversion (unsigned int code, tree dest_type, tree src_type) |
int | default_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, tree vectype, int misalign) |
tree | default_builtin_reciprocal (unsigned int fn, bool md_fn, bool sqrt) |
bool | hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false (cumulative_args_t ca, enum machine_mode mode, const_tree type, bool named) |
bool | hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true (cumulative_args_t ca, enum machine_mode mode, const_tree type, bool named) |
int | hook_int_CUMULATIVE_ARGS_mode_tree_bool_0 (cumulative_args_t ca, enum machine_mode mode, tree type, bool named) |
void | default_function_arg_advance (cumulative_args_t ca, enum machine_mode mode, const_tree type, bool named) |
rtx | default_function_arg (cumulative_args_t ca, enum machine_mode mode, const_tree type, bool named) |
rtx | default_function_incoming_arg (cumulative_args_t ca, enum machine_mode mode, const_tree type, bool named) |
unsigned int | default_function_arg_boundary (enum machine_mode mode, const_tree type) |
unsigned int | default_function_arg_round_boundary (enum machine_mode mode, const_tree type) |
void | hook_void_bitmap () |
const char * | hook_invalid_arg_for_unprototyped_fn (const_tree typelist, const_tree funcdecl, const_tree val) |
tree | default_stack_protect_guard () |
tree | default_external_stack_protect_fail () |
tree | default_hidden_stack_protect_fail () |
bool | hook_bool_const_rtx_commutative_p (const_rtx x, int outer_code) |
rtx | default_function_value (const_tree ret_type, const_tree fn_decl_or_type, bool outgoing) |
rtx | default_libcall_value (enum machine_mode mode, const_rtx fun) |
bool | default_function_value_regno_p () |
rtx | default_internal_arg_pointer () |
rtx | default_static_chain () |
void | default_trampoline_init (rtx ARG_UNUSED(m_tramp), tree ARG_UNUSED(t_func), rtx ARG_UNUSED(r_chain)) |
int | default_return_pops_args (tree fundecl, tree funtype, int size) |
reg_class_t | default_branch_target_register_class () |
bool | default_lra_p () |
int | default_register_priority () |
bool | default_register_usage_leveling_p () |
bool | default_different_addr_displacement_p () |
reg_class_t | default_secondary_reload (bool in_p, rtx x, reg_class_t reload_class_i, enum machine_mode reload_mode, secondary_reload_info *sri) |
int | default_reloc_rw_mask () |
tree | default_mangle_decl_assembler_name (tree decl, tree id) |
HOST_WIDE_INT | default_vector_alignment () |
bool | default_builtin_vector_alignment_reachable () |
bool | default_builtin_support_vector_misalignment (enum machine_mode mode, const_tree type, int misalignment, bool is_packed) |
enum machine_mode | default_preferred_simd_mode () |
unsigned int | default_autovectorize_vector_sizes () |
void * | default_init_cost () |
unsigned | default_add_stmt_cost (void *data, int count, enum vect_cost_for_stmt kind, struct _stmt_vec_info *stmt_info, int misalign, enum vect_cost_model_location where) |
void | default_finish_cost (void *data, unsigned *prologue_cost, unsigned *body_cost, unsigned *epilogue_cost) |
void | default_destroy_cost_data () |
bool | default_valid_pointer_mode () |
bool | default_ref_may_alias_errno () |
enum machine_mode | default_addr_space_pointer_mode () |
enum machine_mode | default_addr_space_address_mode () |
bool | default_addr_space_valid_pointer_mode () |
bool | target_default_pointer_address_modes_p () |
bool | default_addr_space_legitimate_address_p (enum machine_mode mode, rtx mem, bool strict, addr_space_t as) |
rtx | default_addr_space_legitimize_address (rtx x, rtx oldx, enum machine_mode mode, addr_space_t as) |
bool | default_addr_space_subset_p () |
rtx | default_addr_space_convert (rtx op, tree from_type, tree to_type) |
bool | default_hard_regno_scratch_ok () |
bool | default_mode_dependent_address_p (const_rtx addr, addr_space_t addrspace) |
bool | default_target_option_valid_attribute_p (tree ARG_UNUSED(fndecl), tree ARG_UNUSED(name), tree ARG_UNUSED(args), int ARG_UNUSED(flags)) |
bool | default_target_option_pragma_parse (tree ARG_UNUSED(args), tree ARG_UNUSED(pop_target)) |
bool | default_target_can_inline_p () |
unsigned int | default_case_values_threshold () |
bool | default_have_conditional_execution () |
tree | default_builtin_tm_load_store (tree ARG_UNUSED(type)) |
int | default_memory_move_cost (enum machine_mode mode, reg_class_t rclass, bool in) |
int | default_register_move_cost (enum machine_mode mode, reg_class_t from, reg_class_t to) |
bool | default_profile_before_prologue () |
reg_class_t | default_preferred_reload_class (rtx x, reg_class_t rclass) |
reg_class_t | default_preferred_output_reload_class (rtx x, reg_class_t rclass) |
reg_class_t | default_preferred_rename_class () |
bool | default_class_likely_spilled_p () |
unsigned char | default_class_max_nregs (reg_class_t rclass, enum machine_mode mode) |
enum unwind_info_type | default_debug_unwind_info () |
enum machine_mode | default_get_reg_raw_mode () |
static bool | option_affects_pch_p () |
void * | default_get_pch_validity () |
static const char * | pch_option_mismatch () |
const char * | default_pch_valid_p () |
enum machine_mode | default_cstore_mode () |
bool | default_member_type_forces_blk () |
rtx | default_load_bounds_for_arg (rtx addr, rtx ptr, rtx bnd) |
void | default_store_bounds_for_arg (rtx val, rtx addr, rtx bounds, rtx to) |
tree | default_fn_abi_va_list_bounds_size () |
void | default_canonicalize_comparison () |
tree | build_va_arg_indirect_ref () |
tree | std_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, gimple_seq *post_p) |
tree | default_chkp_bound_type () |
enum machine_mode | default_chkp_bound_mode () |
tree | default_builtin_chkp_function () |
bool default_legitimate_address_p |
( |
enum machine_mode |
mode, |
|
|
rtx |
addr, |
|
|
bool |
strict |
|
) |
| |
@verbatim
Default target hook functions. Copyright (C) 2003-2013 Free Software Foundation, Inc.
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/.
The migration of target macros to target hooks works as follows:
1. Create a target hook that uses the existing target macros to
implement the same functionality.
2. Convert all the MI files to use the hook instead of the macro.
3. Repeat for a majority of the remaining target macros. This will
take some time.
4. Tell target maintainers to start migrating.
5. Eventually convert the backends to override the hook instead of
defining the macros. This will take some time too.
6. TBD when, poison the macros. Unmigrated targets will break at
this point.
Note that we expect steps 1-3 to be done by the people that
understand what the MI does with each macro, and step 5 to be done
by the target maintainers for their respective targets.
Note that steps 1 and 2 don't have to be done together, but no
target can override the new hook until step 2 is complete for it.
Once the macros are poisoned, we will revert to the old migration
rules - migrate the macro, callers, and targets all at once. This
comment can thus be removed at that point.
Defer to the old implementation using a goto.
The "standard" implementation of va_arg: read the value from the
current (padded) address and increment by the (padded) size.
All of the alignment and movement below is for args-grow-up machines.
As of 2004, there are only 3 ARGS_GROW_DOWNWARD targets, and they all
implement their own specialized gimplify_va_arg_expr routines.
When we align parameter on stack for caller, if the parameter
alignment is beyond MAX_SUPPORTED_STACK_ALIGNMENT, it will be
aligned at MAX_SUPPORTED_STACK_ALIGNMENT. We will match callee
here with caller.
Hoist the valist value into a temporary for the moment.
va_list pointer is aligned to PARM_BOUNDARY. If argument actually
requires greater alignment, we must perform dynamic alignment.
If the actual alignment is less than the alignment of the type,
adjust the type accordingly so that we don't assume strict alignment
when dereferencing the pointer.
Compute the rounded size of the type.
Reduce rounded_size so it's sharable with the postqueue.
Get AP.
Small args are padded downward.
Compute new value for AP.