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 // 00037 // Generate instruction decoding information. 00040 // 00041 00042 #include "topcode.h" 00043 #include "isa_decode_gen.h" 00044 #include "targ_isa_bundle.h" 00045 00046 main() 00047 { 00048 ISA_Decode_Begin("ia64"); 00049 00050 STATE ex_unit = Create_Unit_State("ex_unit", 0, 3); 00051 STATE integer_or_alu = Create_Inst_State("integer_or_alu", 0, 40, 1); 00052 STATE memory_or_alu = Create_Inst_State("memory_or_alu", 0, 40, 1); 00053 00054 STATE alu = Create_Inst_State("alu", 0, 37, 3); 00055 STATE integer = Create_Inst_State("integer", 0, 37, 3); 00056 STATE memory = Create_Inst_State("memory", 0, 37, 3); 00057 STATE floating = Create_Inst_State("floating", 0, 37, 4); 00058 STATE branch = Create_Inst_State("branch", 0, 37, 4); 00059 STATE lx_unit = Create_Inst_State("lx_unit", 1, 37, 4); 00060 00061 Transitions(ex_unit, 00062 ISA_EXEC_I_Unit, integer_or_alu, 00063 ISA_EXEC_M_Unit, memory_or_alu, 00064 ISA_EXEC_B_Unit, branch, 00065 ISA_EXEC_F_Unit, floating, 00066 ISA_EXEC_L_Unit, lx_unit, 00067 END_TRANSITIONS); 00068 00069 Transitions(integer_or_alu, 00070 0, integer, 00071 1, alu, 00072 END_TRANSITIONS); 00073 00074 Transitions(memory_or_alu, 00075 0, memory, 00076 1, alu, 00077 END_TRANSITIONS); 00078 00079 /* ===== ALU instructions ===== */ 00080 00081 STATE alu_mm = Create_Inst_State("alu_mm", 0, 33, 3); 00082 STATE compare_c = Create_Inst_State("compare_c", 0, 12, 1); 00083 STATE compare_d = Create_Inst_State("compare_d", 0, 12, 1); 00084 STATE compare_e = Create_Inst_State("compare_e", 0, 12, 1); 00085 00086 STATE integer_alu = Create_Inst_State("integer_alu", 0, 27, 6); 00087 STATE mm_alu = Create_Inst_State("mm_alu", 0, 36, 1); 00088 STATE mm_alu_1_2 = Create_Inst_State("mm_alu_1_2", 0, 27, 7); 00089 STATE mm_alu_4 = Create_Inst_State("mm_alu_4", 0, 27, 6); 00090 00091 STATE compare_c0 = Create_Inst_State("compare_c0", 0, 33, 4); 00092 STATE compare_c1 = Create_Inst_State("compare_c1", 0, 33, 4); 00093 STATE compare_d0 = Create_Inst_State("compare_d0", 0, 33, 4); 00094 STATE compare_d1 = Create_Inst_State("compare_d1", 0, 33, 4); 00095 STATE compare_e0 = Create_Inst_State("compare_e0", 0, 33, 4); 00096 STATE compare_e1 = Create_Inst_State("compare_e1", 0, 33, 4); 00097 00098 Transitions(alu, 00099 0x8 - 8, alu_mm, 00100 0x9 - 8, Final(TOP_addl), 00101 0xc - 8, compare_c, 00102 0xd - 8, compare_d, 00103 0xe - 8, compare_e, 00104 END_TRANSITIONS); 00105 00106 Transitions(alu_mm, 00107 0, integer_alu, 00108 2, mm_alu, 00109 3, mm_alu, 00110 4, Final(TOP_adds), 00111 6, Final(TOP_addp4_i), 00112 END_TRANSITIONS); 00113 00114 Transitions(integer_alu, 00115 0, Final(TOP_add), 00116 1, Final(TOP_add_1), 00117 4, Final(TOP_sub_1), 00118 5, Final(TOP_sub), 00119 8, Final(TOP_addp4), 00120 12, Final(TOP_and), 00121 13, Final(TOP_andcm), 00122 14, Final(TOP_or), 00123 15, Final(TOP_xor), 00124 16, Final(TOP_shladd), 00125 17, Final(TOP_shladd), 00126 18, Final(TOP_shladd), 00127 19, Final(TOP_shladd), 00128 24, Final(TOP_shladdp4), 00129 25, Final(TOP_shladdp4), 00130 26, Final(TOP_shladdp4), 00131 27, Final(TOP_shladdp4), 00132 37, Final(TOP_sub_i), 00133 44, Final(TOP_and_i), 00134 45, Final(TOP_andcm_i), 00135 46, Final(TOP_or_i), 00136 47, Final(TOP_xor_i), 00137 END_TRANSITIONS); 00138 00139 Transitions(mm_alu, 00140 0, mm_alu_1_2, 00141 1, mm_alu_4, 00142 END_TRANSITIONS); 00143 00144 Transitions(mm_alu_1_2, 00145 0, Final(TOP_padd1), 00146 1, Final(TOP_padd1_sss), 00147 2, Final(TOP_padd1_uuu), 00148 3, Final(TOP_padd1_uus), 00149 4, Final(TOP_psub1), 00150 5, Final(TOP_psub1_sss), 00151 6, Final(TOP_psub1_uuu), 00152 7, Final(TOP_psub1_uus), 00153 10, Final(TOP_pavg1), 00154 11, Final(TOP_pavg1_raz), 00155 14, Final(TOP_pavgsub1), 00156 36, Final(TOP_pcmp1_eq), 00157 37, Final(TOP_pcmp1_gt), 00158 64, Final(TOP_padd2), 00159 65, Final(TOP_padd2_sss), 00160 66, Final(TOP_padd2_uuu), 00161 67, Final(TOP_padd2_uus), 00162 68, Final(TOP_psub2), 00163 69, Final(TOP_psub2_sss), 00164 70, Final(TOP_psub2_uuu), 00165 71, Final(TOP_psub2_uus), 00166 74, Final(TOP_pavg2), 00167 75, Final(TOP_pavg2_raz), 00168 78, Final(TOP_pavgsub2), 00169 80, Final(TOP_pshladd2), 00170 81, Final(TOP_pshladd2), 00171 82, Final(TOP_pshladd2), 00172 83, Final(TOP_pshladd2), 00173 88, Final(TOP_pshradd2), 00174 89, Final(TOP_pshradd2), 00175 90, Final(TOP_pshradd2), 00176 91, Final(TOP_pshradd2), 00177 100, Final(TOP_pcmp2_eq), 00178 101, Final(TOP_pcmp2_gt), 00179 END_TRANSITIONS); 00180 00181 Transitions(mm_alu_4, 00182 0, Final(TOP_padd4), 00183 4, Final(TOP_psub4), 00184 36, Final(TOP_pcmp4_eq), 00185 37, Final(TOP_pcmp4_gt), 00186 END_TRANSITIONS); 00187 00188 Transitions(compare_c, 00189 0, compare_c0, 00190 1, compare_c1, 00191 END_TRANSITIONS); 00192 00193 Transitions(compare_c0, 00194 0, Final(TOP_cmp_lt), 00195 1, Final(TOP_cmp_eq_and), 00196 2, Final(TOP_cmp4_lt), 00197 3, Final(TOP_cmp4_eq_and), 00198 4, Final(TOP_cmp_i_lt), 00199 5, Final(TOP_cmp_i_eq_and), 00200 6, Final(TOP_cmp4_i_lt), 00201 7, Final(TOP_cmp4_i_eq_and), 00202 8, Final(TOP_cmp_z1_gt_and), 00203 9, Final(TOP_cmp_z1_ge_and), 00204 10, Final(TOP_cmp4_z1_gt_and), 00205 11, Final(TOP_cmp4_z1_ge_and), 00206 12, Final(TOP_cmp_i_lt), 00207 13, Final(TOP_cmp_i_eq_and), 00208 14, Final(TOP_cmp4_i_lt), 00209 15, Final(TOP_cmp4_i_eq_and), 00210 END_TRANSITIONS); 00211 00212 Transitions(compare_c1, 00213 0, Final(TOP_cmp_lt_unc), 00214 1, Final(TOP_cmp_ne_and), 00215 2, Final(TOP_cmp4_lt_unc), 00216 3, Final(TOP_cmp4_ne_and), 00217 4, Final(TOP_cmp_i_lt_unc), 00218 5, Final(TOP_cmp_i_ne_and), 00219 6, Final(TOP_cmp4_i_lt_unc), 00220 7, Final(TOP_cmp4_i_ne_and), 00221 8, Final(TOP_cmp_z1_le_and), 00222 9, Final(TOP_cmp_z1_lt_and), 00223 10, Final(TOP_cmp4_z1_le_and), 00224 11, Final(TOP_cmp4_z1_lt_and), 00225 12, Final(TOP_cmp_i_lt_unc), 00226 13, Final(TOP_cmp_i_ne_and), 00227 14, Final(TOP_cmp4_i_lt_unc), 00228 15, Final(TOP_cmp4_i_ne_and), 00229 END_TRANSITIONS); 00230 00231 Transitions(compare_d, 00232 0, compare_d0, 00233 1, compare_d1, 00234 END_TRANSITIONS); 00235 00236 Transitions(compare_d0, 00237 0, Final(TOP_cmp_ltu), 00238 1, Final(TOP_cmp_eq_or), 00239 2, Final(TOP_cmp4_ltu), 00240 3, Final(TOP_cmp4_eq_or), 00241 4, Final(TOP_cmp_i_ltu), 00242 5, Final(TOP_cmp_i_eq_or), 00243 6, Final(TOP_cmp4_i_ltu), 00244 7, Final(TOP_cmp4_i_eq_or), 00245 8, Final(TOP_cmp_z1_gt_or), 00246 9, Final(TOP_cmp_z1_ge_or), 00247 10, Final(TOP_cmp4_z1_gt_or), 00248 11, Final(TOP_cmp4_z1_ge_or), 00249 12, Final(TOP_cmp_i_ltu), 00250 13, Final(TOP_cmp_i_eq_or), 00251 14, Final(TOP_cmp4_i_ltu), 00252 15, Final(TOP_cmp4_i_eq_or), 00253 END_TRANSITIONS); 00254 00255 Transitions(compare_d1, 00256 0, Final(TOP_cmp_ltu_unc), 00257 1, Final(TOP_cmp_ne_or), 00258 2, Final(TOP_cmp4_ltu_unc), 00259 3, Final(TOP_cmp4_ne_or), 00260 4, Final(TOP_cmp_i_ltu_unc), 00261 5, Final(TOP_cmp_i_ne_or), 00262 6, Final(TOP_cmp4_i_ltu_unc), 00263 7, Final(TOP_cmp4_i_ne_or), 00264 8, Final(TOP_cmp_z1_le_or), 00265 9, Final(TOP_cmp_z1_lt_or), 00266 10, Final(TOP_cmp4_z1_le_or), 00267 11, Final(TOP_cmp4_z1_lt_or), 00268 12, Final(TOP_cmp_i_ltu_unc), 00269 13, Final(TOP_cmp_i_ne_or), 00270 14, Final(TOP_cmp4_i_ltu_unc), 00271 15, Final(TOP_cmp4_i_ne_or), 00272 END_TRANSITIONS); 00273 00274 Transitions(compare_e, 00275 0, compare_e0, 00276 1, compare_e1, 00277 END_TRANSITIONS); 00278 00279 Transitions(compare_e0, 00280 0, Final(TOP_cmp_eq), 00281 1, Final(TOP_cmp_eq_or_andcm), 00282 2, Final(TOP_cmp4_eq), 00283 3, Final(TOP_cmp4_eq_or_andcm), 00284 4, Final(TOP_cmp_i_eq), 00285 5, Final(TOP_cmp_i_eq_or_andcm), 00286 6, Final(TOP_cmp4_i_eq), 00287 7, Final(TOP_cmp4_i_eq_or_andcm), 00288 8, Final(TOP_cmp_z1_gt_or_andcm), 00289 9, Final(TOP_cmp_z1_ge_or_andcm), 00290 10, Final(TOP_cmp4_z1_gt_or_andcm), 00291 11, Final(TOP_cmp4_z1_ge_or_andcm), 00292 12, Final(TOP_cmp_i_eq), 00293 13, Final(TOP_cmp_i_eq_or_andcm), 00294 14, Final(TOP_cmp4_i_eq), 00295 15, Final(TOP_cmp4_i_eq_or_andcm), 00296 END_TRANSITIONS); 00297 00298 Transitions(compare_e1, 00299 0, Final(TOP_cmp_eq_unc), 00300 1, Final(TOP_cmp_ne_or_andcm), 00301 2, Final(TOP_cmp4_eq_unc), 00302 3, Final(TOP_cmp4_ne_or_andcm), 00303 4, Final(TOP_cmp_i_eq_unc), 00304 5, Final(TOP_cmp_i_ne_or_andcm), 00305 6, Final(TOP_cmp4_i_eq_unc), 00306 7, Final(TOP_cmp4_i_ne_or_andcm), 00307 8, Final(TOP_cmp_z1_le_or_andcm), 00308 9, Final(TOP_cmp_z1_lt_or_andcm), 00309 10, Final(TOP_cmp4_z1_le_or_andcm), 00310 11, Final(TOP_cmp4_z1_lt_or_andcm), 00311 12, Final(TOP_cmp_i_eq_unc), 00312 13, Final(TOP_cmp_i_ne_or_andcm), 00313 14, Final(TOP_cmp4_i_eq_unc), 00314 15, Final(TOP_cmp4_i_ne_or_andcm), 00315 END_TRANSITIONS); 00316 00317 /* ===== Integer instructions ===== */ 00318 00319 STATE misc = Create_Inst_State("misc", 0, 33, 3); 00320 STATE shift_test = Create_Inst_State("shift_test", 0, 33, 3); 00321 STATE movl = Create_Inst_State("movl", 0, 20, 1); 00322 STATE mpy_shift = Create_Inst_State("mpy_shift", 0, 32, 5); 00323 00324 STATE misc_0 = Create_Inst_State("misc_0", 0, 27, 6); 00325 00326 STATE move_to_br = Create_Inst_State("move_to_br", 0, 22, 1); 00327 00328 STATE tbit_tnat_0 = Create_Inst_State("tbit_tnat_0", 0, 36, 1); 00329 STATE tbit_tnat_1 = Create_Inst_State("tbit_tnat_1", 0, 36, 1); 00330 STATE extract = Create_Inst_State("extract", 0, 13, 1); 00331 STATE deposit = Create_Inst_State("deposit", 0, 26, 1); 00332 00333 STATE tbit_tnat_00 = Create_Inst_State("tbit_tnat_00", 0, 12, 2); 00334 STATE tbit_tnat_01 = Create_Inst_State("tbit_tnat_01", 0, 12, 2); 00335 00336 STATE tbit_tnat_10 = Create_Inst_State("tbit_tnat_10", 0, 12, 2); 00337 STATE tbit_tnat_11 = Create_Inst_State("tbit_tnat_11", 0, 12, 2); 00338 00339 STATE mpy_shift_2 = Create_Inst_State("mpy_shift_2", 0, 28, 4); 00340 STATE mpy_shift_6 = Create_Inst_State("mpy_shift_6", 0, 28, 4); 00341 STATE mpy_shift_8 = Create_Inst_State("mpy_shift_8", 0, 28, 4); 00342 STATE mpy_shift_10 = Create_Inst_State("mpy_shift_10", 0, 28, 4); 00343 STATE mpy_shift_12 = Create_Inst_State("mpy_shift_12", 0, 28, 4); 00344 STATE mpy_shift_14 = Create_Inst_State("mpy_shift_14", 0, 28, 4); 00345 STATE mpy_shift_16 = Create_Inst_State("mpy_shift_16", 0, 28, 4); 00346 STATE mpy_shift_18 = Create_Inst_State("mpy_shift_18", 0, 28, 4); 00347 STATE mpy_shift_20 = Create_Inst_State("mpy_shift_20", 0, 28, 4); 00348 STATE mpy_shift_24 = Create_Inst_State("mpy_shift_24", 0, 28, 4); 00349 STATE mpy_shift_28 = Create_Inst_State("mpy_shift_28", 0, 28, 4); 00350 00351 Transitions(integer, 00352 0, misc, 00353 4, Final(TOP_dep), 00354 5, shift_test, 00355 6, movl, 00356 7, mpy_shift, 00357 END_TRANSITIONS); 00358 00359 Transitions(misc, 00360 0, misc_0, 00361 1, Final(TOP_chk_s_i), 00362 2, Final(TOP_mov_t_pr_i), 00363 3, Final(TOP_mov_t_pr), 00364 7, move_to_br, 00365 END_TRANSITIONS); 00366 00367 Transitions(misc_0, 00368 0, Final(TOP_break_i), 00369 1, Final(TOP_nop_i), 00370 10, Final(TOP_mov_t_ar_i_i), 00371 16, Final(TOP_zxt1), 00372 17, Final(TOP_zxt2), 00373 18, Final(TOP_zxt4), 00374 20, Final(TOP_sxt1), 00375 21, Final(TOP_sxt2), 00376 22, Final(TOP_sxt4), 00377 24, Final(TOP_czx1_l), 00378 25, Final(TOP_czx2_l), 00379 28, Final(TOP_czx1_r), 00380 29, Final(TOP_czx2_r), 00381 42, Final(TOP_mov_t_ar_r_i), 00382 48, Final(TOP_mov_f_ip), 00383 49, Final(TOP_mov_f_br), 00384 50, Final(TOP_mov_f_ar_i), 00385 51, Final(TOP_mov_f_pr), 00386 END_TRANSITIONS); 00387 00388 Transitions(move_to_br, 00389 0, Final(TOP_mov_t_br_i), 00390 1, Final(TOP_mov_t_br_ret), 00391 END_TRANSITIONS); 00392 00393 Transitions(shift_test, 00394 0, tbit_tnat_0, 00395 1, tbit_tnat_1, 00396 2, extract, 00397 3, deposit, 00398 6, Final(TOP_shrp), 00399 7, Final(TOP_dep_i), 00400 END_TRANSITIONS); 00401 00402 Transitions(tbit_tnat_0, 00403 0, tbit_tnat_00, 00404 1, tbit_tnat_01, 00405 END_TRANSITIONS); 00406 00407 Transitions(tbit_tnat_00, 00408 0, Final(TOP_tbit_z), 00409 1, Final(TOP_tbit_z_unc), 00410 2, Final(TOP_tnat_z), 00411 3, Final(TOP_tnat_z_unc), 00412 END_TRANSITIONS); 00413 00414 Transitions(tbit_tnat_01, 00415 0, Final(TOP_tbit_z_and), 00416 1, Final(TOP_tbit_nz_and), 00417 2, Final(TOP_tnat_z_and), 00418 3, Final(TOP_tnat_nz_and), 00419 END_TRANSITIONS); 00420 00421 Transitions(tbit_tnat_1, 00422 0, tbit_tnat_10, 00423 1, tbit_tnat_11, 00424 END_TRANSITIONS); 00425 00426 Transitions(tbit_tnat_10, 00427 0, Final(TOP_tbit_z_or), 00428 1, Final(TOP_tbit_nz_or), 00429 2, Final(TOP_tnat_z_or), 00430 3, Final(TOP_tnat_nz_or), 00431 END_TRANSITIONS); 00432 00433 Transitions(tbit_tnat_11, 00434 0, Final(TOP_tbit_z_or_andcm), 00435 1, Final(TOP_tbit_nz_or_andcm), 00436 2, Final(TOP_tnat_z_or_andcm), 00437 3, Final(TOP_tnat_nz_or_andcm), 00438 END_TRANSITIONS); 00439 00440 Transitions(extract, 00441 0, Final(TOP_extr_u), 00442 1, Final(TOP_extr), 00443 END_TRANSITIONS); 00444 00445 Transitions(deposit, 00446 0, Final(TOP_dep_z), 00447 1, Final(TOP_dep_i_z), 00448 END_TRANSITIONS); 00449 00450 Transitions(movl, 00451 0, Final(TOP_movl), 00452 END_TRANSITIONS); 00453 00454 Transitions(mpy_shift, 00455 2, mpy_shift_2, 00456 6, mpy_shift_6, 00457 8, mpy_shift_8, 00458 10, mpy_shift_10, 00459 12, mpy_shift_12, 00460 14, mpy_shift_14, 00461 16, mpy_shift_16, 00462 18, mpy_shift_18, 00463 20, mpy_shift_20, 00464 24, mpy_shift_24, 00465 28, mpy_shift_28, 00466 END_TRANSITIONS); 00467 00468 Transitions(mpy_shift_2, 00469 0, Final(TOP_pshr2_u), 00470 1, Final(TOP_pmpyshr2_u), 00471 2, Final(TOP_pshr2), 00472 3, Final(TOP_pmpyshr2), 00473 4, Final(TOP_pshl2), 00474 5, Final(TOP_pmpyshr2_u), 00475 7, Final(TOP_pmpyshr2), 00476 9, Final(TOP_pmpyshr2_u), 00477 11, Final(TOP_pmpyshr2), 00478 13, Final(TOP_pmpyshr2_u), 00479 15, Final(TOP_pmpyshr2), 00480 END_TRANSITIONS); 00481 00482 Transitions(mpy_shift_6, 00483 1, Final(TOP_pshr2_i_u), 00484 3, Final(TOP_pshr2_i), 00485 9, Final(TOP_popcnt), 00486 END_TRANSITIONS); 00487 00488 Transitions(mpy_shift_8, 00489 1, Final(TOP_pmin1_u), 00490 4, Final(TOP_unpack1_h), 00491 5, Final(TOP_pmax1_u), 00492 6, Final(TOP_unpack1_l), 00493 8, Final(TOP_mix1_r), 00494 10, Final(TOP_mix1_l), 00495 11, Final(TOP_psad1), 00496 END_TRANSITIONS); 00497 00498 Transitions(mpy_shift_10, 00499 0, Final(TOP_pack2_uss), 00500 2, Final(TOP_pack2_sss), 00501 3, Final(TOP_pmin2), 00502 4, Final(TOP_unpack2_h), 00503 6, Final(TOP_unpack2_l), 00504 7, Final(TOP_pmax2), 00505 8, Final(TOP_mix2_r), 00506 10, Final(TOP_mix2_l), 00507 13, Final(TOP_pmpy2_r), 00508 15, Final(TOP_pmpy2_l), 00509 END_TRANSITIONS); 00510 00511 Transitions(mpy_shift_12, 00512 10, Final(TOP_mux1), 00513 END_TRANSITIONS); 00514 00515 Transitions(mpy_shift_14, 00516 5, Final(TOP_pshl2_i), 00517 10, Final(TOP_mux2), 00518 END_TRANSITIONS); 00519 00520 Transitions(mpy_shift_16, 00521 0, Final(TOP_pshr4_u), 00522 2, Final(TOP_pshr4), 00523 4, Final(TOP_pshl4), 00524 END_TRANSITIONS); 00525 00526 Transitions(mpy_shift_18, 00527 0, Final(TOP_shr_u), 00528 2, Final(TOP_shr), 00529 4, Final(TOP_shl), 00530 END_TRANSITIONS); 00531 00532 Transitions(mpy_shift_20, 00533 1, Final(TOP_pshr4_i_u), 00534 3, Final(TOP_pshr4_i), 00535 END_TRANSITIONS); 00536 00537 Transitions(mpy_shift_24, 00538 2, Final(TOP_pack4_sss), 00539 4, Final(TOP_unpack4_h), 00540 6, Final(TOP_unpack4_l), 00541 8, Final(TOP_mix4_r), 00542 10, Final(TOP_mix4_l), 00543 END_TRANSITIONS); 00544 00545 Transitions(mpy_shift_28, 00546 5, Final(TOP_pshl4_i), 00547 END_TRANSITIONS); 00548 00549 /* ===== Memory instructions ===== */ 00550 00551 STATE sys_mem_0 = Create_Inst_State("sys_mem_0", 0, 33, 3); 00552 STATE sys_mem_1 = Create_Inst_State("sys_mem_1", 0, 33, 3); 00553 STATE int_load_store = Create_Inst_State("int_load_store", 0, 36, 1); 00554 STATE int_load_store_imm = Create_Inst_State("int_load_store_imm", 0, 30, 6); 00555 STATE fp_load_store = Create_Inst_State("fp_load_store", 0, 36, 1); 00556 STATE fp_load_store_imm = Create_Inst_State("fp_load_store_imm", 0, 30, 6); 00557 00558 STATE sys_mem_00 = Create_Inst_State("sys_mem_00", 0, 27, 6); 00559 STATE sys_mem_10 = Create_Inst_State("sys_mem_10", 0, 27, 6); 00560 00561 STATE int_load_store_0 = Create_Inst_State("int_load_store_0", 0, 27, 1); 00562 STATE int_load_store_1 = Create_Inst_State("int_load_store_1", 0, 27, 1); 00563 00564 STATE int_load_store_nobase = Create_Inst_State("int_load_store_nobase", 0, 30, 6); 00565 STATE sem_get_fr = Create_Inst_State("sem_get_fr", 0, 30, 6); 00566 STATE int_load_store_reg = Create_Inst_State("int_load_store_reg", 0, 30, 6); 00567 00568 STATE fp_load_store_0 = Create_Inst_State("fp_load_store_0", 0, 27, 1); 00569 STATE fp_load_store_1 = Create_Inst_State("fp_load_store_1", 0, 27, 1); 00570 00571 STATE fp_load_store_nobase = Create_Inst_State("fp_load_store_nobase", 0, 30, 6); 00572 STATE fp_load_pair_nobase = Create_Inst_State("fp_load_pair_nobase", 0, 30, 6); 00573 STATE fp_load_reg = Create_Inst_State("fp_load_reg", 0, 30, 6); 00574 STATE fp_load_pair_imm = Create_Inst_State("fp_load_pair_imm", 0, 30, 6); 00575 00576 Transitions(memory, 00577 0, sys_mem_0, 00578 1, sys_mem_1, 00579 4, int_load_store, 00580 5, int_load_store_imm, 00581 6, fp_load_store, 00582 7, fp_load_store_imm, 00583 END_TRANSITIONS); 00584 00585 Transitions(sys_mem_0, 00586 0, sys_mem_00, 00587 4, Final(TOP_chk_a), 00588 5, Final(TOP_chk_a), 00589 6, Final(TOP_chk_f_a), 00590 7, Final(TOP_chk_f_a), 00591 END_TRANSITIONS); 00592 00593 Transitions(sys_mem_00, 00594 0, Final(TOP_break_m), 00595 1, Final(TOP_nop_m), 00596 4, Final(TOP_sum), 00597 5, Final(TOP_rum), 00598 6, Final(TOP_ssm), 00599 7, Final(TOP_rsm), 00600 10, Final(TOP_loadrs), 00601 12, Final(TOP_flushrs), 00602 16, Final(TOP_invala), 00603 18, Final(TOP_invala_e), 00604 19, Final(TOP_invala_f_e), 00605 20, Final(TOP_sum), 00606 21, Final(TOP_rum), 00607 22, Final(TOP_ssm), 00608 23, Final(TOP_rsm), 00609 32, Final(TOP_fwb), 00610 34, Final(TOP_mf), 00611 35, Final(TOP_mf_a), 00612 36, Final(TOP_sum), 00613 37, Final(TOP_rum), 00614 38, Final(TOP_ssm), 00615 39, Final(TOP_rsm), 00616 40, Final(TOP_mov_t_ar_i_m), 00617 48, Final(TOP_srlz_d), 00618 49, Final(TOP_srlz_i), 00619 51, Final(TOP_sync_i), 00620 52, Final(TOP_sum), 00621 53, Final(TOP_rum), 00622 54, Final(TOP_ssm), 00623 55, Final(TOP_rsm), 00624 END_TRANSITIONS); 00625 00626 Transitions(sys_mem_1, 00627 0, sys_mem_10, 00628 1, Final(TOP_chk_s_m), 00629 3, Final(TOP_chk_f_s), 00630 6, Final(TOP_alloc_3), 00631 END_TRANSITIONS); 00632 00633 Transitions(sys_mem_10, 00634 0, Final(TOP_mov_t_rr), 00635 1, Final(TOP_mov_t_dbr), 00636 2, Final(TOP_mov_t_ibr), 00637 3, Final(TOP_mov_t_pkr), 00638 4, Final(TOP_mov_t_pmc), 00639 5, Final(TOP_mov_t_pmd), 00640 6, Final(TOP_mov_t_msr), 00641 9, Final(TOP_ptc_l), 00642 10, Final(TOP_ptc_g), 00643 11, Final(TOP_ptc_ga), 00644 12, Final(TOP_ptr_d), 00645 13, Final(TOP_ptr_i), 00646 14, Final(TOP_itr_d), 00647 15, Final(TOP_itr_i), 00648 16, Final(TOP_mov_f_rr), 00649 17, Final(TOP_mov_f_dbr), 00650 18, Final(TOP_mov_f_ibr), 00651 19, Final(TOP_mov_f_pkr), 00652 20, Final(TOP_mov_f_pmc), 00653 21, Final(TOP_mov_f_pmd), 00654 22, Final(TOP_mov_f_msr), 00655 23, Final(TOP_mov_f_cpuid), 00656 24, Final(TOP_probe_i_r), 00657 25, Final(TOP_probe_i_w), 00658 26, Final(TOP_thash), 00659 27, Final(TOP_ttag), 00660 30, Final(TOP_tpa), 00661 31, Final(TOP_tak), 00662 33, Final(TOP_mov_f_psrum), 00663 34, Final(TOP_mov_f_ar_m), 00664 36, Final(TOP_mov_f_cr), 00665 37, Final(TOP_mov_f_psr), 00666 41, Final(TOP_mov_t_psrum), 00667 42, Final(TOP_mov_t_ar_r_m), 00668 44, Final(TOP_mov_t_cr), 00669 45, Final(TOP_mov_t_psr), 00670 46, Final(TOP_itc_d), 00671 47, Final(TOP_itc_i), 00672 48, Final(TOP_fc), 00673 49, Final(TOP_probe_rw_fault), 00674 50, Final(TOP_probe_r_fault), 00675 51, Final(TOP_probe_w_fault), 00676 52, Final(TOP_ptc_e), 00677 56, Final(TOP_probe_r), 00678 57, Final(TOP_probe_w), 00679 END_TRANSITIONS); 00680 00681 Transitions(int_load_store, 00682 0, int_load_store_0, 00683 1, int_load_store_1, 00684 END_TRANSITIONS); 00685 00686 Transitions(int_load_store_0, 00687 0, int_load_store_nobase, 00688 1, sem_get_fr, 00689 END_TRANSITIONS); 00690 00691 Transitions(int_load_store_nobase, 00692 0, Final(TOP_ld1), 00693 1, Final(TOP_ld2), 00694 2, Final(TOP_ld4), 00695 3, Final(TOP_ld8), 00696 4, Final(TOP_ld1), 00697 5, Final(TOP_ld2), 00698 6, Final(TOP_ld4), 00699 7, Final(TOP_ld8), 00700 8, Final(TOP_ld1), 00701 9, Final(TOP_ld2), 00702 10, Final(TOP_ld4), 00703 11, Final(TOP_ld8), 00704 12, Final(TOP_ld1), 00705 13, Final(TOP_ld2), 00706 14, Final(TOP_ld4), 00707 15, Final(TOP_ld8), 00708 16, Final(TOP_ld1), 00709 17, Final(TOP_ld2), 00710 18, Final(TOP_ld4), 00711 19, Final(TOP_ld8), 00712 20, Final(TOP_ld1), 00713 21, Final(TOP_ld2), 00714 22, Final(TOP_ld4), 00715 23, Final(TOP_ld8), 00716 27, Final(TOP_ld8_fill), 00717 32, Final(TOP_ld1), 00718 33, Final(TOP_ld2), 00719 34, Final(TOP_ld4), 00720 35, Final(TOP_ld8), 00721 36, Final(TOP_ld1), 00722 37, Final(TOP_ld2), 00723 38, Final(TOP_ld4), 00724 39, Final(TOP_ld8), 00725 40, Final(TOP_ld1), 00726 41, Final(TOP_ld2), 00727 42, Final(TOP_ld4), 00728 43, Final(TOP_ld8), 00729 48, Final(TOP_st1), 00730 49, Final(TOP_st2), 00731 50, Final(TOP_st4), 00732 51, Final(TOP_st8), 00733 52, Final(TOP_st1), 00734 53, Final(TOP_st2), 00735 54, Final(TOP_st4), 00736 55, Final(TOP_st8), 00737 59, Final(TOP_st8_spill), 00738 END_TRANSITIONS); 00739 00740 Transitions(sem_get_fr, 00741 0, Final(TOP_cmpxchg1), 00742 1, Final(TOP_cmpxchg2), 00743 2, Final(TOP_cmpxchg4), 00744 3, Final(TOP_cmpxchg8), 00745 4, Final(TOP_cmpxchg1), 00746 5, Final(TOP_cmpxchg2), 00747 6, Final(TOP_cmpxchg4), 00748 7, Final(TOP_cmpxchg8), 00749 8, Final(TOP_xchg1), 00750 9, Final(TOP_xchg2), 00751 10, Final(TOP_xchg4), 00752 11, Final(TOP_xchg8), 00753 18, Final(TOP_fetchadd4), 00754 19, Final(TOP_fetchadd8), 00755 22, Final(TOP_fetchadd4), 00756 23, Final(TOP_fetchadd8), 00757 28, Final(TOP_getf_sig), 00758 29, Final(TOP_getf_exp), 00759 30, Final(TOP_getf_s), 00760 31, Final(TOP_getf_d), 00761 END_TRANSITIONS); 00762 00763 Transitions(int_load_store_1, 00764 0, int_load_store_reg, 00765 END_TRANSITIONS); 00766 00767 Transitions(int_load_store_reg, 00768 0, Final(TOP_ld1_r), 00769 1, Final(TOP_ld2_r), 00770 2, Final(TOP_ld4_r), 00771 3, Final(TOP_ld8_r), 00772 4, Final(TOP_ld1_r), 00773 5, Final(TOP_ld2_r), 00774 6, Final(TOP_ld4_r), 00775 7, Final(TOP_ld8_r), 00776 8, Final(TOP_ld1_r), 00777 9, Final(TOP_ld2_r), 00778 10, Final(TOP_ld4_r), 00779 11, Final(TOP_ld8_r), 00780 12, Final(TOP_ld1_r), 00781 13, Final(TOP_ld2_r), 00782 14, Final(TOP_ld4_r), 00783 15, Final(TOP_ld8_r), 00784 16, Final(TOP_ld1_r), 00785 17, Final(TOP_ld2_r), 00786 18, Final(TOP_ld4_r), 00787 19, Final(TOP_ld8_r), 00788 20, Final(TOP_ld1_r), 00789 21, Final(TOP_ld2_r), 00790 22, Final(TOP_ld4_r), 00791 23, Final(TOP_ld8_r), 00792 27, Final(TOP_ld8_r_fill), 00793 32, Final(TOP_ld1_r), 00794 33, Final(TOP_ld2_r), 00795 34, Final(TOP_ld4_r), 00796 35, Final(TOP_ld8_r), 00797 36, Final(TOP_ld1_r), 00798 37, Final(TOP_ld2_r), 00799 38, Final(TOP_ld4_r), 00800 39, Final(TOP_ld8_r), 00801 40, Final(TOP_ld1_r), 00802 41, Final(TOP_ld2_r), 00803 42, Final(TOP_ld4_r), 00804 43, Final(TOP_ld8_r), 00805 END_TRANSITIONS); 00806 00807 Transitions(int_load_store_imm, 00808 0, Final(TOP_ld1_i), 00809 1, Final(TOP_ld2_i), 00810 2, Final(TOP_ld4_i), 00811 3, Final(TOP_ld8_i), 00812 4, Final(TOP_ld1_i), 00813 5, Final(TOP_ld2_i), 00814 6, Final(TOP_ld4_i), 00815 7, Final(TOP_ld8_i), 00816 8, Final(TOP_ld1_i), 00817 9, Final(TOP_ld2_i), 00818 10, Final(TOP_ld4_i), 00819 11, Final(TOP_ld8_i), 00820 12, Final(TOP_ld1_i), 00821 13, Final(TOP_ld2_i), 00822 14, Final(TOP_ld4_i), 00823 15, Final(TOP_ld8_i), 00824 16, Final(TOP_ld1_i), 00825 17, Final(TOP_ld2_i), 00826 18, Final(TOP_ld4_i), 00827 19, Final(TOP_ld8_i), 00828 20, Final(TOP_ld1_i), 00829 21, Final(TOP_ld2_i), 00830 22, Final(TOP_ld4_i), 00831 23, Final(TOP_ld8_i), 00832 27, Final(TOP_ld8_i_fill), 00833 32, Final(TOP_ld1_i), 00834 33, Final(TOP_ld2_i), 00835 34, Final(TOP_ld4_i), 00836 35, Final(TOP_ld8_i), 00837 36, Final(TOP_ld1_i), 00838 37, Final(TOP_ld2_i), 00839 38, Final(TOP_ld4_i), 00840 39, Final(TOP_ld8_i), 00841 40, Final(TOP_ld1_i), 00842 41, Final(TOP_ld2_i), 00843 42, Final(TOP_ld4_i), 00844 43, Final(TOP_ld8_i), 00845 48, Final(TOP_st1_i), 00846 49, Final(TOP_st2_i), 00847 50, Final(TOP_st4_i), 00848 51, Final(TOP_st8_i), 00849 52, Final(TOP_st1_i), 00850 53, Final(TOP_st2_i), 00851 54, Final(TOP_st4_i), 00852 55, Final(TOP_st8_i), 00853 59, Final(TOP_st8_i_spill), 00854 END_TRANSITIONS); 00855 00856 Transitions(fp_load_store, 00857 0, fp_load_store_0, 00858 1, fp_load_store_1, 00859 END_TRANSITIONS); 00860 00861 Transitions(fp_load_store_0, 00862 0, fp_load_store_nobase, 00863 1, fp_load_pair_nobase, 00864 END_TRANSITIONS); 00865 00866 Transitions(fp_load_store_nobase, 00867 0, Final(TOP_ldfe), 00868 1, Final(TOP_ldf8), 00869 2, Final(TOP_ldfs), 00870 3, Final(TOP_ldfd), 00871 4, Final(TOP_ldfe), 00872 5, Final(TOP_ldf8), 00873 6, Final(TOP_ldfs), 00874 7, Final(TOP_ldfd), 00875 8, Final(TOP_ldfe), 00876 9, Final(TOP_ldf8), 00877 10, Final(TOP_ldfs), 00878 11, Final(TOP_ldfd), 00879 12, Final(TOP_ldfe), 00880 13, Final(TOP_ldf8), 00881 14, Final(TOP_ldfs), 00882 15, Final(TOP_ldfd), 00883 27, Final(TOP_ldf_fill), 00884 32, Final(TOP_ldfe), 00885 33, Final(TOP_ldf8), 00886 34, Final(TOP_ldfs), 00887 35, Final(TOP_ldfd), 00888 36, Final(TOP_ldfe), 00889 37, Final(TOP_ldf8), 00890 38, Final(TOP_ldfs), 00891 39, Final(TOP_ldfd), 00892 44, Final(TOP_lfetch), 00893 45, Final(TOP_lfetch_excl), 00894 46, Final(TOP_lfetch_fault), 00895 47, Final(TOP_lfetch_fault_excl), 00896 48, Final(TOP_stfe), 00897 49, Final(TOP_stf8), 00898 50, Final(TOP_stfs), 00899 51, Final(TOP_stfd), 00900 59, Final(TOP_stf_spill), 00901 END_TRANSITIONS); 00902 00903 Transitions(fp_load_reg, 00904 0, Final(TOP_ldfe_r), 00905 1, Final(TOP_ldf8_r), 00906 2, Final(TOP_ldfs_r), 00907 3, Final(TOP_ldfd_r), 00908 4, Final(TOP_ldfe_r), 00909 5, Final(TOP_ldf8_r), 00910 6, Final(TOP_ldfs_r), 00911 7, Final(TOP_ldfd_r), 00912 8, Final(TOP_ldfe_r), 00913 9, Final(TOP_ldf8_r), 00914 10, Final(TOP_ldfs_r), 00915 11, Final(TOP_ldfd_r), 00916 12, Final(TOP_ldfe_r), 00917 13, Final(TOP_ldf8_r), 00918 14, Final(TOP_ldfs_r), 00919 15, Final(TOP_ldfd_r), 00920 27, Final(TOP_ldf_r_fill), 00921 32, Final(TOP_ldfe_r), 00922 33, Final(TOP_ldf8_r), 00923 34, Final(TOP_ldfs_r), 00924 35, Final(TOP_ldfd_r), 00925 36, Final(TOP_ldfe_r), 00926 37, Final(TOP_ldf8_r), 00927 38, Final(TOP_ldfs_r), 00928 39, Final(TOP_ldfd_r), 00929 44, Final(TOP_lfetch_r), 00930 45, Final(TOP_lfetch_r_excl), 00931 46, Final(TOP_lfetch_r_fault), 00932 47, Final(TOP_lfetch_r_fault_excl), 00933 END_TRANSITIONS); 00934 00935 Transitions(fp_load_store_1, 00936 0, fp_load_reg, 00937 1, fp_load_pair_imm, 00938 END_TRANSITIONS); 00939 00940 Transitions(fp_load_pair_nobase, 00941 1, Final(TOP_ldfp8), 00942 2, Final(TOP_ldfps), 00943 3, Final(TOP_ldfpd), 00944 5, Final(TOP_ldfp8), 00945 6, Final(TOP_ldfps), 00946 7, Final(TOP_ldfpd), 00947 9, Final(TOP_ldfp8), 00948 10, Final(TOP_ldfps), 00949 11, Final(TOP_ldfpd), 00950 13, Final(TOP_ldfp8), 00951 14, Final(TOP_ldfps), 00952 15, Final(TOP_ldfpd), 00953 28, Final(TOP_setf_sig), 00954 29, Final(TOP_setf_exp), 00955 30, Final(TOP_setf_s), 00956 31, Final(TOP_setf_d), 00957 33, Final(TOP_ldfp8), 00958 34, Final(TOP_ldfps), 00959 35, Final(TOP_ldfpd), 00960 37, Final(TOP_ldfp8), 00961 38, Final(TOP_ldfps), 00962 39, Final(TOP_ldfpd), 00963 END_TRANSITIONS); 00964 00965 Transitions(fp_load_pair_imm, 00966 1, Final(TOP_ldfp8_i), 00967 2, Final(TOP_ldfps_i), 00968 3, Final(TOP_ldfpd_i), 00969 5, Final(TOP_ldfp8_i), 00970 6, Final(TOP_ldfps_i), 00971 7, Final(TOP_ldfpd_i), 00972 9, Final(TOP_ldfp8_i), 00973 10, Final(TOP_ldfps_i), 00974 11, Final(TOP_ldfpd_i), 00975 13, Final(TOP_ldfp8_i), 00976 14, Final(TOP_ldfps_i), 00977 15, Final(TOP_ldfpd_i), 00978 33, Final(TOP_ldfp8_i), 00979 34, Final(TOP_ldfps_i), 00980 35, Final(TOP_ldfpd_i), 00981 37, Final(TOP_ldfp8_i), 00982 38, Final(TOP_ldfps_i), 00983 39, Final(TOP_ldfpd_i), 00984 END_TRANSITIONS); 00985 00986 Transitions(fp_load_store_imm, 00987 0, Final(TOP_ldfe_i), 00988 1, Final(TOP_ldf8_i), 00989 2, Final(TOP_ldfs_i), 00990 3, Final(TOP_ldfd_i), 00991 4, Final(TOP_ldfe_i), 00992 5, Final(TOP_ldf8_i), 00993 6, Final(TOP_ldfs_i), 00994 7, Final(TOP_ldfd_i), 00995 8, Final(TOP_ldfe_i), 00996 9, Final(TOP_ldf8_i), 00997 10, Final(TOP_ldfs_i), 00998 11, Final(TOP_ldfd_i), 00999 12, Final(TOP_ldfe_i), 01000 13, Final(TOP_ldf8_i), 01001 14, Final(TOP_ldfs_i), 01002 15, Final(TOP_ldfd_i), 01003 27, Final(TOP_ldf_i_fill), 01004 32, Final(TOP_ldfe_i), 01005 33, Final(TOP_ldf8_i), 01006 34, Final(TOP_ldfs_i), 01007 35, Final(TOP_ldfd_i), 01008 36, Final(TOP_ldfe_i), 01009 37, Final(TOP_ldf8_i), 01010 38, Final(TOP_ldfs_i), 01011 39, Final(TOP_ldfd_i), 01012 44, Final(TOP_lfetch_i), 01013 45, Final(TOP_lfetch_i_excl), 01014 46, Final(TOP_lfetch_i_fault), 01015 47, Final(TOP_lfetch_i_fault_excl), 01016 48, Final(TOP_stfe_i), 01017 49, Final(TOP_stf8_i), 01018 50, Final(TOP_stfs_i), 01019 51, Final(TOP_stfd_i), 01020 59, Final(TOP_stf_i_spill), 01021 END_TRANSITIONS); 01022 01023 /* ===== Float instructions ===== */ 01024 01025 STATE fp_misc_0 = Create_Inst_State("fp_misc_0", 0, 33, 1); 01026 STATE fp_misc_1 = Create_Inst_State("fp_misc_1", 0, 33, 1); 01027 STATE fp_compare = Create_Inst_State("fp_compare", 0, 33, 1); 01028 STATE fp_class = Create_Inst_State("fp_class", 0, 12, 1); 01029 STATE fma_8 = Create_Inst_State("fma_8", 0, 36, 1); 01030 STATE fma_9 = Create_Inst_State("fma_9", 0, 36, 1); 01031 STATE fma_a = Create_Inst_State("fma_a", 0, 36, 1); 01032 STATE fma_b = Create_Inst_State("fma_b", 0, 36, 1); 01033 STATE fma_c = Create_Inst_State("fma_c", 0, 36, 1); 01034 STATE fma_d = Create_Inst_State("fma_d", 0, 36, 1); 01035 STATE fselect = Create_Inst_State("fselect", 0, 34, 3); 01036 01037 STATE fp_misc_00 = Create_Inst_State("fp_misc_00", 0, 27, 6); 01038 STATE fp_misc_01 = Create_Inst_State("fp_misc_01", 0, 36, 1); 01039 01040 STATE fp_misc_10 = Create_Inst_State("fp_misc_10", 0, 27, 6); 01041 STATE fp_misc_11 = Create_Inst_State("fp_misc_11", 0, 36, 1); 01042 01043 STATE fp_compare_0 = Create_Inst_State("fp_compare_0", 0, 36, 1); 01044 STATE fp_compare_1 = Create_Inst_State("fp_compare_1", 0, 36, 1); 01045 01046 STATE fp_compare_00 = Create_Inst_State("fp_compare_00", 0, 12, 1); 01047 STATE fp_compare_01 = Create_Inst_State("fp_compare_01", 0, 12, 1); 01048 01049 STATE fp_compare_10 = Create_Inst_State("fp_compare_10", 0, 12, 1); 01050 STATE fp_compare_11 = Create_Inst_State("fp_compare_11", 0, 12, 1); 01051 01052 Transitions(floating, 01053 0, fp_misc_0, 01054 1, fp_misc_1, 01055 4, fp_compare, 01056 5, fp_class, 01057 8, fma_8, 01058 9, fma_9, 01059 10, fma_a, 01060 11, fma_b, 01061 12, fma_c, 01062 13, fma_d, 01063 14, fselect, 01064 END_TRANSITIONS); 01065 01066 Transitions(fp_misc_0, 01067 0, fp_misc_00, 01068 1, fp_misc_01, 01069 END_TRANSITIONS); 01070 01071 Transitions(fp_misc_00, 01072 0, Final(TOP_break_f), 01073 1, Final(TOP_nop_f), 01074 4, Final(TOP_fsetc), 01075 5, Final(TOP_fclrf), 01076 8, Final(TOP_fchkf), 01077 16, Final(TOP_fmerge_s), 01078 17, Final(TOP_fmerge_ns), 01079 18, Final(TOP_fmerge_se), 01080 20, Final(TOP_fmin), 01081 21, Final(TOP_fmax), 01082 22, Final(TOP_famin), 01083 23, Final(TOP_famax), 01084 24, Final(TOP_fcvt_fx), 01085 25, Final(TOP_fcvt_fxu), 01086 26, Final(TOP_fcvt_fx_trunc), 01087 27, Final(TOP_fcvt_fxu_trunc), 01088 28, Final(TOP_fcvt_xf), 01089 40, Final(TOP_fpack), 01090 44, Final(TOP_fand), 01091 45, Final(TOP_fandcm), 01092 46, Final(TOP_for), 01093 47, Final(TOP_fxor), 01094 52, Final(TOP_fswap), 01095 53, Final(TOP_fswap_nl), 01096 54, Final(TOP_fswap_nr), 01097 57, Final(TOP_fmix_lr), 01098 58, Final(TOP_fmix_r), 01099 59, Final(TOP_fmix_l), 01100 60, Final(TOP_fsxt_r), 01101 61, Final(TOP_fsxt_l), 01102 END_TRANSITIONS); 01103 01104 Transitions(fp_misc_01, 01105 0, Final(TOP_frcpa), 01106 1, Final(TOP_frsqrta), 01107 END_TRANSITIONS); 01108 01109 Transitions(fp_misc_1, 01110 0, fp_misc_10, 01111 1, fp_misc_11, 01112 END_TRANSITIONS); 01113 01114 Transitions(fp_misc_10, 01115 16, Final(TOP_fpmerge_s), 01116 17, Final(TOP_fpmerge_ns), 01117 18, Final(TOP_fpmerge_se), 01118 20, Final(TOP_fpmin), 01119 21, Final(TOP_fpmax), 01120 22, Final(TOP_fpamin), 01121 23, Final(TOP_fpamax), 01122 24, Final(TOP_fpcvt_fx), 01123 25, Final(TOP_fpcvt_fxu), 01124 26, Final(TOP_fpcvt_fx_trunc), 01125 27, Final(TOP_fpcvt_fxu_trunc), 01126 48, Final(TOP_fpcmp_eq), 01127 49, Final(TOP_fpcmp_lt), 01128 50, Final(TOP_fpcmp_le), 01129 51, Final(TOP_fpcmp_unord), 01130 52, Final(TOP_fpcmp_neq), 01131 53, Final(TOP_fpcmp_nlt), 01132 54, Final(TOP_fpcmp_nle), 01133 55, Final(TOP_fpcmp_ord), 01134 END_TRANSITIONS); 01135 01136 Transitions(fp_misc_11, 01137 0, Final(TOP_fprcpa), 01138 1, Final(TOP_fprsqrta), 01139 END_TRANSITIONS); 01140 01141 Transitions(fp_compare, 01142 0, fp_compare_0, 01143 1, fp_compare_1, 01144 END_TRANSITIONS); 01145 01146 Transitions(fp_compare_0, 01147 0, fp_compare_00, 01148 1, fp_compare_01, 01149 END_TRANSITIONS); 01150 01151 Transitions(fp_compare_00, 01152 0, Final(TOP_fcmp_eq), 01153 1, Final(TOP_fcmp_eq_unc), 01154 END_TRANSITIONS); 01155 01156 Transitions(fp_compare_01, 01157 0, Final(TOP_fcmp_lt), 01158 1, Final(TOP_fcmp_lt_unc), 01159 END_TRANSITIONS); 01160 01161 Transitions(fp_compare_1, 01162 0, fp_compare_10, 01163 1, fp_compare_11, 01164 END_TRANSITIONS); 01165 01166 Transitions(fp_compare_10, 01167 0, Final(TOP_fcmp_le), 01168 1, Final(TOP_fcmp_le_unc), 01169 END_TRANSITIONS); 01170 01171 Transitions(fp_compare_11, 01172 0, Final(TOP_fcmp_unord), 01173 1, Final(TOP_fcmp_unord_unc), 01174 END_TRANSITIONS); 01175 01176 Transitions(fp_class, 01177 0, Final(TOP_fclass_m), 01178 1, Final(TOP_fclass_m_unc), 01179 END_TRANSITIONS); 01180 01181 Transitions(fma_8, 01182 0, Final(TOP_fma), 01183 1, Final(TOP_fma_s), 01184 END_TRANSITIONS); 01185 01186 Transitions(fma_9, 01187 0, Final(TOP_fma_d), 01188 1, Final(TOP_fpma), 01189 END_TRANSITIONS); 01190 01191 Transitions(fma_a, 01192 0, Final(TOP_fms), 01193 1, Final(TOP_fms_s), 01194 END_TRANSITIONS); 01195 01196 Transitions(fma_b, 01197 0, Final(TOP_fms_d), 01198 1, Final(TOP_fpms), 01199 END_TRANSITIONS); 01200 01201 Transitions(fma_c, 01202 0, Final(TOP_fnma), 01203 1, Final(TOP_fnma_s), 01204 END_TRANSITIONS); 01205 01206 Transitions(fma_d, 01207 0, Final(TOP_fnma_d), 01208 1, Final(TOP_fpnma), 01209 END_TRANSITIONS); 01210 01211 Transitions(fselect, 01212 0, Final(TOP_fselect), 01213 1, Final(TOP_fselect), 01214 2, Final(TOP_fselect), 01215 3, Final(TOP_fselect), 01216 4, Final(TOP_xma_l), 01217 6, Final(TOP_xma_hu), 01218 7, Final(TOP_xma_h), 01219 END_TRANSITIONS); 01220 01221 /* ===== Branch instructions ===== */ 01222 01223 STATE misc_branch = Create_Inst_State("misc_branch", 0, 27, 6); 01224 STATE relative_branch = Create_Inst_State("relative_branch", 0, 6, 3); 01225 STATE indirect_predict = Create_Inst_State("indirect_predict", 0, 27, 6); 01226 01227 STATE indirect_branch = Create_Inst_State("indirect_branch", 0, 6, 3); 01228 STATE indirect_return = Create_Inst_State("indirect_return", 0, 6, 6); 01229 01230 Transitions(branch, 01231 0, misc_branch, 01232 1, Final(TOP_br_r_call), 01233 2, indirect_predict, 01234 4, relative_branch, 01235 5, Final(TOP_br_call), 01236 7, Final(TOP_brp), 01237 END_TRANSITIONS); 01238 01239 Transitions(misc_branch, 01240 0, Final(TOP_break_b), 01241 2, Final(TOP_cover), 01242 4, Final(TOP_clrrrb), 01243 5, Final(TOP_clrrrb_pr), 01244 8, Final(TOP_rfi), 01245 12, Final(TOP_bsw_0), 01246 13, Final(TOP_bsw_1), 01247 16, Final(TOP_epc), 01248 32, indirect_branch, 01249 33, indirect_return, 01250 END_TRANSITIONS); 01251 01252 Transitions(indirect_branch, 01253 0, Final(TOP_br_r_cond), 01254 1, Final(TOP_br_ia), 01255 END_TRANSITIONS); 01256 01257 Transitions(indirect_return, 01258 4, Final(TOP_br_ret), 01259 END_TRANSITIONS); 01260 01261 Transitions(indirect_predict, 01262 0, Final(TOP_nop_b), 01263 16, Final(TOP_brp_r), 01264 17, Final(TOP_brp_ret), 01265 END_TRANSITIONS); 01266 01267 Transitions(relative_branch, 01268 0, Final(TOP_br_cond), 01269 2, Final(TOP_br_wexit), 01270 3, Final(TOP_br_wtop), 01271 5, Final(TOP_br_cloop), 01272 6, Final(TOP_br_cexit), 01273 7, Final(TOP_br_ctop), 01274 END_TRANSITIONS); 01275 01276 /* ==== L+X-unit instructions ==== */ 01277 01278 STATE misc_lx = Create_Inst_State("misc_lx", 1, 27, 6); 01279 01280 Transitions(lx_unit, 01281 0, misc_lx, 01282 6, Final(TOP_movl), 01283 12, Final(TOP_brl_cond), 01284 13, Final(TOP_brl_call), 01285 END_TRANSITIONS); 01286 01287 Transitions(misc_lx, 01288 0, Final(TOP_break_x), 01289 1, Final(TOP_nop_x), 01290 END_TRANSITIONS); 01291 01292 Initial_State(ex_unit); 01293 01294 ISA_Decode_End(); 01295 return 0; 01296 }