/* Data structure definitions for a generic GCC target.
- Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
translation unit. */
void (*file_end) (void);
+ /* Output any boilerplace text needed at the end of a
+ translation unit before debug and unwind info is emitted. */
+ void (*code_end) (void);
+
/* Output an assembler pseudo-op to declare a library function name
external. */
void (*external_libcall) (rtx);
/* Returns a code for builtin that realizes vectorized version of
function, or NULL_TREE if not available. */
- tree (* builtin_vectorized_function) (unsigned, tree, tree);
+ tree (* builtin_vectorized_function) (tree, tree, tree);
/* Returns a code for builtin that realizes vectorized version of
conversion, or NULL_TREE if not available. */
tree (* builtin_conversion) (unsigned, tree);
/* Target builtin that implements vector widening multiplication.
- builtin_mul_widen_eve computes the element-by-element products
+ builtin_mul_widen_eve computes the element-by-element products
for the even elements, and builtin_mul_widen_odd computes the
element-by-element products for the odd elements. */
tree (* builtin_mul_widen_even) (tree);
/* Target builtin that implements vector permute. */
tree (* builtin_vec_perm) (tree, tree*);
+
+ /* Return true if a vector created for builtin_vec_perm is valid. */
+ bool (* builtin_vec_perm_ok) (tree, tree);
+
/* Return true if the target supports misaligned store/load of a
specific factor denoted in the third parameter. The last parameter
is true if the access is defined in a packed struct. */
- bool (* builtin_support_vector_misalignment) (enum machine_mode,
+ bool (* builtin_support_vector_misalignment) (enum machine_mode,
const_tree, int, bool);
} vectorize;
/* The initial value of target_flags. */
int default_target_flags;
+ /* Allow target specific overriding of option settings after options have
+ been changed by an attribute or pragma or when it is reset at the
+ end of the code affected by an attribute or pragma. */
+ void (* override_options_after_change) (void);
+
/* Handle target switch CODE (an OPT_* value). ARG is the argument
passed to the switch; it is NULL if no argument was. VALUE is the
value of ARG if CODE specifies a UInteger option, otherwise it is
already been generated. */
bool (* branch_target_register_callee_saved) (bool after_pe_gen);
+ /* Return true if the target supports conditional execution. */
+ bool (* have_conditional_execution) (void);
+
/* True if the constant X cannot be placed in the constant pool. */
bool (* cannot_force_const_mem) (rtx);
then it should be for the callee; otherwise for the caller. */
rtx (*static_chain) (const_tree fndecl, bool incoming_p);
- /* Fill in the trampoline at MEM with a call to FNDECL and a
+ /* Fill in the trampoline at MEM with a call to FNDECL and a
static chain value of CHAIN. */
void (*trampoline_init) (rtx mem, tree fndecl, rtx chain);
/* Return the class for a secondary reload, and fill in extra information. */
enum reg_class (*secondary_reload) (bool, rtx, enum reg_class,
enum machine_mode,
- struct secondary_reload_info *);
+ secondary_reload_info *);
/* This target hook allows the backend to perform additional
processing while initializing for variable expansion. */
/* Return the smallest number of different values for which it is best to
use a jump-table instead of a tree of conditional branches. */
unsigned int (* case_values_threshold) (void);
-
+
/* Retutn true if a function must have and use a frame pointer. */
bool (* frame_pointer_required) (void);
/* Prefixes for proxy variable and template. */
const char *var_prefix;
const char *tmpl_prefix;
-
+
/* Function to generate field definitions of the proxy variable. */
tree (*var_fields) (tree, tree *);
/* Whether we can emit debug information for TLS vars. */
bool debug_form_tls_address;
- } emutls;
+ } emutls;
struct target_option_hooks {
/* Function to validate the attribute((option(...))) strings or NULL. If
/* For targets that need to mark extra registers as live on entry to
the function, they should define this target hook and set their
- bits in the bitmap passed in. */
- void (*live_on_entry) (bitmap);
+ bits in the bitmap passed in. */
+ void (*live_on_entry) (bitmap);
/* True if unwinding tables should be generated by default. */
bool unwind_tables_default;