123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- /* Generated automatically by the program `genattr'
- from the machine description file `md'. */
- #ifndef GCC_INSN_ATTR_H
- #define GCC_INSN_ATTR_H
- #include "insn-attr-common.h"
- #define HAVE_ATTR_cpu 1
- extern enum attr_cpu get_attr_cpu (void);
- #define HAVE_ATTR_type 1
- extern enum attr_type get_attr_type (rtx_insn *);
- #define HAVE_ATTR_mode 1
- extern enum attr_mode get_attr_mode (rtx_insn *);
- #define HAVE_ATTR_unit 1
- extern enum attr_unit get_attr_unit (rtx_insn *);
- #define HAVE_ATTR_length_immediate 1
- extern int get_attr_length_immediate (rtx_insn *);
- #define HAVE_ATTR_length_address 1
- extern int get_attr_length_address (rtx_insn *);
- #define HAVE_ATTR_prefix_data16 1
- extern int get_attr_prefix_data16 (rtx_insn *);
- #define HAVE_ATTR_prefix_rep 1
- extern int get_attr_prefix_rep (rtx_insn *);
- #define HAVE_ATTR_prefix_0f 1
- extern int get_attr_prefix_0f (rtx_insn *);
- #define HAVE_ATTR_prefix_rex 1
- extern int get_attr_prefix_rex (rtx_insn *);
- #define HAVE_ATTR_prefix_extra 1
- extern int get_attr_prefix_extra (rtx_insn *);
- #define HAVE_ATTR_prefix 1
- extern enum attr_prefix get_attr_prefix (rtx_insn *);
- #define HAVE_ATTR_prefix_vex_w 1
- extern int get_attr_prefix_vex_w (rtx_insn *);
- #define HAVE_ATTR_length_vex 1
- extern int get_attr_length_vex (rtx_insn *);
- #define HAVE_ATTR_length_evex 1
- extern int get_attr_length_evex (rtx_insn *);
- #define HAVE_ATTR_modrm 1
- extern int get_attr_modrm (rtx_insn *);
- #define HAVE_ATTR_length 1
- extern int get_attr_length (rtx_insn *);
- extern void shorten_branches (rtx_insn *);
- extern int insn_default_length (rtx_insn *);
- extern int insn_min_length (rtx_insn *);
- extern int insn_variable_length_p (rtx_insn *);
- extern int insn_current_length (rtx_insn *);
- #include "insn-addr.h"
- #define HAVE_ATTR_memory 1
- extern enum attr_memory get_attr_memory (rtx_insn *);
- #define HAVE_ATTR_imm_disp 1
- extern enum attr_imm_disp get_attr_imm_disp (rtx_insn *);
- #define HAVE_ATTR_fp_int_src 1
- extern enum attr_fp_int_src get_attr_fp_int_src (rtx_insn *);
- #define HAVE_ATTR_i387_cw 1
- extern enum attr_i387_cw get_attr_i387_cw (rtx_insn *);
- #define HAVE_ATTR_avx_partial_xmm_update 1
- extern enum attr_avx_partial_xmm_update get_attr_avx_partial_xmm_update (rtx_insn *);
- #define HAVE_ATTR_use_carry 1
- extern enum attr_use_carry get_attr_use_carry (rtx_insn *);
- #define HAVE_ATTR_movu 1
- extern enum attr_movu get_attr_movu (rtx_insn *);
- #define HAVE_ATTR_isa 1
- extern enum attr_isa get_attr_isa (rtx_insn *);
- #define HAVE_ATTR_enabled 1
- extern int get_attr_enabled (rtx_insn *);
- #define HAVE_ATTR_preferred_for_size 1
- extern int get_attr_preferred_for_size (rtx_insn *);
- #define HAVE_ATTR_preferred_for_speed 1
- extern int get_attr_preferred_for_speed (rtx_insn *);
- #define HAVE_ATTR_pent_prefix 1
- extern enum attr_pent_prefix get_attr_pent_prefix (rtx_insn *);
- #define HAVE_ATTR_pent_pair 1
- extern enum attr_pent_pair get_attr_pent_pair (rtx_insn *);
- #define HAVE_ATTR_athlon_decode 1
- extern enum attr_athlon_decode get_attr_athlon_decode (rtx_insn *);
- #define HAVE_ATTR_amdfam10_decode 1
- extern enum attr_amdfam10_decode get_attr_amdfam10_decode (rtx_insn *);
- #define HAVE_ATTR_bdver1_decode 1
- extern enum attr_bdver1_decode get_attr_bdver1_decode (rtx_insn *);
- #define HAVE_ATTR_btver2_decode 1
- extern enum attr_btver2_decode get_attr_btver2_decode (rtx_insn *);
- #define HAVE_ATTR_btver2_sse_attr 1
- extern enum attr_btver2_sse_attr get_attr_btver2_sse_attr (rtx_insn *);
- #define HAVE_ATTR_znver1_decode 1
- extern enum attr_znver1_decode get_attr_znver1_decode (rtx_insn *);
- #define HAVE_ATTR_atom_unit 1
- extern enum attr_atom_unit get_attr_atom_unit (rtx_insn *);
- #define HAVE_ATTR_atom_sse_attr 1
- extern enum attr_atom_sse_attr get_attr_atom_sse_attr (rtx_insn *);
- #define HAVE_ATTR_i7_domain 1
- extern enum attr_i7_domain get_attr_i7_domain (rtx_insn *);
- #define HAVE_ATTR_hsw_domain 1
- extern enum attr_hsw_domain get_attr_hsw_domain (rtx_insn *);
- #define HAVE_ATTR_unord_subst 1
- extern enum attr_unord_subst get_attr_unord_subst (rtx_insn *);
- #define HAVE_ATTR_mask 1
- extern enum attr_mask get_attr_mask (rtx_insn *);
- #define HAVE_ATTR_mask_scalar_merge 1
- extern enum attr_mask_scalar_merge get_attr_mask_scalar_merge (rtx_insn *);
- #define HAVE_ATTR_sd 1
- extern enum attr_sd get_attr_sd (rtx_insn *);
- #define HAVE_ATTR_round 1
- extern enum attr_round get_attr_round (rtx_insn *);
- #define HAVE_ATTR_round_saeonly 1
- extern enum attr_round_saeonly get_attr_round_saeonly (rtx_insn *);
- #define HAVE_ATTR_round_expand 1
- extern enum attr_round_expand get_attr_round_expand (rtx_insn *);
- #define HAVE_ATTR_round_saeonly_expand 1
- extern enum attr_round_saeonly_expand get_attr_round_saeonly_expand (rtx_insn *);
- #define HAVE_ATTR_mask_expand4 1
- extern enum attr_mask_expand4 get_attr_mask_expand4 (rtx_insn *);
- #define HAVE_ATTR_mask_scalar 1
- extern enum attr_mask_scalar get_attr_mask_scalar (rtx_insn *);
- #define HAVE_ATTR_round_scalar 1
- extern enum attr_round_scalar get_attr_round_scalar (rtx_insn *);
- #define HAVE_ATTR_round_saeonly_scalar 1
- extern enum attr_round_saeonly_scalar get_attr_round_saeonly_scalar (rtx_insn *);
- extern int num_delay_slots (rtx_insn *);
- extern int eligible_for_delay (rtx_insn *, int, rtx_insn *, int);
- extern int const_num_delay_slots (rtx_insn *);
- #define ANNUL_IFTRUE_SLOTS 0
- extern int eligible_for_annul_true (rtx_insn *, int, rtx_insn *, int);
- #define ANNUL_IFFALSE_SLOTS 0
- extern int eligible_for_annul_false (rtx_insn *, int, rtx_insn *, int);
- /* DFA based pipeline interface. */
- #ifndef AUTOMATON_ALTS
- #define AUTOMATON_ALTS 0
- #endif
- #ifndef AUTOMATON_STATE_ALTS
- #define AUTOMATON_STATE_ALTS 0
- #endif
- #ifndef CPU_UNITS_QUERY
- #define CPU_UNITS_QUERY 0
- #endif
- /* Initialize fn pointers for internal_dfa_insn_code
- and insn_default_latency. */
- extern void init_sched_attrs (void);
- /* Internal insn code number used by automata. */
- extern int (*internal_dfa_insn_code) (rtx_insn *);
- /* Insn latency time defined in define_insn_reservation. */
- extern int (*insn_default_latency) (rtx_insn *);
- /* Return nonzero if there is a bypass for given insn
- which is a data producer. */
- extern int bypass_p (rtx_insn *);
- /* Insn latency time on data consumed by the 2nd insn.
- Use the function if bypass_p returns nonzero for
- the 1st insn. */
- extern int insn_latency (rtx_insn *, rtx_insn *);
- /* Maximal insn latency time possible of all bypasses for this insn.
- Use the function if bypass_p returns nonzero for
- the 1st insn. */
- extern int maximal_insn_latency (rtx_insn *);
- #if AUTOMATON_ALTS
- /* The following function returns number of alternative
- reservations of given insn. It may be used for better
- insns scheduling heuristics. */
- extern int insn_alts (rtx);
- #endif
- /* Maximal possible number of insns waiting results being
- produced by insns whose execution is not finished. */
- extern const int max_insn_queue_index;
- /* Pointer to data describing current state of DFA. */
- typedef void *state_t;
- /* Size of the data in bytes. */
- extern int state_size (void);
- /* Initiate given DFA state, i.e. Set up the state
- as all functional units were not reserved. */
- extern void state_reset (state_t);
- /* The following function returns negative value if given
- insn can be issued in processor state described by given
- DFA state. In this case, the DFA state is changed to
- reflect the current and future reservations by given
- insn. Otherwise the function returns minimal time
- delay to issue the insn. This delay may be zero
- for superscalar or VLIW processors. If the second
- parameter is NULL the function changes given DFA state
- as new processor cycle started. */
- extern int state_transition (state_t, rtx);
- #if AUTOMATON_STATE_ALTS
- /* The following function returns number of possible
- alternative reservations of given insn in given
- DFA state. It may be used for better insns scheduling
- heuristics. By default the function is defined if
- macro AUTOMATON_STATE_ALTS is defined because its
- implementation may require much memory. */
- extern int state_alts (state_t, rtx);
- #endif
- extern int min_issue_delay (state_t, rtx_insn *);
- /* The following function returns nonzero if no one insn
- can be issued in current DFA state. */
- extern int state_dead_lock_p (state_t);
- /* The function returns minimal delay of issue of the 2nd
- insn after issuing the 1st insn in given DFA state.
- The 1st insn should be issued in given state (i.e.
- state_transition should return negative value for
- the insn and the state). Data dependencies between
- the insns are ignored by the function. */
- extern int min_insn_conflict_delay (state_t, rtx_insn *, rtx_insn *);
- /* The following function outputs reservations for given
- insn as they are described in the corresponding
- define_insn_reservation. */
- extern void print_reservation (FILE *, rtx_insn *);
- #if CPU_UNITS_QUERY
- /* The following function returns code of functional unit
- with given name (see define_cpu_unit). */
- extern int get_cpu_unit_code (const char *);
- /* The following function returns nonzero if functional
- unit with given code is currently reserved in given
- DFA state. */
- extern int cpu_unit_reservation_p (state_t, int);
- #endif
- /* The following function returns true if insn
- has a dfa reservation. */
- extern bool insn_has_dfa_reservation_p (rtx_insn *);
- /* Clean insn code cache. It should be called if there
- is a chance that condition value in a
- define_insn_reservation will be changed after
- last call of dfa_start. */
- extern void dfa_clean_insn_cache (void);
- extern void dfa_clear_single_insn_cache (rtx_insn *);
- /* Initiate and finish work with DFA. They should be
- called as the first and the last interface
- functions. */
- extern void dfa_start (void);
- extern void dfa_finish (void);
- #ifndef HAVE_ATTR_length
- #define HAVE_ATTR_length 0
- #endif
- #ifndef HAVE_ATTR_enabled
- #define HAVE_ATTR_enabled 0
- #endif
- #ifndef HAVE_ATTR_preferred_for_size
- #define HAVE_ATTR_preferred_for_size 0
- #endif
- #ifndef HAVE_ATTR_preferred_for_speed
- #define HAVE_ATTR_preferred_for_speed 0
- #endif
- #if !HAVE_ATTR_length
- extern int hook_int_rtx_insn_unreachable (rtx_insn *);
- #define insn_default_length hook_int_rtx_insn_unreachable
- #define insn_min_length hook_int_rtx_insn_unreachable
- #define insn_variable_length_p hook_int_rtx_insn_unreachable
- #define insn_current_length hook_int_rtx_insn_unreachable
- #include "insn-addr.h"
- #endif
- extern int hook_int_rtx_1 (rtx);
- #if !HAVE_ATTR_enabled
- #define get_attr_enabled hook_int_rtx_1
- #endif
- #if !HAVE_ATTR_preferred_for_size
- #define get_attr_preferred_for_size hook_int_rtx_1
- #endif
- #if !HAVE_ATTR_preferred_for_speed
- #define get_attr_preferred_for_speed hook_int_rtx_1
- #endif
- #define ATTR_FLAG_forward 0x1
- #define ATTR_FLAG_backward 0x2
- #endif /* GCC_INSN_ATTR_H */
|