00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 #ifdef KEY
00056 #include "config_opt.h"
00057 #endif
00058
00059 #define INST_BYTES 4
00060 #define DEFAULT_LONG_BRANCH_LIMIT (0x1ffffff * INST_BYTES)
00061 #define DEFAULT_BRP_BRANCH_LIMIT DEFAULT_LONG_BRANCH_LIMIT
00062 #define MIN_BRANCH_DISP (2097151 * INST_BYTES)
00063
00064
00065 inline INT32 CGTARG_Branch_Taken_Penalty(void)
00066 {
00067 return CGTARG_branch_taken_penalty_overridden ?
00068 CGTARG_branch_taken_penalty : 1;
00069 }
00070
00071 inline INT32 CGTARG_Issue_Width(void)
00072 {
00073 return 9;
00074 }
00075
00076 inline BOOL
00077 CGTARG_Use_Brlikely(float branch_taken_probability)
00078 {
00079 return FALSE;
00080 }
00081
00082 inline BOOL
00083 CGTARG_Can_Predicate_Calls()
00084 {
00085 return FALSE;
00086 }
00087
00088
00089 inline BOOL
00090 CGTARG_Can_Predicate_Returns()
00091 {
00092 return FALSE;
00093 }
00094
00095 inline BOOL
00096 CGTARG_Can_Predicate_Branches()
00097 {
00098 return FALSE;
00099 }
00100
00101 inline INT
00102 CGTARG_Text_Alignment (void)
00103 {
00104 return 4;
00105 }
00106
00107 inline TOP
00108 CGTARG_Noop_Top(void)
00109 {
00110 return TOP_nop;
00111 }
00112
00113 inline TOP
00114 CGTARG_Noop_Top(ISA_EXEC_UNIT_PROPERTY unit)
00115 {
00116 return CGTARG_Noop_Top();
00117 }
00118
00119 inline TOP
00120 CGTARG_Simulated_Top(OP *op, ISA_EXEC_UNIT_PROPERTY unit)
00121 {
00122
00123 TOP top = OP_code(op);
00124
00125
00126 if (!TOP_is_simulated(top)) return top;
00127
00128
00129 return top;
00130 }
00131
00132
00133
00134
00135
00136
00137 inline TN*
00138 CGTARG_Return_Enum_TN(OP *op, ISA_ENUM_CLASS_VALUE enum_class, INT *pos)
00139 {
00140 INT i;
00141
00142 for (i = 0; i < OP_opnds(op); ++i) {
00143 TN *opnd_tn = OP_opnd(op, i);
00144 if (TN_is_enum(opnd_tn) && (enum_class == TN_enum(opnd_tn))) {
00145 *pos = i;
00146 return opnd_tn;
00147 }
00148 }
00149
00150 return NULL;
00151 }
00152
00153 inline BOOL
00154 CGTARG_Is_OP_Barrier(OP *op)
00155 {
00156 switch (OP_code(op)) {
00157 case TOP_asm:
00158 {
00159 extern OP_MAP OP_Asm_Map;
00160 ASM_OP_ANNOT* asm_info = (ASM_OP_ANNOT*) OP_MAP_Get(OP_Asm_Map, op);
00161 #ifdef KEY
00162 return (WN_Asm_Clobbers_Mem(ASM_OP_wn(asm_info)) || Asm_Memory);
00163 #else
00164 return (WN_Asm_Clobbers_Mem(ASM_OP_wn(asm_info)));
00165 #endif
00166 }
00167 case TOP_bar_sync:
00168 return TRUE;
00169 default:
00170 return FALSE;
00171 }
00172 }
00173
00174 inline BOOL
00175 CGTARG_Is_OP_Intrinsic(OP *op)
00176 {
00177 return OP_code(op) == TOP_intrncall;
00178 }
00179
00180 inline BOOL
00181 CGTARG_Is_Bad_Shift_Op (OP *op)
00182 {
00183 return FALSE;
00184 }
00185
00186 inline BOOL
00187 CGTARG_Is_Right_Shift_Op (OP *op)
00188 {
00189 switch (OP_code(op)) {
00190 TOP_shr:
00191 return TRUE;
00192 }
00193 return FALSE;
00194 }
00195
00196 inline BOOL
00197 CGTARG_Is_OP_Addr_Incr(OP *op)
00198 {
00199 const TOP top = OP_code(op);
00200 return FALSE;
00201 }
00202
00203 inline BOOL
00204 CGTARG_Can_daddu_Be_Folded(OP *op1, OP *op2)
00205 {
00206 return FALSE;
00207 }
00208
00209 inline TOP
00210 CGTARG_Copy_Op(UINT8 size, BOOL is_float)
00211 {
00212 if (is_float) {
00213 return size == 4 ? TOP_mov_f32 : TOP_mov_f64;
00214 }
00215 switch (size) {
00216 case 1: return TOP_mov_s8;
00217 case 2: return TOP_mov_s16;
00218 case 4: return TOP_mov_s32;
00219 case 8: return TOP_mov_s64;
00220 }
00221 }
00222
00223 inline BOOL
00224 CGTARG_Have_Indexed_Mem_Insts(void)
00225 {
00226 return FALSE;
00227 }
00228
00229 inline BOOL
00230 Has_Single_FP_Condition_Code (void)
00231 {
00232 return FALSE;
00233 }
00234
00235 inline BOOL
00236 CGTARG_Is_OP_daddu(OP *op)
00237 {
00238 return FALSE;
00239 }
00240
00241 inline BOOL
00242 CGTARG_Can_Predicate()
00243 {
00244 return FALSE;
00245 }
00246
00247 extern TOP CGTARG_Get_unc_Variant(TOP top);
00248 extern void Make_Branch_Conditional(BB *bb);
00249
00250 inline BOOL
00251 CGTARG_Has_Branch_Predict(void)
00252 {
00253 return TRUE;
00254 }
00255
00256
00257 extern void Assign_Virtual_Registers (void);
00258 extern void Assign_Virtual_Register (TN *tn);
00259
00260
00261 extern REGISTER Last_Reg_Allocated (ISA_REGISTER_CLASS);
00262
00263
00264 extern ISA_LIT_CLASS Lit_Class_For_Mtype (TYPE_ID mtype);
00265
00266
00267
00268
00269 extern BOOL TN_Can_Use_Constant_Value (TN *tn, TYPE_ID mtype, INT64 *val);
00270
00271
00272
00273 extern void Create_Unique_Defs_For_TNs (void);
00274
00275
00276 extern OP* Find_Reaching_Def (TN *tn, OP *use_op);
00277
00278
00279 extern void Rematerialize_GRF (void);
00280
00281
00282 extern void Remove_Typeconv (void);
00283
00284
00285 extern void Optimize_Copy_Usage (void);
00286
00287
00288 extern void Use_16bit_Ops (void);