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 #include "lnotarget.h"
00041 #include "w2op.h"
00042
00043 TOP
00044 LNOTARGET_Whirl_To_Top (WN* wn)
00045 {
00046 return WHIRL_To_TOP(wn);
00047 }
00048
00049 void
00050 LNOTARGET_Loop_Inc_Test_Res (TI_RES_COUNT* resource_count)
00051 {
00052 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_addi);
00053 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_beq);
00054 }
00055
00056 double
00057 LNOTARGET_Cvt_Res (TI_RES_COUNT* resource_count, OPCODE opcode)
00058 {
00059 switch(OPCODE_operator(opcode)) {
00060 case OPR_CVT:
00061 if (MTYPE_is_float(OPCODE_rtype(opcode)) &&
00062 MTYPE_is_integral(OPCODE_desc(opcode))) {
00063 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mtc1);
00064 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_cvt_d_w);
00065 return 2.0;
00066 }
00067 if (MTYPE_is_integral(OPCODE_rtype(opcode)) &&
00068 MTYPE_is_float(OPCODE_desc(opcode))) {
00069 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_cvt_w_s);
00070 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mfc1);
00071 return 2.0;
00072 }
00073 switch(opcode) {
00074 case OPC_F8F4CVT:
00075 case OPC_F4F8CVT:
00076 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_cvt_s_d);
00077 return 1.0;
00078 case OPC_U4U8CVT:
00079 case OPC_I4U8CVT:
00080 case OPC_I4I8CVT:
00081 case OPC_U4I8CVT:
00082 case OPC_U8U4CVT:
00083 case OPC_I8U4CVT:
00084 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_dsll32);
00085 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_dsra32);
00086 return 2.0;
00087 }
00088 case OPC_U8I4CVT:
00089 case OPC_I8I4CVT:
00090 return 0.0;
00091 break;
00092 case OPR_RND:
00093 case OPR_TRUNC:
00094 case OPR_CEIL:
00095 case OPR_FLOOR:
00096 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_trunc_w_s);
00097 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mfc1);
00098 return 2.0;
00099 }
00100 FmtAssert(FALSE, ("NYI"));
00101 return 0.0;
00102 }
00103
00104 double
00105 LNOTARGET_FP_Madd_Res (TI_RES_COUNT* resource_count, TYPE_ID mtype)
00106 {
00107 TOP madd = (mtype == MTYPE_F4 ? TOP_madd_s : TOP_madd_d);
00108 TI_RES_COUNT_Add_Op_Resources(resource_count, madd);
00109 return 1.0;
00110 }
00111
00112 double
00113 LNOTARGET_FP_Min_Max_Res (TI_RES_COUNT* resource_count, TYPE_ID mtype)
00114 {
00115 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mov_s);
00116 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_c_lt_s);
00117 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_movt_s);
00118 return 3.0;
00119 }
00120
00121 double
00122 LNOTARGET_FP_Div_Res (TI_RES_COUNT* resource_count, TYPE_ID mtype)
00123 {
00124 TOP div = (mtype == MTYPE_F4) ? TOP_div_s : TOP_div_d;
00125 TI_RES_COUNT_Add_Op_Resources(resource_count, div);
00126 return 1.0;
00127 }
00128
00129 double
00130 LNOTARGET_FP_Recip_Res (TI_RES_COUNT* resource_count, TYPE_ID mtype)
00131 {
00132 TOP top = (mtype == MTYPE_F4) ? TOP_recip_s : TOP_recip_d;
00133 TI_RES_COUNT_Add_Op_Resources(resource_count, top);
00134 return 1.0;
00135 }
00136
00137 double
00138 LNOTARGET_FP_Rsqrt_Res (TI_RES_COUNT* resource_count, TYPE_ID mtype)
00139 {
00140 TOP top = (mtype == MTYPE_F4) ? TOP_rsqrt_s : TOP_rsqrt_d;
00141 TI_RES_COUNT_Add_Op_Resources(resource_count, top);
00142 return 1.0;
00143 }
00144
00145 double
00146 LNOTARGET_FP_Sqrt_Res (TI_RES_COUNT* resource_count, TYPE_ID mtype)
00147 {
00148 TOP top = (mtype == MTYPE_F4) ? TOP_sqrt_s : TOP_sqrt_d;
00149 TI_RES_COUNT_Add_Op_Resources(resource_count, top);
00150 return 1.0;
00151 }
00152
00153 double
00154 LNOTARGET_FP_Exp_Res (TI_RES_COUNT* resource_count,
00155 INTRINSIC intr,
00156 INT num_multiplies)
00157 {
00158 INT i;
00159 switch (intr) {
00160 case INTRN_F4I4EXPEXPR:
00161 case INTRN_F4I8EXPEXPR:
00162 for (i = 0; i < num_multiplies; i++) {
00163 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mul_s);
00164 }
00165 return num_multiplies;
00166 case INTRN_F8I4EXPEXPR:
00167 case INTRN_F8I8EXPEXPR:
00168 for (i = 0; i < num_multiplies; i++) {
00169 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mul_d);
00170 }
00171 return num_multiplies;
00172 case INTRN_C4I4EXPEXPR:
00173 case INTRN_C4I8EXPEXPR:
00174 for (i = 0; i < num_multiplies; i++) {
00175 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_madd_s);
00176 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_madd_s);
00177 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mul_s);
00178 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mul_s);
00179 }
00180 return 4*num_multiplies;
00181 case INTRN_C8I4EXPEXPR:
00182 case INTRN_C8I8EXPEXPR:
00183 for (i = 0; i < num_multiplies; i++) {
00184 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_madd_d);
00185 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_madd_d);
00186 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mul_d);
00187 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mul_d);
00188 }
00189 return 4*num_multiplies;
00190 }
00191 return 0.0;
00192 }
00193
00194 double
00195 LNOTARGET_Complex_Add_Res (TI_RES_COUNT* resource_count, TYPE_ID mtype)
00196 {
00197 TOP top = (mtype == MTYPE_C4 ? TOP_add_s : TOP_add_d);
00198 TI_RES_COUNT_Add_Op_Resources(resource_count, top);
00199 TI_RES_COUNT_Add_Op_Resources(resource_count, top);
00200 return 2.0;
00201 }
00202
00203 double
00204 LNOTARGET_Complex_Mult_Res (TI_RES_COUNT* resource_count, TYPE_ID mtype)
00205 {
00206 TOP mul = (mtype == MTYPE_C4 ? TOP_mul_s : TOP_mul_d);
00207 TOP madd = (mtype == MTYPE_F4 ? TOP_madd_s : TOP_madd_d);
00208 TI_RES_COUNT_Add_Op_Resources(resource_count, mul);
00209 TI_RES_COUNT_Add_Op_Resources(resource_count, mul);
00210 TI_RES_COUNT_Add_Op_Resources(resource_count, madd);
00211 TI_RES_COUNT_Add_Op_Resources(resource_count, madd);
00212 return 4.0;
00213 }
00214
00215 double
00216 LNOTARGET_Complex_Neg_Res (TI_RES_COUNT* resource_count, TYPE_ID mtype)
00217 {
00218 TOP top = (mtype == MTYPE_C4 ? TOP_neg_s : TOP_neg_d);
00219 TI_RES_COUNT_Add_Op_Resources(resource_count, top);
00220 TI_RES_COUNT_Add_Op_Resources(resource_count, top);
00221 return 2.0;
00222 }
00223
00224 double
00225 LNOTARGET_Int_Select_Res (TI_RES_COUNT* resource_count)
00226 {
00227 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_or);
00228 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_movz);
00229 return 2.0;
00230 }
00231
00232 double
00233 LNOTARGET_Int_Cvtl_Res (TI_RES_COUNT* resource_count)
00234 {
00235 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_andi);
00236 return 1.0;
00237 }
00238
00239 double
00240 LNOTARGET_Int_Neg_Res (TI_RES_COUNT* resource_count, BOOL eight_bytes)
00241 {
00242 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_sub);
00243 return 1.0;
00244 }
00245
00246 double
00247 LNOTARGET_Int_Abs_Res (TI_RES_COUNT* resource_count, BOOL eight_bytes)
00248 {
00249 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_subu);
00250 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_slt);
00251 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_movz);
00252 return 3.0;
00253 }
00254
00255 double
00256 LNOTARGET_Int_Bnot_Res (TI_RES_COUNT* resource_count)
00257 {
00258 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_nor);
00259 return 1.0;
00260 }
00261
00262 double
00263 LNOTARGET_Int_Lnot_Res (TI_RES_COUNT* resource_count)
00264 {
00265 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_xori);
00266 return 1.0;
00267 }
00268
00269 double
00270 LNOTARGET_Int_Mult_Res (TI_RES_COUNT* resource_count, BOOL eight_bytes)
00271 {
00272 char *op_name = NULL;
00273 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mult);
00274 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mflo);
00275 return 2.0;
00276 }
00277
00278 double
00279 LNOTARGET_Int_Add_Res (TI_RES_COUNT* resource_count, BOOL eight_bytes)
00280 {
00281 TI_RES_COUNT_Add_Op_Resources(resource_count,
00282 eight_bytes?TOP_dadd:TOP_add);
00283 return 1.0;
00284 }
00285
00286 double
00287 LNOTARGET_Int_Sub_Res (TI_RES_COUNT* resource_count, BOOL eight_bytes)
00288 {
00289 TI_RES_COUNT_Add_Op_Resources(resource_count,
00290 eight_bytes?TOP_dsub:TOP_sub);
00291 return 1.0;
00292 }
00293
00294 double
00295 LNOTARGET_Int_Div_Res (TI_RES_COUNT* resource_count,
00296 BOOL eight_bytes,
00297 BOOL mtype_signed)
00298 {
00299 if (!mtype_signed) {
00300 TI_RES_COUNT_Add_Op_Resources(resource_count,
00301 eight_bytes?TOP_ddivu:TOP_divu);
00302 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_teq);
00303 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mflo);
00304 return (3.0);
00305 } else {
00306 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mtc1);
00307 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mtc1);
00308 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_cvt_d_w);
00309 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_cvt_d_w);
00310 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_div_d);
00311 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_trunc_w_d);
00312 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mfc1);
00313 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_teq);
00314 return (8.0);
00315 }
00316 }
00317
00318 double
00319 LNOTARGET_Int_Mod_Res (TI_RES_COUNT* resource_count, BOOL eight_bytes)
00320 {
00321 TI_RES_COUNT_Add_Op_Resources(resource_count,
00322 eight_bytes?TOP_ddiv:TOP_div);
00323 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_teq);
00324 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mfhi);
00325 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_xor);
00326 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_slt);
00327 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_movn);
00328 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_movz);
00329 TI_RES_COUNT_Add_Op_Resources(resource_count,
00330 eight_bytes?TOP_daddu:TOP_addu);
00331 return (8.0);
00332 }
00333
00334 double
00335 LNOTARGET_Int_Rem_Res (TI_RES_COUNT* resource_count, BOOL eight_bytes)
00336 {
00337 TI_RES_COUNT_Add_Op_Resources(resource_count,
00338 eight_bytes?TOP_ddiv:TOP_div);
00339 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_teq);
00340 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mfhi);
00341 return (3.0);
00342 }
00343
00344 double
00345 LNOTARGET_Int_DivRem_Res (TI_RES_COUNT* resource_count, BOOL eight_bytes)
00346 {
00347 TI_RES_COUNT_Add_Op_Resources(resource_count,
00348 eight_bytes?TOP_ddivu:TOP_divu);
00349 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_teq);
00350 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mflo);
00351 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_mfhi);
00352 return (4.0);
00353 }
00354
00355 double
00356 LNOTARGET_Int_Min_Max_Res (TI_RES_COUNT* resource_count, BOOL minmax)
00357 {
00358 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_or);
00359 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_slt);
00360 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_movz);
00361 return (3.0);
00362 }
00363
00364 double
00365 LNOTARGET_Int_Band_Res (TI_RES_COUNT* resource_count)
00366 {
00367 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_and);
00368 return 1.0;
00369 }
00370
00371 double
00372 LNOTARGET_Int_Bior_Res (TI_RES_COUNT* resource_count)
00373 {
00374 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_or);
00375 return 1.0;
00376 }
00377
00378 double
00379 LNOTARGET_Int_Bnor_Res (TI_RES_COUNT* resource_count)
00380 {
00381 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_nor);
00382 return 1.0;
00383 }
00384
00385 double
00386 LNOTARGET_Int_Bxor_Res (TI_RES_COUNT* resource_count)
00387 {
00388 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_xor);
00389 return 1.0;
00390 }
00391
00392 double
00393 LNOTARGET_Int_Land_Res (TI_RES_COUNT* resource_count)
00394 {
00395 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_and);
00396 return 1.0;
00397 }
00398
00399 double
00400 LNOTARGET_Int_Cand_Res (TI_RES_COUNT* resource_count)
00401 {
00402 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_and);
00403 return 1.0;
00404 }
00405
00406 double
00407 LNOTARGET_Int_Lior_Res (TI_RES_COUNT* resource_count)
00408 {
00409 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_or);
00410 return 1.0;
00411 }
00412
00413 double
00414 LNOTARGET_Int_Cior_Res (TI_RES_COUNT* resource_count)
00415 {
00416 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_or);
00417 return 1.0;
00418 }
00419
00420 double
00421 LNOTARGET_Int_Shl_Res (TI_RES_COUNT* resource_count, BOOL eight_bytes)
00422 {
00423 TI_RES_COUNT_Add_Op_Resources(resource_count,
00424 eight_bytes?TOP_dsll:TOP_sll);
00425 return 1.0;
00426 }
00427
00428 double
00429 LNOTARGET_Int_Ashr_Res (TI_RES_COUNT* resource_count, BOOL eight_bytes)
00430 {
00431 TI_RES_COUNT_Add_Op_Resources(resource_count,
00432 eight_bytes?TOP_dsra:TOP_sra);
00433 return 1.0;
00434 }
00435
00436 double
00437 LNOTARGET_Int_Lshr_Res (TI_RES_COUNT* resource_count, BOOL eight_bytes)
00438 {
00439 TI_RES_COUNT_Add_Op_Resources(resource_count,
00440 eight_bytes?TOP_dsrl:TOP_srl);
00441 return 1.0;
00442 }
00443
00444 double
00445 LNOTARGET_Int_Eq_Res (TI_RES_COUNT* resource_count)
00446 {
00447 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_bne);
00448 return 1.0;
00449 }
00450
00451 double
00452 LNOTARGET_Int_Ne_Res (TI_RES_COUNT* resource_count)
00453 {
00454 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_beq);
00455 return 1.0;
00456 }
00457
00458 double
00459 LNOTARGET_Int_Gt_Res (TI_RES_COUNT* resource_count)
00460 {
00461 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_slt);
00462 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_beq);
00463 return 2.0;
00464 }
00465
00466 double
00467 LNOTARGET_Int_Ge_Res (TI_RES_COUNT* resource_count)
00468 {
00469 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_slt);
00470 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_bne);
00471 return 2.0;
00472 }
00473
00474 double
00475 LNOTARGET_Int_Lt_Res (TI_RES_COUNT* resource_count)
00476 {
00477 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_slt);
00478 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_beq);
00479 return 2.0;
00480 }
00481
00482 double
00483 LNOTARGET_Int_Le_Res (TI_RES_COUNT* resource_count)
00484 {
00485 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_slt);
00486 TI_RES_COUNT_Add_Op_Resources(resource_count, TOP_bne);
00487 return 2.0;
00488 }
00489
00490 double
00491 LNOTARGET_Int_Lda_Res (TI_RES_COUNT* resource_count)
00492 {
00493 FmtAssert(FALSE, ("NYI"));
00494 return 2.0;
00495 }
00496
00497 INT
00498 LNOTARGET_Cvt_Lat (OPCODE opcode)
00499 {
00500 return TI_LATENCY_Result_Available_Cycle(TOP_cvt_d_s, 0)
00501 - TI_LATENCY_Operand_Access_Cycle(TOP_cvt_d_s, 0);
00502 }
00503
00504 INT
00505 LNOTARGET_FP_Madd_Add_Lat (TYPE_ID mtype)
00506 {
00507 TOP madd = (mtype == MTYPE_F4 ? TOP_madd_s : TOP_madd_d);
00508 return TI_LATENCY_Result_Available_Cycle(madd, 0)
00509 - TI_LATENCY_Operand_Access_Cycle(madd, 0);
00510 }
00511
00512 INT
00513 LNOTARGET_FP_Madd_Mult_Lat (TYPE_ID mtype)
00514 {
00515 TOP madd = (mtype == MTYPE_F4 ? TOP_madd_s : TOP_madd_d);
00516 return TI_LATENCY_Result_Available_Cycle(madd, 0)
00517 - TI_LATENCY_Operand_Access_Cycle(madd, 0);
00518 }
00519
00520 INT
00521 LNOTARGET_FP_Min_Max_Lat (TYPE_ID mtype)
00522 {
00523 return 2;
00524 }
00525
00526 INT
00527 LNOTARGET_FP_Div_Lat (TYPE_ID mtype)
00528 {
00529 TOP top = (mtype == MTYPE_F4 ? TOP_div_s : TOP_div_d);
00530 return TI_LATENCY_Result_Available_Cycle(top, 0)
00531 - TI_LATENCY_Operand_Access_Cycle(top, 0);
00532 }
00533
00534 INT
00535 LNOTARGET_FP_Recip_Lat (TYPE_ID mtype)
00536 {
00537 TOP top = (mtype == MTYPE_F4 ? TOP_recip_s : TOP_recip_d);
00538 return TI_LATENCY_Result_Available_Cycle(top, 0)
00539 - TI_LATENCY_Operand_Access_Cycle(top, 0);
00540 }
00541
00542 INT
00543 LNOTARGET_FP_Rsqrt_Lat (TYPE_ID mtype)
00544 {
00545 TOP top = (mtype == MTYPE_F4 ? TOP_rsqrt_s : TOP_rsqrt_d);
00546 return TI_LATENCY_Result_Available_Cycle(top, 0)
00547 - TI_LATENCY_Operand_Access_Cycle(top, 0);
00548 }
00549
00550 INT
00551 LNOTARGET_FP_Sqrt_Lat (TYPE_ID mtype)
00552 {
00553 TOP top = (mtype == MTYPE_F4 ? TOP_sqrt_s : TOP_sqrt_d);
00554 return TI_LATENCY_Result_Available_Cycle(top, 0)
00555 - TI_LATENCY_Operand_Access_Cycle(top, 0);
00556 }
00557
00558 INT
00559 LNOTARGET_FP_Exp_Lat (INTRINSIC intr, INT num_multiplies)
00560 {
00561 switch (intr) {
00562 case INTRN_F4I4EXPEXPR:
00563 case INTRN_F4I8EXPEXPR:
00564 return num_multiplies * LNOTARGET_Top_Latency(TOP_mul_s);
00565 case INTRN_F8I4EXPEXPR:
00566 case INTRN_F8I8EXPEXPR:
00567 return num_multiplies * LNOTARGET_Top_Latency(TOP_mul_d);
00568 case INTRN_C4I4EXPEXPR:
00569 case INTRN_C4I8EXPEXPR:
00570 return num_multiplies * (2*LNOTARGET_Top_Latency(TOP_mul_s) +
00571 2*LNOTARGET_Top_Latency(TOP_madd_s));
00572 case INTRN_C8I4EXPEXPR:
00573 case INTRN_C8I8EXPEXPR:
00574 return num_multiplies * (2*LNOTARGET_Top_Latency(TOP_mul_d) +
00575 2*LNOTARGET_Top_Latency(TOP_madd_d));
00576 }
00577 return -1;
00578 }
00579
00580 INT
00581 LNOTARGET_Complex_Add_Lat (TYPE_ID mtype)
00582 {
00583 TOP top = (mtype == MTYPE_C4 ? TOP_add_s : TOP_add_d);
00584 return 2 * (TI_LATENCY_Result_Available_Cycle(top, 0) -
00585 TI_LATENCY_Operand_Access_Cycle(top,0));
00586 }
00587
00588 INT
00589 LNOTARGET_Complex_Mult_Lat (TYPE_ID mtype)
00590 {
00591 TOP mul = (mtype == MTYPE_C4 ? TOP_mul_s : TOP_mul_d);
00592 TOP madd = (mtype == MTYPE_F4 ? TOP_madd_s : TOP_madd_d);
00593 return 2 * (TI_LATENCY_Result_Available_Cycle(mul, 0) -
00594 TI_LATENCY_Operand_Access_Cycle(mul,0)) +
00595 2 * (TI_LATENCY_Result_Available_Cycle(madd, 0) -
00596 TI_LATENCY_Operand_Access_Cycle(madd,0));
00597 }
00598
00599 INT
00600 LNOTARGET_Complex_Neg_Lat (TYPE_ID mtype)
00601 {
00602 TOP top = (mtype == MTYPE_C4 ? TOP_neg_s : TOP_neg_d);
00603 return 2 * (TI_LATENCY_Result_Available_Cycle(top, 0) -
00604 TI_LATENCY_Operand_Access_Cycle(top,0));
00605 }