00001
00002
00003
00004 #ifndef GCC_INSN_ATTR_H
00005 #define GCC_INSN_ATTR_H
00006
00007 #define HAVE_ATTR_alternative
00008 #define get_attr_alternative(insn) which_alternative
00009 #define HAVE_ATTR_type
00010 enum attr_type {TYPE_UNKNOWN, TYPE_BRANCH, TYPE_JUMP, TYPE_CALL, TYPE_LOAD, TYPE_STORE, TYPE_MOVE, TYPE_XFER, TYPE_HILO, TYPE_ARITH, TYPE_DARITH, TYPE_IMUL, TYPE_IMADD, TYPE_IDIV, TYPE_ICMP, TYPE_FADD, TYPE_FMUL, TYPE_FMADD, TYPE_FDIV, TYPE_FABS, TYPE_FNEG, TYPE_FCMP, TYPE_FCVT, TYPE_FSQRT, TYPE_FRSQRT, TYPE_MULTI, TYPE_NOP};
00011 extern enum attr_type get_attr_type PARAMS ((rtx));
00012
00013 #define HAVE_ATTR_mode
00014 enum attr_mode {MODE_UNKNOWN, MODE_NONE, MODE_QI, MODE_HI, MODE_SI, MODE_DI, MODE_SF, MODE_DF, MODE_FPSW};
00015 extern enum attr_mode get_attr_mode PARAMS ((rtx));
00016
00017 #define HAVE_ATTR_length
00018 extern int get_attr_length PARAMS ((rtx));
00019 extern void shorten_branches PARAMS ((rtx));
00020 extern int insn_default_length PARAMS ((rtx));
00021 extern int insn_variable_length_p PARAMS ((rtx));
00022 extern int insn_current_length PARAMS ((rtx));
00023
00024 #include "insn-addr.h"
00025
00026 #define HAVE_ATTR_cpu
00027 enum attr_cpu {CPU_DEFAULT, CPU_R3000, CPU_R3900, CPU_R6000, CPU_R4000, CPU_R4100, CPU_R4111, CPU_R4120, CPU_R4300, CPU_R4600, CPU_R4650, CPU_R5000, CPU_R5400, CPU_R5500, CPU_R8000, CPU_SR71000, CPU_R4KC, CPU_R5KC, CPU_R20KC};
00028 extern enum attr_cpu get_attr_cpu PARAMS ((void));
00029
00030 #define HAVE_ATTR_dslot
00031 enum attr_dslot {DSLOT_NO, DSLOT_YES};
00032 extern enum attr_dslot get_attr_dslot PARAMS ((rtx));
00033
00034 #define HAVE_ATTR_can_delay
00035 enum attr_can_delay {CAN_DELAY_NO, CAN_DELAY_YES};
00036 extern enum attr_can_delay get_attr_can_delay PARAMS ((rtx));
00037
00038 #define HAVE_ATTR_branch_likely
00039 enum attr_branch_likely {BRANCH_LIKELY_NO, BRANCH_LIKELY_YES};
00040 extern enum attr_branch_likely get_attr_branch_likely PARAMS ((void));
00041
00042 #define HAVE_ATTR_abicalls
00043 enum attr_abicalls {ABICALLS_NO, ABICALLS_YES};
00044 extern enum attr_abicalls get_attr_abicalls PARAMS ((void));
00045
00046 #define DELAY_SLOTS
00047 extern int num_delay_slots PARAMS ((rtx));
00048 extern int eligible_for_delay PARAMS ((rtx, int, rtx, int));
00049
00050 extern int const_num_delay_slots PARAMS ((rtx));
00051
00052 #define ANNUL_IFFALSE_SLOTS
00053 extern int eligible_for_annul_false PARAMS ((rtx, int, rtx, int));
00054 #define TRADITIONAL_PIPELINE_INTERFACE 1
00055 #define DFA_PIPELINE_INTERFACE 1
00056 #define INSN_SCHEDULING
00057
00058 extern int result_ready_cost PARAMS ((rtx));
00059 extern int function_units_used PARAMS ((rtx));
00060
00061 extern const struct function_unit_desc
00062 {
00063 const char *const name;
00064 const int bitmask;
00065 const int multiplicity;
00066 const int simultaneity;
00067 const int default_cost;
00068 const int max_issue_delay;
00069 int (*const ready_cost_function) PARAMS ((rtx));
00070 int (*const conflict_cost_function) PARAMS ((rtx, rtx));
00071 const int max_blockage;
00072 unsigned int (*const blockage_range_function) PARAMS ((rtx));
00073 int (*const blockage_function) PARAMS ((rtx, rtx));
00074 } function_units[];
00075
00076 #define FUNCTION_UNITS_SIZE 5
00077 #define MIN_MULTIPLICITY 1
00078 #define MAX_MULTIPLICITY 1
00079 #define MIN_SIMULTANEITY 0
00080 #define MAX_SIMULTANEITY 1
00081 #define MIN_READY_COST 1
00082 #define MAX_READY_COST 112
00083 #define MIN_ISSUE_DELAY 1
00084 #define MAX_ISSUE_DELAY 69
00085 #define MIN_BLOCKAGE 1
00086 #define MAX_BLOCKAGE 112
00087 #define BLOCKAGE_BITS 8
00088 #define INSN_QUEUE_SIZE 128
00089
00090
00091 #ifndef AUTOMATON_STATE_ALTS
00092 #define AUTOMATON_STATE_ALTS 0
00093 #endif
00094
00095 #ifndef CPU_UNITS_QUERY
00096 #define CPU_UNITS_QUERY 0
00097 #endif
00098
00099 extern int max_dfa_issue_rate;
00100
00101
00102
00103
00104
00105
00106 #define MAX_DFA_ISSUE_RATE max_dfa_issue_rate
00107
00108
00109 extern int insn_default_latency PARAMS ((rtx));
00110
00111
00112
00113 extern int bypass_p PARAMS ((rtx));
00114
00115
00116
00117
00118 extern int insn_latency PARAMS ((rtx, rtx));
00119
00120
00121
00122
00123 extern int insn_alts PARAMS ((rtx));
00124
00125
00126
00127 extern int max_insn_queue_index;
00128
00129
00130 typedef void *state_t;
00131
00132
00133 extern int state_size PARAMS ((void));
00134
00135
00136
00137 extern void state_reset PARAMS ((state_t));
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147 extern int state_transition PARAMS ((state_t, rtx));
00148
00149 #if AUTOMATON_STATE_ALTS
00150
00151
00152
00153
00154
00155
00156 extern int state_alts PARAMS ((state_t, rtx));
00157 #endif
00158
00159 extern int min_issue_delay PARAMS ((state_t, rtx));
00160
00161
00162 extern int state_dead_lock_p PARAMS ((state_t));
00163
00164
00165
00166
00167
00168
00169 extern int min_insn_conflict_delay PARAMS ((state_t, rtx, rtx));
00170
00171
00172
00173 extern void print_reservation PARAMS ((FILE *, rtx));
00174
00175 #if CPU_UNITS_QUERY
00176
00177
00178 extern int get_cpu_unit_code PARAMS ((const char *));
00179
00180
00181
00182 extern int cpu_unit_reservation_p PARAMS ((state_t, int));
00183 #endif
00184
00185
00186
00187
00188 extern void dfa_start PARAMS ((void));
00189 extern void dfa_finish PARAMS ((void));
00190
00191 #define ATTR_FLAG_forward 0x1
00192 #define ATTR_FLAG_backward 0x2
00193 #define ATTR_FLAG_likely 0x4
00194 #define ATTR_FLAG_very_likely 0x8
00195 #define ATTR_FLAG_unlikely 0x10
00196 #define ATTR_FLAG_very_unlikely 0x20
00197
00198 #endif