Open64 (mfef90, whirl2f, and IR tools)
TAG: version-openad; SVN changeset: 916
|
00001 /* 00002 00003 Copyright (C) 2000, 2001 Silicon Graphics, Inc. All Rights Reserved. 00004 00005 This program is free software; you can redistribute it and/or modify it 00006 under the terms of version 2 of the GNU General Public License as 00007 published by the Free Software Foundation. 00008 00009 This program is distributed in the hope that it would be useful, but 00010 WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00012 00013 Further, this software is distributed without any warranty that it is 00014 free of the rightful claim of any third person regarding infringement 00015 or the like. Any license provided herein, whether implied or 00016 otherwise, applies only to this software file. Patent licenses, if 00017 any, provided herein do not apply to combinations of this program with 00018 other software, or any other product whatsoever. 00019 00020 You should have received a copy of the GNU General Public License along 00021 with this program; if not, write the Free Software Foundation, Inc., 59 00022 Temple Place - Suite 330, Boston MA 02111-1307, USA. 00023 00024 Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pky, 00025 Mountain View, CA 94043, or: 00026 00027 http://www.sgi.com 00028 00029 For further information regarding this notice, see: 00030 00031 http://oss.sgi.com/projects/GenInfo/NoticeExplan 00032 00033 */ 00034 00035 00036 // Intel Itanium (tm) processor scheduling information 00038 // 00039 // Description: 00040 // 00041 // Generate a scheduling description of a Intel Itanium (tm) processor 00042 // via the si_gen interface. 00043 // 00045 00046 00047 00048 00049 #include "si_gen.h" 00050 #include "targ_isa_subset.h" 00051 #include "topcode.h" 00052 00053 static RESOURCE res_issue, 00054 res_sem, // for non-pipelinable semaphore insts 00055 res_memory, // Memory unit 00056 res_M0, // M0 Memory unit 00057 res_float, // Float unit 00058 res_F0, // F0 Float unit 00059 res_integer, // Integer unit 00060 res_I0, // I0 unit 00061 res_int_or_mem, // to simulate A-type insts which can execute 00062 // in either I or M unit 00063 res_branch, // Branch unit 00064 res_B0_or_B1, // B0 or B1 unit 00065 res_B0_or_B2, // B0 or B2 unit 00066 res_B2; // B2 unit 00067 00068 int 00069 main (int argc, char *argv[]) 00070 { 00071 Machine("itanium", ISA_SUBSET_intel1, argc, argv); 00072 00073 res_issue = RESOURCE_Create("issue", 6); 00074 res_sem = RESOURCE_Create("sem", 1); 00075 res_int_or_mem = RESOURCE_Create("integer_or_memory", 4); 00076 res_memory = RESOURCE_Create("memory", 2); 00077 res_M0 = RESOURCE_Create("memory0", 1); 00078 res_float = RESOURCE_Create("floating-point", 2); 00079 res_F0 = RESOURCE_Create("floating-point0", 1); 00080 res_integer = RESOURCE_Create("integer", 2); 00081 res_I0 = RESOURCE_Create("integer0", 1); 00082 res_branch = RESOURCE_Create("branch", 3); 00083 res_B0_or_B1 = RESOURCE_Create("B0_or_B1", 2); 00084 res_B0_or_B2 = RESOURCE_Create("B0_or_B2", 2); 00085 res_B2 = RESOURCE_Create("B2", 1); 00086 00088 // 00089 // Instructions belonging to the BR functional unit class: 00090 // B-type instructions which can execute in any B unit. 00091 // 00093 Instruction_Group("BR", 00094 TOP_br_call, 00095 TOP_br_r_call, 00096 TOP_brl_call, 00097 TOP_br_cond, 00098 TOP_br_r_cond, 00099 TOP_brl_cond, 00100 TOP_br_ia, 00101 TOP_br_ret, 00102 TOP_br, // pseudo of br_cond 00103 TOP_br_r, // pseudo of br_r_cond 00104 TOP_brl, // pseudo of brl_cond 00105 TOP_UNDEFINED); 00106 Any_Operand_Access_Time(0); 00107 Any_Result_Available_Time(1); // ??? not sure 00108 Resource_Requirement(res_issue, 0); 00109 Resource_Requirement(res_branch, 0); 00110 00112 // 00113 // Instructions belonging to the BR_B2 functional unit class: 00114 // B-type instructions which can execute in any B unit. 00115 // 00117 Instruction_Group("BR_B2", 00118 TOP_br_cexit, 00119 TOP_br_cloop, 00120 TOP_br_ctop, 00121 TOP_br_wexit, // ??? correct functional unit? 00122 TOP_br_wtop, 00123 TOP_UNDEFINED); 00124 Any_Operand_Access_Time(0); 00125 Any_Result_Available_Time(1); // ??? not sure 00126 Resource_Requirement(res_issue, 0); 00127 Resource_Requirement(res_branch, 0); 00128 Resource_Requirement(res_B2, 0); 00129 00131 // 00132 // Instructions belonging to the BRP functional unit class: 00133 // B-type instructions which can exeucte in any B unit, but 00134 // if sent to B1 will be ignored. 00135 // 00137 Instruction_Group("BRP", 00138 TOP_brp, 00139 TOP_brp_r, 00140 TOP_brp_ret, 00141 TOP_UNDEFINED); 00142 Any_Operand_Access_Time(0); 00143 Resource_Requirement(res_issue, 0); 00144 Resource_Requirement(res_branch, 0); 00145 00147 // 00148 // Instructions belonging to the CHK_ALAT functional unit class: 00149 // M-type instructions which can execute in any M unit. 00150 // 00152 Instruction_Group("CHK_ALAT", 00153 TOP_chk_a, 00154 TOP_chk_f_a, 00155 TOP_UNDEFINED); 00156 Any_Operand_Access_Time(0); 00157 Resource_Requirement(res_issue, 0); 00158 Resource_Requirement(res_int_or_mem, 0); 00159 Resource_Requirement(res_memory, 0); 00160 00162 // 00163 // Instructions belonging to the CHK_I functional unit class: 00164 // I-type instructions which can execute in any I Unit. 00165 // 00167 Instruction_Group("CHK_I", 00168 TOP_chk_s_i, 00169 TOP_UNDEFINED); 00170 Any_Operand_Access_Time(0); 00171 Resource_Requirement(res_issue, 0); 00172 Resource_Requirement(res_int_or_mem, 0); 00173 Resource_Requirement(res_integer, 0); 00174 00176 // 00177 // Instructions belonging to the CHK_M functional unit class: 00178 // M-type instructions which can execute in any M unit. 00179 // 00181 Instruction_Group("CHK_M", 00182 TOP_chk_f_s, 00183 TOP_chk_s_m, 00184 TOP_UNDEFINED); 00185 Any_Operand_Access_Time(0); 00186 Resource_Requirement(res_issue, 0); 00187 Resource_Requirement(res_int_or_mem, 0); 00188 Resource_Requirement(res_memory, 0); 00189 00191 // 00192 // Instructions belonging to the CLD functional unit class: 00193 // M-type instructions which can execute in any M unit. 00194 // 00196 Instruction_Group("CLD", 00197 // ??? ld.c 00198 TOP_UNDEFINED); 00199 Any_Operand_Access_Time(0); 00200 Any_Result_Available_Time(0); 00201 Resource_Requirement(res_issue, 0); 00202 Resource_Requirement(res_int_or_mem, 0); 00203 Resource_Requirement(res_memory, 0); 00204 Load_Access_Time(2); 00205 00207 // 00208 // Instructions belonging to the FCLD functional unit class: 00209 // M-type instructions which can execute in any M unit. 00210 // 00212 Instruction_Group("FCLD", 00213 // ??? ldf8.c 00214 // ??? ldfd.c 00215 // ??? ldfe.c 00216 // ??? ldfp8.c 00217 // ??? ldfpd.c 00218 // ??? ldfps.c 00219 // ??? ldfs.c 00220 TOP_UNDEFINED); 00221 Any_Operand_Access_Time(0); 00222 Any_Result_Available_Time(0); 00223 Resource_Requirement(res_issue, 0); 00224 Resource_Requirement(res_int_or_mem, 0); 00225 Resource_Requirement(res_memory, 0); 00226 Load_Access_Time(2); 00227 00229 // 00230 // Instructions belonging to the FCMP functional unit class: 00231 // F-type instructions which can only execute in F0. 00232 // 00234 Instruction_Group("FCMP", 00235 TOP_fclass_nm, 00236 TOP_fclass_nm_unc, 00237 TOP_fclass_m, 00238 TOP_fclass_m_unc, 00239 TOP_fcmp_eq, 00240 TOP_fcmp_lt, 00241 TOP_fcmp_le, 00242 TOP_fcmp_unord, 00243 TOP_fcmp_eq_unc, 00244 TOP_fcmp_lt_unc, 00245 TOP_fcmp_le_unc, 00246 TOP_fcmp_unord_unc, 00247 TOP_fcmp_gt, 00248 TOP_fcmp_gt_unc, 00249 TOP_fcmp_ge, 00250 TOP_fcmp_ge_unc, 00251 TOP_fcmp_neq, 00252 TOP_fcmp_neq_unc, 00253 TOP_fcmp_nlt, 00254 TOP_fcmp_nlt_unc, 00255 TOP_fcmp_nle, 00256 TOP_fcmp_nle_unc, 00257 TOP_fcmp_ngt, 00258 TOP_fcmp_ngt_unc, 00259 TOP_fcmp_nge, 00260 TOP_fcmp_nge_unc, 00261 TOP_fcmp_ord, 00262 TOP_fcmp_ord_unc, 00263 TOP_UNDEFINED); 00264 Any_Operand_Access_Time(0); 00265 Any_Result_Available_Time(2); // +2 to dependent SFxxx 00266 Resource_Requirement(res_issue, 0); 00267 Resource_Requirement(res_float, 0); 00268 Resource_Requirement(res_F0, 0); // can only execute in F0 00269 00271 // 00272 // Instructions belonging to the FCVTFX functional unit class: 00273 // F-type instructions which can execute in any F unit. 00274 // 00276 Instruction_Group("FCVTFX", 00277 TOP_fcvt_fx, 00278 TOP_fcvt_fx_trunc, 00279 TOP_fcvt_fxu, 00280 TOP_fcvt_fxu_trunc, 00281 TOP_fcvt_xf, 00282 TOP_UNDEFINED); 00283 Any_Operand_Access_Time(0); 00284 Any_Result_Available_Time(7); // +2 to dependent SFxxx 00285 Resource_Requirement(res_issue, 0); 00286 Resource_Requirement(res_float, 0); 00287 00289 // 00290 // Instructions belonging to the FLD functional unit class: 00291 // M-type instructions which can execute in any M unit. 00292 // 00294 Instruction_Group("FLD", 00295 TOP_ldf8, 00296 TOP_ldf8_r, 00297 TOP_ldf8_i, 00298 TOP_ldfd, 00299 TOP_ldfd_r, 00300 TOP_ldfd_i, 00301 TOP_ldfe, 00302 TOP_ldfe_r, 00303 TOP_ldfe_i, 00304 TOP_ldf_fill, 00305 TOP_ldf_r_fill, 00306 TOP_ldf_i_fill, 00307 TOP_ldfs, 00308 TOP_ldfs_r, 00309 TOP_ldfs_i, 00310 TOP_UNDEFINED); 00311 Any_Operand_Access_Time(0); 00312 Any_Result_Available_Time(9); // +2 to dependent SFxxx 00313 Resource_Requirement(res_issue, 0); 00314 Resource_Requirement(res_int_or_mem, 0); 00315 Resource_Requirement(res_memory, 0); 00316 Load_Access_Time(9); 00317 00319 // 00320 // Instructions belonging to the FLDP functional unit class: 00321 // M-type instructions which can execute in any M unit. 00322 // 00324 Instruction_Group("FLDP", 00325 TOP_ldfp8, 00326 TOP_ldfp8_i, 00327 TOP_ldfpd, 00328 TOP_ldfpd_i, 00329 TOP_ldfps, 00330 TOP_ldfps_i, 00331 TOP_UNDEFINED); 00332 Any_Operand_Access_Time(0); 00333 Any_Result_Available_Time(9); // +2 to dependent SFxxx 00334 Resource_Requirement(res_issue, 0); 00335 Resource_Requirement(res_int_or_mem, 0); 00336 Resource_Requirement(res_memory, 0); 00337 Load_Access_Time(9); 00338 00340 // 00341 // Instructions belonging to the FMAC functional unit class: 00342 // F-type instructions which can execute in any F unit. 00343 // 00345 Instruction_Group("FMAC", 00346 TOP_fma, 00347 TOP_fma_s, 00348 TOP_fma_d, 00349 TOP_fms, 00350 TOP_fms_s, 00351 TOP_fms_d, 00352 TOP_fnma, 00353 TOP_fnma_s, 00354 TOP_fnma_d, 00355 TOP_fcvt_xuf, // pseudo of fma 00356 TOP_fcvt_xuf_d, // pseudo of fma_d 00357 TOP_fcvt_xuf_s, // pseudo of fma_s 00358 TOP_fadd, // pseudo of fma 00359 TOP_fadd_d, // pseudo of fma_d 00360 TOP_fadd_s, // pseudo of fma_s 00361 TOP_fmpy, // pseudo of fma 00362 TOP_fmpy_d, // pseudo of fma_d 00363 TOP_fmpy_s, // pseudo of fma_s 00364 TOP_fnmpy, // pseudo of fnma 00365 TOP_fnmpy_d, // pseudo of fnma_d 00366 TOP_fnmpy_s, // pseudo of fnma_s 00367 TOP_fnorm, // pseudo of fma 00368 TOP_fnorm_d, // pseudo of fma_d 00369 TOP_fnorm_s, // pseudo of fma_s 00370 TOP_fsub, // pseudo of fms 00371 TOP_fsub_d, // pseudo of fms_d 00372 TOP_fsub_s, // pseudo of fms_s 00373 TOP_UNDEFINED); 00374 Any_Operand_Access_Time(0); 00375 Any_Result_Available_Time(5); // +2 to dependent FMISC, FCVTFX, XMA 00376 // +2 to dependent SFxxx 00377 Resource_Requirement(res_issue, 0); 00378 Resource_Requirement(res_float, 0); 00379 00381 // 00382 // Instructions belonging to the FMISC functional unit class: 00383 // F-type instructions which can only execute in F0. 00384 // 00386 Instruction_Group("FMISC", 00387 TOP_famax, 00388 TOP_famin, 00389 TOP_fand, 00390 TOP_fandcm, 00391 TOP_fmax, 00392 TOP_fmerge_ns, 00393 TOP_fmerge_s, 00394 TOP_fmerge_se, 00395 TOP_fmin, 00396 TOP_fmix_l, 00397 TOP_fmix_lr, 00398 TOP_fmix_r, 00399 TOP_for, 00400 TOP_fpack, 00401 TOP_frcpa, 00402 TOP_frsqrta, 00403 TOP_fselect, 00404 TOP_fswap, 00405 TOP_fswap_nl, 00406 TOP_fswap_nr, 00407 TOP_fsxt_l, 00408 TOP_fsxt_r, 00409 TOP_fxor, 00410 TOP_fabs, // pseudo of fmerge_s 00411 TOP_fnegabs, // pseudo of fmerge_ns 00412 TOP_fneg, // pseudo of fmerge_ns 00413 TOP_mov_f, // pseudo of fmerge_s 00414 TOP_UNDEFINED); 00415 Any_Operand_Access_Time(0); 00416 Any_Result_Available_Time(5); // +2 to dependent SFxxx 00417 Resource_Requirement(res_issue, 0); 00418 Resource_Requirement(res_float, 0); 00419 Resource_Requirement(res_F0, 0); // can only execute in F0 00420 00422 // 00423 // Instructions belonging to the FOTHER functional unit class: 00424 // F-type instructions which can execute in any F unit. 00425 // 00427 Instruction_Group("FOTHER", 00428 TOP_fchkf, 00429 TOP_fclrf, 00430 TOP_fsetc, 00431 TOP_UNDEFINED); 00432 Any_Operand_Access_Time(0); 00433 Resource_Requirement(res_issue, 0); 00434 Resource_Requirement(res_float, 0); 00435 00437 // 00438 // Instructions belonging to the FRAR_I functional unit class: 00439 // I-type instructions which can only execute in I0. 00440 // 00442 Instruction_Group("FRAR_I", 00443 TOP_mov_f_ar_i, 00444 TOP_UNDEFINED); 00445 Any_Operand_Access_Time(0); 00446 Any_Result_Available_Time(1); // depends on src register 00447 // +1 to dependent MMMUL, MMSHF, MMALU 00448 Resource_Requirement(res_issue, 0); 00449 Resource_Requirement(res_int_or_mem, 0); 00450 Resource_Requirement(res_integer, 0); 00451 Resource_Requirement(res_I0, 0); // can only execute in I0 00452 00454 // 00455 // Instructions belonging to the FRAR_M functional unit class: 00456 // M-type instructions which can only execute in M0. 00457 // 00459 Instruction_Group("FRAR_M", 00460 TOP_mov_f_ar_m, 00461 TOP_UNDEFINED); 00462 Any_Operand_Access_Time(0); 00463 Any_Result_Available_Time(1); // depends on src register 00464 // +1 to dependent MMMUL, MMSHF, MMALU 00465 Resource_Requirement(res_issue, 0); 00466 Resource_Requirement(res_int_or_mem, 0); 00467 Resource_Requirement(res_memory, 0); 00468 Resource_Requirement(res_M0, 0); 00469 00471 // 00472 // Instructions belonging to the FRBR functional unit class: 00473 // I-type instructions which can only execute in I0. 00474 // 00476 Instruction_Group("FRBR", 00477 TOP_mov_f_br, 00478 TOP_UNDEFINED); 00479 Any_Operand_Access_Time(0); 00480 Any_Result_Available_Time(2); // +1 to dependent MMMUL, MMSHF, MMALU 00481 Resource_Requirement(res_issue, 0); 00482 Resource_Requirement(res_int_or_mem, 0); 00483 Resource_Requirement(res_integer, 0); 00484 Resource_Requirement(res_I0, 0); // can only execute in I0 00485 00487 // 00488 // Instructions belonging to the FRCR functional unit class: 00489 // M-type instructions which can only execute in M0. 00490 // 00492 Instruction_Group("FRCR", 00493 TOP_mov_f_cr, 00494 TOP_UNDEFINED); 00495 Any_Operand_Access_Time(0); 00496 Any_Result_Available_Time(1); // depends on src register 00497 // +1 to dependent MMMUL, MMSHF, MMALU 00498 Resource_Requirement(res_issue, 0); 00499 Resource_Requirement(res_int_or_mem, 0); 00500 Resource_Requirement(res_memory, 0); 00501 Resource_Requirement(res_M0, 0); // can only execute in M0 00502 00504 // 00505 // Instructions belonging to the FRFR functional unit class: 00506 // M-type instructions which can execute in any M unit. 00507 // 00509 Instruction_Group("FRFR", 00510 TOP_getf_sig, 00511 TOP_getf_exp, 00512 TOP_getf_s, 00513 TOP_getf_d, 00514 TOP_UNDEFINED); 00515 Any_Operand_Access_Time(0); 00516 Any_Result_Available_Time(2); 00517 Resource_Requirement(res_issue, 0); 00518 Resource_Requirement(res_int_or_mem, 0); 00519 Resource_Requirement(res_memory, 0); 00520 00522 // 00523 // Instructions belonging to the FRIP functional unit class: 00524 // I-type instructions which can only execute in I0. 00525 // 00527 Instruction_Group("FRIP", 00528 TOP_mov_f_ip, 00529 TOP_UNDEFINED); 00530 Any_Operand_Access_Time(0); 00531 Any_Result_Available_Time(2); // +1 to dependent MMMUL, MMSHF, MMALU 00532 Resource_Requirement(res_issue, 0); 00533 Resource_Requirement(res_int_or_mem, 0); 00534 Resource_Requirement(res_integer, 0); 00535 Resource_Requirement(res_I0, 0); // can only execute in I0 00536 00538 // 00539 // Instructions belonging to the FRPR functional unit class: 00540 // I-type instructions which can only execute in I0. 00541 // 00543 Instruction_Group("FRPR", 00544 TOP_mov_f_pr, 00545 TOP_UNDEFINED); 00546 Any_Operand_Access_Time(0); 00547 Any_Result_Available_Time(2); 00548 Resource_Requirement(res_issue, 0); 00549 Resource_Requirement(res_int_or_mem, 0); 00550 Resource_Requirement(res_integer, 0); 00551 Resource_Requirement(res_I0, 0); // can only execute in I0 00552 00554 // 00555 // Instructions belonging to the IALU functional unit class: 00556 // A-type instructions which can execute in any I or M unit. 00557 // 00559 Instruction_Group("IALU", 00560 TOP_add, 00561 TOP_add_1, 00562 TOP_addl, 00563 TOP_adds, 00564 TOP_shladd, 00565 TOP_sub, 00566 TOP_sub_i, 00567 TOP_sub_1, 00568 TOP_mov_i, // pseudo of addl 00569 TOP_mov, // pseudo of adds 00570 TOP_UNDEFINED); 00571 Any_Operand_Access_Time(0); 00572 Any_Result_Available_Time(1); // +1 to dependent LD/ST base reg 00573 // (I-slot insts only) 00574 // +2 to dependent MMMUL, MMSHF, MMALU 00575 Resource_Requirement(res_issue, 0); 00576 Resource_Requirement(res_int_or_mem, 0); 00577 00579 // 00580 // Instructions belonging to the ICMP functional unit class: 00581 // A-type instructions which can execute in any I or M unit. 00582 // 00584 Instruction_Group("ICMP", 00585 TOP_cmp_eq, 00586 TOP_cmp_eq_and, 00587 TOP_cmp_eq_and_orcm, 00588 TOP_cmp_eq_andcm, 00589 TOP_cmp_eq_or, 00590 TOP_cmp_eq_or_andcm, 00591 TOP_cmp_eq_orcm, 00592 TOP_cmp_eq_unc, 00593 TOP_cmp_ge, 00594 TOP_cmp_ge_and, 00595 TOP_cmp_ge_and_orcm, 00596 TOP_cmp_ge_andcm, 00597 TOP_cmp_ge_or, 00598 TOP_cmp_ge_or_andcm, 00599 TOP_cmp_ge_orcm, 00600 TOP_cmp_ge_unc, 00601 TOP_cmp_geu, 00602 TOP_cmp_geu_unc, 00603 TOP_cmp_gt, 00604 TOP_cmp_gt_and, 00605 TOP_cmp_gt_and_orcm, 00606 TOP_cmp_gt_andcm, 00607 TOP_cmp_gt_or, 00608 TOP_cmp_gt_or_andcm, 00609 TOP_cmp_gt_orcm, 00610 TOP_cmp_gt_unc, 00611 TOP_cmp_gtu, 00612 TOP_cmp_gtu_unc, 00613 TOP_cmp_i_eq, 00614 TOP_cmp_i_eq_and, 00615 TOP_cmp_i_eq_and_orcm, 00616 TOP_cmp_i_eq_andcm, 00617 TOP_cmp_i_eq_or, 00618 TOP_cmp_i_eq_or_andcm, 00619 TOP_cmp_i_eq_orcm, 00620 TOP_cmp_i_eq_unc, 00621 TOP_cmp_i_ge, 00622 TOP_cmp_i_ge_unc, 00623 TOP_cmp_i_geu, 00624 TOP_cmp_i_geu_unc, 00625 TOP_cmp_i_gt, 00626 TOP_cmp_i_gt_unc, 00627 TOP_cmp_i_gtu, 00628 TOP_cmp_i_gtu_unc, 00629 TOP_cmp_i_le, 00630 TOP_cmp_i_le_unc, 00631 TOP_cmp_i_leu, 00632 TOP_cmp_i_leu_unc, 00633 TOP_cmp_i_lt, 00634 TOP_cmp_i_lt_unc, 00635 TOP_cmp_i_ltu, 00636 TOP_cmp_i_ltu_unc, 00637 TOP_cmp_i_ne, 00638 TOP_cmp_i_ne_and, 00639 TOP_cmp_i_ne_and_orcm, 00640 TOP_cmp_i_ne_andcm, 00641 TOP_cmp_i_ne_or, 00642 TOP_cmp_i_ne_or_andcm, 00643 TOP_cmp_i_ne_orcm, 00644 TOP_cmp_i_ne_unc, 00645 TOP_cmp_le, 00646 TOP_cmp_le_and, 00647 TOP_cmp_le_and_orcm, 00648 TOP_cmp_le_andcm, 00649 TOP_cmp_le_or, 00650 TOP_cmp_le_or_andcm, 00651 TOP_cmp_le_orcm, 00652 TOP_cmp_le_unc, 00653 TOP_cmp_leu, 00654 TOP_cmp_leu_unc, 00655 TOP_cmp_lt, 00656 TOP_cmp_lt_and, 00657 TOP_cmp_lt_and_orcm, 00658 TOP_cmp_lt_andcm, 00659 TOP_cmp_lt_or, 00660 TOP_cmp_lt_or_andcm, 00661 TOP_cmp_lt_orcm, 00662 TOP_cmp_lt_unc, 00663 TOP_cmp_ltu, 00664 TOP_cmp_ltu_unc, 00665 TOP_cmp_ne, 00666 TOP_cmp_ne_and, 00667 TOP_cmp_ne_and_orcm, 00668 TOP_cmp_ne_andcm, 00669 TOP_cmp_ne_or, 00670 TOP_cmp_ne_or_andcm, 00671 TOP_cmp_ne_orcm, 00672 TOP_cmp_ne_unc, 00673 TOP_cmp_z1_ge_and, 00674 TOP_cmp_z1_ge_and_orcm, 00675 TOP_cmp_z1_ge_andcm, 00676 TOP_cmp_z1_ge_or, 00677 TOP_cmp_z1_ge_or_andcm, 00678 TOP_cmp_z1_ge_orcm, 00679 TOP_cmp_z1_gt_and, 00680 TOP_cmp_z1_gt_and_orcm, 00681 TOP_cmp_z1_gt_andcm, 00682 TOP_cmp_z1_gt_or, 00683 TOP_cmp_z1_gt_or_andcm, 00684 TOP_cmp_z1_gt_orcm, 00685 TOP_cmp_z1_le_and, 00686 TOP_cmp_z1_le_and_orcm, 00687 TOP_cmp_z1_le_andcm, 00688 TOP_cmp_z1_le_or, 00689 TOP_cmp_z1_le_or_andcm, 00690 TOP_cmp_z1_le_orcm, 00691 TOP_cmp_z1_lt_and, 00692 TOP_cmp_z1_lt_and_orcm, 00693 TOP_cmp_z1_lt_andcm, 00694 TOP_cmp_z1_lt_or, 00695 TOP_cmp_z1_lt_or_andcm, 00696 TOP_cmp_z1_lt_orcm, 00697 TOP_cmp_z2_ge_and, 00698 TOP_cmp_z2_ge_and_orcm, 00699 TOP_cmp_z2_ge_andcm, 00700 TOP_cmp_z2_ge_or, 00701 TOP_cmp_z2_ge_or_andcm, 00702 TOP_cmp_z2_ge_orcm, 00703 TOP_cmp_z2_gt_and, 00704 TOP_cmp_z2_gt_and_orcm, 00705 TOP_cmp_z2_gt_andcm, 00706 TOP_cmp_z2_gt_or, 00707 TOP_cmp_z2_gt_or_andcm, 00708 TOP_cmp_z2_gt_orcm, 00709 TOP_cmp_z2_le_and, 00710 TOP_cmp_z2_le_and_orcm, 00711 TOP_cmp_z2_le_andcm, 00712 TOP_cmp_z2_le_or, 00713 TOP_cmp_z2_le_or_andcm, 00714 TOP_cmp_z2_le_orcm, 00715 TOP_cmp_z2_lt_and, 00716 TOP_cmp_z2_lt_and_orcm, 00717 TOP_cmp_z2_lt_andcm, 00718 TOP_cmp_z2_lt_or, 00719 TOP_cmp_z2_lt_or_andcm, 00720 TOP_cmp_z2_lt_orcm, 00721 TOP_cmp4_eq, 00722 TOP_cmp4_eq_and, 00723 TOP_cmp4_eq_and_orcm, 00724 TOP_cmp4_eq_andcm, 00725 TOP_cmp4_eq_or, 00726 TOP_cmp4_eq_or_andcm, 00727 TOP_cmp4_eq_orcm, 00728 TOP_cmp4_eq_unc, 00729 TOP_cmp4_ge, 00730 TOP_cmp4_ge_and, 00731 TOP_cmp4_ge_and_orcm, 00732 TOP_cmp4_ge_andcm, 00733 TOP_cmp4_ge_or, 00734 TOP_cmp4_ge_or_andcm, 00735 TOP_cmp4_ge_orcm, 00736 TOP_cmp4_ge_unc, 00737 TOP_cmp4_geu, 00738 TOP_cmp4_geu_unc, 00739 TOP_cmp4_gt, 00740 TOP_cmp4_gt_and, 00741 TOP_cmp4_gt_and_orcm, 00742 TOP_cmp4_gt_andcm, 00743 TOP_cmp4_gt_or, 00744 TOP_cmp4_gt_or_andcm, 00745 TOP_cmp4_gt_orcm, 00746 TOP_cmp4_gt_unc, 00747 TOP_cmp4_gtu, 00748 TOP_cmp4_gtu_unc, 00749 TOP_cmp4_i_eq, 00750 TOP_cmp4_i_eq_and, 00751 TOP_cmp4_i_eq_and_orcm, 00752 TOP_cmp4_i_eq_andcm, 00753 TOP_cmp4_i_eq_or, 00754 TOP_cmp4_i_eq_or_andcm, 00755 TOP_cmp4_i_eq_orcm, 00756 TOP_cmp4_i_eq_unc, 00757 TOP_cmp4_i_ge, 00758 TOP_cmp4_i_ge_unc, 00759 TOP_cmp4_i_geu, 00760 TOP_cmp4_i_geu_unc, 00761 TOP_cmp4_i_gt, 00762 TOP_cmp4_i_gt_unc, 00763 TOP_cmp4_i_gtu, 00764 TOP_cmp4_i_gtu_unc, 00765 TOP_cmp4_i_le, 00766 TOP_cmp4_i_le_unc, 00767 TOP_cmp4_i_leu, 00768 TOP_cmp4_i_leu_unc, 00769 TOP_cmp4_i_lt, 00770 TOP_cmp4_i_lt_unc, 00771 TOP_cmp4_i_ltu, 00772 TOP_cmp4_i_ltu_unc, 00773 TOP_cmp4_i_ne, 00774 TOP_cmp4_i_ne_and, 00775 TOP_cmp4_i_ne_and_orcm, 00776 TOP_cmp4_i_ne_andcm, 00777 TOP_cmp4_i_ne_or, 00778 TOP_cmp4_i_ne_or_andcm, 00779 TOP_cmp4_i_ne_orcm, 00780 TOP_cmp4_i_ne_unc, 00781 TOP_cmp4_le, 00782 TOP_cmp4_le_and, 00783 TOP_cmp4_le_and_orcm, 00784 TOP_cmp4_le_andcm, 00785 TOP_cmp4_le_or, 00786 TOP_cmp4_le_or_andcm, 00787 TOP_cmp4_le_orcm, 00788 TOP_cmp4_le_unc, 00789 TOP_cmp4_leu, 00790 TOP_cmp4_leu_unc, 00791 TOP_cmp4_lt, 00792 TOP_cmp4_lt_and, 00793 TOP_cmp4_lt_and_orcm, 00794 TOP_cmp4_lt_andcm, 00795 TOP_cmp4_lt_or, 00796 TOP_cmp4_lt_or_andcm, 00797 TOP_cmp4_lt_orcm, 00798 TOP_cmp4_lt_unc, 00799 TOP_cmp4_ltu, 00800 TOP_cmp4_ltu_unc, 00801 TOP_cmp4_ne, 00802 TOP_cmp4_ne_and, 00803 TOP_cmp4_ne_and_orcm, 00804 TOP_cmp4_ne_andcm, 00805 TOP_cmp4_ne_or, 00806 TOP_cmp4_ne_or_andcm, 00807 TOP_cmp4_ne_orcm, 00808 TOP_cmp4_ne_unc, 00809 TOP_cmp4_z1_ge_and, 00810 TOP_cmp4_z1_ge_and_orcm, 00811 TOP_cmp4_z1_ge_andcm, 00812 TOP_cmp4_z1_ge_or, 00813 TOP_cmp4_z1_ge_or_andcm, 00814 TOP_cmp4_z1_ge_orcm, 00815 TOP_cmp4_z1_gt_and, 00816 TOP_cmp4_z1_gt_and_orcm, 00817 TOP_cmp4_z1_gt_andcm, 00818 TOP_cmp4_z1_gt_or, 00819 TOP_cmp4_z1_gt_or_andcm, 00820 TOP_cmp4_z1_gt_orcm, 00821 TOP_cmp4_z1_le_and, 00822 TOP_cmp4_z1_le_and_orcm, 00823 TOP_cmp4_z1_le_andcm, 00824 TOP_cmp4_z1_le_or, 00825 TOP_cmp4_z1_le_or_andcm, 00826 TOP_cmp4_z1_le_orcm, 00827 TOP_cmp4_z1_lt_and, 00828 TOP_cmp4_z1_lt_and_orcm, 00829 TOP_cmp4_z1_lt_andcm, 00830 TOP_cmp4_z1_lt_or, 00831 TOP_cmp4_z1_lt_or_andcm, 00832 TOP_cmp4_z1_lt_orcm, 00833 TOP_cmp4_z2_ge_and, 00834 TOP_cmp4_z2_ge_and_orcm, 00835 TOP_cmp4_z2_ge_andcm, 00836 TOP_cmp4_z2_ge_or, 00837 TOP_cmp4_z2_ge_or_andcm, 00838 TOP_cmp4_z2_ge_orcm, 00839 TOP_cmp4_z2_gt_and, 00840 TOP_cmp4_z2_gt_and_orcm, 00841 TOP_cmp4_z2_gt_andcm, 00842 TOP_cmp4_z2_gt_or, 00843 TOP_cmp4_z2_gt_or_andcm, 00844 TOP_cmp4_z2_gt_orcm, 00845 TOP_cmp4_z2_le_and, 00846 TOP_cmp4_z2_le_and_orcm, 00847 TOP_cmp4_z2_le_andcm, 00848 TOP_cmp4_z2_le_or, 00849 TOP_cmp4_z2_le_or_andcm, 00850 TOP_cmp4_z2_le_orcm, 00851 TOP_cmp4_z2_lt_and, 00852 TOP_cmp4_z2_lt_and_orcm, 00853 TOP_cmp4_z2_lt_andcm, 00854 TOP_cmp4_z2_lt_or, 00855 TOP_cmp4_z2_lt_or_andcm, 00856 TOP_cmp4_z2_lt_orcm, 00857 TOP_UNDEFINED); 00858 Any_Operand_Access_Time(0); 00859 Any_Result_Available_Time(1); // 0 to dependent BR 00860 Resource_Requirement(res_issue, 0); 00861 Resource_Requirement(res_int_or_mem, 0); 00862 00864 // 00865 // Instructions belonging to the ILOG functional unit class: 00866 // A-type instructions which can execute in any I or M unit. 00867 // 00869 Instruction_Group("ILOG", 00870 TOP_and, 00871 TOP_and_i, 00872 TOP_andcm, 00873 TOP_andcm_i, 00874 TOP_or, 00875 TOP_or_i, 00876 TOP_xor, 00877 TOP_xor_i, 00878 TOP_UNDEFINED); 00879 Any_Operand_Access_Time(0); 00880 Any_Result_Available_Time(1); // +1 to dependent LD/ST base reg 00881 // +2 to dependent MMMUL, MMSHF, MMALU 00882 Resource_Requirement(res_issue, 0); 00883 Resource_Requirement(res_int_or_mem, 0); 00884 00886 // 00887 // Instructions belonging to the ISHF functional unit class: 00888 // I-type instructions which can only execute in I0. 00889 // 00891 Instruction_Group("ISHF", 00892 TOP_dep, 00893 TOP_dep_i, 00894 TOP_dep_i_z, 00895 TOP_dep_z, 00896 TOP_extr, 00897 TOP_extr_u, 00898 TOP_shrp, 00899 TOP_shl_i, // pseudo of dep_z 00900 TOP_shr_i, // pseudo of extr 00901 TOP_shr_i_u, // pseudo of extr_u 00902 TOP_UNDEFINED); 00903 Any_Operand_Access_Time(0); 00904 Any_Result_Available_Time(1); 00905 Resource_Requirement(res_issue, 0); 00906 Resource_Requirement(res_int_or_mem, 0); 00907 Resource_Requirement(res_integer, 0); 00908 Resource_Requirement(res_I0, 0); // can only execute in I0 00909 00911 // 00912 // Instructions belonging to the LD functional unit class: 00913 // M-type instructions which can execute in any M unit. 00914 // 00916 Instruction_Group("LD", 00917 TOP_ld1, 00918 TOP_ld1_i, 00919 TOP_ld1_r, 00920 TOP_ld2, 00921 TOP_ld2_i, 00922 TOP_ld2_r, 00923 TOP_ld4, 00924 TOP_ld4_i, 00925 TOP_ld4_r, 00926 TOP_ld8, 00927 TOP_ld8_i, 00928 TOP_ld8_r, 00929 TOP_ld8_fill, 00930 TOP_ld8_i_fill, 00931 TOP_ld8_r_fill, 00932 TOP_UNDEFINED); 00933 Any_Operand_Access_Time(0); 00934 Any_Result_Available_Time(2); // +1 to dependent LD/ST base reg 00935 // +1 to dependent MM operation 00936 Resource_Requirement(res_issue, 0); 00937 Resource_Requirement(res_int_or_mem, 0); 00938 Resource_Requirement(res_memory, 0); 00939 Load_Access_Time(2); 00940 00942 // 00943 // Instructions belonging to the LFETCH functional unit class: 00944 // M-type instructions which can execute in any M unit. 00945 // 00947 Instruction_Group("LFETCH", 00948 TOP_lfetch, 00949 TOP_lfetch_excl, 00950 TOP_lfetch_fault, 00951 TOP_lfetch_fault_excl, 00952 TOP_lfetch_i, 00953 TOP_lfetch_i_excl, 00954 TOP_lfetch_i_fault, 00955 TOP_lfetch_i_fault_excl, 00956 TOP_lfetch_r, 00957 TOP_lfetch_r_excl, 00958 TOP_lfetch_r_fault, 00959 TOP_lfetch_r_fault_excl, 00960 TOP_UNDEFINED); 00961 Any_Operand_Access_Time(0); 00962 Resource_Requirement(res_issue, 0); 00963 Resource_Requirement(res_int_or_mem, 0); 00964 Resource_Requirement(res_memory, 0); 00965 Load_Access_Time(6); // assume L2 latency 00966 00968 // 00969 // Instructions belonging to the LONG_I functional unit class: 00970 // L-type instructions which can execute in any I unit. 00971 // 00973 Instruction_Group("LONG_I", 00974 TOP_movl, 00975 TOP_UNDEFINED); 00976 Any_Operand_Access_Time(0); 00977 Any_Result_Available_Time(1); 00978 Resource_Requirement(res_issue, 0); 00979 Resource_Requirement(res_int_or_mem, 0); 00980 Resource_Requirement(res_integer, 0); 00981 00983 // 00984 // Instructions belonging to the MMALU_A functional unit class: 00985 // A-type instructions which can execute in any I or M unit. 00986 // 00988 Instruction_Group("MMALU_A", 00989 TOP_padd1, 00990 TOP_padd2, 00991 TOP_padd1_sss, 00992 TOP_padd2_sss, 00993 TOP_padd1_uuu, 00994 TOP_padd2_uuu, 00995 TOP_padd1_uus, 00996 TOP_padd2_uus, 00997 TOP_padd4, 00998 TOP_pavg1, 00999 TOP_pavg1_raz, 01000 TOP_pavg2, 01001 TOP_pavg2_raz, 01002 TOP_pavgsub1, 01003 TOP_pavgsub2, 01004 TOP_pcmp1_eq, 01005 TOP_pcmp2_eq, 01006 TOP_pcmp4_eq, 01007 TOP_pcmp1_gt, 01008 TOP_pcmp2_gt, 01009 TOP_pcmp4_gt, 01010 TOP_pshladd2, 01011 TOP_pshradd2, 01012 TOP_psub1, 01013 TOP_psub2, 01014 TOP_psub1_sss, 01015 TOP_psub2_sss, 01016 TOP_psub1_uuu, 01017 TOP_psub2_uuu, 01018 TOP_psub1_uus, 01019 TOP_psub2_uus, 01020 TOP_psub4, 01021 TOP_UNDEFINED); 01022 Any_Operand_Access_Time(0); 01023 Any_Result_Available_Time(2); // +4 (or +10) to dependent IALU, 01024 // ILOG, ISHF, ST, LD 01025 Resource_Requirement(res_issue, 0); 01026 Resource_Requirement(res_int_or_mem, 0); 01027 01029 // 01030 // Instructions belonging to the MMALU_I functional unit class: 01031 // I-type instructions which can execute in any I unit. 01032 // 01034 Instruction_Group("MMALU_I", 01035 TOP_pmax1_u, 01036 TOP_pmax2, 01037 TOP_pmin1_u, 01038 TOP_pmin2, 01039 TOP_psad1, 01040 TOP_UNDEFINED); 01041 Any_Operand_Access_Time(0); 01042 Any_Result_Available_Time(2); // +4 (or +10) to dependent IALU, 01043 // ILOG, ISHF, ST, LD 01044 Resource_Requirement(res_issue, 0); 01045 Resource_Requirement(res_int_or_mem, 0); 01046 Resource_Requirement(res_integer, 0); 01047 01049 // 01050 // Instructions belonging to the MMMUL functional unit class: 01051 // I-type instructions which can only execute in I0. 01052 // 01054 Instruction_Group("MMMUL", 01055 TOP_pmpy2_l, 01056 TOP_pmpy2_r, 01057 TOP_pmpyshr2, 01058 TOP_pmpyshr2_u, 01059 TOP_popcnt, 01060 TOP_UNDEFINED); 01061 Any_Operand_Access_Time(0); 01062 Any_Result_Available_Time(2); // +4 (or +10) to dependent IALU, 01063 // ILOG, ISHF, ST, LD 01064 Resource_Requirement(res_issue, 0); 01065 Resource_Requirement(res_int_or_mem, 0); 01066 Resource_Requirement(res_integer, 0); 01067 Resource_Requirement(res_I0, 0); // can only execute in I0 01068 01070 // 01071 // Instructions belonging to the MMSHF functional unit class: 01072 // I-type instructions which can execute in any I unit. 01073 // 01075 Instruction_Group("MMSHF", 01076 TOP_mix1_l, 01077 TOP_mix1_r, 01078 TOP_mix2_l, 01079 TOP_mix2_r, 01080 TOP_mix4_l, 01081 TOP_mix4_r, 01082 TOP_mux1, 01083 TOP_mux2, 01084 TOP_pack2_sss, 01085 TOP_pack2_uss, 01086 TOP_pack4_sss, 01087 TOP_pshl2, 01088 TOP_pshl2_i, 01089 TOP_pshl4, 01090 TOP_pshl4_i, 01091 TOP_pshr2, 01092 TOP_pshr2_u, 01093 TOP_pshr2_i, 01094 TOP_pshr2_i_u, 01095 TOP_pshr4, 01096 TOP_pshr4_u, 01097 TOP_pshr4_i, 01098 TOP_pshr4_i_u, 01099 TOP_shl, 01100 TOP_shr, 01101 TOP_shr_u, 01102 TOP_unpack1_h, 01103 TOP_unpack1_l, 01104 TOP_unpack2_h, 01105 TOP_unpack2_l, 01106 TOP_unpack4_h, 01107 TOP_unpack4_l, 01108 TOP_UNDEFINED); 01109 Any_Operand_Access_Time(0); 01110 Any_Result_Available_Time(2); // +4 (or +10) to dependent IALU, 01111 // ILOG, ISHF, ST, LD 01112 Resource_Requirement(res_issue, 0); 01113 Resource_Requirement(res_int_or_mem, 0); 01114 Resource_Requirement(res_integer, 0); 01115 01117 // 01118 // Instructions belonging to the NOP_B functional unit class: 01119 // B-type instructions which can execute in any B unit. 01120 // 01122 Instruction_Group("NOP_B", 01123 TOP_break_b, 01124 TOP_nop_b, 01125 TOP_UNDEFINED); 01126 Resource_Requirement(res_issue, 0); 01127 Resource_Requirement(res_branch, 0); 01128 01130 // 01131 // Instructions belonging to the NOP_I functional unit class: 01132 // I-type instructions which can execute in any I unit. 01133 // 01135 Instruction_Group("NOP_I", 01136 TOP_break_i, 01137 TOP_nop_i, 01138 TOP_UNDEFINED); 01139 Resource_Requirement(res_issue, 0); 01140 Resource_Requirement(res_int_or_mem, 0); 01141 Resource_Requirement(res_integer, 0); 01142 01144 // 01145 // Instructions belonging to the NOP_M functional unit class: 01146 // M-type instructions which can execute in any M unit. 01147 // 01149 Instruction_Group("NOP_M", 01150 TOP_break_m, 01151 TOP_nop_m, 01152 TOP_UNDEFINED); 01153 Resource_Requirement(res_issue, 0); 01154 Resource_Requirement(res_int_or_mem, 0); 01155 Resource_Requirement(res_memory, 0); 01156 01158 // 01159 // Instructions belonging to the NOP_F functional unit class: 01160 // F-type instructions which can execute in any F unit. 01161 // 01163 Instruction_Group("NOP_F", 01164 TOP_break_f, 01165 TOP_nop_f, 01166 TOP_UNDEFINED); 01167 Resource_Requirement(res_issue, 0); 01168 Resource_Requirement(res_float, 0); 01169 01171 // 01172 // Instructions belonging to the NOP_X functional unit class: 01173 // X-type instructions which can execute in any I unit. 01174 // 01176 Instruction_Group("NOP_X", 01177 TOP_break_x, 01178 TOP_nop_x, 01179 TOP_UNDEFINED); 01180 Resource_Requirement(res_issue, 0); 01181 Resource_Requirement(res_int_or_mem, 0); 01182 Resource_Requirement(res_integer, 0); 01183 01185 // 01186 // Instructions belonging to the PNT functional unit class: 01187 // A-type instructions which can execute in any I or M unit. 01188 // 01190 Instruction_Group("PNT", 01191 TOP_addp4, 01192 TOP_addp4_i, 01193 TOP_shladdp4, 01194 TOP_UNDEFINED); 01195 Any_Operand_Access_Time(0); 01196 Any_Result_Available_Time(1); 01197 Resource_Requirement(res_issue, 0); 01198 Resource_Requirement(res_int_or_mem, 0); 01199 01201 // 01202 // Instructions belonging to the RSE_B functional unit class: 01203 // B-type instructions which can execute in any B unit. 01204 // 01206 Instruction_Group("RSE_B", 01207 TOP_clrrrb, 01208 TOP_clrrrb_pr, 01209 TOP_cover, 01210 TOP_UNDEFINED); 01211 Resource_Requirement(res_issue, 0); 01212 Resource_Requirement(res_branch, 0); 01213 01215 // 01216 // Instructions belonging to the RSE_M functional unit class: 01217 // M-type instructions which can only execute in M0. 01218 // 01220 Instruction_Group("RSE_M", 01221 TOP_flushrs, 01222 TOP_loadrs, 01223 TOP_UNDEFINED); 01224 Resource_Requirement(res_issue, 0); 01225 Resource_Requirement(res_int_or_mem, 0); 01226 Resource_Requirement(res_memory, 0); 01227 Resource_Requirement(res_M0, 0); // can only execute in M0 01228 01230 // 01231 // Instructions belonging to the SEM functional unit class: 01232 // M-type instructions which can only execute in M0. 01233 // These instructions are not pipelined and on Itanium (tm) 01234 // cause the pipeline to stall. 01235 // 01236 // NOTE: We don't model the pipeline stall here since that is 01237 // effectively handled by these being barriers. We do however 01238 // model that this inst is not pipelined. 01239 // 01240 // NOTE: The latency is spec-ed as the latency of L2, L3 or 01241 // memory + 5 clocks. We assume L2 latency here. 01242 // 01244 Instruction_Group("SEM", 01245 TOP_cmpxchg1, 01246 TOP_cmpxchg2, 01247 TOP_cmpxchg4, 01248 TOP_cmpxchg8, 01249 TOP_fetchadd4, 01250 TOP_fetchadd8, 01251 TOP_xchg1, 01252 TOP_xchg2, 01253 TOP_xchg4, 01254 TOP_xchg8, 01255 TOP_UNDEFINED); 01256 { 01257 int i; 01258 const int L2 = 6; 01259 const int latency = L2 + 5; 01260 Any_Operand_Access_Time(0); 01261 Any_Result_Available_Time(latency); 01262 Resource_Requirement(res_issue, 0); 01263 Resource_Requirement(res_int_or_mem, 0); 01264 Resource_Requirement(res_memory, 0); 01265 Resource_Requirement(res_M0, 0); // can only execute in M0 01266 for (i = 0; i < latency; ++i) Resource_Requirement(res_sem, i); 01267 Load_Access_Time(latency); 01268 } 01269 01271 // 01272 // Instructions belonging to the SFCVTFX functional unit class: 01273 // F-type instructions which can execute in any F unit. 01274 // 01276 Instruction_Group("SFCVTFX", 01277 TOP_fpcvt_fx, 01278 TOP_fpcvt_fx_trunc, 01279 TOP_fpcvt_fxu, 01280 TOP_fpcvt_fxu_trunc, 01281 TOP_UNDEFINED); 01282 Any_Operand_Access_Time(0); 01283 Any_Result_Available_Time(7); // +2 to dependent Fxxx 01284 Resource_Requirement(res_issue, 0); 01285 Resource_Requirement(res_float, 0); 01286 01288 // 01289 // Instructions belonging to the SFMAC functional unit class: 01290 // F-type instructions which can execute in any F unit. 01291 // 01293 Instruction_Group("SFMAC", 01294 TOP_fpma, 01295 TOP_fpms, 01296 TOP_fpnma, 01297 TOP_fpmpy, // pseudo of fpma 01298 TOP_fpnmpy, // pseudo of fpnma 01299 TOP_UNDEFINED); 01300 Any_Operand_Access_Time(0); 01301 Any_Result_Available_Time(5); // +2 to dependent SFMISC 01302 // +2 to dependent Fxxx 01303 Resource_Requirement(res_issue, 0); 01304 Resource_Requirement(res_float, 0); 01305 01307 // 01308 // Instructions belonging to the SFMERGESE functional unit class: 01309 // F-type instructions which can only execute in F0. 01310 // 01312 Instruction_Group("SFMERGESE", 01313 TOP_fpmerge_se, 01314 TOP_UNDEFINED); 01315 Any_Operand_Access_Time(0); 01316 Any_Result_Available_Time(7); // +2 to dependent Fxxx 01317 Resource_Requirement(res_issue, 0); 01318 Resource_Requirement(res_float, 0); 01319 Resource_Requirement(res_F0, 0); // can only execute in F0 01320 01322 // 01323 // Instructions belonging to the SFMISC functional unit class: 01324 // F-type instructions which can only execute in F0. 01325 // 01327 Instruction_Group("SFMISC", 01328 TOP_fpamax, 01329 TOP_fpamin, 01330 TOP_fpcmp_eq, 01331 TOP_fpcmp_ge, 01332 TOP_fpcmp_gt, 01333 TOP_fpcmp_le, 01334 TOP_fpcmp_lt, 01335 TOP_fpcmp_neq, 01336 TOP_fpcmp_nge, 01337 TOP_fpcmp_ngt, 01338 TOP_fpcmp_nle, 01339 TOP_fpcmp_nlt, 01340 TOP_fpcmp_ord, 01341 TOP_fpcmp_unord, 01342 TOP_fpmax, 01343 TOP_fpmerge_ns, 01344 TOP_fpmerge_s, 01345 TOP_fpmin, 01346 TOP_fprcpa, 01347 TOP_fprsqrta, 01348 TOP_fpneg, // pseudo of fpmerge_ns 01349 TOP_fpnegabs, // pseudo of fpmrege_ns 01350 TOP_fpabs, // pseudo of fpmerge_s 01351 TOP_UNDEFINED); 01352 Any_Operand_Access_Time(0); 01353 Any_Result_Available_Time(5); // +2 to dependent Fxxx 01354 Resource_Requirement(res_issue, 0); 01355 Resource_Requirement(res_float, 0); 01356 Resource_Requirement(res_F0, 0); // can only execute in F0 01357 01359 // 01360 // Instructions belonging to the STF functional unit class: 01361 // M-type instructions which can execute any M unit. 01362 // 01364 Instruction_Group("STF", 01365 TOP_stf8, 01366 TOP_stf8_i, 01367 TOP_stfd, 01368 TOP_stfd_i, 01369 TOP_stfe, 01370 TOP_stfe_i, 01371 TOP_stfs, 01372 TOP_stfs_i, 01373 TOP_stf_spill, 01374 TOP_stf_i_spill, 01375 TOP_UNDEFINED); 01376 Any_Operand_Access_Time(0); 01377 Resource_Requirement(res_issue, 0); 01378 Resource_Requirement(res_int_or_mem, 0); 01379 Resource_Requirement(res_memory, 0); 01380 Store_Available_Time(9); // ??? not sure 01381 01383 // 01384 // Instructions belonging to the ST functional unit class: 01385 // M-type instructions which can execute any M unit. 01386 // 01388 Instruction_Group("ST", 01389 TOP_st1, 01390 TOP_st1_i, 01391 TOP_st2, 01392 TOP_st2_i, 01393 TOP_st4, 01394 TOP_st4_i, 01395 TOP_st8, 01396 TOP_st8_i, 01397 TOP_st8_spill, 01398 TOP_st8_i_spill, 01399 TOP_UNDEFINED); 01400 Any_Operand_Access_Time(0); 01401 Resource_Requirement(res_issue, 0); 01402 Resource_Requirement(res_int_or_mem, 0); 01403 Resource_Requirement(res_memory, 0); 01404 Store_Available_Time(2); // ??? not sure 01405 01407 // 01408 // Instructions belonging to the SYST_B2 functional unit class: 01409 // B-type instructions which can execute in B0 or B2. 01410 // 01412 Instruction_Group("SYST_B2", 01413 TOP_bsw_0, 01414 TOP_bsw_1, 01415 TOP_rfi, 01416 TOP_UNDEFINED); 01417 Resource_Requirement(res_issue, 0); 01418 Resource_Requirement(res_branch, 0); 01419 Resource_Requirement(res_B0_or_B2, 0); // can only execute in B0 or B2 01420 01422 // 01423 // Instructions belonging to the SYST_B functional unit class: 01424 // B-type instructions which can execute in B0 or B1. 01425 // 01427 Instruction_Group("SYST_B", 01428 TOP_epc, 01429 TOP_UNDEFINED); 01430 Resource_Requirement(res_issue, 0); 01431 Resource_Requirement(res_branch, 0); 01432 Resource_Requirement(res_B0_or_B1, 0); // can only execute in B0 or B1 01433 01435 // 01436 // Instructions belonging to the SYST_M0 functional unit class: 01437 // M-type instructions which can only execute in M0. 01438 // 01440 Instruction_Group("SYST_M0_0", 01441 TOP_mf_a, 01442 TOP_UNDEFINED); 01443 Any_Operand_Access_Time(0); 01444 Resource_Requirement(res_issue, 0); 01445 Resource_Requirement(res_int_or_mem, 0); 01446 Resource_Requirement(res_memory, 0); 01447 Resource_Requirement(res_M0, 0); // can only execute in M0 01448 01449 Instruction_Group("SYST_M0_1", 01450 TOP_alloc, 01451 TOP_alloc_3, 01452 TOP_UNDEFINED); 01453 Any_Operand_Access_Time(0); 01454 Any_Result_Available_Time(1); 01455 Resource_Requirement(res_issue, 0); 01456 Resource_Requirement(res_int_or_mem, 0); 01457 Resource_Requirement(res_memory, 0); 01458 Resource_Requirement(res_M0, 0); // can only execute in M0 01459 01460 Instruction_Group("SYST_M0_2", 01461 TOP_fc, 01462 TOP_itc_d, 01463 TOP_itc_i, 01464 TOP_itr_d, 01465 TOP_itr_i, 01466 TOP_probe_i_r, 01467 TOP_probe_i_w, 01468 TOP_probe_r, 01469 TOP_probe_r_fault, 01470 TOP_probe_rw_fault, 01471 TOP_probe_w, 01472 TOP_probe_w_fault, 01473 TOP_ptc_e, 01474 TOP_ptc_g, 01475 TOP_ptc_ga, 01476 TOP_ptc_l, 01477 TOP_ptr_d, 01478 TOP_ptr_i, 01479 TOP_UNDEFINED); 01480 Any_Operand_Access_Time(0); 01481 Any_Result_Available_Time(1); // ??? really is 'variable' 01482 Resource_Requirement(res_issue, 0); 01483 Resource_Requirement(res_int_or_mem, 0); 01484 Resource_Requirement(res_memory, 0); 01485 Resource_Requirement(res_M0, 0); // can only execute in M0 01486 01487 Instruction_Group("SYST_M0_3", 01488 TOP_rum, 01489 TOP_sum, 01490 TOP_mov_t_psrum, 01491 TOP_UNDEFINED); 01492 Any_Operand_Access_Time(0); 01493 Any_Result_Available_Time(4); 01494 Resource_Requirement(res_issue, 0); 01495 Resource_Requirement(res_int_or_mem, 0); 01496 Resource_Requirement(res_memory, 0); 01497 Resource_Requirement(res_M0, 0); // can only execute in M0 01498 01499 Instruction_Group("SYST_M0_4", 01500 TOP_rsm, 01501 TOP_ssm, 01502 TOP_mov_t_psr, 01503 TOP_UNDEFINED); 01504 Any_Operand_Access_Time(0); 01505 Any_Result_Available_Time(5); 01506 Resource_Requirement(res_issue, 0); 01507 Resource_Requirement(res_int_or_mem, 0); 01508 Resource_Requirement(res_memory, 0); 01509 Resource_Requirement(res_M0, 0); // can only execute in M0 01510 01511 Instruction_Group("SYST_M0_5", 01512 TOP_tak, 01513 TOP_tpa, 01514 TOP_UNDEFINED); 01515 Any_Operand_Access_Time(0); 01516 Any_Result_Available_Time(6); 01517 Resource_Requirement(res_issue, 0); 01518 Resource_Requirement(res_int_or_mem, 0); 01519 Resource_Requirement(res_memory, 0); 01520 Resource_Requirement(res_M0, 0); // can only execute in M0 01521 01522 Instruction_Group("SYST_M0_6", 01523 TOP_mov_t_rr, 01524 TOP_mov_t_pkr, 01525 TOP_UNDEFINED); 01526 Any_Operand_Access_Time(0); 01527 Any_Result_Available_Time(10); 01528 Resource_Requirement(res_issue, 0); 01529 Resource_Requirement(res_int_or_mem, 0); 01530 Resource_Requirement(res_memory, 0); 01531 Resource_Requirement(res_M0, 0); // can only execute in M0 01532 01533 Instruction_Group("SYST_M0_7", 01534 TOP_thash, 01535 TOP_ttag, 01536 TOP_mov_f_psrum, 01537 TOP_mov_f_psr, 01538 TOP_mov_f_rr, 01539 TOP_mov_f_pkr, 01540 TOP_UNDEFINED); 01541 Any_Operand_Access_Time(0); 01542 Any_Result_Available_Time(13); 01543 Resource_Requirement(res_issue, 0); 01544 Resource_Requirement(res_int_or_mem, 0); 01545 Resource_Requirement(res_memory, 0); 01546 Resource_Requirement(res_M0, 0); // can only execute in M0 01547 01548 Instruction_Group("SYST_M0_8", 01549 TOP_mov_t_msr, 01550 TOP_mov_t_pmd, 01551 TOP_mov_t_pmc, 01552 TOP_mov_t_ibr, 01553 TOP_mov_t_dbr, 01554 TOP_UNDEFINED); 01555 Any_Operand_Access_Time(0); 01556 Any_Result_Available_Time(35); 01557 Resource_Requirement(res_issue, 0); 01558 Resource_Requirement(res_int_or_mem, 0); 01559 Resource_Requirement(res_memory, 0); 01560 Resource_Requirement(res_M0, 0); // can only execute in M0 01561 01562 Instruction_Group("SYST_M0_9", 01563 TOP_mov_f_msr, 01564 TOP_mov_f_pmd, 01565 TOP_mov_f_pmc, 01566 TOP_mov_f_ibr, 01567 TOP_mov_f_dbr, 01568 TOP_mov_f_cpuid, 01569 TOP_UNDEFINED); 01570 Any_Operand_Access_Time(0); 01571 Any_Result_Available_Time(38); 01572 Resource_Requirement(res_issue, 0); 01573 Resource_Requirement(res_int_or_mem, 0); 01574 Resource_Requirement(res_memory, 0); 01575 Resource_Requirement(res_M0, 0); // can only execute in M0 01576 01578 // 01579 // Instructions belonging to the SYST_M functional unit class: 01580 // M-type instructions which can execute in any M unit. 01581 // 01583 Instruction_Group("SYST_M", 01584 TOP_fwb, 01585 TOP_invala, 01586 TOP_invala_e, 01587 TOP_invala_f_e, 01588 TOP_mf, 01589 TOP_srlz_d, 01590 TOP_srlz_i, 01591 TOP_sync_i, 01592 TOP_UNDEFINED); 01593 Any_Operand_Access_Time(0); 01594 Resource_Requirement(res_issue, 0); 01595 Resource_Requirement(res_int_or_mem, 0); 01596 Resource_Requirement(res_memory, 0); 01597 01599 // 01600 // Instructions belonging to the TBIT functional unit class: 01601 // I-type instructions which can only execute in I0. 01602 // 01604 Instruction_Group("TBIT", 01605 TOP_tbit_nz, 01606 TOP_tbit_nz_and, 01607 TOP_tbit_nz_or, 01608 TOP_tbit_nz_or_andcm, 01609 TOP_tbit_nz_unc, 01610 TOP_tbit_z, 01611 TOP_tbit_z_and, 01612 TOP_tbit_z_or, 01613 TOP_tbit_z_or_andcm, 01614 TOP_tbit_z_unc, 01615 TOP_UNDEFINED); 01616 Any_Operand_Access_Time(0); 01617 Any_Result_Available_Time(1); // 0 to dependent BR 01618 Resource_Requirement(res_issue, 0); 01619 Resource_Requirement(res_int_or_mem, 0); 01620 Resource_Requirement(res_integer, 0); 01621 Resource_Requirement(res_I0, 0); // can only execute in I0 01622 01624 // 01625 // Instructions belonging to the TOAR_I functional unit class: 01626 // I-type instructions which can only execute in I0. 01627 // 01629 Instruction_Group("TOAR_I", 01630 TOP_mov_t_ar_r_i, 01631 TOP_mov_t_ar_i_i, 01632 TOP_UNDEFINED); 01633 Any_Operand_Access_Time(0); 01634 Any_Result_Available_Time(1); // depends on dest register 01635 // 0 to dependent BR (pfs only) 01636 Resource_Requirement(res_issue, 0); 01637 Resource_Requirement(res_int_or_mem, 0); 01638 Resource_Requirement(res_integer, 0); 01639 Resource_Requirement(res_I0, 0); // can only execute in I0 01640 01642 // 01643 // Instructions belonging to the TOAR_M functional unit class: 01644 // M-type instructions which can only execute in M0. 01645 // 01647 Instruction_Group("TOAR_M", 01648 TOP_mov_t_ar_r_m, 01649 TOP_mov_t_ar_i_m, 01650 TOP_UNDEFINED); 01651 Any_Operand_Access_Time(0); 01652 Any_Result_Available_Time(1); // depends on dest register 01653 // 0 to dependent BR (pfs only) 01654 Resource_Requirement(res_issue, 0); 01655 Resource_Requirement(res_int_or_mem, 0); 01656 Resource_Requirement(res_memory, 0); 01657 Resource_Requirement(res_M0, 0); // can only execute in M0 01658 01660 // 01661 // Instructions belonging to the TOBR functional unit class: 01662 // I-type instructions which can only execute in I0. 01663 // 01665 Instruction_Group("TOBR", 01666 TOP_mov_t_br, 01667 TOP_mov_t_br_i, 01668 TOP_mov_t_br_ret, 01669 TOP_UNDEFINED); 01670 Any_Operand_Access_Time(0); 01671 Any_Result_Available_Time(1); // 0 to dependent BR 01672 Resource_Requirement(res_issue, 0); 01673 Resource_Requirement(res_int_or_mem, 0); 01674 Resource_Requirement(res_integer, 0); 01675 Resource_Requirement(res_I0, 0); // can only execute in I0 01676 01678 // 01679 // Instructions belonging to the TOCR functional unit class: 01680 // M-type instructions which can only execute in M0. 01681 // 01683 Instruction_Group("TOCR", 01684 TOP_mov_t_cr, 01685 TOP_UNDEFINED); 01686 Any_Operand_Access_Time(0); 01687 Any_Result_Available_Time(1); // depends on dest register 01688 Resource_Requirement(res_issue, 0); 01689 Resource_Requirement(res_int_or_mem, 0); 01690 Resource_Requirement(res_memory, 0); 01691 Resource_Requirement(res_M0, 0); // can only execute in M0 01692 01694 // 01695 // Instructions belonging to the TOFR functional unit class: 01696 // M-type instructions which can execute in any M unit. 01697 // 01699 Instruction_Group("TOFR", 01700 TOP_setf_exp, 01701 TOP_setf_d, 01702 TOP_setf_s, 01703 TOP_setf_sig, 01704 TOP_UNDEFINED); 01705 Any_Operand_Access_Time(0); 01706 Any_Result_Available_Time(9); 01707 Resource_Requirement(res_issue, 0); 01708 Resource_Requirement(res_int_or_mem, 0); 01709 Resource_Requirement(res_memory, 0); 01710 01712 // 01713 // Instructions belonging to the TOPR functional unit class: 01714 // I-type instructions which can only execute in I0. 01715 // 01717 Instruction_Group("TOPR", 01718 TOP_mov_t_pr, 01719 TOP_mov_t_pr_i, 01720 TOP_UNDEFINED); 01721 Any_Operand_Access_Time(0); 01722 Any_Result_Available_Time(1); // 0 to dependent BR 01723 Resource_Requirement(res_issue, 0); 01724 Resource_Requirement(res_int_or_mem, 0); 01725 Resource_Requirement(res_integer, 0); 01726 Resource_Requirement(res_I0, 0); // can only execute in I0 01727 01729 // 01730 // Instructions belonging to the XMA functional unit class: 01731 // F-type instructions which can execute in any F unit. 01732 // 01734 Instruction_Group("XMA", 01735 TOP_xma_h, 01736 TOP_xma_hu, 01737 TOP_xma_l, 01738 TOP_xma_lu, // pseudo of xma_l 01739 TOP_xmpy_h, // pseudo of xma_h 01740 TOP_xmpy_hu, // pseudo of xma_hu 01741 TOP_xmpy_l, // pseudo of xma_l 01742 TOP_xmpy_lu, // pseudo of xma_l 01743 TOP_UNDEFINED); 01744 Any_Operand_Access_Time(0); 01745 Any_Result_Available_Time(7); 01746 Resource_Requirement(res_issue, 0); 01747 Resource_Requirement(res_float, 0); 01748 01750 // 01751 // Instructions belonging to the XTD functional unit class: 01752 // I-type instructions which can execute in any I unit. 01753 // 01755 Instruction_Group("XTD", 01756 TOP_czx1_l, 01757 TOP_czx1_r, 01758 TOP_czx2_l, 01759 TOP_czx2_r, 01760 TOP_sxt1, 01761 TOP_sxt2, 01762 TOP_sxt4, 01763 TOP_zxt1, 01764 TOP_zxt2, 01765 TOP_zxt4, 01766 TOP_UNDEFINED); 01767 Any_Operand_Access_Time(0); 01768 Any_Result_Available_Time(1); 01769 Resource_Requirement(res_issue, 0); 01770 Resource_Requirement(res_int_or_mem, 0); 01771 Resource_Requirement(res_integer, 0); 01772 01774 // 01775 // UNKNOWN_1 01776 // I-type instructions which can... 01777 // 01779 Instruction_Group("UNKNOWN_1", 01780 TOP_tnat_z, 01781 TOP_tnat_z_unc, 01782 TOP_tnat_z_and, 01783 TOP_tnat_nz_and, 01784 TOP_tnat_z_or, 01785 TOP_tnat_nz_or, 01786 TOP_tnat_z_or_andcm, 01787 TOP_tnat_nz_or_andcm, 01788 TOP_tnat_nz, 01789 TOP_tnat_nz_unc, 01790 TOP_UNDEFINED); 01791 Any_Operand_Access_Time(0); 01792 Any_Result_Available_Time(1); // ??? not sure 01793 Resource_Requirement(res_issue, 0); 01794 Resource_Requirement(res_int_or_mem, 0); 01795 Resource_Requirement(res_integer, 0); 01796 Resource_Requirement(res_I0, 0); // can only execute in I0 01797 01799 // 01800 // UNKNOWN_2 01801 // 01803 Instruction_Group("dummy", 01804 TOP_break, 01805 TOP_nop, 01806 TOP_mov_f_ar, 01807 TOP_mov_t_ar_r, 01808 TOP_mov_t_ar_i, 01809 TOP_chk_s, 01810 TOP_asm, 01811 TOP_intrncall, 01812 TOP_spadjust, 01813 TOP_copy_br, 01814 TOP_UNDEFINED); 01815 Any_Operand_Access_Time(0); 01816 Any_Result_Available_Time(1); 01817 Resource_Requirement(res_issue, 0); 01818 01819 Machine_Done("itanium.c"); 01820 } 01821