Open64 (mfef90, whirl2f, and IR tools)  TAG: version-openad; SVN changeset: 916
isa_pack.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 // Group TOPS with similar packing format together. 
00039 // The instructions are listed by category. The different categories of
00040 // instructions are:
00041 //
00042 //   1. ALU
00043 //   2. Integer
00044 //   3. Memory
00045 //   4. Branch
00046 //   5. Float
00047 //
00048 // Within each Pack_Type instructions are listed in the order as shown
00049 // in the IA-64 instructions formats manual
00051 
00052 #include <stddef.h>
00053 #include "topcode.h"
00054 #include "isa_pack_gen.h"
00055  
00056 main()
00057 {
00058   ISA_PACK_TYPE a1,     // Integer ALU -- Register-Register
00059                 a2,     // Shift Left and Add
00060                 a3,     // Integer ALU -- Immediate_8-Register 
00061                 a4,     // Add Immediate_14
00062                 a5,     // Add Immediate_22 
00063                 a6,     // Integer Compare -- Register-Register
00064                 a7,     // Integer Compare to Zero -- Register
00065                 a8a,    // Integer Compare -- Immediate-Register
00066                 a8b,    // Integer Compare -- Immediate-Register
00067                 a9,     // Multimedia ALU
00068                 a10,    // Multimedia Shift and Add
00069                 a11,    // Move General Register (pseudo)
00070                 a12,    // Move Immediate (pseudo)
00071                 a13,    // Integer Compare -- Register-Register (pseudo)
00072                 a14,    // Integer Compare -- Register-Register (pseudo)
00073                 a15,    // Integer Compare -- Register-Register (pseudo)
00074                 a16,    // Integer Compare -- Register-Register (pseudo)
00075                 a17,    // Integer Compare -- Immediate-Register (pseudo)
00076                 a18,    // Integer Compare -- Immediate-Register (pseudo)
00077                 a19,    // Integer Compare -- Immediate-Register (pseudo)
00078                 a20,    // Integer Compare -- Immediate-Register (pseudo)
00079                 a21,    // Integer Compare -- Immediate-Register (pseudo)
00080                 a22,    // Integer Compare to Zero -- Register (pseudo)
00081                 a23;    // Integer Compare to Zero -- Register (pseudo)
00082 
00083   ISA_PACK_TYPE i1,     // Multimedia Multiply and Shift
00084                 i2,     // Multimedia Multiply/Mix/Pack/Unpack
00085                 i3,     // Multimedia Mux1
00086                 i4,     // Multimedia Mux2
00087                 i5,     // Shift Right -- Variable
00088                 i6,     // Multimedia Shift Right -- Fixed
00089                 i7,     // Shift Left -- Variable
00090                 i8,     // Multimedia Shift Left -- Fixed
00091                 i9,     // Population Count
00092                 i10,    // Shift Right Pair
00093                 i11,    // Extract
00094                 i12,    // Zero and Deposit
00095                 i13,    // Zero and Deposit Immediate_8
00096                 i14,    // Deposit Immediate_1
00097                 i15,    // Deposit
00098                 i16,    // Test Bit
00099                 i17,    // Test NaT
00100 //              i18,    // Move Long Immediate_64 (NOTE: now X2)
00101                 i19,    // Break/Nop
00102                 i20,    // Integer Speculation Check
00103                 i21,    // Move to BR
00104                 i22,    // Move from BR
00105                 i23,    // Move to Predicates -- Register
00106                 i24,    // Move to Predicates -- Immediate_44
00107                 i25,    // Move from Predicates/IP
00108                 i26,    // Move to AR -- Register
00109                 i27,    // Move to AR -- Immediate_8
00110                 i28,    // Move from AR
00111                 i29,    // Sign/Zero Extend/Compute Zero Index
00112                 i30,    // Move to BR (pseudo)
00113                 i31,    // Test Bit (pseudo)
00114                 i32,    // Test NaT (pseudo)
00115                 i33,    // Shift Left Immediate (pseudo)
00116                 i34;    // Shift Right Immediate (pseudo)
00117 
00118   ISA_PACK_TYPE m1a,    // Integer Load
00119                 m1b,    // Integer Load
00120                 m2a,    // Integer Load -- Increment by Register
00121                 m2b,    // Integer Load -- Increment by Register
00122                 m3a,    // Integer Load -- Increment by Immediate
00123                 m3b,    // Integer Load -- Increment by Immediate
00124                 m4a,    // Integer Store
00125                 m4b,    // Integer Store
00126                 m5a,    // Integer Store -- Increment by Immediate
00127                 m5b,    // Integer Store -- Increment by Immediate
00128                 m6a,    // Floating-point Load
00129                 m6b,    // Floating-point Load
00130                 m7a,    // Floating-point Load -- Increment by Register
00131                 m7b,    // Floating-point Load -- Increment by Register
00132                 m8a,    // Floating-point Load -- Increment by Immediate
00133                 m8b,    // Floating-point Load -- Increment by Immediate
00134                 m9,     // Floating-point Store
00135                 m10,    // Floating-point Store -- Increment by Immediate
00136                 m11,    // Floating-point Load Pair
00137                 m12,    // Floating-point Load Pair -- Increment by Immediate
00138                 m13,    // Line Prefetch
00139                 m14,    // Line Prefetch -- Increment by Register
00140                 m15,    // Line Prefetch -- Increment by Immediate
00141                 m16a,   // Exchange/Compare and Exchange
00142                 m16b,   // Exchange/Compare and Exchange
00143                 m17,    // Fetch and Add -- Immediate
00144                 m18,    // Set FR
00145                 m19,    // Get FR
00146                 m20,    // Integer Speculation Check
00147                 m21,    // Floating-point Speculation Check
00148                 m22,    // Integer Advanced Load Check
00149                 m23,    // Floating-point Advanced Load Check
00150                 m24,    // Sync/Fence/Serialize/ALAT Control
00151                 m25,    // RSE Control
00152                 m26,    // Integer ALAT Entry Invalidate
00153                 m27,    // Floating-point ALAT Entry Invalidate
00154                 m28,    // Flush Cache/Purge Translation Cache Entry
00155                 m29,    // Move to AR -- Register
00156                 m30,    // Move to AR -- Immediate_8
00157                 m31,    // Move from AR
00158                 m32,    // Move to CR
00159                 m33,    // Move from CR
00160                 m34,    // Allocate Register Stack Frame
00161                 m35,    // Move to PSR
00162                 m36,    // Move from PSR
00163                 m37,    // Break/Nop
00164                 m38,    // Probe -- Register
00165                 m39,    // Probe -- Immediate_2
00166                 m40,    // Probe Fault
00167                 m41,    // Translation Cache Insert
00168                 m42,    // Move to Indirect Register/Translation Register Insert
00169                 m43,    // Move from Indirect Register
00170                 m44,    // Set/Reset User/System Mask
00171                 m45,    // Translation Purge
00172                 m46,    // Translation Access
00173                 m47;    // Allocate Register Stack Frame (pseudo)
00174 
00175   ISA_PACK_TYPE b1,     // IP-Relative Branch
00176                 b2,     // IP-Relative Counted Branch
00177                 b3,     // IP-Relative Call
00178                 b4,     // Indirect Branch
00179                 b4a,    // Indirect Branch
00180                 b5,     // Indirect Call
00181                 b6,     // IP-Relative Predict
00182                 b7,     // Indirect Predict
00183                 b8,     // Miscellaneous
00184                 b9,     // Break/Nop
00185                 b10,    // IP-Relative Unconditional Branch (pseudo)
00186                 b11;    // Indirect Unconditional Branch (pseudo)
00187 
00188   ISA_PACK_TYPE f1,     // Floating-point Multiply Add
00189                 f2,     // Fixed-point Multiply Add
00190                 f3,     // Parallel Floating-point Select
00191                 f4,     // Floating-point Compare
00192                 f5,     // Floating-point Class
00193                 f6,     // Floating-point Reciprocal Approximation
00194                 f7,     // Floating-point Reciprocal Square Root Approximation
00195                 f8,     // Minimum/Maximum and Parallel Compare
00196                 f9,     // Merge and Logical
00197                 f10,    // Convert Floating-point to Fixed-point
00198                 f11,    // Convert Fixed-point to Floating-point
00199                 f12,    // Floating-point Set Controls
00200                 f13,    // Floating-point Clear Flags
00201                 f14,    // Floating-point Check Flags
00202                 f15,    // Break/Nop
00203                 f16,    // Floating-point Absolute Value (pseudo)
00204                 f17,    // Floating-point Negate (pseudo)
00205                 f18,    // Fixed-point Multiply Add (pseudo)
00206                 f19,    // Fixed-point Multiply (pseudo)
00207                 f20,    // Convert Unsigned Integer to Floating-point (pseudo)
00208                 f21,    // Floating-point Add/Subtract (pseudo)
00209                 f22,    // Floating-point Multiply (pseudo)
00210                 f23,    // Floating-point Class (pseudo)
00211                 f24,    // Floating-point Compare (pseudo)
00212                 f25,    // Floating-point Compare (pseudo)
00213                 f26,    // Floating-point Compare (pseudo)
00214                 f27;    // Floating-point Parallel Compare (pseudo) 
00215 
00216   ISA_PACK_TYPE x1,     // Floating-point Multiply Add
00217                 x2,     // Move Long Immediate_64
00218                 x3,     // Long Branch
00219                 x4,     // Long Call
00220                 x5;     // Long Branch (pseudo)
00221 
00222   OPND_ADJ_TYPE comp6,
00223                 no_adj,
00224                 decr,
00225                 incr,
00226                 sext8_incr,
00227                 sext8,
00228                 comp5,
00229                 pack_i1,
00230                 unpack_i1,
00231                 pack_m17,
00232                 unpack_m17;
00233 
00234   ISA_Pack_Begin("ia64", 41);
00235 
00236   /* Create the various adjustments that need to be performed between
00237    * assembly language form and packed form. Note that simple shift 
00238    * adjustments have been accomplished directly in the operand packing
00239    * specification.
00240    */
00241   no_adj = Create_Operand_Adjustment("no adjustment", "O_VAL");
00242   comp6 = Create_Operand_Adjustment("6-bit complement", "O_VAL ^ 0x3f");
00243   decr = Create_Operand_Adjustment("decrement", "O_VAL - 1");
00244   incr = Create_Operand_Adjustment("increment", "O_VAL + 1");
00245   sext8_incr = Create_Operand_Adjustment("sign-extend(8)/increment", 
00246                                          "((O_VAL << 56) >> 56) + 1");
00247   sext8 = Create_Operand_Adjustment("sign-extend(8)", "(O_VAL << 56) >> 56");
00248   comp5 = Create_Operand_Adjustment("5-bit complement", "O_VAL ^ 0x1f");
00249   pack_i1 = Create_Operand_Adjustment("Pack (I1)",
00250                 "(O_VAL == 0) ? 0 : (O_VAL == 7) ? 1 : (O_VAL == 15) ? 2 : 3");
00251   unpack_i1 = Create_Operand_Adjustment("Unpack (I1)",
00252                 "(O_VAL == 0) ? 0 : (O_VAL == 1) ? 7 : (O_VAL == 2) ? 15 : 16");
00253   pack_m17 = Create_Operand_Adjustment("Pack (M17)",
00254         "((O_VAL < 0) * 4) + ((O_VAL & 1) ? 3 : (O_VAL & 4) ? 2 : (O_VAL & 8) ? 1 : 0)");
00255   unpack_m17 = Create_Operand_Adjustment("unpack (M17)",
00256         "(((O_VAL >= 4) ? -1 : 1) * (((O_VAL & 3) == 3) ? 1 : 1 << (4 - (O_VAL & 3))))");
00257 
00258 /* =====  A1: Integer ALU -- Register-Register ===== */
00259   a1 = ISA_Pack_Type_Create("a1");
00260   Operand(0, 0, 0, 6);          // qp
00261   Result(0, 6, 7);              // r1
00262   Operand(1, 0, 13, 7);         // r2
00263   Operand(2, 0, 20, 7);         // r3
00264   Instruction_Pack_Group(a1,
00265         TOP_add,                0x10000000000ULL,
00266         TOP_add_1,              0x10008000000ULL,
00267         TOP_sub,                0x10028000000ULL,
00268         TOP_sub_1,              0x10020000000ULL,
00269         TOP_addp4,              0x10040000000ULL,
00270         TOP_and,                0x10060000000ULL,
00271         TOP_andcm,              0x10068000000ULL,
00272         TOP_or,                 0x10070000000ULL,
00273         TOP_xor,                0x10078000000ULL,
00274         TOP_UNDEFINED);
00275 
00276 /* ===== A2: Shift Left and Add ===== */
00277   a2 = ISA_Pack_Type_Create("a2");
00278   Operand(0, 0, 0, 6);          // qp
00279   Result(0, 6, 7);              // r1
00280   Operand(1, 0, 13, 7);         // r2
00281   Adjust_Operand(2, decr, incr); // ct_2d = count_2 - 1
00282   Operand(2, 0, 27, 2);         // ct_2d
00283   Operand(3, 0, 20, 7);         // r3
00284   Instruction_Pack_Group(a2,
00285         TOP_shladd,             0x10080000000ULL,
00286         TOP_shladdp4,           0x100c0000000ULL,
00287         TOP_UNDEFINED);
00288 
00289 /* ===== A3: Integer ALU -- Immediate_8-Register ===== */
00290   a3 = ISA_Pack_Type_Create("a3");
00291   Operand(0, 0, 0, 6);          // qp
00292   Result(0, 6, 7);              // r1
00293   Operand(1, 0, 13, 7);         // imm_7b
00294   Operand(1, 7, 36, 1);         // s
00295   Operand(2, 0, 20, 7);         // r3
00296   Instruction_Pack_Group(a3,
00297         TOP_sub_i,              0x10128000000ULL,
00298         TOP_and_i,              0x10160000000ULL,
00299         TOP_andcm_i,            0x10168000000ULL,
00300         TOP_or_i,               0x10170000000ULL,
00301         TOP_xor_i,              0x10178000000ULL,
00302         TOP_UNDEFINED);
00303 
00304 /* ===== A4: Add Immediate_14 ===== */
00305   a4 = ISA_Pack_Type_Create("a4");
00306   Operand(0, 0, 0, 6);          // qp
00307   Result(0, 6, 7);              // r1
00308   Operand(1, 0, 13, 7);         // imm_7b
00309   Operand(1, 7, 27, 6);         // imm_6d
00310   Operand(1, 13, 36, 1);        // s
00311   Operand(2, 0, 20, 7);         // r3
00312   Instruction_Pack_Group(a4,
00313         TOP_adds,               0x10800000000ULL,
00314         TOP_addp4_i,            0x10c00000000ULL,
00315         TOP_UNDEFINED);
00316 
00317 /* ===== A5: Add Immediate_22 ===== */
00318   a5 = ISA_Pack_Type_Create("a5");
00319   Operand(0, 0, 0, 6);          // qp
00320   Result(0, 6, 7);              // r1
00321   Operand(1, 0, 13, 7);         // imm_7b
00322   Operand(1, 7, 27, 9);         // imm_9d
00323   Operand(1, 16, 22, 5);        // imm_5c
00324   Operand(1, 21, 36, 1);        // s
00325   Operand(2, 0, 20, 2);         // r3
00326   Instruction_Pack_Group(a5,
00327         TOP_addl,               0x12000000000ULL,
00328         TOP_UNDEFINED);
00329 
00330 /* ===== A6: Integer Compare -- Register-Register ===== */
00331   a6 = ISA_Pack_Type_Create("a6");
00332   Operand(0, 0, 0, 6);          // qp
00333   Result(0, 6, 6);              // p1
00334   Result(1, 27, 6);             // p2
00335   Operand(1, 0, 13, 7);         // r2
00336   Operand(2, 0, 20, 7);         // r3
00337   Instruction_Pack_Group(a6,
00338         TOP_cmp_lt,             0x18000000000ULL,
00339         TOP_cmp_ltu,            0x1a000000000ULL,
00340         TOP_cmp_eq,             0x1c000000000ULL,
00341         TOP_cmp_lt_unc,         0x18000001000ULL,
00342         TOP_cmp_ltu_unc,        0x1a000001000ULL,
00343         TOP_cmp_eq_unc,         0x1c000001000ULL,
00344         TOP_cmp_eq_and,         0x18200000000ULL,
00345         TOP_cmp_eq_or,          0x1a200000000ULL,
00346         TOP_cmp_eq_or_andcm,    0x1c200000000ULL,
00347         TOP_cmp_ne_and,         0x18200001000ULL,
00348         TOP_cmp_ne_or,          0x1a200001000ULL,
00349         TOP_cmp_ne_or_andcm,    0x1c200001000ULL,
00350         TOP_cmp4_lt,            0x18400000000ULL,
00351         TOP_cmp4_ltu,           0x1a400000000ULL,
00352         TOP_cmp4_eq,            0x1c400000000ULL,
00353         TOP_cmp4_lt_unc,        0x18400001000ULL,
00354         TOP_cmp4_ltu_unc,       0x1a400001000ULL,
00355         TOP_cmp4_eq_unc,        0x1c400001000ULL,
00356         TOP_cmp4_eq_and,        0x18600000000ULL,
00357         TOP_cmp4_eq_or,         0x1a600000000ULL,
00358         TOP_cmp4_eq_or_andcm,   0x1c600000000ULL,
00359         TOP_cmp4_ne_and,        0x18600001000ULL,
00360         TOP_cmp4_ne_or,         0x1a600001000ULL,
00361         TOP_cmp4_ne_or_andcm,   0x1c600001000ULL,
00362         TOP_UNDEFINED);
00363 
00364 /* ===== A7: Integer Compare to Zero -- Register ===== */
00365   a7 = ISA_Pack_Type_Create("a7");
00366   Operand(0, 0, 0, 6);          // qp
00367   Result(0, 6, 6);              // p1
00368   Result(1, 27, 6);             // p2
00369   Operand(1, 0, 20, 7);         // r3
00370   Instruction_Pack_Group(a7,
00371         TOP_cmp_z1_gt_and,      0x19000000000ULL,
00372         TOP_cmp_z1_gt_or,       0x1b000000000ULL,
00373         TOP_cmp_z1_gt_or_andcm, 0x1d000000000ULL,
00374         TOP_cmp_z1_le_and,      0x19000001000ULL,
00375         TOP_cmp_z1_le_or,       0x1b000001000ULL,
00376         TOP_cmp_z1_le_or_andcm, 0x1d000001000ULL,
00377         TOP_cmp_z1_ge_and,      0x19200000000ULL,
00378         TOP_cmp_z1_ge_or,       0x1b200000000ULL,
00379         TOP_cmp_z1_ge_or_andcm, 0x1d200000000ULL,
00380         TOP_cmp_z1_lt_and,      0x19200001000ULL,
00381         TOP_cmp_z1_lt_or,       0x1b200001000ULL,
00382         TOP_cmp_z1_lt_or_andcm, 0x1d200001000ULL,
00383         TOP_cmp4_z1_gt_and,     0x19400000000ULL,
00384         TOP_cmp4_z1_gt_or,      0x1b400000000ULL,
00385         TOP_cmp4_z1_gt_or_andcm,0x1d400000000ULL,
00386         TOP_cmp4_z1_le_and,     0x19400001000ULL,
00387         TOP_cmp4_z1_le_or,      0x1b400001000ULL,
00388         TOP_cmp4_z1_le_or_andcm,0x1d400001000ULL,
00389         TOP_cmp4_z1_ge_and,     0x19600000000ULL,
00390         TOP_cmp4_z1_ge_or,      0x1b600000000ULL,
00391         TOP_cmp4_z1_ge_or_andcm,0x1d600000000ULL,
00392         TOP_cmp4_z1_lt_and,     0x19600001000ULL,
00393         TOP_cmp4_z1_lt_or,      0x1b600001000ULL,
00394         TOP_cmp4_z1_lt_or_andcm,0x1d600001000ULL,
00395         TOP_UNDEFINED);
00396 
00397 /* ===== A8a: Integer Compare -- Immediate-Register ===== */
00398   a8a = ISA_Pack_Type_Create("a8a");
00399   Operand(0, 0, 0, 6);          // qp
00400   Result(0, 6, 6);              // p1
00401   Result(1, 27, 6);             // p2
00402   Operand(1, 0, 13, 7);         // imm_7b
00403   Operand(1, 7, 36, 1);         // s
00404   Operand(2, 0, 20, 7);         // r3
00405   Instruction_Pack_Group(a8a,
00406         TOP_cmp_i_lt,           0x18800000000ULL,
00407         TOP_cmp_i_eq,           0x1c800000000ULL,
00408         TOP_cmp_i_lt_unc,       0x18800001000ULL,
00409         TOP_cmp_i_eq_unc,       0x1c800001000ULL,
00410         TOP_cmp_i_eq_and,       0x18a00000000ULL,
00411         TOP_cmp_i_eq_or,        0x1aa00000000ULL,
00412         TOP_cmp_i_eq_or_andcm,  0x1ca00000000ULL,
00413         TOP_cmp_i_ne_and,       0x18a00001000ULL,
00414         TOP_cmp_i_ne_or,        0x1aa00001000ULL,
00415         TOP_cmp_i_ne_or_andcm,  0x1ca00001000ULL,
00416         TOP_cmp4_i_lt,          0x18c00000000ULL,
00417         TOP_cmp4_i_eq,          0x1cc00000000ULL,
00418         TOP_cmp4_i_lt_unc,      0x18c00001000ULL,
00419         TOP_cmp4_i_eq_unc,      0x1cc00001000ULL,
00420         TOP_cmp4_i_eq_and,      0x18e00000000ULL,
00421         TOP_cmp4_i_eq_or,       0x1ae00000000ULL,
00422         TOP_cmp4_i_eq_or_andcm, 0x1ce00000000ULL,
00423         TOP_cmp4_i_ne_and,      0x18e00001000ULL,
00424         TOP_cmp4_i_ne_or,       0x1ae00001000ULL,
00425         TOP_cmp4_i_ne_or_andcm, 0x1ce00001000ULL,
00426         TOP_UNDEFINED);
00427 
00428 /* ===== A8b: Integer Compare -- Immediate-Register ===== */
00429   a8b = ISA_Pack_Type_Create("a8b");
00430   Operand(0, 0, 0, 6);          // qp
00431   Result(0, 6, 6);              // p1
00432   Result(1, 27, 6);             // p2
00433   Adjust_Operand(1, no_adj, sext8); // imm8 = sext(imm) (unpack only)
00434   Operand(1, 0, 13, 7);         // imm_7b
00435   Operand(1, 7, 36, 1);         // s
00436   Operand(2, 0, 20, 7);         // r3
00437   Instruction_Pack_Group(a8b,
00438         TOP_cmp_i_ltu,          0x1a800000000ULL,
00439         TOP_cmp_i_ltu_unc,      0x1a800001000ULL,
00440         TOP_cmp4_i_ltu,         0x1ac00000000ULL,
00441         TOP_cmp4_i_ltu_unc,     0x1ac00001000ULL,
00442         TOP_UNDEFINED);
00443 
00444 /* ===== A9: Multimedia ALU ===== */
00445   a9 = ISA_Pack_Type_Create("a9");
00446   Operand(0, 0, 0, 6);          // qp
00447   Result(0, 6, 7);              // r1
00448   Operand(1, 0, 13, 7);         // r2
00449   Operand(2, 0, 20, 7);         // r3
00450   Instruction_Pack_Group(a9,
00451         TOP_padd1,              0x10400000000ULL,
00452         TOP_padd2,              0x10600000000ULL,
00453         TOP_padd4,              0x11400000000ULL,
00454         TOP_padd1_sss,          0x10408000000ULL,
00455         TOP_padd2_sss,          0x10608000000ULL,
00456         TOP_padd1_uuu,          0x10410000000ULL,
00457         TOP_padd2_uuu,          0x10610000000ULL,
00458         TOP_padd1_uus,          0x10418000000ULL,
00459         TOP_padd2_uus,          0x10618000000ULL,
00460         TOP_psub1,              0x10420000000ULL,
00461         TOP_psub2,              0x10620000000ULL,
00462         TOP_psub4,              0x11420000000ULL,
00463         TOP_psub1_sss,          0x10428000000ULL,
00464         TOP_psub2_sss,          0x10628000000ULL,
00465         TOP_psub1_uuu,          0x10430000000ULL,
00466         TOP_psub2_uuu,          0x10630000000ULL,
00467         TOP_psub1_uus,          0x10438000000ULL,
00468         TOP_psub2_uus,          0x10638000000ULL,
00469         TOP_pavg1,              0x10450000000ULL,
00470         TOP_pavg2,              0x10650000000ULL,
00471         TOP_pavg1_raz,          0x10458000000ULL,
00472         TOP_pavg2_raz,          0x10658000000ULL,
00473         TOP_pavgsub1,           0x10470000000ULL,
00474         TOP_pavgsub2,           0x10670000000ULL,
00475         TOP_pcmp1_eq,           0x10520000000ULL,
00476         TOP_pcmp2_eq,           0x10720000000ULL,
00477         TOP_pcmp4_eq,           0x11520000000ULL,
00478         TOP_pcmp1_gt,           0x10528000000ULL,
00479         TOP_pcmp2_gt,           0x10728000000ULL,
00480         TOP_pcmp4_gt,           0x11528000000ULL,
00481         TOP_UNDEFINED);
00482 
00483 /* ===== A10: Multimedia Shift and Add ===== */
00484   a10 = ISA_Pack_Type_Create("a10");
00485   Operand(0, 0, 0, 6);          // qp
00486   Result(0, 6, 7);              // r1
00487   Operand(1, 0, 13, 7);         // r2
00488   Adjust_Operand(2, decr, incr); // ct_2d = count_2 - 1
00489   Operand(2, 0, 27, 2);         // ct_2d
00490   Operand(3, 0, 20, 7);         // r3
00491   Instruction_Pack_Group(a10,
00492         TOP_pshladd2,           0x10680000000ULL,
00493         TOP_pshradd2,           0x106c0000000ULL,
00494         TOP_UNDEFINED);
00495 
00496 /* ===== A11: Move General Register (pseudo) ===== */
00497   a11 = ISA_Pack_Type_Create("a11");
00498   Operand(0, 0, 0, 6);          // qp
00499   Result(0, 6, 7);              // r1
00500   Operand(1, 0, 20, 7);         // r3
00501   Instruction_Pack_Group(a11,
00502         TOP_mov,                0x10800000000ULL,
00503         TOP_UNDEFINED);
00504 
00505 /* ===== A12: Move Immediate (pseudo) ===== */
00506   a12 = ISA_Pack_Type_Create("a12");
00507   Operand(0, 0, 0, 6);          // qp
00508   Result(0, 6, 7);              // r1
00509   Operand(1, 0, 13, 7);         // imm_7b
00510   Operand(1, 7, 27, 9);         // imm_9d
00511   Operand(1, 16, 22, 5);        // imm_5c
00512   Operand(1, 21, 36, 1);        // s
00513   Instruction_Pack_Group(a12,
00514         TOP_mov_i,              0x12000000000ULL,
00515         TOP_UNDEFINED);
00516 
00517 /* ===== A13: Integer Compare -- Register-Register (pseudo) ===== */
00518   a13 = ISA_Pack_Type_Create("a13");
00519   Operand(0, 0, 0, 6);          // qp
00520   Result(0, 6, 6);              // p1
00521   Result(1, 27, 6);             // p2
00522   Operand(1, 0, 13, 7);         // r2
00523   Operand(2, 0, 20, 7);         // r3
00524   Instruction_Pack_Group(a13,
00525         TOP_cmp_eq_andcm,       0x18200001000ULL,
00526         TOP_cmp_eq_orcm,        0x1a200001000ULL,
00527         TOP_cmp_ne_andcm,       0x18200000000ULL,
00528         TOP_cmp_ne_orcm,        0x1a200000000ULL,
00529         TOP_cmp4_eq_andcm,      0x18600001000ULL,
00530         TOP_cmp4_eq_orcm,       0x1a600001000ULL,
00531         TOP_cmp4_ne_andcm,      0x18600000000ULL,
00532         TOP_cmp4_ne_orcm,       0x1a600000000ULL,
00533         TOP_UNDEFINED);
00534 
00535 /* ===== A14: Integer Compare -- Register-Register (pseudo) ===== */
00536 // swapped preds
00537   a14 = ISA_Pack_Type_Create("a14");
00538   Operand(0, 0, 0, 6);          // qp
00539   Result(0, 27, 6);             // p2
00540   Result(1, 6, 6);              // p1
00541   Operand(1, 0, 13, 7);         // r2
00542   Operand(2, 0, 20, 7);         // r3
00543   Instruction_Pack_Group(a14,
00544         TOP_cmp_eq_and_orcm,    0x1c200001000ULL,
00545         TOP_cmp_ge,             0x18000000000ULL,
00546         TOP_cmp_ge_unc,         0x18000001000ULL,
00547         TOP_cmp_geu,            0x1a000000000ULL,
00548         TOP_cmp_geu_unc,        0x1a000001000ULL,
00549         TOP_cmp_ne_and_orcm,    0x1c200000000ULL,
00550         TOP_cmp_ne,             0x1c000000000ULL,
00551         TOP_cmp_ne_unc,         0x1c000001000ULL,
00552         TOP_cmp4_eq_and_orcm,   0x1c600001000ULL,
00553         TOP_cmp4_ge,            0x18400000000ULL,
00554         TOP_cmp4_ge_unc,        0x18400001000ULL,
00555         TOP_cmp4_geu,           0x1a400000000ULL,
00556         TOP_cmp4_geu_unc,       0x1a400001000ULL,
00557         TOP_cmp4_ne_and_orcm,   0x1c600000000ULL,
00558         TOP_cmp4_ne,            0x1c400000000ULL,
00559         TOP_cmp4_ne_unc,        0x1c400001000ULL,
00560         TOP_UNDEFINED);
00561 
00562 /* ===== A15: Integer Compare -- Register-Register (pseudo) ===== */
00563 // swapped args
00564   a15 = ISA_Pack_Type_Create("a15");
00565   Operand(0, 0, 0, 6);          // qp
00566   Result(0, 6, 6);              // p1
00567   Result(1, 27, 6);             // p2
00568   Operand(1, 0, 20, 7);         // r3
00569   Operand(2, 0, 13, 7);         // r2
00570   Instruction_Pack_Group(a15,
00571         TOP_cmp_gt,             0x18000000000ULL,
00572         TOP_cmp_gt_unc,         0x18000001000ULL,
00573         TOP_cmp_gtu,            0x1a000000000ULL,
00574         TOP_cmp_gtu_unc,        0x1a000001000ULL,
00575         TOP_cmp4_gt,            0x18400000000ULL,
00576         TOP_cmp4_gt_unc,        0x18400001000ULL,
00577         TOP_cmp4_gtu,           0x1a400000000ULL,
00578         TOP_cmp4_gtu_unc,       0x1a400001000ULL,
00579         TOP_UNDEFINED);
00580 
00581 /* ===== A16: Integer Compare -- Register-Register (pseudo) ===== */
00582 // swapped preds and args
00583   a16 = ISA_Pack_Type_Create("a16");
00584   Operand(0, 0, 0, 6);          // qp
00585   Result(0, 27, 6);             // p2
00586   Result(1, 6, 6);              // p1
00587   Operand(1, 0, 20, 7);         // r3
00588   Operand(2, 0, 13, 7);         // r2
00589   Instruction_Pack_Group(a16,
00590         TOP_cmp_le,             0x18000000000ULL,
00591         TOP_cmp_le_unc,         0x18000001000ULL,
00592         TOP_cmp_leu,            0x1a000000000ULL,
00593         TOP_cmp_leu_unc,        0x1a000001000ULL,
00594         TOP_cmp4_le,            0x18400000000ULL,
00595         TOP_cmp4_le_unc,        0x18400001000ULL,
00596         TOP_cmp4_leu,           0x1a400000000ULL,
00597         TOP_cmp4_leu_unc,       0x1a400001000ULL,
00598         TOP_UNDEFINED);
00599 
00600 /* ===== A17: Integer Compare -- Immediate-Register (pseudo) ===== */
00601   a17 = ISA_Pack_Type_Create("a17");
00602   Operand(0, 0, 0, 6);          // qp
00603   Result(0, 6, 6);              // p1
00604   Result(1, 27, 6);             // p2
00605   Operand(1, 0, 13, 7);         // imm_7b
00606   Operand(1, 7, 36, 1);         // s
00607   Operand(2, 0, 20, 7);         // r3
00608   Instruction_Pack_Group(a17,
00609         TOP_cmp_i_eq_andcm,     0x18a00001000ULL,
00610         TOP_cmp_i_eq_orcm,      0x1aa00001000ULL,
00611         TOP_cmp_i_ne_andcm,     0x18a00000000ULL,
00612         TOP_cmp_i_ne_orcm,      0x1aa00000000ULL,
00613         TOP_cmp4_i_eq_andcm,    0x18e00001000ULL,
00614         TOP_cmp4_i_eq_orcm,     0x1ae00001000ULL,
00615         TOP_cmp4_i_ne_andcm,    0x18e00000000ULL,
00616         TOP_cmp4_i_ne_orcm,     0x1ae00000000ULL,
00617         TOP_UNDEFINED);
00618 
00619 /* ===== A18: Integer Compare -- Immediate-Register (pseudo) ===== */
00620 // swapped preds
00621   a18 = ISA_Pack_Type_Create("a18");
00622   Operand(0, 0, 0, 6);          // qp
00623   Result(0, 27, 6);             // p2
00624   Result(1, 6, 6);              // p1
00625   Operand(1, 0, 13, 7);         // imm_7b
00626   Operand(1, 7, 36, 1);         // s
00627   Operand(2, 0, 20, 7);         // r3
00628   Instruction_Pack_Group(a18,
00629         TOP_cmp_i_eq_and_orcm,  0x1ca00001000ULL,
00630         TOP_cmp_i_ge,           0x18800000000ULL,
00631         TOP_cmp_i_ge_unc,       0x18800001000ULL,
00632         TOP_cmp_i_ne_and_orcm,  0x1ca00000000ULL,
00633         TOP_cmp_i_ne,           0x1c800000000ULL,
00634         TOP_cmp_i_ne_unc,       0x1c800001000ULL,
00635         TOP_cmp4_i_eq_and_orcm, 0x1ce00001000ULL,
00636         TOP_cmp4_i_ge,          0x18c00000000ULL,
00637         TOP_cmp4_i_ge_unc,      0x18c00001000ULL,
00638         TOP_cmp4_i_ne_and_orcm, 0x1ce00000000ULL,
00639         TOP_cmp4_i_ne,          0x1cc00000000ULL,
00640         TOP_cmp4_i_ne_unc,      0x1cc00001000ULL,
00641         TOP_UNDEFINED);
00642 
00643 /* ===== A19: Integer Compare -- Immediate-Register (pseudo) ===== */
00644 // swapped preds and sext(immed)
00645   a19 = ISA_Pack_Type_Create("a19");
00646   Operand(0, 0, 0, 6);          // qp
00647   Result(0, 27, 6);             // p2
00648   Result(1, 6, 6);              // p1
00649   Adjust_Operand(1, no_adj, sext8); // imm8 = sext(imm) (unpack only)
00650   Operand(1, 0, 13, 7);         // imm_7b
00651   Operand(1, 7, 36, 1);         // s
00652   Operand(2, 0, 20, 7);         // r3
00653   Instruction_Pack_Group(a19,
00654         TOP_cmp_i_geu,          0x1a800000000ULL,
00655         TOP_cmp_i_geu_unc,      0x1a800001000ULL,
00656         TOP_cmp4_i_geu,         0x1ac00000000ULL,
00657         TOP_cmp4_i_geu_unc,     0x1ac00001000ULL,
00658         TOP_UNDEFINED);
00659 
00660 /* ===== A20: Integer Compare -- Immediate-Register (pseudo) ===== */
00661 // immed-1
00662   a20 = ISA_Pack_Type_Create("a20");
00663   Operand(0, 0, 0, 6);          // qp
00664   Result(0, 6, 6);              // p1
00665   Result(1, 27, 6);             // p2
00666   Adjust_Operand(1, decr, sext8_incr); // imm_8 = imm_8 - 1
00667   Operand(1, 0, 13, 7);         // imm_7b
00668   Operand(1, 7, 36, 1);         // s
00669   Operand(2, 0, 20, 7);         // r3
00670   Instruction_Pack_Group(a20,
00671         TOP_cmp_i_le,           0x18800000000ULL,
00672         TOP_cmp_i_le_unc,       0x18800001000ULL,
00673         TOP_cmp_i_leu,          0x1a800000000ULL,
00674         TOP_cmp_i_leu_unc,      0x1a800001000ULL,
00675         TOP_cmp4_i_le,          0x18c00000000ULL,
00676         TOP_cmp4_i_le_unc,      0x18c00001000ULL,
00677         TOP_cmp4_i_leu,         0x1ac00000000ULL,
00678         TOP_cmp4_i_leu_unc,     0x1ac00001000ULL,
00679         TOP_UNDEFINED);
00680 
00681 /* ===== A21: Integer Compare -- Immediate-Register (pseudo) ===== */
00682 // swapped pred and immed-1
00683   a21 = ISA_Pack_Type_Create("a21");
00684   Operand(0, 0, 0, 6);          // qp
00685   Result(0, 27, 6);             // p2
00686   Result(1, 6, 6);              // p1
00687   Adjust_Operand(1, decr, sext8_incr); // imm_8 = imm_8 - 1
00688   Operand(1, 0, 13, 7);         // imm_7b
00689   Operand(1, 7, 36, 1);         // s
00690   Operand(2, 0, 20, 7);         // r3
00691   Instruction_Pack_Group(a21,
00692         TOP_cmp_i_gt,           0x18800000000ULL,
00693         TOP_cmp_i_gt_unc,       0x18800001000ULL,
00694         TOP_cmp_i_gtu,          0x1a800000000ULL,
00695         TOP_cmp_i_gtu_unc,      0x1a800001000ULL,
00696         TOP_cmp4_i_gt,          0x18c00000000ULL,
00697         TOP_cmp4_i_gt_unc,      0x18c00001000ULL,
00698         TOP_cmp4_i_gtu,         0x1ac00000000ULL,
00699         TOP_cmp4_i_gtu_unc,     0x1ac00001000ULL,
00700         TOP_UNDEFINED);
00701 
00702 /* ===== A22: Integer Compare to Zero -- Register (pseudo) ===== */
00703 // swapped preds
00704   a22 = ISA_Pack_Type_Create("a22");
00705   Operand(0, 0, 0, 6);          // qp
00706   Result(0, 27, 6);             // p2
00707   Result(1, 6, 6);              // p1
00708   Operand(1, 0, 20, 7);         // r3
00709   Instruction_Pack_Group(a22,
00710         TOP_cmp_z1_gt_and_orcm, 0x1d000001000ULL,
00711         TOP_cmp_z1_le_and_orcm, 0x1d000000000ULL,
00712         TOP_cmp_z1_ge_and_orcm, 0x1d200001000ULL,
00713         TOP_cmp_z1_lt_and_orcm, 0x1d200000000ULL,
00714         TOP_cmp4_z1_gt_and_orcm,0x1d400001000ULL,
00715         TOP_cmp4_z1_le_and_orcm,0x1d400000000ULL,
00716         TOP_cmp4_z1_ge_and_orcm,0x1d600001000ULL,
00717         TOP_cmp4_z1_lt_and_orcm,0x1d600000000ULL,
00718         TOP_cmp_z2_gt_and_orcm, 0x1d200000000ULL,
00719         TOP_cmp_z2_le_and_orcm, 0x1d200001000ULL,
00720         TOP_cmp_z2_ge_and_orcm, 0x1d000000000ULL,
00721         TOP_cmp_z2_lt_and_orcm, 0x1d000001000ULL,
00722         TOP_cmp4_z2_gt_and_orcm,0x1d600000000ULL,
00723         TOP_cmp4_z2_le_and_orcm,0x1d600001000ULL,
00724         TOP_cmp4_z2_ge_and_orcm,0x1d400000000ULL,
00725         TOP_cmp4_z2_lt_and_orcm,0x1d400001000ULL,
00726         TOP_UNDEFINED);
00727 
00728 /* ===== A23: Integer Compare to Zero -- Register (pseudo) ===== */
00729   a23 = ISA_Pack_Type_Create("a23");
00730   Operand(0, 0, 0, 6);          // qp
00731   Result(0, 6, 6);              // p1
00732   Result(1, 27, 6);             // p2
00733   Operand(1, 0, 20, 7);         // r3
00734   Instruction_Pack_Group(a23,
00735         TOP_cmp_z1_gt_andcm,    0x19000001000ULL,
00736         TOP_cmp_z1_gt_orcm,     0x1b000001000ULL,
00737         TOP_cmp_z1_le_andcm,    0x19000000000ULL,
00738         TOP_cmp_z1_le_orcm,     0x1b000000000ULL,
00739         TOP_cmp_z1_ge_andcm,    0x19200001000ULL,
00740         TOP_cmp_z1_ge_orcm,     0x1b200001000ULL,
00741         TOP_cmp_z1_lt_andcm,    0x19200000000ULL,
00742         TOP_cmp_z1_lt_orcm,     0x1b200000000ULL,
00743         TOP_cmp4_z1_gt_andcm,   0x19400001000ULL,
00744         TOP_cmp4_z1_gt_orcm,    0x1b400001000ULL,
00745         TOP_cmp4_z1_le_andcm,   0x19400000000ULL,
00746         TOP_cmp4_z1_le_orcm,    0x1b400000000ULL,
00747         TOP_cmp4_z1_ge_andcm,   0x19600001000ULL,
00748         TOP_cmp4_z1_ge_orcm,    0x1b600001000ULL,
00749         TOP_cmp4_z1_lt_andcm,   0x19600000000ULL,
00750         TOP_cmp4_z1_lt_orcm,    0x1b600000000ULL,
00751         TOP_cmp_z2_gt_andcm,    0x19200000000ULL,
00752         TOP_cmp_z2_gt_orcm,     0x1b200000000ULL,
00753         TOP_cmp_z2_le_andcm,    0x19200001000ULL,
00754         TOP_cmp_z2_le_orcm,     0x1b200001000ULL,
00755         TOP_cmp_z2_ge_andcm,    0x19000000000ULL,
00756         TOP_cmp_z2_ge_orcm,     0x1b000000000ULL,
00757         TOP_cmp_z2_lt_andcm,    0x19000001000ULL,
00758         TOP_cmp_z2_lt_orcm,     0x1b000001000ULL,
00759         TOP_cmp4_z2_gt_andcm,   0x19600000000ULL,
00760         TOP_cmp4_z2_gt_orcm,    0x1b600000000ULL,
00761         TOP_cmp4_z2_le_andcm,   0x19600001000ULL,
00762         TOP_cmp4_z2_le_orcm,    0x1b600001000ULL,
00763         TOP_cmp4_z2_ge_andcm,   0x19400000000ULL,
00764         TOP_cmp4_z2_ge_orcm,    0x1b400000000ULL,
00765         TOP_cmp4_z2_lt_andcm,   0x19400001000ULL,
00766         TOP_cmp4_z2_lt_orcm,    0x1b400001000ULL,
00767         TOP_cmp_z2_gt_and,      0x19200001000ULL,
00768         TOP_cmp_z2_gt_or,       0x1b200001000ULL,
00769         TOP_cmp_z2_gt_or_andcm, 0x1d200001000ULL,
00770         TOP_cmp_z2_le_and,      0x19200000000ULL,
00771         TOP_cmp_z2_le_or,       0x1b200000000ULL,
00772         TOP_cmp_z2_le_or_andcm, 0x1d200000000ULL,
00773         TOP_cmp_z2_ge_and,      0x19000001000ULL,
00774         TOP_cmp_z2_ge_or,       0x1b000001000ULL,
00775         TOP_cmp_z2_ge_or_andcm, 0x1d000001000ULL,
00776         TOP_cmp_z2_lt_and,      0x19000000000ULL,
00777         TOP_cmp_z2_lt_or,       0x1b000000000ULL,
00778         TOP_cmp_z2_lt_or_andcm, 0x1d000000000ULL,
00779         TOP_cmp4_z2_gt_and,     0x19600001000ULL,
00780         TOP_cmp4_z2_gt_or,      0x1b600001000ULL,
00781         TOP_cmp4_z2_gt_or_andcm,0x1d600001000ULL,
00782         TOP_cmp4_z2_le_and,     0x19600000000ULL,
00783         TOP_cmp4_z2_le_or,      0x1b600000000ULL,
00784         TOP_cmp4_z2_le_or_andcm,0x1d600000000ULL,
00785         TOP_cmp4_z2_ge_and,     0x19400001000ULL,
00786         TOP_cmp4_z2_ge_or,      0x1b400001000ULL,
00787         TOP_cmp4_z2_ge_or_andcm,0x1d400001000ULL,
00788         TOP_cmp4_z2_lt_and,     0x19400000000ULL,
00789         TOP_cmp4_z2_lt_or,      0x1b400000000ULL,
00790         TOP_cmp4_z2_lt_or_andcm,0x1d400000000ULL,
00791         TOP_UNDEFINED);
00792 
00793 /* ===== I1: Multimedia Multiply and Shift ===== */
00794   i1 = ISA_Pack_Type_Create("i1");
00795   Operand(0, 0, 0, 6);          // qp
00796   Result(0, 6, 7);              // r1
00797   Operand(1, 0, 13, 7);         // r2
00798   Operand(2, 0, 20, 7);         // r3
00799   Adjust_Operand(3, pack_i1, unpack_i1); // ct_2d = (count_2 == 0) ? 0 : (count_2 == 7) ? 1 : (count_2 == 15) ? 2 : 3
00800   Operand(3, 0, 30, 2);         // ct_2d
00801   Instruction_Pack_Group(i1,
00802         TOP_pmpyshr2,           0x0e230000000ULL,
00803         TOP_pmpyshr2_u,         0x0e210000000ULL,
00804         TOP_UNDEFINED);
00805 
00806 /* ===== I2: Multimedia Multiply/Mix/Pack/Unpack ===== */
00807   i2 = ISA_Pack_Type_Create("i2");
00808   Operand(0, 0, 0, 6);          // qp
00809   Result(0, 6, 7);              // r1
00810   Operand(1, 0, 13, 7);         // r2
00811   Operand(2, 0, 20, 7);         // r3
00812   Instruction_Pack_Group(i2,
00813         TOP_pmpy2_r,            0x0ead0000000ULL,
00814         TOP_pmpy2_l,            0x0eaf0000000ULL,
00815         TOP_mix1_r,             0x0e880000000ULL,
00816         TOP_mix2_r,             0x0ea80000000ULL,
00817         TOP_mix4_r,             0x0f880000000ULL,
00818         TOP_mix1_l,             0x0e8a0000000ULL,
00819         TOP_mix2_l,             0x0eaa0000000ULL,
00820         TOP_mix4_l,             0x0f8a0000000ULL,
00821         TOP_pack2_uss,          0x0ea00000000ULL,
00822         TOP_pack2_sss,          0x0ea20000000ULL,
00823         TOP_pack4_sss,          0x0f820000000ULL,
00824         TOP_unpack1_h,          0x0e840000000ULL,
00825         TOP_unpack2_h,          0x0ea40000000ULL,
00826         TOP_unpack4_h,          0x0f840000000ULL,
00827         TOP_unpack1_l,          0x0e860000000ULL,
00828         TOP_unpack2_l,          0x0ea60000000ULL,
00829         TOP_unpack4_l,          0x0f860000000ULL,
00830         TOP_pmin1_u,            0x0e810000000ULL,
00831         TOP_pmax1_u,            0x0e850000000ULL,
00832         TOP_pmin2,              0x0ea30000000ULL,
00833         TOP_pmax2,              0x0ea70000000ULL,
00834         TOP_psad1,              0x0e8b0000000ULL,
00835         TOP_UNDEFINED);
00836 
00837 /* ===== I3: Multimedia Mux1 ===== */
00838   i3 = ISA_Pack_Type_Create("i3");
00839   Operand(0, 0, 0, 6);          // qp
00840   Result(0, 6, 7);              // r1
00841   Operand(1, 0, 13, 7);         // r2
00842   Operand(2, 0, 20, 4);         // mbt_4c
00843   Instruction_Pack_Group(i3,
00844         TOP_mux1,               0x0eca0000000ULL,
00845         TOP_UNDEFINED);
00846 
00847 /* ===== I4: Multimedia Mux2 ===== */
00848   i4 = ISA_Pack_Type_Create("i4");
00849   Operand(0, 0, 0, 6);          // qp
00850   Result(0, 6, 7);              // r1
00851   Operand(1, 0, 13, 7);         // r2
00852   Operand(2, 0, 20, 8);         // mht_8c
00853   Instruction_Pack_Group(i4,
00854         TOP_mux2,               0x0eea0000000ULL,
00855         TOP_UNDEFINED);
00856 
00857 /* ===== I5: Shift Right -- Variable ===== */
00858   i5 = ISA_Pack_Type_Create("i5");
00859   Operand(0, 0, 0, 6);          // qp
00860   Result(0, 6, 7);              // r1
00861   Operand(1, 0, 20, 7);         // r3
00862   Operand(2, 0, 13, 7);         // r2
00863   Instruction_Pack_Group(i5,
00864         TOP_pshr2,              0x0e220000000ULL,
00865         TOP_pshr4,              0x0f020000000ULL,
00866         TOP_shr,                0x0f220000000ULL,
00867         TOP_pshr2_u,            0x0e200000000ULL,
00868         TOP_pshr4_u,            0x0f000000000ULL,
00869         TOP_shr_u,              0x0f200000000ULL,
00870         TOP_UNDEFINED);
00871 
00872 /* ===== I6: Multimedia Shift Right -- Fixed ===== */
00873   i6 = ISA_Pack_Type_Create("i6");
00874   Operand(0, 0, 0, 6);          // qp
00875   Result(0, 6, 7);              // r1
00876   Operand(1, 0, 20, 7);         // r3
00877   Operand(2, 0, 14, 5);         // count_5b
00878   Instruction_Pack_Group(i6,
00879         TOP_pshr2_i,            0x0e630000000ULL,
00880         TOP_pshr4_i,            0x0f430000000ULL,
00881         TOP_pshr2_i_u,          0x0e610000000ULL,
00882         TOP_pshr4_i_u,          0x0f410000000ULL,
00883         TOP_UNDEFINED);
00884 
00885 /* ===== I7: Shift Left -- Variable ===== */
00886   i7 = ISA_Pack_Type_Create("i7");
00887   Operand(0, 0, 0, 6);          // qp
00888   Result(0, 6, 7);              // r1
00889   Operand(1, 0, 13, 7);         // r2
00890   Operand(2, 0, 20, 7);         // r3
00891   Instruction_Pack_Group(i7,
00892         TOP_pshl2,              0x0e240000000ULL,
00893         TOP_pshl4,              0x0f040000000ULL,
00894         TOP_shl,                0x0f240000000ULL,
00895         TOP_UNDEFINED);
00896 
00897 /* ===== I8: Multimedia Shift Left -- Fixed ===== */
00898   i8 = ISA_Pack_Type_Create("i8");
00899   Operand(0, 0, 0, 6);          // qp
00900   Result(0, 6, 7);              // r1
00901   Operand(1, 0, 13, 7);         // r2
00902   Adjust_Operand(2, comp5, comp5); // ccount_5b = 31 - count_5
00903   Operand(2, 0, 20, 5);         // ccount_5b
00904   Instruction_Pack_Group(i8,
00905         TOP_pshl2_i,            0x0ee50000000ULL,
00906         TOP_pshl4_i,            0x0fc50000000ULL,
00907         TOP_UNDEFINED);
00908 
00909 /* ===== I9: Population Count ===== */
00910   i9 = ISA_Pack_Type_Create("i9");
00911   Operand(0, 0, 0, 6);          // qp
00912   Result(0, 6, 7);              // r1
00913   Operand(1, 0, 20, 7);         // r3
00914   Instruction_Pack_Group(i9,
00915         TOP_popcnt,             0x0e690000000ULL,
00916         TOP_UNDEFINED);
00917 
00918 /* ===== I10: Shift Right Pair ===== */
00919   i10 = ISA_Pack_Type_Create("i10");
00920   Operand(0, 0, 0, 6);          // qp
00921   Result(0, 6, 7);              // r1
00922   Operand(1, 0, 13, 7);         // r2
00923   Operand(2, 0, 20, 7);         // r3
00924   Operand(3, 0, 27, 6);         // count_6d
00925   Instruction_Pack_Group(i10,
00926         TOP_shrp,               0x0ac00000000ULL,
00927         TOP_UNDEFINED);
00928 
00929 /* ===== I11: Extract ===== */
00930   i11 = ISA_Pack_Type_Create("i11");
00931   Operand(0, 0, 0, 6);          // qp
00932   Result(0, 6, 7);              // r1
00933   Operand(1, 0, 20, 7);         // r3
00934   Operand(2, 0, 14, 6);         // pos_6b
00935   Adjust_Operand(3, decr, incr); // len_6d = len_6 - 1
00936   Operand(3, 0, 27, 6);         // len_6d
00937   Instruction_Pack_Group(i11,
00938         TOP_extr_u,             0x0a400000000ULL,
00939         TOP_extr,               0x0a400002000ULL,
00940         TOP_UNDEFINED);
00941 
00942 /* ===== I12: Zero and Deposit ===== */
00943   i12 = ISA_Pack_Type_Create("i12");
00944   Operand(0, 0, 0, 6);          // qp
00945   Result(0, 6, 7);              // r1
00946   Operand(1, 0, 13, 7);         // r2
00947   Adjust_Operand(2, comp6, comp6); // cpos_6c = 63 - pos_6
00948   Operand(2, 0, 20, 6);         // cpos_6c
00949   Adjust_Operand(3, decr, incr); // len_6d = len_6 - 1
00950   Operand(3, 0, 27, 6);         // len_6d
00951   Instruction_Pack_Group(i12,
00952         TOP_dep_z,              0x0a600000000ULL,
00953         TOP_UNDEFINED);
00954 
00955 /* ===== I13: Zero and Deposit Immediate_8 ===== */
00956   i13 = ISA_Pack_Type_Create("i13");
00957   Operand(0, 0, 0, 6);          // qp
00958   Result(0, 6, 7);              // r1
00959   Operand(1, 0, 13, 7);         // imm_7b
00960   Operand(1, 7, 36, 1);         // s
00961   Adjust_Operand(2, comp6, comp6); // cpos_6c = 63 - pos_6
00962   Operand(2, 0, 20, 6);         // cpos_6c
00963   Adjust_Operand(3, decr, incr); // len_6d = len_6 - 1
00964   Operand(3, 0, 27, 6);         // len_6d
00965   Instruction_Pack_Group(i13,
00966         TOP_dep_i_z,            0x0a604000000ULL,
00967         TOP_UNDEFINED);
00968 
00969 /* ===== I14: Deposit Immediate_1 ===== */
00970   i14 = ISA_Pack_Type_Create("i14");
00971   Operand(0, 0, 0, 6);          // qp
00972   Result(0, 6, 7);              // r1
00973   Operand(1, 0, 36, 1);         // s
00974   Operand(2, 0, 20, 7);         // r3
00975   Adjust_Operand(3, comp6, comp6); // cpos_6b = 63 - pos_6
00976   Operand(3, 0, 14, 6);         // cpos_6b
00977   Adjust_Operand(4, decr, incr); // len_6d = len_6 - 1;
00978   Operand(4, 0, 27, 6);         // len_6d
00979   Instruction_Pack_Group(i14,
00980         TOP_dep_i,              0x0ae00000000ULL,
00981         TOP_UNDEFINED);
00982 
00983 /* ===== I15: Deposit ===== */
00984   i15 = ISA_Pack_Type_Create("i15");
00985   Operand(0, 0, 0, 6);          // qp
00986   Result(0, 6, 7);              // r1
00987   Operand(1, 0, 13, 7);         // r2
00988   Operand(2, 0, 20, 7);         // r3
00989   Adjust_Operand(3, comp6, comp6); // cpos_6b = 63 - pos_6
00990   Operand(3, 0, 31, 6);         // cpos_6d
00991   Adjust_Operand(4, decr, incr); // len_4d = len_4 - 1;
00992   Operand(4, 0, 27, 4);         // len_4d
00993   Instruction_Pack_Group(i15,
00994         TOP_dep,                0x08000000000ULL,
00995         TOP_UNDEFINED);
00996 
00997 /* ===== I16: Test Bit ===== */
00998   i16 = ISA_Pack_Type_Create("i16");
00999   Operand(0, 0, 0, 6);          // qp
01000   Result(0, 6, 6);              // p1
01001   Result(1, 27, 6);             // p2
01002   Operand(1, 0, 20, 7);         // r3
01003   Operand(2, 0, 14, 6);         // pos_6b
01004   Instruction_Pack_Group(i16,
01005         TOP_tbit_z,             0x0a000000000ULL,
01006         TOP_tbit_z_unc,         0x0a000001000ULL,
01007         TOP_tbit_z_and,         0x0b000000000ULL,
01008         TOP_tbit_nz_and,        0x0b000001000ULL,
01009         TOP_tbit_z_or,          0x0a200000000ULL,
01010         TOP_tbit_nz_or,         0x0a200001000ULL,
01011         TOP_tbit_z_or_andcm,    0x0b200000000ULL,
01012         TOP_tbit_nz_or_andcm,   0x0b200001000ULL,
01013         TOP_UNDEFINED);
01014 
01015 /* ===== I17: Test NaT ===== */
01016   i17 = ISA_Pack_Type_Create("i17");
01017   Operand(0, 0, 0, 6);          // qp
01018   Result(0, 6, 6);              // p1
01019   Result(1, 27, 6);             // p2
01020   Operand(1, 0, 20, 7);         // r3
01021   Instruction_Pack_Group(i17,
01022         TOP_tnat_z,             0x0a000002000ULL,
01023         TOP_tnat_z_unc,         0x0a000003000ULL,
01024         TOP_tnat_z_and,         0x0b000002000ULL,
01025         TOP_tnat_nz_and,        0x0b000003000ULL,
01026         TOP_tnat_z_or,          0x0a200002000ULL,
01027         TOP_tnat_nz_or,         0x0a200003000ULL,
01028         TOP_tnat_z_or_andcm,    0x0b200002000ULL,
01029         TOP_tnat_nz_or_andcm,   0x0b200003000ULL,
01030         TOP_UNDEFINED);
01031 
01032 /* ===== I19: Break/Nop ===== */
01033   i19 = ISA_Pack_Type_Create("i19");
01034   Operand(0, 0, 0, 6);          // qp
01035   Operand(1, 0, 6, 20);         // imm_20a
01036   Operand(1, 20, 36, 1);        // i
01037   Instruction_Pack_Group(i19,
01038         TOP_break_i,            0x00000000000ULL,
01039         TOP_nop_i,              0x00008000000ULL,
01040         TOP_UNDEFINED);
01041 
01042 /* ===== I20: Integer Speculation Check ===== */
01043   i20 = ISA_Pack_Type_Create("i20");
01044   Operand(0, 0, 0, 6);          // qp
01045   Operand(1, 0, 13, 7);         // r2
01046 // Adjust_Operand(2, shr4, shl4); // imm_21 = target_25 >> 4
01047   Operand(2, 4, 6, 7);          // imm_7a
01048   Operand(2, 11, 20, 13);       // imm_13c
01049   Operand(2, 24, 36, 1);        // s
01050   Instruction_Pack_Group(i20,
01051         TOP_chk_s_i,            0x00200000000ULL,
01052         TOP_UNDEFINED);
01053 
01054 /* ===== I21: Move to BR ===== */
01055   i21 = ISA_Pack_Type_Create("i21");
01056   Operand(0, 0, 0, 6);          // qp
01057   Operand(1, 0, 20, 2);         // mwh
01058   Operand(2, 0, 23, 1);         // ih
01059   Result(0, 6, 3);              // b1
01060   Operand(3, 0, 13, 7);         // r2
01061 // Adjust_Operand(4, shr4, shl4); // timm_9c = tag_13 >> 4
01062   Operand(4, 4, 24, 9);         // timm_9c
01063   Instruction_Pack_Group(i21,
01064         TOP_mov_t_br_i,         0x00e00000000ULL,
01065         TOP_mov_t_br_ret,       0x00e00400000ULL,
01066         TOP_UNDEFINED);
01067 
01068 /* ===== I22: Move from BR ===== */
01069   i22 = ISA_Pack_Type_Create("i22");
01070   Operand(0, 0, 0, 6);          // qp
01071   Result(0, 6, 7);              // r1
01072   Operand(1, 0, 13, 3);         // b2
01073   Instruction_Pack_Group(i22,
01074         TOP_mov_f_br,           0x00188000000ULL,
01075         TOP_UNDEFINED);
01076 
01077 /* ===== I23: Move to Predicates -- Register ===== */
01078   i23 = ISA_Pack_Type_Create("i23");
01079   Operand(0, 0, 0, 6);          // qp
01080   Operand(1, 0, 13, 7);         // r2
01081 // Adjust_Operand(2, shr1, shl1); // mask_16 = mask_17 >> 1
01082   Operand(2, 1, 6, 7);          // mask_7a
01083   Operand(2, 8, 24, 8);         // mask_8c
01084   Operand(2, 16, 36, 1);        // s
01085   Instruction_Pack_Group(i23,
01086         TOP_mov_t_pr,           0x00600000000ULL,
01087         TOP_UNDEFINED);
01088 
01089 /* ===== I24: Move to Predicates -- Immediate_44 ===== */
01090   i24 = ISA_Pack_Type_Create("i24");
01091   Operand(0, 0, 0, 6);          // qp
01092 // Adjust_Operand(1, shr16, shl16); // imm_28 = imm_44 >> 16
01093   Operand(1, 16, 6, 27);        // imm_27a
01094   Operand(1, 43, 36, 1);        // s
01095   Instruction_Pack_Group(i24,
01096         TOP_mov_t_pr_i,         0x00400000000ULL,
01097         TOP_UNDEFINED);
01098 
01099 /* ===== I25: Move from Predicates/IP ===== */
01100   i25 = ISA_Pack_Type_Create("i25");
01101   Operand(0, 0, 0, 6);          // qp
01102   Result(0, 6, 7);              // r1
01103   Instruction_Pack_Group(i25,
01104         TOP_mov_f_ip,           0x00180000000ULL,
01105         TOP_mov_f_pr,           0x00198000000ULL,
01106         TOP_UNDEFINED);
01107 
01108 /* ===== I26: Move to AR -- Register ===== */
01109   i26 = ISA_Pack_Type_Create("i26");
01110   Operand(0, 0, 0, 6);          // qp
01111   Result(0, 20, 7);             // ar3
01112   Operand(1, 0, 13, 7);         // r2
01113   Instruction_Pack_Group(i26,
01114         TOP_mov_t_ar_r_i,       0x00150000000ULL,
01115         TOP_UNDEFINED);
01116 
01117 /* ===== I27: Move to AR -- Immediate_8 ===== */
01118   i27 = ISA_Pack_Type_Create("i27");
01119   Operand(0, 0, 0, 6);          // qp
01120   Result(0, 20, 7);             // ar3
01121   Operand(1, 0, 13, 7);         // imm_7b
01122   Operand(1, 7, 36, 1);         // s
01123   Instruction_Pack_Group(i27,
01124         TOP_mov_t_ar_i_i,       0x00050000000ULL,
01125         TOP_UNDEFINED);
01126 
01127 /* ===== I28: Move from AR ===== */
01128   i28 = ISA_Pack_Type_Create("i28");
01129   Operand(0, 0, 0, 6);          // qp
01130   Result(0, 6, 7);              // r1
01131   Operand(1, 0, 20, 7);         // ar3
01132   Instruction_Pack_Group(i28,
01133         TOP_mov_f_ar_i,         0x00190000000ULL,
01134         TOP_UNDEFINED);
01135 
01136 /* ===== I29: Sign/Zero Extend/Compute Zero Index ===== */
01137   i29 = ISA_Pack_Type_Create("i29");
01138   Operand(0, 0, 0, 6);          // qp
01139   Result(0, 6, 7);              // r1
01140   Operand(1, 0, 20, 7);         // r3
01141   Instruction_Pack_Group(i29,
01142         TOP_zxt1,               0x00080000000ULL,
01143         TOP_zxt2,               0x00088000000ULL,
01144         TOP_zxt4,               0x00090000000ULL,
01145         TOP_sxt1,               0x000a0000000ULL,
01146         TOP_sxt2,               0x000a8000000ULL,
01147         TOP_sxt4,               0x000b0000000ULL,
01148         TOP_czx1_l,             0x000c0000000ULL,
01149         TOP_czx2_l,             0x000c8000000ULL,
01150         TOP_czx1_r,             0x000e0000000ULL,
01151         TOP_czx2_r,             0x000e8000000ULL,
01152         TOP_UNDEFINED);
01153 
01154 /* ===== I30: Move to BR (pseudo) ===== */
01155   i30 = ISA_Pack_Type_Create("i30");
01156   Operand(0, 0, 0, 6);          // qp
01157   Result(0, 6, 3);              // b1
01158   Operand(1, 0, 13, 7);         // r2
01159   Instruction_Pack_Group(i30,
01160         TOP_mov_t_br,           0x00e00100000ULL,
01161         TOP_UNDEFINED);
01162 
01163 /* ===== I31: Test Bit (pseudo) ===== */
01164   i31 = ISA_Pack_Type_Create("i31");
01165   Operand(0, 0, 0, 6);          // qp
01166   Result(0, 27, 6);             // p2
01167   Result(1, 6, 6);              // p1
01168   Operand(1, 0, 20, 7);         // r3
01169   Operand(2, 0, 14, 6);         // pos_6b
01170   Instruction_Pack_Group(i31,
01171         TOP_tbit_nz,            0x0a000000000ULL,
01172         TOP_tbit_nz_unc,        0x0a000001000ULL,
01173         TOP_UNDEFINED);
01174 
01175 /* ===== I32: Test NaT (pseudo) ===== */
01176   i32 = ISA_Pack_Type_Create("i32");
01177   Operand(0, 0, 0, 6);          // qp
01178   Result(0, 27, 6);             // p2
01179   Result(1, 6, 6);              // p1
01180   Operand(1, 0, 20, 7);         // r3
01181   Instruction_Pack_Group(i32,
01182         TOP_tnat_nz,            0x0a000002000ULL,
01183         TOP_tnat_nz_unc,        0x0a000003000ULL,
01184         TOP_UNDEFINED);
01185 
01186 /* ===== I33: Shift Left Immediate (pseudo) ===== */
01187 // NOTE: this packing description is never used (because of the
01188 // 64-count transformation required), it must be lowered to a 
01189 // machine inst instead.
01190   i33 = ISA_Pack_Type_Create("i33");
01191   Operand(0, 0, 0, 6);          // qp
01192   Result(0, 6, 7);              // r1
01193   Operand(1, 0, 13, 7);         // r2
01194   Operand(2, 0, 20, 6);         // cpos_6c
01195   Operand(2, 0, 27, 6);         // len_6d
01196   Instruction_Pack_Group(i33,
01197         TOP_shl_i,              0x0a600000000ULL,
01198         TOP_UNDEFINED);
01199 
01200 /* ===== I34: Shift Right Immediate (pseudo) ===== */
01201 // NOTE: this packing description is never used (because of the
01202 // 64-count transformation required), it must be lowered to a 
01203 // machine inst instead.
01204   i34 = ISA_Pack_Type_Create("i34");
01205   Operand(0, 0, 0, 6);          // qp
01206   Result(0, 6, 7);              // r1
01207   Operand(1, 0, 20, 7);         // r3
01208   Operand(2, 0, 14, 6);         // pos_6b
01209   Operand(2, 0, 27, 6);         // len_6d
01210   Instruction_Pack_Group(i34,
01211         TOP_shr_i_u,            0x0a400000000ULL,
01212         TOP_shr_i,              0x0a400002000ULL,
01213         TOP_UNDEFINED);
01214 
01215 /* ===== M1a: Integer Load ===== */
01216   m1a = ISA_Pack_Type_Create("m1a");
01217   Operand(0, 0, 0, 6);          // qp
01218   Operand(1, 0, 32, 4);         // ldtype
01219   Operand(2, 0, 28, 2);         // ldhint
01220   Result(0, 6, 7);              // r1
01221   Operand(3, 0, 20, 7);         // r3
01222   Instruction_Pack_Group(m1a,
01223         TOP_ld1,                0x08000000000ULL,
01224         TOP_ld2,                0x08040000000ULL,
01225         TOP_ld4,                0x08080000000ULL,
01226         TOP_ld8,                0x080c0000000ULL,
01227         TOP_UNDEFINED);
01228 
01229 /* ===== M1b: Integer Load ===== */
01230   m1b = ISA_Pack_Type_Create("m1b");
01231   Operand(0, 0, 0, 6);          // qp
01232   Operand(1, 0, 28, 2);         // ldhint
01233   Result(0, 6, 7);              // r1
01234   Operand(2, 0, 20, 7);         // r3
01235   Instruction_Pack_Group(m1b,
01236         TOP_ld8_fill,           0x086c0000000ULL,
01237         TOP_UNDEFINED);
01238 
01239 /* ===== M2a: Integer Load -- Increment by Register ===== */
01240   m2a = ISA_Pack_Type_Create("m2a");
01241   Operand(0, 0, 0, 6);          // qp
01242   Operand(1, 0, 32, 4);         // ldtype
01243   Operand(2, 0, 28, 2);         // ldhint
01244   Result(0, 6, 7);              // r1
01245   Operand(3, 0, 20, 7);         // r3
01246   Operand(4, 0, 13, 7);         // r2
01247   Instruction_Pack_Group(m2a,
01248         TOP_ld1_r,              0x09000000000ULL,
01249         TOP_ld2_r,              0x09040000000ULL,
01250         TOP_ld4_r,              0x09080000000ULL,
01251         TOP_ld8_r,              0x090c0000000ULL,
01252         TOP_UNDEFINED);
01253 
01254 /* ===== M2b: Integer Load -- Increment by Register ===== */
01255   m2b = ISA_Pack_Type_Create("m2b");
01256   Operand(0, 0, 0, 6);          // qp
01257   Operand(1, 0, 28, 2);         // ldhint
01258   Result(0, 6, 7);              // r1
01259   Operand(2, 0, 20, 7);         // r3
01260   Operand(3, 0, 13, 7);         // r2
01261   Instruction_Pack_Group(m2b,
01262         TOP_ld8_r_fill,         0x096c0000000ULL,
01263         TOP_UNDEFINED);
01264 
01265 /* ===== M3a: Integer Load -- Increment by Immediate ===== */
01266   m3a = ISA_Pack_Type_Create("m3a");
01267   Operand(0, 0, 0, 6);          // qp
01268   Operand(1, 0, 32, 4);         // ldtype
01269   Operand(2, 0, 28, 2);         // ldhint
01270   Result(0, 6, 7);              // r1
01271   Operand(3, 0, 20, 7);         // r3
01272   Operand(4, 0, 13, 7);         // imm_7b
01273   Operand(4, 7, 27, 1);         // i
01274   Operand(4, 8, 36, 1);         // s
01275   Instruction_Pack_Group(m3a,
01276         TOP_ld1_i,              0x0a000000000ULL,
01277         TOP_ld2_i,              0x0a040000000ULL,
01278         TOP_ld4_i,              0x0a080000000ULL,
01279         TOP_ld8_i,              0x0a0c0000000ULL,
01280         TOP_UNDEFINED);
01281 
01282 /* ===== M3b: Integer Load -- Increment by Immediate ===== */
01283   m3b = ISA_Pack_Type_Create("m3b");
01284   Operand(0, 0, 0, 6);          // qp
01285   Operand(1, 0, 28, 2);         // ldhint
01286   Result(0, 6, 7);              // r1
01287   Operand(2, 0, 20, 7);         // r3
01288   Operand(3, 0, 13, 7);         // imm_7b
01289   Operand(3, 7, 27, 1);         // i
01290   Operand(3, 8, 36, 1);         // s
01291   Instruction_Pack_Group(m3b,
01292         TOP_ld8_i_fill,         0x0a6c0000000ULL,
01293         TOP_UNDEFINED);
01294 
01295 /* ===== M4a: Integer Store ===== */
01296   m4a = ISA_Pack_Type_Create("m4a");
01297   Operand(0, 0, 0, 6);          // qp
01298   Operand(1, 0, 32, 1);         // sttype
01299   Operand(2, 0, 28, 2);         // sthint
01300   Operand(3, 0, 20, 7);         // r3
01301   Operand(4, 0, 13, 7);         // r2
01302   Instruction_Pack_Group(m4a,
01303         TOP_st1,                0x08c00000000ULL,
01304         TOP_st2,                0x08c40000000ULL,
01305         TOP_st4,                0x08c80000000ULL,
01306         TOP_st8,                0x08cc0000000ULL,
01307         TOP_UNDEFINED);
01308 
01309 /* ===== M4b: Integer Store ===== */
01310   m4b = ISA_Pack_Type_Create("m4b");
01311   Operand(0, 0, 0, 6);          // qp
01312   Operand(1, 0, 28, 2);         // sthint
01313   Operand(2, 0, 20, 7);         // r3
01314   Operand(3, 0, 13, 7);         // r2
01315   Instruction_Pack_Group(m4b,
01316         TOP_st8_spill,          0x08ec0000000ULL,
01317         TOP_UNDEFINED);
01318 
01319 /* ===== M5a: Integer Store -- Increment by Immediate ===== */
01320   m5a = ISA_Pack_Type_Create("m5a");
01321   Operand(0, 0, 0, 6);          // qp
01322   Operand(1, 0, 32, 1);         // sttype
01323   Operand(2, 0, 28, 2);         // sthint
01324   Operand(3, 0, 20, 7);         // r3
01325   Operand(4, 0, 13, 7);         // r2
01326   Operand(5, 0, 6, 7);          // imm_7a
01327   Operand(5, 7, 27, 1);         // i
01328   Operand(5, 8, 36, 1);         // s
01329   Instruction_Pack_Group(m5a,
01330         TOP_st1_i,              0x0ac00000000ULL,
01331         TOP_st2_i,              0x0ac40000000ULL,
01332         TOP_st4_i,              0x0ac80000000ULL,
01333         TOP_st8_i,              0x0acc0000000ULL,
01334         TOP_UNDEFINED);
01335 
01336 /* ===== M5b: Integer Store -- Increment by Immediate ===== */
01337   m5b = ISA_Pack_Type_Create("m5b");
01338   Operand(0, 0, 0, 6);          // qp
01339   Operand(1, 0, 28, 2);         // sthint
01340   Operand(2, 0, 20, 7);         // r3
01341   Operand(3, 0, 13, 7);         // r2
01342   Operand(4, 0, 6, 7);          // imm_7a
01343   Operand(4, 7, 27, 1);         // i
01344   Operand(4, 8, 36, 1);         // s
01345   Instruction_Pack_Group(m5b,
01346         TOP_st8_i_spill,        0x0aec0000000ULL,
01347         TOP_UNDEFINED);
01348 
01349 /* ===== M6a: Floating-point Load ===== */
01350   m6a = ISA_Pack_Type_Create("m6a");
01351   Operand(0, 0, 0, 6);          // qp
01352   Operand(1, 0, 32, 4);         // fldtype
01353   Operand(2, 0, 28, 2);         // ldhint
01354   Result(0, 6, 7);              // f1
01355   Operand(3, 0, 20, 7);         // r3
01356   Instruction_Pack_Group(m6a,
01357         TOP_ldfs,               0x0c080000000ULL,
01358         TOP_ldfd,               0x0c0c0000000ULL,
01359         TOP_ldf8,               0x0c040000000ULL,
01360         TOP_ldfe,               0x0c000000000ULL,
01361         TOP_UNDEFINED);
01362 
01363 /* ===== M6b: Floating-point Load ===== */
01364   m6b = ISA_Pack_Type_Create("m6b");
01365   Operand(0, 0, 0, 6);          // qp
01366   Operand(1, 0, 28, 2);         // ldhint
01367   Result(0, 6, 7);              // f1
01368   Operand(2, 0, 20, 7);         // r3
01369   Instruction_Pack_Group(m6b,
01370         TOP_ldf_fill,           0x0c6c0000000ULL,
01371         TOP_UNDEFINED);
01372 
01373 /* ===== M7a: Floating-point Load -- Increment by Register ===== */
01374   m7a = ISA_Pack_Type_Create("m7a");
01375   Operand(0, 0, 0, 6);          // qp
01376   Operand(1, 0, 32, 4);         // fldtype
01377   Operand(2, 0, 28, 2);         // ldhint
01378   Result(0, 6, 7);              // f1
01379   Operand(3, 0, 20, 7);         // r3
01380   Operand(4, 0, 13, 7);         // r2
01381   Instruction_Pack_Group(m7a,
01382         TOP_ldfs_r,             0x0d080000000ULL,
01383         TOP_ldfd_r,             0x0d0c0000000ULL,
01384         TOP_ldf8_r,             0x0d040000000ULL,
01385         TOP_ldfe_r,             0x0d000000000ULL,
01386         TOP_UNDEFINED);
01387 
01388 /* ===== M7b: Floating-point Load -- Increment by Register ===== */
01389   m7b = ISA_Pack_Type_Create("m7b");
01390   Operand(0, 0, 0, 6);          // qp
01391   Operand(1, 0, 28, 2);         // ldhint
01392   Result(0, 6, 7);              // f1
01393   Operand(2, 0, 20, 7);         // r3
01394   Operand(3, 0, 13, 7);         // r2
01395   Instruction_Pack_Group(m7b,
01396         TOP_ldf_r_fill,         0x0d6c0000000ULL,
01397         TOP_UNDEFINED);
01398 
01399 /* ===== M8a: Floating-point Load -- Increment by Immediate ===== */
01400   m8a = ISA_Pack_Type_Create("m8a");
01401   Operand(0, 0, 0, 6);          // qp
01402   Operand(1, 0, 32, 4);         // fldtype
01403   Operand(2, 0, 28, 2);         // ldhint
01404   Result(0, 6, 7);              // f1
01405   Operand(3, 0, 20, 7);         // r3
01406   Operand(4, 0, 13, 7);         // imm_7a
01407   Operand(4, 7, 27, 1);         // i
01408   Operand(4, 8, 36, 1);         // s
01409   Instruction_Pack_Group(m8a,
01410         TOP_ldfs_i,             0x0e080000000ULL,
01411         TOP_ldfd_i,             0x0e0c0000000ULL,
01412         TOP_ldf8_i,             0x0e040000000ULL,
01413         TOP_ldfe_i,             0x0e000000000ULL,
01414         TOP_UNDEFINED);
01415 
01416 /* ===== M8b: Floating-point Load -- Increment by Immediate ===== */
01417   m8b = ISA_Pack_Type_Create("m8b");
01418   Operand(0, 0, 0, 6);          // qp
01419   Operand(1, 0, 28, 2);         // ldhint
01420   Result(0, 6, 7);              // f1
01421   Operand(2, 0, 20, 7);         // r3
01422   Operand(3, 0, 13, 7);         // imm_7a
01423   Operand(3, 7, 27, 1);         // i
01424   Operand(3, 8, 36, 1);         // s
01425   Instruction_Pack_Group(m8b,
01426         TOP_ldf_i_fill,         0x0e6c0000000ULL,
01427         TOP_UNDEFINED);
01428 
01429 /* ===== M9: Floating-point Store ===== */
01430   m9 = ISA_Pack_Type_Create("m9");
01431   Operand(0, 0, 0, 6);          // qp
01432   Operand(1, 0, 28, 2);         // sthint
01433   Operand(2, 0, 20, 7);         // r3
01434   Operand(3, 0, 13, 7);         // f2
01435   Instruction_Pack_Group(m9,
01436         TOP_stfs,               0x0cc80000000ULL,
01437         TOP_stfd,               0x0ccc0000000ULL,
01438         TOP_stf8,               0x0cc40000000ULL,
01439         TOP_stfe,               0x0cc00000000ULL,
01440         TOP_stf_spill,          0x0cec0000000ULL,
01441         TOP_UNDEFINED);
01442 
01443 /* ===== M10: Floating-point Store -- Increment by Immediate ===== */
01444   m10 = ISA_Pack_Type_Create("m10");
01445   Operand(0, 0, 0, 6);          // qp
01446   Operand(1, 0, 28, 2);         // sthint
01447   Operand(2, 0, 20, 7);         // r3
01448   Operand(3, 0, 13, 7);         // f2
01449   Operand(4, 0, 6, 7);          // imm_7a
01450   Operand(4, 7, 27, 1);         // i
01451   Operand(4, 8, 36, 1);         // s
01452   Instruction_Pack_Group(m10,
01453         TOP_stfs_i,             0x0ec80000000ULL,
01454         TOP_stfd_i,             0x0ecc0000000ULL,
01455         TOP_stf8_i,             0x0ec40000000ULL,
01456         TOP_stfe_i,             0x0ec00000000ULL,
01457         TOP_stf_i_spill,        0x0eec0000000ULL,
01458         TOP_UNDEFINED);
01459 
01460 /* ===== M11: Floating-point Load Pair ===== */
01461   m11 = ISA_Pack_Type_Create("m11");
01462   Operand(0, 0, 0, 6);          // qp
01463   Operand(1, 0, 32, 4);         // fldtype
01464   Operand(2, 0, 28, 2);         // ldhint
01465   Result(0, 6, 7);              // f1
01466   Result(1, 13, 7);             // f2
01467   Operand(3, 0, 20, 7);         // r3
01468   Instruction_Pack_Group(m11,
01469         TOP_ldfps,              0x0c088000000ULL,
01470         TOP_ldfpd,              0x0c0c8000000ULL,
01471         TOP_ldfp8,              0x0c048000000ULL,
01472         TOP_UNDEFINED);
01473 
01474 /* ===== M12: Floating-point Load Pair -- Increment by Immediate ===== */
01475   m12 = ISA_Pack_Type_Create("m12");
01476   Operand(0, 0, 0, 6);          // qp
01477   Operand(1, 0, 32, 4);         // fldtype
01478   Operand(2, 0, 28, 2);         // ldhint
01479   Result(0, 6, 7);              // f1
01480   Result(1, 13, 7);             // f2
01481   Operand(3, 0, 20, 7);         // r3
01482   Instruction_Pack_Group(m12,
01483         TOP_ldfps_i,            0x0d088000000ULL,
01484         TOP_ldfpd_i,            0x0d0c8000000ULL,
01485         TOP_ldfp8_i,            0x0d048000000ULL,
01486         TOP_UNDEFINED);
01487 
01488 /* ===== M13: Line Prefetch ===== */
01489   m13 = ISA_Pack_Type_Create("m13");
01490   Operand(0, 0, 0, 6);          // qp
01491   Operand(1, 0, 28, 2);         // lfhint
01492   Operand(2, 0, 20, 7);         // r3
01493   Instruction_Pack_Group(m13,
01494         TOP_lfetch,             0x0cb00000000ULL,
01495         TOP_lfetch_excl,        0x0cb40000000ULL,
01496         TOP_lfetch_fault,       0x0cb80000000ULL,
01497         TOP_lfetch_fault_excl,  0x0cbc0000000ULL,
01498         TOP_UNDEFINED);
01499 
01500 /* ===== M14: Line Prefetch -- Increment by Register ===== */
01501   m14 = ISA_Pack_Type_Create("m14");
01502   Operand(0, 0, 0, 6);          // qp
01503   Operand(1, 0, 28, 2);         // lfhint
01504   Operand(2, 0, 20, 7);         // r3
01505   Operand(3, 0, 13, 7);         // r2
01506   Instruction_Pack_Group(m14,
01507         TOP_lfetch_r,           0x0db00000000ULL,
01508         TOP_lfetch_r_excl,      0x0db40000000ULL,
01509         TOP_lfetch_r_fault,     0x0db80000000ULL,
01510         TOP_lfetch_r_fault_excl,0x0dbc0000000ULL,
01511         TOP_UNDEFINED);
01512 
01513 /* ===== M15: Line Prefetch -- Increment by Immediate ===== */
01514   m15 = ISA_Pack_Type_Create("m15");
01515   Operand(0, 0, 0, 6);          // qp
01516   Operand(1, 0, 28, 2);         // lfhint
01517   Operand(2, 0, 20, 7);         // r3
01518   Operand(3, 0, 13, 7);         // imm_7b
01519   Operand(3, 7, 27, 1);         // i
01520   Operand(3, 8, 36, 1);         // s
01521   Instruction_Pack_Group(m15,
01522         TOP_lfetch_i,           0x0eb00000000ULL,
01523         TOP_lfetch_i_excl,      0x0eb40000000ULL,
01524         TOP_lfetch_i_fault,     0x0eb80000000ULL,
01525         TOP_lfetch_i_fault_excl,0x0ebc0000000ULL,
01526         TOP_UNDEFINED);
01527 
01528 /* ===== M16a: Exchange/Compare and Exchange ===== */
01529   m16a = ISA_Pack_Type_Create("m16a");
01530   Operand(0, 0, 0, 6);          // qp
01531   Operand(1, 0, 32, 1);         // sem
01532   Operand(2, 0, 28, 2);         // ldhint
01533   Result(0, 6, 7);              // r1
01534   Operand(3, 0, 20, 7);         // r3
01535   Operand(4, 0, 13, 7);         // r2
01536   Instruction_Pack_Group(m16a,
01537         TOP_cmpxchg1,           0x08008000000ULL,
01538         TOP_cmpxchg2,           0x08048000000ULL,
01539         TOP_cmpxchg4,           0x08088000000ULL,
01540         TOP_cmpxchg8,           0x080c8000000ULL,
01541         TOP_UNDEFINED);
01542 
01543 /* ===== M16b: Exchange/Compare and Exchange ===== */
01544   m16b = ISA_Pack_Type_Create("m16b");
01545   Operand(0, 0, 0, 6);          // qp
01546   Operand(1, 0, 28, 2);         // ldhint
01547   Result(0, 6, 7);              // r1
01548   Operand(2, 0, 20, 7);         // r3
01549   Operand(3, 0, 13, 7);         // r2
01550   Instruction_Pack_Group(m16b,
01551         TOP_xchg1,              0x08208000000ULL,
01552         TOP_xchg2,              0x08248000000ULL,
01553         TOP_xchg4,              0x08288000000ULL,
01554         TOP_xchg8,              0x082c8000000ULL,
01555         TOP_UNDEFINED);
01556 
01557 /* ===== M17: Fetch and Add -- Immediate ===== */
01558   m17 = ISA_Pack_Type_Create("m17");
01559   Operand(0, 0, 0, 6);          // qp
01560   Operand(1, 0, 32, 1);         // sem
01561   Operand(2, 0, 28, 2);         // ldhint
01562   Result(0, 6, 7);              // r1
01563   Operand(3, 0, 20, 7);         // r3
01564   Adjust_Operand(4, pack_m17, unpack_m17);
01565   Operand(4, 0, 13, 3);         // i_2b/s
01566   Instruction_Pack_Group(m17,
01567         TOP_fetchadd4,          0x08488000000ULL,
01568         TOP_fetchadd8,          0x084c8000000ULL,
01569         TOP_UNDEFINED);
01570 
01571 /* ===== M18: Set FR ===== */
01572   m18 = ISA_Pack_Type_Create("m18");
01573   Operand(0, 0, 0, 6);          // qp
01574   Result(0, 6, 7);              // f1
01575   Operand(1, 0, 13, 7);         // r2
01576   Instruction_Pack_Group(m18,
01577         TOP_setf_sig,           0x0c708000000ULL,
01578         TOP_setf_exp,           0x0c748000000ULL,
01579         TOP_setf_s,             0x0c788000000ULL,
01580         TOP_setf_d,             0x0c7c8000000ULL,
01581         TOP_UNDEFINED);
01582 
01583 /* ===== M19: Get FR ===== */
01584   m19 = ISA_Pack_Type_Create("m19");
01585   Operand(0, 0, 0, 6);          // qp
01586   Result(0, 6, 7);              // r1
01587   Operand(1, 0, 13, 7);         // f2
01588   Instruction_Pack_Group(m19,
01589         TOP_getf_sig,           0x08708000000ULL,
01590         TOP_getf_exp,           0x08748000000ULL,
01591         TOP_getf_s,             0x08788000000ULL,
01592         TOP_getf_d,             0x087c8000000ULL,
01593         TOP_UNDEFINED);
01594 
01595 /* ===== M20: Integer Speculation Check ===== */
01596   m20 = ISA_Pack_Type_Create("m20");
01597   Operand(0, 0, 0, 6);          // qp
01598   Operand(1, 0, 13, 7);         // r2
01599 // Adjust_Operand(2, shr4, shl4); // imm_21 = target_25 >> 4
01600   Operand(2, 4, 6, 7);          // imm_7a
01601   Operand(2, 11, 20, 13);       // imm_13c
01602   Operand(2, 24, 36, 1);        // s
01603   Instruction_Pack_Group(m20,
01604         TOP_chk_s_m,            0x02200000000ULL,
01605         TOP_UNDEFINED);
01606 
01607 /* ===== M21: Floating-point Speculation Check ===== */
01608   m21 = ISA_Pack_Type_Create("m21");
01609   Operand(0, 0, 0, 6);          // qp
01610   Operand(1, 0, 13, 7);         // f2
01611 // Adjust_Operand(2, shr4, shl4); // imm_21 = target_25 >> 4
01612   Operand(2, 4, 6, 7);          // imm_7a
01613   Operand(2, 11, 20, 13);       // imm_13c
01614   Operand(2, 24, 36, 1);        // s
01615   Instruction_Pack_Group(m21,
01616         TOP_chk_f_s,            0x02600000000ULL,
01617         TOP_UNDEFINED);
01618 
01619 /* ===== M22: Integer Advanced Load Check ===== */
01620   m22 = ISA_Pack_Type_Create("m22");
01621   Operand(0, 0, 0, 6);          // qp
01622   Operand(1, 0, 33, 1);         // aclr
01623   Operand(2, 0, 6, 7);          // r1
01624 // Adjust_Operand(3, shr4, shl4); // imm_21 = target_25 >> 4
01625   Operand(3, 4, 13, 20);        // imm_20b
01626   Operand(3, 24, 36, 1);        // s
01627   Instruction_Pack_Group(m22,
01628         TOP_chk_a,              0x00800000000ULL,
01629         TOP_UNDEFINED);
01630 
01631 /* ===== M23: Floating-point Advanced Load Check ===== */
01632   m23 = ISA_Pack_Type_Create("m23");
01633   Operand(0, 0, 0, 6);          // qp
01634   Operand(1, 0, 33, 1);         // aclr
01635   Operand(2, 0, 6, 7);          // f1
01636 // Adjust_Operand(3, shr4, shl4); // imm_21 = target_25 >> 4
01637   Operand(3, 4, 13, 20);        // imm_20b
01638   Operand(3, 24, 36, 1);        // s
01639   Instruction_Pack_Group(m23,
01640         TOP_chk_f_a,            0x00c00000000ULL,
01641         TOP_UNDEFINED);
01642 
01643 /* ===== M24: Sync/Fence/Serialize/ALAT Control ===== */
01644   m24 = ISA_Pack_Type_Create("m24");
01645   Operand(0, 0, 0, 6);          // qp
01646   Instruction_Pack_Group(m24,
01647         TOP_invala,             0x00080000000ULL,
01648         TOP_fwb,                0x00100000000ULL,
01649         TOP_mf,                 0x00110000000ULL,
01650         TOP_mf_a,               0x00118000000ULL,
01651         TOP_srlz_d,             0x00180000000ULL,
01652         TOP_srlz_i,             0x00188000000ULL,
01653         TOP_sync_i,             0x00198000000ULL,
01654         TOP_UNDEFINED);
01655 
01656 /* ===== M25: RSE Control ===== */
01657   m25 = ISA_Pack_Type_Create("m25");
01658   Instruction_Pack_Group(m25,
01659         TOP_flushrs,            0x00060000000ULL,
01660         TOP_loadrs,             0x00050000000ULL,
01661         TOP_UNDEFINED);
01662 
01663 /* ===== M26: Integer ALAT Entry Invalidate ===== */
01664   m26 = ISA_Pack_Type_Create("m26");
01665   Operand(0, 0, 0, 6);          // qp
01666   Operand(1, 0, 6, 7);          // r1
01667   Instruction_Pack_Group(m26,
01668         TOP_invala_e,           0x00090000000ULL,
01669         TOP_UNDEFINED);
01670 
01671 /* ===== M27: Floating-point ALAT Entry Invalidate ===== */
01672   m27 = ISA_Pack_Type_Create("m27");
01673   Operand(0, 0, 0, 6);          // qp
01674   Operand(1, 0, 6, 7);          // f1
01675   Instruction_Pack_Group(m27,
01676         TOP_invala_f_e,         0x00098000000ULL,
01677         TOP_UNDEFINED);
01678 
01679 /* ===== M28: Flush Cache/Purge Translation Cache Entry ===== */
01680   m28 = ISA_Pack_Type_Create("m28");
01681   Operand(0, 0, 0, 6);          // qp
01682   Operand(1, 0, 20, 7);         // r3
01683   Instruction_Pack_Group(m28,
01684         TOP_fc,                 0x02180000000ULL,
01685         TOP_ptc_e,              0x021a0000000ULL,
01686         TOP_UNDEFINED);
01687 
01688 /* ===== M29: Move to AR -- Register ===== */
01689   m29 = ISA_Pack_Type_Create("m29");
01690   Operand(0, 0, 0, 6);          // qp
01691   Result(0, 20, 7);             // ar3
01692   Operand(1, 0, 13, 7);         // r2
01693   Instruction_Pack_Group(m29,
01694         TOP_mov_t_ar_r_m,       0x02150000000ULL,
01695         TOP_UNDEFINED);
01696 
01697 /* ===== M30: Move to AR -- Immediate_8 ===== */
01698   m30 = ISA_Pack_Type_Create("m30");
01699   Operand(0, 0, 0, 6);          // qp
01700   Result(0, 20, 7);             // ar3
01701   Operand(1, 0, 13, 7);         // imm_7b
01702   Operand(1, 7, 36, 1);         // s
01703   Instruction_Pack_Group(m30,
01704         TOP_mov_t_ar_i_m,       0x00140000000ULL,
01705         TOP_UNDEFINED);
01706 
01707 /* ===== M31: Move from AR ===== */
01708   m31 = ISA_Pack_Type_Create("m31");
01709   Operand(0, 0, 0, 6);          // qp
01710   Result(0, 6, 7);              // r1
01711   Operand(1, 0, 20, 7);         // ar3
01712   Instruction_Pack_Group(m31,
01713         TOP_mov_f_ar_m,         0x02110000000ULL,
01714         TOP_UNDEFINED);
01715 
01716 /* ===== M32: Move to CR ===== */
01717   m32 = ISA_Pack_Type_Create("m32");
01718   Operand(0, 0, 0, 6);          // qp
01719   Result(0, 20, 7);             // cr3
01720   Operand(1, 0, 13, 7);         // r2
01721   Instruction_Pack_Group(m32,
01722         TOP_mov_t_cr,           0x02160000000ULL,
01723         TOP_UNDEFINED);
01724 
01725 /* ===== M33: Move from CR ===== */
01726   m33 = ISA_Pack_Type_Create("m33");
01727   Operand(0, 0, 0, 6);          // qp
01728   Result(0, 6, 7);              // r1
01729   Operand(1, 0, 20, 7);         // cr3
01730   Instruction_Pack_Group(m33,
01731         TOP_mov_f_cr,           0x02120000000ULL,
01732         TOP_UNDEFINED);
01733 
01734 /* ===== M34: Allocate Register Stack Frame ===== */
01735   m34 = ISA_Pack_Type_Create("m34");
01736   Result(0, 6, 7);              // r1
01737   Operand(0, 0, 13, 7);         // sof
01738   Operand(1, 0, 20, 7);         // sol
01739   Operand(2, 3, 27, 4);         // sor >> 3
01740   Instruction_Pack_Group(m34,
01741         TOP_alloc_3,            0x02c00000000ULL,
01742         TOP_UNDEFINED);
01743 
01744 /* ===== M35: Move to PSR ===== */
01745   m35 = ISA_Pack_Type_Create("m35");
01746   Operand(0, 0, 0, 6);          // qp
01747   Operand(1, 0, 13, 7);         // r2
01748   Instruction_Pack_Group(m35,
01749         TOP_mov_t_psr,          0x02168000000ULL,
01750         TOP_mov_t_psrum,        0x02148000000ULL,
01751         TOP_UNDEFINED);
01752 
01753 /* ===== M36: Move from PSR ===== */
01754   m36 = ISA_Pack_Type_Create("m36");
01755   Operand(0, 0, 0, 6);          // qp
01756   Result(0, 6, 7);              // r1
01757   Instruction_Pack_Group(m36,
01758         TOP_mov_f_psr,          0x02128000000ULL,
01759         TOP_mov_f_psrum,        0x02108000000ULL,
01760         TOP_UNDEFINED);
01761 
01762 /* ===== M37: Break/Nop ===== */
01763   m37 = ISA_Pack_Type_Create("m37");
01764   Operand(0, 0, 0, 6);          // qp
01765   Operand(1, 0, 6, 20);         // imm_20a
01766   Operand(1, 20, 36, 1);        // i
01767   Instruction_Pack_Group(m37,
01768         TOP_break_m,            0x00000000000ULL,
01769         TOP_nop_m,              0x00008000000ULL,
01770         TOP_UNDEFINED);
01771 
01772 /* ===== M38: Probe -- Register ===== */
01773   m38 = ISA_Pack_Type_Create("m38");
01774   Operand(0, 0, 0, 6);          // qp
01775   Result(0, 6, 7);              // r1
01776   Operand(1, 0, 20, 7);         // r3
01777   Operand(2, 0, 13, 7);         // r2
01778   Instruction_Pack_Group(m38,
01779         TOP_probe_r,            0x021c0000000ULL,
01780         TOP_probe_w,            0x021c8000000ULL,
01781         TOP_UNDEFINED);
01782 
01783 /* ===== M39: Probe -- Immediate_2 ===== */
01784   m39 = ISA_Pack_Type_Create("m39");
01785   Operand(0, 0, 0, 6);          // qp
01786   Result(0, 6, 7);              // r1
01787   Operand(1, 0, 20, 7);         // r3
01788   Operand(2, 0, 13, 2);         // i_2b
01789   Instruction_Pack_Group(m39,
01790         TOP_probe_i_r,          0x020c0000000ULL,
01791         TOP_probe_i_w,          0x020c8000000ULL,
01792         TOP_UNDEFINED);
01793 
01794 /* ===== M40: Probe Fault ===== */
01795   m40 = ISA_Pack_Type_Create("m40");
01796   Operand(0, 0, 0, 6);          // qp
01797   Operand(1, 0, 20, 7);         // r3
01798   Operand(2, 0, 13, 2);         // i_2b
01799   Instruction_Pack_Group(m40,
01800         TOP_probe_r_fault,      0x02190000000ULL,
01801         TOP_probe_w_fault,      0x02198000000ULL,
01802         TOP_probe_rw_fault,     0x02188000000ULL,
01803         TOP_UNDEFINED);
01804 
01805 /* ===== M41: Translation Cache Insert ===== */
01806   m41 = ISA_Pack_Type_Create("m41");
01807   Operand(0, 0, 0, 6);          // qp
01808   Operand(1, 0, 13, 7);         // r2
01809   Instruction_Pack_Group(m41,
01810         TOP_itc_d,              0x02170000000ULL,
01811         TOP_itc_i,              0x02178000000ULL,
01812         TOP_UNDEFINED);
01813 
01814 /* ===== M42: Move to Indirect Register/Translation Register Insert ===== */
01815   m42 = ISA_Pack_Type_Create("m42");
01816   Operand(0, 0, 0, 6);          // qp
01817   Operand(1, 0, 20, 7);         // r3
01818   Operand(2, 0, 13, 7);         // r2
01819   Instruction_Pack_Group(m42,
01820         TOP_mov_t_rr,           0x02000000000ULL,
01821         TOP_mov_t_dbr,          0x02008000000ULL,
01822         TOP_mov_t_ibr,          0x02010000000ULL,
01823         TOP_mov_t_pkr,          0x02018000000ULL,
01824         TOP_mov_t_pmc,          0x02020000000ULL,
01825         TOP_mov_t_pmd,          0x02028000000ULL,
01826         TOP_mov_t_msr,          0x02030000000ULL,
01827         TOP_itr_d,              0x02070000000ULL,
01828         TOP_itr_i,              0x02078000000ULL,
01829         TOP_UNDEFINED);
01830 
01831 /* ===== M43: Move from Indirect Register ===== */
01832   m43 = ISA_Pack_Type_Create("m43");
01833   Operand(0, 0, 0, 6);          // qp
01834   Result(0, 6, 7);              // r1
01835   Operand(1, 0, 20, 7);         // r3
01836   Instruction_Pack_Group(m43,
01837         TOP_mov_f_rr,           0x02080000000ULL,
01838         TOP_mov_f_dbr,          0x02088000000ULL,
01839         TOP_mov_f_ibr,          0x02090000000ULL,
01840         TOP_mov_f_pkr,          0x02098000000ULL,
01841         TOP_mov_f_pmc,          0x020a0000000ULL,
01842         TOP_mov_f_pmd,          0x020a8000000ULL,
01843         TOP_mov_f_msr,          0x020b0000000ULL,
01844         TOP_mov_f_cpuid,        0x020b8000000ULL,
01845         TOP_UNDEFINED);
01846 
01847 /* ===== M44: Set/Reset User/System Mask ===== */
01848   m44 = ISA_Pack_Type_Create("m44");
01849   Operand(0, 0, 0, 6);          // qp
01850   Operand(1, 0, 6, 21);         // imm_21a
01851   Operand(1, 21, 31, 2);        // i_2d
01852   Operand(1, 23, 36, 1);        // i
01853   Instruction_Pack_Group(m44,
01854         TOP_sum,                0x00020000000ULL,
01855         TOP_rum,                0x00028000000ULL,
01856         TOP_ssm,                0x00030000000ULL,
01857         TOP_rsm,                0x00038000000ULL,
01858         TOP_UNDEFINED);
01859 
01860 /* ===== M45: Translation Purge ===== */
01861   m45 = ISA_Pack_Type_Create("m45");
01862   Operand(0, 0, 0, 6);          // qp
01863   Operand(1, 0, 20, 7);         // r3
01864   Operand(2, 0, 13, 7);         // r2
01865   Instruction_Pack_Group(m45,
01866         TOP_ptc_l,              0x02048000000ULL,
01867         TOP_ptc_g,              0x02050000000ULL,
01868         TOP_ptc_ga,             0x02058000000ULL,
01869         TOP_ptr_d,              0x02060000000ULL,
01870         TOP_ptr_i,              0x02068000000ULL,
01871         TOP_UNDEFINED);
01872 
01873 /* ===== M46: Translation Access ===== */
01874   m46 = ISA_Pack_Type_Create("m46");
01875   Operand(0, 0, 0, 6);          // qp
01876   Result(0, 6, 7);              // r1
01877   Operand(1, 0, 20, 7);         // r3
01878   Instruction_Pack_Group(m46,
01879         TOP_thash,              0x020d0000000ULL,
01880         TOP_ttag,               0x020d8000000ULL,
01881         TOP_tpa,                0x020f0000000ULL,
01882         TOP_tak,                0x020f8000000ULL,
01883         TOP_UNDEFINED);
01884 
01885 /* ===== M47: Allocate Register Stack Frame (pseudo) ===== */
01886 // NOTE: this packing description is never used (because of the
01887 // operand transformations required), it must be lowered to a 
01888 // machine inst instead.
01889   m47 = ISA_Pack_Type_Create("m47");
01890   Result(0, 6, 7);              // r1
01891   Operand(0, 0, 13, 7);         // i
01892   Operand(1, 0, 20, 7);         // l
01893   Operand(2, 0, 0, 0);          // o
01894   Operand(3, 0, 27, 4);         // r
01895   Instruction_Pack_Group(m47,
01896         TOP_alloc,              0x02c00000000ULL,
01897         TOP_UNDEFINED);
01898 
01899 /* ===== B1: IP-Relative Branch ===== */
01900   b1 = ISA_Pack_Type_Create("b1");
01901   Operand(0, 0, 0, 6);          // qp
01902   Operand(1, 0, 33, 2);         // bwh
01903   Operand(2, 0, 12, 1);         // ph
01904   Operand(3, 0, 35, 1);         // dh
01905 // Adjust_Operand(4, shr4, shl4); // imm_21 = target_25 >> 4
01906   Operand(4, 4, 13, 20);        // imm_20b
01907   Operand(4, 24, 36, 1);        // s
01908   Instruction_Pack_Group(b1,
01909         TOP_br_cond,            0x08000000000ULL,
01910         TOP_br_wexit,           0x08000000080ULL,
01911         TOP_br_wtop,            0x080000000c0ULL,
01912         TOP_UNDEFINED);
01913 
01914 /* ===== B2: IP-Relative Counted Branch ===== */
01915   b2 = ISA_Pack_Type_Create("b2");
01916   Operand(0, 0, 33, 2);         // bwh
01917   Operand(1, 0, 12, 1);         // ph
01918   Operand(2, 0, 35, 1);         // dh
01919 // Adjust_Operand(3, shr4, shl4); // imm_21 = target_25 >> 4
01920   Operand(3, 4, 13, 20);        // imm_20b
01921   Operand(3, 24, 36, 1);        // s
01922   Instruction_Pack_Group(b2,
01923         TOP_br_cloop,           0x08000000140ULL,
01924         TOP_br_cexit,           0x08000000180ULL,
01925         TOP_br_ctop,            0x080000001c0ULL,
01926         TOP_UNDEFINED);
01927 
01928 /* ===== B3: IP-Relative Call ===== */
01929   b3 = ISA_Pack_Type_Create("b3");
01930   Operand(0, 0, 0, 6);          // qp
01931   Operand(1, 0, 33, 2);         // bwh
01932   Operand(2, 0, 12, 1);         // ph
01933   Operand(3, 0, 35, 1);         // dh
01934   Result(0, 6, 3);              // b1
01935 // Adjust_Operand(4, shr4, shl4); // imm_21 = target_25 >> 4
01936   Operand(4, 4, 13, 20);        // imm_20b
01937   Operand(4, 24, 36, 1);        // s
01938   Instruction_Pack_Group(b3,
01939         TOP_br_call,            0x0a000000000ULL,
01940         TOP_UNDEFINED);
01941 
01942 /* ===== B4: Indirect Branch ===== */
01943   b4 = ISA_Pack_Type_Create("b4");
01944   Operand(0, 0, 0, 6);          // qp
01945   Operand(1, 0, 33, 2);         // bwh
01946   Operand(2, 0, 12, 1);         // ph
01947   Operand(3, 0, 35, 1);         // dh
01948   Operand(4, 0, 13, 3);         // b2
01949   Instruction_Pack_Group(b4,
01950         TOP_br_r_cond,          0x00100000000ULL,
01951         TOP_br_ret,             0x00108000100ULL,
01952         TOP_UNDEFINED);
01953 
01954 /* ===== B4a: Indirect Branch ===== */
01955   b4a = ISA_Pack_Type_Create("b4a");
01956   Operand(0, 0, 33, 2);         // bwh
01957   Operand(1, 0, 12, 1);         // ph
01958   Operand(2, 0, 35, 1);         // dh
01959   Operand(3, 0, 13, 3);         // b2
01960   Instruction_Pack_Group(b4a,
01961         TOP_br_ia,              0x00100000040ULL,
01962         TOP_UNDEFINED);
01963 
01964 /* ===== B5: Indirect Call ===== */
01965   b5 = ISA_Pack_Type_Create("b5");
01966   Operand(0, 0, 0, 6);          // qp
01967   Operand(1, 0, 33, 2);         // bwh
01968   Operand(2, 0, 12, 1);         // ph
01969   Operand(3, 0, 35, 1);         // dh
01970   Result(0, 6, 3);              // b1
01971   Operand(4, 0, 13, 3);         // b2
01972   Instruction_Pack_Group(b5,
01973         TOP_br_r_call,          0x02000000000ULL,
01974         TOP_UNDEFINED);
01975 
01976 /* ===== B6: IP-Relative Predict ===== */
01977   b6 = ISA_Pack_Type_Create("b6");
01978   Operand(0, 0, 3, 2);          // ipwh
01979   Operand(1, 0, 35, 1);         // ih
01980 // Adjust_Operand(2, shr4, shl4); // imm_21 = target_25 >> 4
01981   Operand(2, 4, 13, 20);        // imm_20b
01982   Operand(2, 24, 36, 1);        // s
01983 // Adjust_Operand(3, shr4, shl4); // timm_9 = tag_13 >> 4
01984   Operand(3, 4, 6, 7);          // timm_7a
01985   Operand(3, 11, 33, 2);        // t_2e
01986   Instruction_Pack_Group(b6,
01987         TOP_brp,                0x0e000000000ULL,
01988         TOP_UNDEFINED);
01989 
01990 /* ===== B7: Indirect Predict ===== */
01991   b7 = ISA_Pack_Type_Create("b7");
01992   Operand(0, 0, 3, 2);          // indwh
01993   Operand(1, 0, 35, 1);         // ih
01994   Operand(2, 0, 13, 3);         // b2
01995 // Adjust_Operand(3, shr4, shl4); // timm_9 = tag_13 >> 4
01996   Operand(3, 4, 6, 7);          // timm_7a
01997   Operand(3, 11, 33, 2);        // t_2e
01998   Instruction_Pack_Group(b7,
01999         TOP_brp_r,              0x04080000000ULL,
02000         TOP_brp_ret,            0x04088000000ULL,
02001         TOP_UNDEFINED);
02002 
02003 /* ===== B8: Miscellaneous ===== */
02004   b8 = ISA_Pack_Type_Create("b8");
02005   Instruction_Pack_Group(b8,
02006         TOP_cover,              0x00010000000ULL,
02007         TOP_clrrrb,             0x00020000000ULL,
02008         TOP_clrrrb_pr,          0x00028000000ULL,
02009         TOP_rfi,                0x00040000000ULL,
02010         TOP_bsw_0,              0x00060000000ULL,
02011         TOP_bsw_1,              0x00068000000ULL,
02012         TOP_epc,                0x00080000000ULL,
02013         TOP_UNDEFINED);
02014 
02015 /* ===== B9: Break/Nop ===== */
02016   b9 = ISA_Pack_Type_Create("b9");
02017   Operand(0, 0, 0, 6);          // qp
02018   Operand(1, 0, 6, 20);         // imm_20a
02019   Operand(1, 20, 36, 1);        // i
02020   Instruction_Pack_Group(b9,
02021         TOP_break_b,            0x00000000000ULL,
02022         TOP_nop_b,              0x04000000000ULL,
02023         TOP_UNDEFINED);
02024 
02025 /* ===== B10: IP-Relative Unconditional Branch (pseudo) ===== */
02026   b10 = ISA_Pack_Type_Create("b10");
02027   Operand(0, 0, 12, 1);         // ph
02028   Operand(1, 0, 35, 1);         // dh
02029 // Adjust_Operand(2, shr4, shl4); // imm_21 = target_25 >> 4
02030   Operand(2, 4, 13, 20);        // imm_20b
02031   Operand(2, 24, 36, 1);        // s
02032   Instruction_Pack_Group(b10,
02033         TOP_br,                 0x08000000000ULL,
02034         TOP_UNDEFINED);
02035 
02036 /* ===== B11: Indirect Unconditional Branch (pseudo) ===== */
02037   b11 = ISA_Pack_Type_Create("b11");
02038   Operand(0, 0, 12, 1);         // ph
02039   Operand(1, 0, 35, 1);         // dh
02040   Operand(2, 0, 13, 3);         // b2
02041   Instruction_Pack_Group(b11,
02042         TOP_br_r,               0x00100000000ULL,
02043         TOP_UNDEFINED);
02044 
02045 /* ===== F1: Floating-point Multiply Add ===== */
02046   f1 = ISA_Pack_Type_Create("f1");
02047   Operand(0, 0, 0, 6);          // qp
02048   Operand(1, 0, 34, 2);         // sf
02049   Result(0, 6, 7);              // f1
02050   Operand(2, 0, 20, 7);         // f3
02051   Operand(3, 0, 27, 7);         // f4
02052   Operand(4, 0, 13, 7);         // f2
02053   Instruction_Pack_Group(f1,
02054         TOP_fma,                0x10000000000ULL,
02055         TOP_fma_s,              0x11000000000ULL,
02056         TOP_fma_d,              0x12000000000ULL,
02057         TOP_fpma,               0x13000000000ULL,
02058         TOP_fms,                0x14000000000ULL,
02059         TOP_fms_s,              0x15000000000ULL,
02060         TOP_fms_d,              0x16000000000ULL,
02061         TOP_fpms,               0x17000000000ULL,
02062         TOP_fnma,               0x18000000000ULL,
02063         TOP_fnma_s,             0x19000000000ULL,
02064         TOP_fnma_d,             0x1a000000000ULL,
02065         TOP_fpnma,              0x1b000000000ULL,
02066         TOP_UNDEFINED);
02067 
02068 /* ===== F2: Fixed-point Multiply Add ===== */
02069   f2 = ISA_Pack_Type_Create("f2");
02070   Operand(0, 0, 0, 6);          // qp
02071   Result(0, 6, 7);              // f1
02072   Operand(1, 0, 20, 7);         // f3
02073   Operand(2, 0, 27, 7);         // f4
02074   Operand(3, 0, 13, 7);         // f2
02075   Instruction_Pack_Group(f2,
02076         TOP_xma_l,              0x1d000000000ULL,
02077         TOP_xma_h,              0x1dc00000000ULL,
02078         TOP_xma_hu,             0x1d800000000ULL,
02079         TOP_UNDEFINED);
02080 
02081 /* ===== F3: Parallel Floating-point Select ===== */
02082   f3 = ISA_Pack_Type_Create("f3");
02083   Operand(0, 0, 0, 6);          // qp
02084   Result(0, 6, 7);              // f1
02085   Operand(1, 0, 20, 7);         // f3
02086   Operand(2, 0, 27, 7);         // f4
02087   Operand(3, 0, 13, 7);         // f2
02088   Instruction_Pack_Group(f3,
02089         TOP_fselect,            0x1c000000000ULL,
02090         TOP_UNDEFINED);
02091 
02092 /* ===== F4:  Floating-point Compare ===== */
02093   f4 = ISA_Pack_Type_Create("f4");
02094   Operand(0, 0, 0, 6);          // qp
02095   Operand(1, 0, 34, 2);         // sf
02096   Result(0, 6, 6);              // p1
02097   Result(1, 27, 6);             // p2
02098   Operand(2, 0, 13, 7);         // f2
02099   Operand(3, 0, 20, 7);         // f3
02100   Instruction_Pack_Group(f4,
02101         TOP_fcmp_eq,            0x08000000000ULL,
02102         TOP_fcmp_lt,            0x09000000000ULL,
02103         TOP_fcmp_le,            0x08200000000ULL,
02104         TOP_fcmp_unord,         0x09200000000ULL,
02105         TOP_fcmp_eq_unc,        0x08000001000ULL,
02106         TOP_fcmp_lt_unc,        0x09000001000ULL,
02107         TOP_fcmp_le_unc,        0x08200001000ULL,
02108         TOP_fcmp_unord_unc,     0x09200001000ULL,
02109         TOP_UNDEFINED);
02110 
02111 /* ===== F5: Floating-point Class ===== */
02112   f5 = ISA_Pack_Type_Create("f5");
02113   Operand(0, 0, 0, 6);          // qp
02114   Result(0, 6, 6);              // p1
02115   Result(1, 27, 6);             // p2
02116   Operand(1, 0, 13, 7);         // f2
02117   Operand(2, 0, 33, 2);         // fc_2
02118   Operand(2, 2, 20, 7);         // fclass_7c
02119   Instruction_Pack_Group(f5,
02120         TOP_fclass_m,           0x0a000000000ULL,
02121         TOP_fclass_m_unc,       0x0a000001000ULL,
02122         TOP_UNDEFINED);
02123 
02124 /* ===== F6: Floating-point Reciprocal Approximation ===== */
02125   f6= ISA_Pack_Type_Create("f6");
02126   Operand(0, 0, 0, 6);          // qp
02127   Operand(1, 0, 34, 2);         // sf
02128   Result(0, 6, 7);              // f1
02129   Result(1, 27, 6);             // p2
02130   Operand(2, 0, 13, 7);         // f2
02131   Operand(3, 0, 20, 7);         // f3
02132   Instruction_Pack_Group(f6,
02133         TOP_frcpa,              0x00200000000ULL,
02134         TOP_fprcpa,             0x02200000000ULL,
02135         TOP_UNDEFINED);
02136 
02137 /* ===== F7: Floating-point Reciprocal Square Root Approximation ===== */
02138   f7 = ISA_Pack_Type_Create("f7");
02139   Operand(0, 0, 0, 6);          // qp
02140   Operand(1, 0, 34, 2);         // sf
02141   Result(0, 6, 7);              // f1
02142   Result(1, 27, 6);             // p2
02143   Operand(2, 0, 20, 7);         // f3
02144   Instruction_Pack_Group(f7,
02145         TOP_frsqrta,            0x01200000000ULL,
02146         TOP_fprsqrta,           0x03200000000ULL,
02147         TOP_UNDEFINED);
02148 
02149 /* ===== F8: Minimum/Maximum and Parallel Compare ===== */
02150   f8 = ISA_Pack_Type_Create("f8");
02151   Operand(0, 0, 0, 6);          // qp
02152   Operand(1, 0, 34, 2);         // sf
02153   Result(0, 6, 7);              // f1
02154   Operand(2, 0, 13, 7);         // f2
02155   Operand(3, 0, 20, 7);         // f3
02156   Instruction_Pack_Group(f8,
02157         TOP_fmin,               0x000a0000000ULL,
02158         TOP_fmax,               0x000a8000000ULL,
02159         TOP_famin,              0x000b0000000ULL,
02160         TOP_famax,              0x000b8000000ULL,
02161         TOP_fpmin,              0x020a0000000ULL,
02162         TOP_fpmax,              0x020a8000000ULL,
02163         TOP_fpamin,             0x020b0000000ULL,
02164         TOP_fpamax,             0x020b8000000ULL,
02165         TOP_fpcmp_eq,           0x02180000000ULL,
02166         TOP_fpcmp_lt,           0x02188000000ULL,
02167         TOP_fpcmp_le,           0x02190000000ULL,
02168         TOP_fpcmp_unord,        0x02198000000ULL,
02169         TOP_fpcmp_neq,          0x021a0000000ULL,
02170         TOP_fpcmp_nlt,          0x021a8000000ULL,
02171         TOP_fpcmp_nle,          0x021b0000000ULL,
02172         TOP_fpcmp_ord,          0x021b8000000ULL,
02173         TOP_UNDEFINED);
02174 
02175 /* ===== F9: Merge and Logical ===== */
02176   f9 = ISA_Pack_Type_Create("f9");
02177   Operand(0, 0, 0, 6);          // qp
02178   Result(0, 6, 7);              // f1
02179   Operand(1, 0, 13, 7);         // f2
02180   Operand(2, 0, 20, 7);         // f3
02181   Instruction_Pack_Group(f9,
02182         TOP_fmerge_s,           0x00080000000ULL,
02183         TOP_fmerge_ns,          0x00088000000ULL,
02184         TOP_fmerge_se,          0x00090000000ULL,
02185         TOP_fmix_lr,            0x001c8000000ULL,
02186         TOP_fmix_r,             0x001d0000000ULL,
02187         TOP_fmix_l,             0x001d8000000ULL,
02188         TOP_fsxt_r,             0x001e0000000ULL,
02189         TOP_fsxt_l,             0x001e8000000ULL,
02190         TOP_fpack,              0x00140000000ULL,
02191         TOP_fswap,              0x001a0000000ULL,
02192         TOP_fswap_nl,           0x001a8000000ULL,
02193         TOP_fswap_nr,           0x001b0000000ULL,
02194         TOP_fand,               0x00160000000ULL,
02195         TOP_fandcm,             0x00168000000ULL,
02196         TOP_for,                0x00170000000ULL,
02197         TOP_fxor,               0x00178000000ULL,
02198         TOP_fpmerge_s,          0x02080000000ULL,
02199         TOP_fpmerge_ns,         0x02088000000ULL,
02200         TOP_fpmerge_se,         0x02090000000ULL,
02201         TOP_UNDEFINED);
02202 
02203 /* ===== F10: Convert Floating-point to Fixed-point ===== */
02204   f10 = ISA_Pack_Type_Create("f10");
02205   Operand(0, 0, 0, 6);          // qp
02206   Operand(1, 0, 34, 2);         // sf
02207   Result(0, 6, 7);              // f1
02208   Operand(2, 0, 13, 7);         // f2
02209   Instruction_Pack_Group(f10,
02210         TOP_fcvt_fx,            0x000c0000000ULL,
02211         TOP_fcvt_fxu,           0x000c8000000ULL,
02212         TOP_fcvt_fx_trunc,      0x000d0000000ULL,
02213         TOP_fcvt_fxu_trunc,     0x000d8000000ULL,
02214         TOP_fpcvt_fx,           0x020c0000000ULL,
02215         TOP_fpcvt_fxu,          0x020c8000000ULL,
02216         TOP_fpcvt_fx_trunc,     0x020d0000000ULL,
02217         TOP_fpcvt_fxu_trunc,    0x020d8000000ULL,
02218         TOP_UNDEFINED);
02219 
02220 /* ===== F11: Convert Fixed-point to Floating-point ===== */
02221   f11 = ISA_Pack_Type_Create("f11");
02222   Operand(0, 0, 0, 6);          // qp
02223   Result(0, 6, 7);              // f1
02224   Operand(1, 0, 13, 7);         // f2
02225   Instruction_Pack_Group(f11,
02226         TOP_fcvt_xf,            0x000e0000000ULL,
02227         TOP_UNDEFINED);
02228 
02229 /* ===== F12: Floating-point Set Controls ===== */
02230   f12 = ISA_Pack_Type_Create("f12");
02231   Operand(0, 0, 0, 6);          // qp
02232   Operand(1, 0, 34, 2);         // sf
02233   Operand(2, 0, 13, 7);         // amask_7b
02234   Operand(3, 0, 20, 7);         // omask_7c
02235   Instruction_Pack_Group(f12,
02236         TOP_fsetc,              0x00020000000ULL,
02237         TOP_UNDEFINED);
02238 
02239 /* ===== F13: Floating-point Clear Flags ===== */
02240   f13 = ISA_Pack_Type_Create("f13");
02241   Operand(0, 0, 0, 6);          // qp
02242   Operand(1, 0, 34, 2);         // sf
02243   Instruction_Pack_Group(f13,
02244         TOP_fclrf,              0x00028000000ULL,
02245         TOP_UNDEFINED);
02246 
02247 /* ===== F14: Floating-point Check Flags ===== */
02248   f14 = ISA_Pack_Type_Create("f14");
02249   Operand(0, 0, 0, 6);          // qp
02250   Operand(1, 0, 34, 2);         // sf
02251 // Adjust_Operand(2, shr4, shl4); // imm_21 = target_25 >> 4
02252   Operand(2, 4, 6, 20);         // imm_20a
02253   Operand(2, 24, 36, 1);        // s
02254   Instruction_Pack_Group(f14,
02255         TOP_fchkf,              0x00040000000ULL,
02256         TOP_UNDEFINED);
02257 
02258 /* ===== F15: Break/Nop ===== */
02259   f15 = ISA_Pack_Type_Create("f15");
02260   Operand(0, 0, 0, 6);          // qp
02261   Operand(1, 0, 6, 20);         // imm_20a
02262   Operand(1, 20, 36, 1);        // i
02263   Instruction_Pack_Group(f15,
02264         TOP_break_f,            0x00000000000ULL,
02265         TOP_nop_f,              0x00008000000ULL,
02266         TOP_UNDEFINED);
02267 
02268 /* ===== F16: Floating-point Absolute Value (pseudo) ===== */
02269   f16 = ISA_Pack_Type_Create("f16");
02270   Operand(0, 0, 0, 6);          // qp
02271   Result(0, 6, 7);              // f1
02272   Operand(1, 0, 20, 7);         // f3
02273   Instruction_Pack_Group(f16,
02274         TOP_fabs,               0x00080000000ULL,
02275         TOP_fnegabs,            0x00088000000ULL,
02276         TOP_fpabs,              0x02080000000ULL,
02277         TOP_fpnegabs,           0x02088000000ULL,
02278         TOP_UNDEFINED);
02279 
02280 /* ===== F17: Floating-point Negate (pseudo) ===== */
02281   f17 = ISA_Pack_Type_Create("f17");
02282   Operand(0, 0, 0, 6);          // qp
02283   Result(0, 6, 7);              // f1
02284   Operand(1, 0, 13, 7);         // f3
02285   Operand(1, 0, 20, 7);         // f3
02286   Instruction_Pack_Group(f17,
02287         TOP_fneg,               0x00088000000ULL,
02288         TOP_fpneg,              0x02088000000ULL,
02289         TOP_mov_f,              0x00080000000ULL,
02290         TOP_UNDEFINED);
02291 
02292 /* ===== F18: Fixed-point Multiply Add (pseudo) ===== */
02293   f18 = ISA_Pack_Type_Create("f18");
02294   Operand(0, 0, 0, 6);          // qp
02295   Result(0, 6, 7);              // f1
02296   Operand(1, 0, 20, 7);         // f3
02297   Operand(2, 0, 27, 7);         // f4
02298   Operand(3, 0, 13, 7);         // f2
02299   Instruction_Pack_Group(f18,
02300         TOP_xma_lu,             0x1d000000000ULL,
02301         TOP_UNDEFINED);
02302 
02303 /* ===== F19: Fixed-point Multiply (pseudo) ===== */
02304   f19 = ISA_Pack_Type_Create("f19");
02305   Operand(0, 0, 0, 6);          // qp
02306   Result(0, 6, 7);              // f1
02307   Operand(1, 0, 20, 7);         // f3
02308   Operand(2, 0, 27, 7);         // f4
02309   Instruction_Pack_Group(f19,
02310         TOP_xmpy_l,             0x1d000000000ULL,
02311         TOP_xmpy_h,             0x1dc00000000ULL,
02312         TOP_xmpy_hu,            0x1d800000000ULL,
02313         TOP_xmpy_lu,            0x1d000000000ULL,
02314         TOP_UNDEFINED);
02315 
02316 /* ===== F20: Convert Unsigned Integer to Floating-point (pseudo) ===== */
02317   f20 = ISA_Pack_Type_Create("f20");
02318   Operand(0, 0, 0, 6);          // qp
02319   Operand(1, 0, 34, 2);         // sf
02320   Result(0, 6, 7);              // f1
02321   Operand(2, 0, 20, 7);         // f3
02322   Instruction_Pack_Group(f20,
02323         TOP_fcvt_xuf,           0x10008000000ULL,
02324         TOP_fcvt_xuf_s,         0x11008000000ULL,
02325         TOP_fcvt_xuf_d,         0x12008000000ULL,
02326         TOP_fnorm,              0x10008000000ULL,
02327         TOP_fnorm_s,            0x11008000000ULL,
02328         TOP_fnorm_d,            0x12008000000ULL,
02329         TOP_UNDEFINED);
02330 
02331 /* ===== F21: Floating-point Add/Subtract (pseudo) ===== */
02332   f21 = ISA_Pack_Type_Create("f21");
02333   Operand(0, 0, 0, 6);          // qp
02334   Operand(1, 0, 34, 2);         // sf
02335   Result(0, 6, 7);              // f1
02336   Operand(2, 0, 20, 7);         // f3
02337   Operand(3, 0, 13, 7);         // f2
02338   Instruction_Pack_Group(f21,
02339         TOP_fadd,               0x10008000000ULL,
02340         TOP_fadd_s,             0x11008000000ULL,
02341         TOP_fadd_d,             0x12008000000ULL,
02342         TOP_fsub,               0x14008000000ULL,
02343         TOP_fsub_s,             0x15008000000ULL,
02344         TOP_fsub_d,             0x16008000000ULL,
02345         TOP_UNDEFINED);
02346 
02347 /* ===== F22: Floating-point Multiply (pseudo) ===== */
02348   f22 = ISA_Pack_Type_Create("f22");
02349   Operand(0, 0, 0, 6);          // qp
02350   Operand(1, 0, 34, 2);         // sf
02351   Result(0, 6, 7);              // f1
02352   Operand(2, 0, 20, 7);         // f3
02353   Operand(3, 0, 27, 7);         // f4
02354   Instruction_Pack_Group(f22,
02355         TOP_fmpy,               0x10000000000ULL,
02356         TOP_fmpy_s,             0x11000000000ULL,
02357         TOP_fmpy_d,             0x12000000000ULL,
02358         TOP_fnmpy,              0x18000000000ULL,
02359         TOP_fnmpy_s,            0x19000000000ULL,
02360         TOP_fnmpy_d,            0x1a000000000ULL,
02361         TOP_fpmpy,              0x13000000000ULL,
02362         TOP_fpnmpy,             0x1b000000000ULL,
02363         TOP_UNDEFINED);
02364 
02365 /* ===== F23: Floating-point Class (pseudo) ===== */
02366   f23 = ISA_Pack_Type_Create("f23");
02367   Operand(0, 0, 0, 6);          // qp
02368   Result(0, 27, 6);             // p2
02369   Result(1, 6, 6);              // p1
02370   Operand(1, 0, 13, 7);         // f2
02371   Operand(2, 0, 33, 2);         // fc_2
02372   Operand(2, 2, 20, 7);         // fclass_7c
02373   Instruction_Pack_Group(f23,
02374         TOP_fclass_nm,          0x0a000000000ULL,
02375         TOP_fclass_nm_unc,      0x0a000001000ULL,
02376         TOP_UNDEFINED);
02377 
02378 /* ===== F24: Floating-point Compare (pseudo) ===== */
02379 // swapped args
02380   f24 = ISA_Pack_Type_Create("f24");
02381   Operand(0, 0, 0, 6);          // qp
02382   Operand(1, 0, 34, 2);         // sf
02383   Result(0, 6, 6);              // p1
02384   Result(1, 27, 6);             // p2
02385   Operand(2, 0, 20, 7);         // f3
02386   Operand(3, 0, 13, 7);         // f2
02387   Instruction_Pack_Group(f24,
02388         TOP_fcmp_gt,            0x09000000000ULL,
02389         TOP_fcmp_ge,            0x08200000000ULL,
02390         TOP_fcmp_gt_unc,        0x09000001000ULL,
02391         TOP_fcmp_ge_unc,        0x08200001000ULL,
02392         TOP_UNDEFINED);
02393 
02394 /* ===== F25:  Floating-point Compare (pseudo) ===== */
02395 // swapped preds
02396   f25 = ISA_Pack_Type_Create("f25");
02397   Operand(0, 0, 0, 6);          // qp
02398   Operand(1, 0, 34, 2);         // sf
02399   Result(0, 27, 6);             // p2
02400   Result(1, 6, 6);              // p1
02401   Operand(2, 0, 13, 7);         // f2
02402   Operand(3, 0, 20, 7);         // f3
02403   Instruction_Pack_Group(f25,
02404         TOP_fcmp_neq,           0x08000000000ULL,
02405         TOP_fcmp_nlt,           0x09000000000ULL,
02406         TOP_fcmp_nle,           0x08200000000ULL,
02407         TOP_fcmp_ord,           0x09200000000ULL,
02408         TOP_fcmp_neq_unc,       0x08000001000ULL,
02409         TOP_fcmp_nlt_unc,       0x09000001000ULL,
02410         TOP_fcmp_nle_unc,       0x08200001000ULL,
02411         TOP_fcmp_ord_unc,       0x09200001000ULL,
02412         TOP_UNDEFINED);
02413 
02414 /* ===== F26: Floating-point Compare (pseudo) ===== */
02415 // swapped args and preds
02416   f26 = ISA_Pack_Type_Create("f26");
02417   Operand(0, 0, 0, 6);          // qp
02418   Operand(1, 0, 34, 2);         // sf
02419   Result(0, 27, 6);             // p2
02420   Result(1, 6, 6);              // p1
02421   Operand(2, 0, 20, 7);         // f3
02422   Operand(3, 0, 13, 7);         // f2
02423   Instruction_Pack_Group(f26,
02424         TOP_fcmp_ngt,           0x09000000000ULL,
02425         TOP_fcmp_nge,           0x08200000000ULL,
02426         TOP_fcmp_ngt_unc,       0x09000001000ULL,
02427         TOP_fcmp_nge_unc,       0x08200001000ULL,
02428         TOP_UNDEFINED);
02429 
02430 /* ===== F27: Floating-point Parallel Compare (pseudo) ===== */
02431 // swapped args
02432   f27 = ISA_Pack_Type_Create("f27");
02433   Operand(0, 0, 0, 6);          // qp
02434   Operand(1, 0, 34, 2);         // sf
02435   Result(0, 6, 7);              // f1
02436   Operand(2, 0, 20, 7);         // f3
02437   Operand(3, 0, 13, 7);         // f2
02438   Instruction_Pack_Group(f27,
02439         TOP_fpcmp_gt,           0x02188000000ULL,
02440         TOP_fpcmp_ge,           0x02190000000ULL,
02441         TOP_fpcmp_ngt,          0x021a8000000ULL,
02442         TOP_fpcmp_nge,          0x021b0000000ULL,
02443         TOP_UNDEFINED);
02444 
02445 /* ===== X1: Break/Nop ===== */
02446   x1 = ISA_Pack_Type_Create("x1");
02447   Operand(1, 21, 0, 41);        // imm_41
02448   Next_Word();
02449   Operand(0, 0, 0, 6);          // qp
02450   Operand(1, 0, 6, 20);         // imm_20a
02451   Operand(1, 20, 36, 1);        // i
02452   Instruction_Pack_Group(x1,
02453         TOP_break_x,            0x00000000000ULL, 0x00000000000ULL,
02454         TOP_nop_x,              0x00000000000ULL, 0x00008000000ULL,
02455         TOP_UNDEFINED);
02456 
02457 /* ===== X2: Move Long Immediate_64 ===== */
02458   x2 = ISA_Pack_Type_Create("x2");
02459   Operand(1, 22, 0, 41);        // imm_41
02460   Next_Word();
02461   Operand(0, 0, 0, 6);          // qp
02462   Result(0, 6, 7);              // r1
02463   Operand(1, 0, 13, 7);         // imm_7b
02464   Operand(1, 7, 27, 9);         // imm_9d
02465   Operand(1, 16, 22, 5);        // imm_5c
02466   Operand(1, 21, 21, 1);        // ic
02467   Operand(1, 63, 36, 1);        // i
02468   Instruction_Pack_Group(x2,
02469         TOP_movl,               0x00000000000ULL, 0x0c000000000ULL,
02470         TOP_UNDEFINED);
02471 
02472 /* ===== X3: Long Branch ===== */
02473   x3 = ISA_Pack_Type_Create("x3");
02474 // Adjust_Operand(4, shr4, shl4); // imm_60 = target_64 >> 4
02475   Operand(4, 24, 2, 39);        // imm_39
02476   Next_Word();
02477   Operand(0, 0, 0, 6);          // qp
02478   Operand(1, 0, 33, 2);         // bwh
02479   Operand(2, 0, 12, 1);         // ph
02480   Operand(3, 0, 35, 1);         // dh
02481   Operand(4, 4, 13, 20);        // imm_20b
02482   Operand(4, 63, 36, 1);        // i
02483   Instruction_Pack_Group(x3,
02484         TOP_brl_cond,           0x00000000000ULL, 0x18000000000ULL,
02485         TOP_UNDEFINED);
02486 
02487 /* ===== X4: Long Call ===== */
02488   x4 = ISA_Pack_Type_Create("x4");
02489 // Adjust_Operand(4, shr4, shl4); // imm_60 = target_64 >> 4
02490   Operand(4, 24, 2, 39);        // imm_39
02491   Next_Word();
02492   Operand(0, 0, 0, 6);          // qp
02493   Operand(1, 0, 33, 2);         // bwh
02494   Operand(2, 0, 12, 1);         // ph
02495   Operand(3, 0, 35, 1);         // dh
02496   Result(0, 6, 3);              // b1
02497   Operand(4, 4, 13, 20);        // imm_20b
02498   Operand(4, 63, 36, 1);        // i
02499   Instruction_Pack_Group(x4,
02500         TOP_brl_call,           0x00000000000ULL, 0x1a000000000ULL,
02501         TOP_UNDEFINED);
02502 
02503 /* ===== X5: Long Branch (pseudo) ===== */
02504   x5 = ISA_Pack_Type_Create("x5");
02505 // Adjust_Operand(2, shr4, shl4); // imm_60 = target_64 >> 4
02506   Operand(2, 24, 2, 39);        // imm_39
02507   Next_Word();
02508   Operand(0, 0, 12, 1);         // ph
02509   Operand(1, 0, 35, 1);         // dh
02510   Operand(2, 4, 13, 20);        // imm_20b
02511   Operand(2, 63, 36, 1);        // i
02512   Instruction_Pack_Group(x5,
02513         TOP_brl,                0x00000000000ULL, 0x18000000000ULL,
02514         TOP_UNDEFINED);
02515 
02516   ISA_Pack_End();
02517   return 0;
02518 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines