Open64 (mfef90, whirl2f, and IR tools)  TAG: version-openad; SVN changeset: 916
isa_decode.cxx
Go to the documentation of this file.
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 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines