Home | History | Annotate | Download | only in opcodes
      1 /* ia64-opc-b.c -- IA-64 `B' opcode table.
      2    Copyright (C) 1998-2016 Free Software Foundation, Inc.
      3    Contributed by David Mosberger-Tang <davidm (at) hpl.hp.com>
      4 
      5    This file is part of the GNU opcodes library.
      6 
      7    This library is free software; you can redistribute it and/or modify
      8    it under the terms of the GNU General Public License as published by
      9    the Free Software Foundation; either version 3, or (at your option)
     10    any later version.
     11 
     12    It is distributed in the hope that it will be useful, but WITHOUT
     13    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     14    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     15    License for more details.
     16 
     17    You should have received a copy of the GNU General Public License
     18    along with this file; see the file COPYING.  If not, write to the
     19    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
     20    MA 02110-1301, USA.  */
     21 
     22 #include "ia64-opc.h"
     23 
     24 #define B0	IA64_TYPE_B, 0
     25 #define B	IA64_TYPE_B, 1
     26 
     27 /* instruction bit fields: */
     28 #define bBtype(x)	(((ia64_insn) ((x) & 0x7)) << 6)
     29 #define bD(x)		(((ia64_insn) ((x) & 0x1)) << 35)
     30 #define bIh(x)		(((ia64_insn) ((x) & 0x1)) << 35)
     31 #define bPa(x)		(((ia64_insn) ((x) & 0x1)) << 12)
     32 #define bPr(x)		(((ia64_insn) ((x) & 0x3f)) << 0)
     33 #define bWha(x)		(((ia64_insn) ((x) & 0x3)) << 33)
     34 #define bWhb(x)		(((ia64_insn) ((x) & 0x3)) << 3)
     35 #define bWhc(x)		(((ia64_insn) ((x) & 0x7)) << 32)
     36 #define bX6(x)		(((ia64_insn) ((x) & 0x3f)) << 27)
     37 
     38 #define mBtype		bBtype (-1)
     39 #define mD		bD (-1)
     40 #define mIh		bIh (-1)
     41 #define mPa		bPa (-1)
     42 #define mPr		bPr (-1)
     43 #define mWha		bWha (-1)
     44 #define mWhb		bWhb (-1)
     45 #define mWhc		bWhc (-1)
     46 #define mX6		bX6 (-1)
     47 
     48 #define OpX6(a,b) 	(bOp (a) | bX6 (b)), (mOp | mX6)
     49 #define OpPaWhaD(a,b,c,d) \
     50 	(bOp (a) | bPa (b) | bWha (c) | bD (d)), (mOp | mPa | mWha | mD)
     51 #define OpPaWhcD(a,b,c,d) \
     52 	(bOp (a) | bPa (b) | bWhc (c) | bD (d)), (mOp | mPa | mWhc | mD)
     53 #define OpBtypePaWhaD(a,b,c,d,e) \
     54 	(bOp (a) | bBtype (b) | bPa (c) | bWha (d) | bD (e)), \
     55 	(mOp | mBtype | mPa | mWha | mD)
     56 #define OpBtypePaWhaDPr(a,b,c,d,e,f) \
     57 	(bOp (a) | bBtype (b) | bPa (c) | bWha (d) | bD (e) | bPr (f)), \
     58 	(mOp | mBtype | mPa | mWha | mD | mPr)
     59 #define OpX6BtypePaWhaD(a,b,c,d,e,f) \
     60 	(bOp (a) | bX6 (b) | bBtype (c) | bPa (d) | bWha (e) | bD (f)), \
     61 	(mOp | mX6 | mBtype | mPa | mWha | mD)
     62 #define OpX6BtypePaWhaDPr(a,b,c,d,e,f,g) \
     63    (bOp (a) | bX6 (b) | bBtype (c) | bPa (d) | bWha (e) | bD (f) | bPr (g)), \
     64 	(mOp | mX6 | mBtype | mPa | mWha | mD | mPr)
     65 #define OpIhWhb(a,b,c) \
     66 	(bOp (a) | bIh (b) | bWhb (c)), \
     67 	(mOp | mIh | mWhb)
     68 #define OpX6IhWhb(a,b,c,d) \
     69 	(bOp (a) | bX6 (b) | bIh (c) | bWhb (d)), \
     70 	(mOp | mX6 | mIh | mWhb)
     71 
     72 /* Used to initialise unused fields in ia64_opcode struct,
     73    in order to stop gcc from complaining.  */
     74 #define EMPTY 0,0,NULL
     75 
     76 struct ia64_opcode ia64_opcodes_b[] =
     77   {
     78     /* B-type instruction encodings (sorted according to major opcode) */
     79 
     80 #define BR(a,b) \
     81       B0, OpX6BtypePaWhaDPr (0, 0x20, 0, a, 0, b, 0), {B2}, PSEUDO, 0, NULL
     82     {"br.few",		BR (0, 0)},
     83     {"br",		BR (0, 0)},
     84     {"br.few.clr",	BR (0, 1)},
     85     {"br.clr",		BR (0, 1)},
     86     {"br.many",		BR (1, 0)},
     87     {"br.many.clr",	BR (1, 1)},
     88 #undef BR
     89 
     90 #define BR(a,b,c,d,e)	B0, OpX6BtypePaWhaD (0, a, b, c, d, e), {B2}, EMPTY
     91 #define BRP(a,b,c,d,e)	B0, OpX6BtypePaWhaD (0, a, b, c, d, e), {B2}, PSEUDO, 0, NULL
     92 #define BRT(a,b,c,d,e,f) B0, OpX6BtypePaWhaD (0, a, b, c, d, e), {B2}, f, 0, NULL
     93     {"br.cond.sptk.few",	BR (0x20, 0, 0, 0, 0)},
     94     {"br.cond.sptk",		BRP (0x20, 0, 0, 0, 0)},
     95     {"br.cond.sptk.few.clr",	BR (0x20, 0, 0, 0, 1)},
     96     {"br.cond.sptk.clr",	BRP (0x20, 0, 0, 0, 1)},
     97     {"br.cond.spnt.few",	BR (0x20, 0, 0, 1, 0)},
     98     {"br.cond.spnt",		BRP (0x20, 0, 0, 1, 0)},
     99     {"br.cond.spnt.few.clr",	BR (0x20, 0, 0, 1, 1)},
    100     {"br.cond.spnt.clr",	BRP (0x20, 0, 0, 1, 1)},
    101     {"br.cond.dptk.few",	BR (0x20, 0, 0, 2, 0)},
    102     {"br.cond.dptk",		BRP (0x20, 0, 0, 2, 0)},
    103     {"br.cond.dptk.few.clr",	BR (0x20, 0, 0, 2, 1)},
    104     {"br.cond.dptk.clr",	BRP (0x20, 0, 0, 2, 1)},
    105     {"br.cond.dpnt.few",	BR (0x20, 0, 0, 3, 0)},
    106     {"br.cond.dpnt",		BRP (0x20, 0, 0, 3, 0)},
    107     {"br.cond.dpnt.few.clr",	BR (0x20, 0, 0, 3, 1)},
    108     {"br.cond.dpnt.clr",	BRP (0x20, 0, 0, 3, 1)},
    109     {"br.cond.sptk.many",	BR (0x20, 0, 1, 0, 0)},
    110     {"br.cond.sptk.many.clr",	BR (0x20, 0, 1, 0, 1)},
    111     {"br.cond.spnt.many",	BR (0x20, 0, 1, 1, 0)},
    112     {"br.cond.spnt.many.clr",	BR (0x20, 0, 1, 1, 1)},
    113     {"br.cond.dptk.many",	BR (0x20, 0, 1, 2, 0)},
    114     {"br.cond.dptk.many.clr",	BR (0x20, 0, 1, 2, 1)},
    115     {"br.cond.dpnt.many",	BR (0x20, 0, 1, 3, 0)},
    116     {"br.cond.dpnt.many.clr",	BR (0x20, 0, 1, 3, 1)},
    117     {"br.sptk.few",		BR (0x20, 0, 0, 0, 0)},
    118     {"br.sptk",			BRP (0x20, 0, 0, 0, 0)},
    119     {"br.sptk.few.clr",		BR (0x20, 0, 0, 0, 1)},
    120     {"br.sptk.clr",		BRP (0x20, 0, 0, 0, 1)},
    121     {"br.spnt.few",		BR (0x20, 0, 0, 1, 0)},
    122     {"br.spnt",			BRP (0x20, 0, 0, 1, 0)},
    123     {"br.spnt.few.clr",		BR (0x20, 0, 0, 1, 1)},
    124     {"br.spnt.clr",		BRP (0x20, 0, 0, 1, 1)},
    125     {"br.dptk.few",		BR (0x20, 0, 0, 2, 0)},
    126     {"br.dptk",			BRP (0x20, 0, 0, 2, 0)},
    127     {"br.dptk.few.clr",		BR (0x20, 0, 0, 2, 1)},
    128     {"br.dptk.clr",		BRP (0x20, 0, 0, 2, 1)},
    129     {"br.dpnt.few",		BR (0x20, 0, 0, 3, 0)},
    130     {"br.dpnt",			BRP (0x20, 0, 0, 3, 0)},
    131     {"br.dpnt.few.clr",		BR (0x20, 0, 0, 3, 1)},
    132     {"br.dpnt.clr",		BRP (0x20, 0, 0, 3, 1)},
    133     {"br.sptk.many",		BR (0x20, 0, 1, 0, 0)},
    134     {"br.sptk.many.clr",	BR (0x20, 0, 1, 0, 1)},
    135     {"br.spnt.many",		BR (0x20, 0, 1, 1, 0)},
    136     {"br.spnt.many.clr",	BR (0x20, 0, 1, 1, 1)},
    137     {"br.dptk.many",		BR (0x20, 0, 1, 2, 0)},
    138     {"br.dptk.many.clr",	BR (0x20, 0, 1, 2, 1)},
    139     {"br.dpnt.many",		BR (0x20, 0, 1, 3, 0)},
    140     {"br.dpnt.many.clr",	BR (0x20, 0, 1, 3, 1)},
    141     {"br.ia.sptk.few",		BR (0x20, 1, 0, 0, 0)},
    142     {"br.ia.sptk",		BRP (0x20, 1, 0, 0, 0)},
    143     {"br.ia.sptk.few.clr",	BR (0x20, 1, 0, 0, 1)},
    144     {"br.ia.sptk.clr",		BRP (0x20, 1, 0, 0, 1)},
    145     {"br.ia.spnt.few",		BR (0x20, 1, 0, 1, 0)},
    146     {"br.ia.spnt",		BRP (0x20, 1, 0, 1, 0)},
    147     {"br.ia.spnt.few.clr",	BR (0x20, 1, 0, 1, 1)},
    148     {"br.ia.spnt.clr",		BRP (0x20, 1, 0, 1, 1)},
    149     {"br.ia.dptk.few",		BR (0x20, 1, 0, 2, 0)},
    150     {"br.ia.dptk",		BRP (0x20, 1, 0, 2, 0)},
    151     {"br.ia.dptk.few.clr",	BR (0x20, 1, 0, 2, 1)},
    152     {"br.ia.dptk.clr",		BRP (0x20, 1, 0, 2, 1)},
    153     {"br.ia.dpnt.few",		BR (0x20, 1, 0, 3, 0)},
    154     {"br.ia.dpnt",		BRP (0x20, 1, 0, 3, 0)},
    155     {"br.ia.dpnt.few.clr",	BR (0x20, 1, 0, 3, 1)},
    156     {"br.ia.dpnt.clr",		BRP (0x20, 1, 0, 3, 1)},
    157     {"br.ia.sptk.many",		BR (0x20, 1, 1, 0, 0)},
    158     {"br.ia.sptk.many.clr",	BR (0x20, 1, 1, 0, 1)},
    159     {"br.ia.spnt.many",		BR (0x20, 1, 1, 1, 0)},
    160     {"br.ia.spnt.many.clr",	BR (0x20, 1, 1, 1, 1)},
    161     {"br.ia.dptk.many",		BR (0x20, 1, 1, 2, 0)},
    162     {"br.ia.dptk.many.clr",	BR (0x20, 1, 1, 2, 1)},
    163     {"br.ia.dpnt.many",		BR (0x20, 1, 1, 3, 0)},
    164     {"br.ia.dpnt.many.clr",	BR (0x20, 1, 1, 3, 1)},
    165     {"br.ret.sptk.few",		BRT (0x21, 4, 0, 0, 0, MOD_RRBS)},
    166     {"br.ret.sptk",		BRT (0x21, 4, 0, 0, 0, PSEUDO | MOD_RRBS)},
    167     {"br.ret.sptk.few.clr",	BRT (0x21, 4, 0, 0, 1, MOD_RRBS)},
    168     {"br.ret.sptk.clr",		BRT (0x21, 4, 0, 0, 1, PSEUDO | MOD_RRBS)},
    169     {"br.ret.spnt.few",		BRT (0x21, 4, 0, 1, 0, MOD_RRBS)},
    170     {"br.ret.spnt",		BRT (0x21, 4, 0, 1, 0, PSEUDO | MOD_RRBS)},
    171     {"br.ret.spnt.few.clr",	BRT (0x21, 4, 0, 1, 1, MOD_RRBS)},
    172     {"br.ret.spnt.clr",		BRT (0x21, 4, 0, 1, 1, PSEUDO | MOD_RRBS)},
    173     {"br.ret.dptk.few",		BRT (0x21, 4, 0, 2, 0, MOD_RRBS)},
    174     {"br.ret.dptk",		BRT (0x21, 4, 0, 2, 0, PSEUDO | MOD_RRBS)},
    175     {"br.ret.dptk.few.clr",	BRT (0x21, 4, 0, 2, 1, MOD_RRBS)},
    176     {"br.ret.dptk.clr",		BRT (0x21, 4, 0, 2, 1, PSEUDO | MOD_RRBS)},
    177     {"br.ret.dpnt.few",		BRT (0x21, 4, 0, 3, 0, MOD_RRBS)},
    178     {"br.ret.dpnt",		BRT (0x21, 4, 0, 3, 0, PSEUDO | MOD_RRBS)},
    179     {"br.ret.dpnt.few.clr",	BRT (0x21, 4, 0, 3, 1, MOD_RRBS)},
    180     {"br.ret.dpnt.clr",		BRT (0x21, 4, 0, 3, 1, PSEUDO | MOD_RRBS)},
    181     {"br.ret.sptk.many",	BRT (0x21, 4, 1, 0, 0, MOD_RRBS)},
    182     {"br.ret.sptk.many.clr",	BRT (0x21, 4, 1, 0, 1, MOD_RRBS)},
    183     {"br.ret.spnt.many",	BRT (0x21, 4, 1, 1, 0, MOD_RRBS)},
    184     {"br.ret.spnt.many.clr",	BRT (0x21, 4, 1, 1, 1, MOD_RRBS)},
    185     {"br.ret.dptk.many",	BRT (0x21, 4, 1, 2, 0, MOD_RRBS)},
    186     {"br.ret.dptk.many.clr",	BRT (0x21, 4, 1, 2, 1, MOD_RRBS)},
    187     {"br.ret.dpnt.many",	BRT (0x21, 4, 1, 3, 0, MOD_RRBS)},
    188     {"br.ret.dpnt.many.clr",	BRT (0x21, 4, 1, 3, 1, MOD_RRBS)},
    189 #undef BR
    190 #undef BRP
    191 #undef BRT
    192 
    193     {"cover",		B0, OpX6 (0, 0x02), {0, }, NO_PRED | LAST | MOD_RRBS, 0, NULL},
    194     {"clrrrb",		B0, OpX6 (0, 0x04), {0, }, NO_PRED | LAST | MOD_RRBS, 0, NULL},
    195     {"clrrrb.pr",	B0, OpX6 (0, 0x05), {0, }, NO_PRED | LAST | MOD_RRBS, 0, NULL},
    196     {"rfi",		B0, OpX6 (0, 0x08), {0, }, NO_PRED | LAST | PRIV | MOD_RRBS, 0, NULL},
    197     {"bsw.0",		B0, OpX6 (0, 0x0c), {0, }, NO_PRED | LAST | PRIV, 0, NULL},
    198     {"bsw.1",		B0, OpX6 (0, 0x0d), {0, }, NO_PRED | LAST | PRIV, 0, NULL},
    199     {"epc",		B0, OpX6 (0, 0x10), {0, }, NO_PRED, 0, NULL},
    200     {"vmsw.0",		B0, OpX6 (0, 0x18), {0, }, NO_PRED | PRIV, 0, NULL},
    201     {"vmsw.1",		B0, OpX6 (0, 0x19), {0, }, NO_PRED | PRIV, 0, NULL},
    202 
    203     {"break.b",		B0, OpX6 (0, 0x00), {IMMU21}, EMPTY},
    204 
    205     {"br.call.sptk.few",	B, OpPaWhcD (1, 0, 1, 0), {B1, B2}, EMPTY},
    206     {"br.call.sptk",		B, OpPaWhcD (1, 0, 1, 0), {B1, B2}, PSEUDO, 0, NULL},
    207     {"br.call.sptk.few.clr",	B, OpPaWhcD (1, 0, 1, 1), {B1, B2}, EMPTY},
    208     {"br.call.sptk.clr",	B, OpPaWhcD (1, 0, 1, 1), {B1, B2}, PSEUDO, 0, NULL},
    209     {"br.call.spnt.few",	B, OpPaWhcD (1, 0, 3, 0), {B1, B2}, EMPTY},
    210     {"br.call.spnt",		B, OpPaWhcD (1, 0, 3, 0), {B1, B2}, PSEUDO, 0, NULL},
    211     {"br.call.spnt.few.clr",	B, OpPaWhcD (1, 0, 3, 1), {B1, B2}, EMPTY},
    212     {"br.call.spnt.clr",	B, OpPaWhcD (1, 0, 3, 1), {B1, B2}, PSEUDO, 0, NULL},
    213     {"br.call.dptk.few",	B, OpPaWhcD (1, 0, 5, 0), {B1, B2}, EMPTY},
    214     {"br.call.dptk",		B, OpPaWhcD (1, 0, 5, 0), {B1, B2}, PSEUDO, 0, NULL},
    215     {"br.call.dptk.few.clr",	B, OpPaWhcD (1, 0, 5, 1), {B1, B2}, EMPTY},
    216     {"br.call.dptk.clr",	B, OpPaWhcD (1, 0, 5, 1), {B1, B2}, PSEUDO, 0, NULL},
    217     {"br.call.dpnt.few",	B, OpPaWhcD (1, 0, 7, 0), {B1, B2}, EMPTY},
    218     {"br.call.dpnt",		B, OpPaWhcD (1, 0, 7, 0), {B1, B2}, PSEUDO, 0, NULL},
    219     {"br.call.dpnt.few.clr",	B, OpPaWhcD (1, 0, 7, 1), {B1, B2}, EMPTY},
    220     {"br.call.dpnt.clr",	B, OpPaWhcD (1, 0, 7, 1), {B1, B2}, PSEUDO, 0, NULL},
    221     {"br.call.sptk.many",	B, OpPaWhcD (1, 1, 1, 0), {B1, B2}, EMPTY},
    222     {"br.call.sptk.many.clr",	B, OpPaWhcD (1, 1, 1, 1), {B1, B2}, EMPTY},
    223     {"br.call.spnt.many",	B, OpPaWhcD (1, 1, 3, 0), {B1, B2}, EMPTY},
    224     {"br.call.spnt.many.clr",	B, OpPaWhcD (1, 1, 3, 1), {B1, B2}, EMPTY},
    225     {"br.call.dptk.many",	B, OpPaWhcD (1, 1, 5, 0), {B1, B2}, EMPTY},
    226     {"br.call.dptk.many.clr",	B, OpPaWhcD (1, 1, 5, 1), {B1, B2}, EMPTY},
    227     {"br.call.dpnt.many",	B, OpPaWhcD (1, 1, 7, 0), {B1, B2}, EMPTY},
    228     {"br.call.dpnt.many.clr",	B, OpPaWhcD (1, 1, 7, 1), {B1, B2}, EMPTY},
    229 
    230 #define BRP(a,b,c) \
    231       B0, OpX6IhWhb (2, a, b, c), {B2, TAG13}, NO_PRED, 0, NULL
    232     {"brp.sptk",		BRP (0x10, 0, 0)},
    233     {"brp.dptk",		BRP (0x10, 0, 2)},
    234     {"brp.sptk.imp",		BRP (0x10, 1, 0)},
    235     {"brp.dptk.imp",		BRP (0x10, 1, 2)},
    236     {"brp.ret.sptk",		BRP (0x11, 0, 0)},
    237     {"brp.ret.dptk",		BRP (0x11, 0, 2)},
    238     {"brp.ret.sptk.imp",	BRP (0x11, 1, 0)},
    239     {"brp.ret.dptk.imp",	BRP (0x11, 1, 2)},
    240 #undef BRP
    241 
    242     {"nop.b",		B0, OpX6 (2, 0x00), {IMMU21}, EMPTY},
    243     {"hint.b",		B0, OpX6 (2, 0x01), {IMMU21}, EMPTY},
    244 
    245 #define BR(a,b) \
    246       B0, OpBtypePaWhaDPr (4, 0, a, 0, b, 0), {TGT25c}, PSEUDO, 0, NULL
    247     {"br.few",		BR (0, 0)},
    248     {"br",		BR (0, 0)},
    249     {"br.few.clr",	BR (0, 1)},
    250     {"br.clr",		BR (0, 1)},
    251     {"br.many",		BR (1, 0)},
    252     {"br.many.clr",	BR (1, 1)},
    253 #undef BR
    254 
    255 #define BR(a,b,c) \
    256       B0, OpBtypePaWhaD (4, 0, a, b, c), {TGT25c}, EMPTY
    257 #define BRP(a,b,c) \
    258       B0, OpBtypePaWhaD (4, 0, a, b, c), {TGT25c}, PSEUDO, 0, NULL
    259     {"br.cond.sptk.few",	BR (0, 0, 0)},
    260     {"br.cond.sptk",		BRP (0, 0, 0)},
    261     {"br.cond.sptk.few.clr",	BR (0, 0, 1)},
    262     {"br.cond.sptk.clr",	BRP (0, 0, 1)},
    263     {"br.cond.spnt.few",	BR (0, 1, 0)},
    264     {"br.cond.spnt",		BRP (0, 1, 0)},
    265     {"br.cond.spnt.few.clr",	BR (0, 1, 1)},
    266     {"br.cond.spnt.clr",	BRP (0, 1, 1)},
    267     {"br.cond.dptk.few",	BR (0, 2, 0)},
    268     {"br.cond.dptk",		BRP (0, 2, 0)},
    269     {"br.cond.dptk.few.clr",	BR (0, 2, 1)},
    270     {"br.cond.dptk.clr",	BRP (0, 2, 1)},
    271     {"br.cond.dpnt.few",	BR (0, 3, 0)},
    272     {"br.cond.dpnt",		BRP (0, 3, 0)},
    273     {"br.cond.dpnt.few.clr",	BR (0, 3, 1)},
    274     {"br.cond.dpnt.clr",	BRP (0, 3, 1)},
    275     {"br.cond.sptk.many",	BR (1, 0, 0)},
    276     {"br.cond.sptk.many.clr",	BR (1, 0, 1)},
    277     {"br.cond.spnt.many",	BR (1, 1, 0)},
    278     {"br.cond.spnt.many.clr",	BR (1, 1, 1)},
    279     {"br.cond.dptk.many",	BR (1, 2, 0)},
    280     {"br.cond.dptk.many.clr",	BR (1, 2, 1)},
    281     {"br.cond.dpnt.many",	BR (1, 3, 0)},
    282     {"br.cond.dpnt.many.clr",	BR (1, 3, 1)},
    283     {"br.sptk.few",		BR (0, 0, 0)},
    284     {"br.sptk",			BRP (0, 0, 0)},
    285     {"br.sptk.few.clr",		BR (0, 0, 1)},
    286     {"br.sptk.clr",		BRP (0, 0, 1)},
    287     {"br.spnt.few",		BR (0, 1, 0)},
    288     {"br.spnt",			BRP (0, 1, 0)},
    289     {"br.spnt.few.clr",		BR (0, 1, 1)},
    290     {"br.spnt.clr",		BRP (0, 1, 1)},
    291     {"br.dptk.few",		BR (0, 2, 0)},
    292     {"br.dptk",			BRP (0, 2, 0)},
    293     {"br.dptk.few.clr",		BR (0, 2, 1)},
    294     {"br.dptk.clr",		BRP (0, 2, 1)},
    295     {"br.dpnt.few",		BR (0, 3, 0)},
    296     {"br.dpnt",			BRP (0, 3, 0)},
    297     {"br.dpnt.few.clr",		BR (0, 3, 1)},
    298     {"br.dpnt.clr",		BRP (0, 3, 1)},
    299     {"br.sptk.many",		BR (1, 0, 0)},
    300     {"br.sptk.many.clr",	BR (1, 0, 1)},
    301     {"br.spnt.many",		BR (1, 1, 0)},
    302     {"br.spnt.many.clr",	BR (1, 1, 1)},
    303     {"br.dptk.many",		BR (1, 2, 0)},
    304     {"br.dptk.many.clr",	BR (1, 2, 1)},
    305     {"br.dpnt.many",		BR (1, 3, 0)},
    306     {"br.dpnt.many.clr",	BR (1, 3, 1)},
    307 #undef BR
    308 #undef BRP
    309 
    310 #define BR(a,b,c,d, e) \
    311 	B0, OpBtypePaWhaD (4, a, b, c, d), {TGT25c}, SLOT2 | e, 0, NULL
    312     {"br.wexit.sptk.few",	BR (2, 0, 0, 0, MOD_RRBS)},
    313     {"br.wexit.sptk",		BR (2, 0, 0, 0, PSEUDO | MOD_RRBS)},
    314     {"br.wexit.sptk.few.clr",	BR (2, 0, 0, 1, MOD_RRBS)},
    315     {"br.wexit.sptk.clr",	BR (2, 0, 0, 1, PSEUDO | MOD_RRBS)},
    316     {"br.wexit.spnt.few",	BR (2, 0, 1, 0, MOD_RRBS)},
    317     {"br.wexit.spnt",		BR (2, 0, 1, 0, PSEUDO | MOD_RRBS)},
    318     {"br.wexit.spnt.few.clr",	BR (2, 0, 1, 1, MOD_RRBS)},
    319     {"br.wexit.spnt.clr",	BR (2, 0, 1, 1, PSEUDO | MOD_RRBS)},
    320     {"br.wexit.dptk.few",	BR (2, 0, 2, 0, MOD_RRBS)},
    321     {"br.wexit.dptk",		BR (2, 0, 2, 0, PSEUDO | MOD_RRBS)},
    322     {"br.wexit.dptk.few.clr",	BR (2, 0, 2, 1, MOD_RRBS)},
    323     {"br.wexit.dptk.clr",	BR (2, 0, 2, 1, PSEUDO | MOD_RRBS)},
    324     {"br.wexit.dpnt.few",	BR (2, 0, 3, 0, MOD_RRBS)},
    325     {"br.wexit.dpnt",		BR (2, 0, 3, 0, PSEUDO | MOD_RRBS)},
    326     {"br.wexit.dpnt.few.clr",	BR (2, 0, 3, 1, MOD_RRBS)},
    327     {"br.wexit.dpnt.clr",	BR (2, 0, 3, 1, PSEUDO | MOD_RRBS)},
    328     {"br.wexit.sptk.many",	BR (2, 1, 0, 0, MOD_RRBS)},
    329     {"br.wexit.sptk.many.clr",	BR (2, 1, 0, 1, MOD_RRBS)},
    330     {"br.wexit.spnt.many",	BR (2, 1, 1, 0, MOD_RRBS)},
    331     {"br.wexit.spnt.many.clr",	BR (2, 1, 1, 1, MOD_RRBS)},
    332     {"br.wexit.dptk.many",	BR (2, 1, 2, 0, MOD_RRBS)},
    333     {"br.wexit.dptk.many.clr",	BR (2, 1, 2, 1, MOD_RRBS)},
    334     {"br.wexit.dpnt.many",	BR (2, 1, 3, 0, MOD_RRBS)},
    335     {"br.wexit.dpnt.many.clr",	BR (2, 1, 3, 1, MOD_RRBS)},
    336     {"br.wtop.sptk.few",	BR (3, 0, 0, 0, MOD_RRBS)},
    337     {"br.wtop.sptk",		BR (3, 0, 0, 0, PSEUDO | MOD_RRBS)},
    338     {"br.wtop.sptk.few.clr",	BR (3, 0, 0, 1, MOD_RRBS)},
    339     {"br.wtop.sptk.clr",	BR (3, 0, 0, 1, PSEUDO | MOD_RRBS)},
    340     {"br.wtop.spnt.few",	BR (3, 0, 1, 0, MOD_RRBS)},
    341     {"br.wtop.spnt",		BR (3, 0, 1, 0, PSEUDO | MOD_RRBS)},
    342     {"br.wtop.spnt.few.clr",	BR (3, 0, 1, 1, MOD_RRBS)},
    343     {"br.wtop.spnt.clr",	BR (3, 0, 1, 1, PSEUDO | MOD_RRBS)},
    344     {"br.wtop.dptk.few",	BR (3, 0, 2, 0, MOD_RRBS)},
    345     {"br.wtop.dptk",		BR (3, 0, 2, 0, PSEUDO | MOD_RRBS)},
    346     {"br.wtop.dptk.few.clr",	BR (3, 0, 2, 1, MOD_RRBS)},
    347     {"br.wtop.dptk.clr",	BR (3, 0, 2, 1, PSEUDO | MOD_RRBS)},
    348     {"br.wtop.dpnt.few",	BR (3, 0, 3, 0, MOD_RRBS)},
    349     {"br.wtop.dpnt",		BR (3, 0, 3, 0, PSEUDO | MOD_RRBS)},
    350     {"br.wtop.dpnt.few.clr",	BR (3, 0, 3, 1, MOD_RRBS)},
    351     {"br.wtop.dpnt.clr",	BR (3, 0, 3, 1, PSEUDO | MOD_RRBS)},
    352     {"br.wtop.sptk.many",	BR (3, 1, 0, 0, MOD_RRBS)},
    353     {"br.wtop.sptk.many.clr",	BR (3, 1, 0, 1, MOD_RRBS)},
    354     {"br.wtop.spnt.many",	BR (3, 1, 1, 0, MOD_RRBS)},
    355     {"br.wtop.spnt.many.clr",	BR (3, 1, 1, 1, MOD_RRBS)},
    356     {"br.wtop.dptk.many",	BR (3, 1, 2, 0, MOD_RRBS)},
    357     {"br.wtop.dptk.many.clr",	BR (3, 1, 2, 1, MOD_RRBS)},
    358     {"br.wtop.dpnt.many",	BR (3, 1, 3, 0, MOD_RRBS)},
    359     {"br.wtop.dpnt.many.clr",	BR (3, 1, 3, 1, MOD_RRBS)},
    360 
    361 #undef BR
    362 #define BR(a,b,c,d) \
    363 	B0, OpBtypePaWhaD (4, a, b, c, d), {TGT25c}, SLOT2 | NO_PRED, 0, NULL
    364 #define BRT(a,b,c,d,e) \
    365 	B0, OpBtypePaWhaD (4, a, b, c, d), {TGT25c}, SLOT2 | NO_PRED | e, 0, NULL
    366     {"br.cloop.sptk.few",	BR (5, 0, 0, 0)},
    367     {"br.cloop.sptk",		BRT (5, 0, 0, 0, PSEUDO)},
    368     {"br.cloop.sptk.few.clr",	BR (5, 0, 0, 1)},
    369     {"br.cloop.sptk.clr",	BRT (5, 0, 0, 1, PSEUDO)},
    370     {"br.cloop.spnt.few",	BR (5, 0, 1, 0)},
    371     {"br.cloop.spnt",		BRT (5, 0, 1, 0, PSEUDO)},
    372     {"br.cloop.spnt.few.clr",	BR (5, 0, 1, 1)},
    373     {"br.cloop.spnt.clr",	BRT (5, 0, 1, 1, PSEUDO)},
    374     {"br.cloop.dptk.few",	BR (5, 0, 2, 0)},
    375     {"br.cloop.dptk",		BRT (5, 0, 2, 0, PSEUDO)},
    376     {"br.cloop.dptk.few.clr",	BR (5, 0, 2, 1)},
    377     {"br.cloop.dptk.clr",	BRT (5, 0, 2, 1, PSEUDO)},
    378     {"br.cloop.dpnt.few",	BR (5, 0, 3, 0)},
    379     {"br.cloop.dpnt",		BRT (5, 0, 3, 0, PSEUDO)},
    380     {"br.cloop.dpnt.few.clr",	BR (5, 0, 3, 1)},
    381     {"br.cloop.dpnt.clr",	BRT (5, 0, 3, 1, PSEUDO)},
    382     {"br.cloop.sptk.many",	BR (5, 1, 0, 0)},
    383     {"br.cloop.sptk.many.clr",	BR (5, 1, 0, 1)},
    384     {"br.cloop.spnt.many",	BR (5, 1, 1, 0)},
    385     {"br.cloop.spnt.many.clr",	BR (5, 1, 1, 1)},
    386     {"br.cloop.dptk.many",	BR (5, 1, 2, 0)},
    387     {"br.cloop.dptk.many.clr",	BR (5, 1, 2, 1)},
    388     {"br.cloop.dpnt.many",	BR (5, 1, 3, 0)},
    389     {"br.cloop.dpnt.many.clr",	BR (5, 1, 3, 1)},
    390     {"br.cexit.sptk.few",	BRT (6, 0, 0, 0, MOD_RRBS)},
    391     {"br.cexit.sptk",		BRT (6, 0, 0, 0, PSEUDO | MOD_RRBS)},
    392     {"br.cexit.sptk.few.clr",	BRT (6, 0, 0, 1, MOD_RRBS)},
    393     {"br.cexit.sptk.clr",	BRT (6, 0, 0, 1, PSEUDO | MOD_RRBS)},
    394     {"br.cexit.spnt.few",	BRT (6, 0, 1, 0, MOD_RRBS)},
    395     {"br.cexit.spnt",		BRT (6, 0, 1, 0, PSEUDO | MOD_RRBS)},
    396     {"br.cexit.spnt.few.clr",	BRT (6, 0, 1, 1, MOD_RRBS)},
    397     {"br.cexit.spnt.clr",	BRT (6, 0, 1, 1, PSEUDO | MOD_RRBS)},
    398     {"br.cexit.dptk.few",	BRT (6, 0, 2, 0, MOD_RRBS)},
    399     {"br.cexit.dptk",		BRT (6, 0, 2, 0, PSEUDO | MOD_RRBS)},
    400     {"br.cexit.dptk.few.clr",	BRT (6, 0, 2, 1, MOD_RRBS)},
    401     {"br.cexit.dptk.clr",	BRT (6, 0, 2, 1, PSEUDO | MOD_RRBS)},
    402     {"br.cexit.dpnt.few",	BRT (6, 0, 3, 0, MOD_RRBS)},
    403     {"br.cexit.dpnt",		BRT (6, 0, 3, 0, PSEUDO | MOD_RRBS)},
    404     {"br.cexit.dpnt.few.clr",	BRT (6, 0, 3, 1, MOD_RRBS)},
    405     {"br.cexit.dpnt.clr",	BRT (6, 0, 3, 1, PSEUDO | MOD_RRBS)},
    406     {"br.cexit.sptk.many",	BRT (6, 1, 0, 0, MOD_RRBS)},
    407     {"br.cexit.sptk.many.clr",	BRT (6, 1, 0, 1, MOD_RRBS)},
    408     {"br.cexit.spnt.many",	BRT (6, 1, 1, 0, MOD_RRBS)},
    409     {"br.cexit.spnt.many.clr",	BRT (6, 1, 1, 1, MOD_RRBS)},
    410     {"br.cexit.dptk.many",	BRT (6, 1, 2, 0, MOD_RRBS)},
    411     {"br.cexit.dptk.many.clr",	BRT (6, 1, 2, 1, MOD_RRBS)},
    412     {"br.cexit.dpnt.many",	BRT (6, 1, 3, 0, MOD_RRBS)},
    413     {"br.cexit.dpnt.many.clr",	BRT (6, 1, 3, 1, MOD_RRBS)},
    414     {"br.ctop.sptk.few",	BRT (7, 0, 0, 0, MOD_RRBS)},
    415     {"br.ctop.sptk",		BRT (7, 0, 0, 0, PSEUDO | MOD_RRBS)},
    416     {"br.ctop.sptk.few.clr",	BRT (7, 0, 0, 1, MOD_RRBS)},
    417     {"br.ctop.sptk.clr",	BRT (7, 0, 0, 1, PSEUDO | MOD_RRBS)},
    418     {"br.ctop.spnt.few",	BRT (7, 0, 1, 0, MOD_RRBS)},
    419     {"br.ctop.spnt",		BRT (7, 0, 1, 0, PSEUDO | MOD_RRBS)},
    420     {"br.ctop.spnt.few.clr",	BRT (7, 0, 1, 1, MOD_RRBS)},
    421     {"br.ctop.spnt.clr",	BRT (7, 0, 1, 1, PSEUDO | MOD_RRBS)},
    422     {"br.ctop.dptk.few",	BRT (7, 0, 2, 0, MOD_RRBS)},
    423     {"br.ctop.dptk",		BRT (7, 0, 2, 0, PSEUDO | MOD_RRBS)},
    424     {"br.ctop.dptk.few.clr",	BRT (7, 0, 2, 1, MOD_RRBS)},
    425     {"br.ctop.dptk.clr",	BRT (7, 0, 2, 1, PSEUDO | MOD_RRBS)},
    426     {"br.ctop.dpnt.few",	BRT (7, 0, 3, 0, MOD_RRBS)},
    427     {"br.ctop.dpnt",		BRT (7, 0, 3, 0, PSEUDO | MOD_RRBS)},
    428     {"br.ctop.dpnt.few.clr",	BRT (7, 0, 3, 1, MOD_RRBS)},
    429     {"br.ctop.dpnt.clr",	BRT (7, 0, 3, 1, PSEUDO | MOD_RRBS)},
    430     {"br.ctop.sptk.many",	BRT (7, 1, 0, 0, MOD_RRBS)},
    431     {"br.ctop.sptk.many.clr",	BRT (7, 1, 0, 1, MOD_RRBS)},
    432     {"br.ctop.spnt.many",	BRT (7, 1, 1, 0, MOD_RRBS)},
    433     {"br.ctop.spnt.many.clr",	BRT (7, 1, 1, 1, MOD_RRBS)},
    434     {"br.ctop.dptk.many",	BRT (7, 1, 2, 0, MOD_RRBS)},
    435     {"br.ctop.dptk.many.clr",	BRT (7, 1, 2, 1, MOD_RRBS)},
    436     {"br.ctop.dpnt.many",	BRT (7, 1, 3, 0, MOD_RRBS)},
    437     {"br.ctop.dpnt.many.clr",	BRT (7, 1, 3, 1, MOD_RRBS)},
    438 #undef BR
    439 #undef BRT
    440 
    441     {"br.call.sptk.few",	B, OpPaWhaD (5, 0, 0, 0), {B1, TGT25c}, EMPTY},
    442     {"br.call.sptk",		B, OpPaWhaD (5, 0, 0, 0), {B1, TGT25c}, PSEUDO, 0, NULL},
    443     {"br.call.sptk.few.clr",	B, OpPaWhaD (5, 0, 0, 1), {B1, TGT25c}, EMPTY},
    444     {"br.call.sptk.clr",	B, OpPaWhaD (5, 0, 0, 1), {B1, TGT25c}, PSEUDO, 0, NULL},
    445     {"br.call.spnt.few",	B, OpPaWhaD (5, 0, 1, 0), {B1, TGT25c}, EMPTY},
    446     {"br.call.spnt",		B, OpPaWhaD (5, 0, 1, 0), {B1, TGT25c}, PSEUDO, 0, NULL},
    447     {"br.call.spnt.few.clr",	B, OpPaWhaD (5, 0, 1, 1), {B1, TGT25c}, EMPTY},
    448     {"br.call.spnt.clr",	B, OpPaWhaD (5, 0, 1, 1), {B1, TGT25c}, PSEUDO, 0, NULL},
    449     {"br.call.dptk.few",	B, OpPaWhaD (5, 0, 2, 0), {B1, TGT25c}, EMPTY},
    450     {"br.call.dptk",		B, OpPaWhaD (5, 0, 2, 0), {B1, TGT25c}, PSEUDO, 0, NULL},
    451     {"br.call.dptk.few.clr",	B, OpPaWhaD (5, 0, 2, 1), {B1, TGT25c}, EMPTY},
    452     {"br.call.dptk.clr",	B, OpPaWhaD (5, 0, 2, 1), {B1, TGT25c}, PSEUDO, 0, NULL},
    453     {"br.call.dpnt.few",	B, OpPaWhaD (5, 0, 3, 0), {B1, TGT25c}, EMPTY},
    454     {"br.call.dpnt",		B, OpPaWhaD (5, 0, 3, 0), {B1, TGT25c}, PSEUDO, 0, NULL},
    455     {"br.call.dpnt.few.clr",	B, OpPaWhaD (5, 0, 3, 1), {B1, TGT25c}, EMPTY},
    456     {"br.call.dpnt.clr",	B, OpPaWhaD (5, 0, 3, 1), {B1, TGT25c}, PSEUDO, 0, NULL},
    457     {"br.call.sptk.many",	B, OpPaWhaD (5, 1, 0, 0), {B1, TGT25c}, EMPTY},
    458     {"br.call.sptk.many.clr",	B, OpPaWhaD (5, 1, 0, 1), {B1, TGT25c}, EMPTY},
    459     {"br.call.spnt.many",	B, OpPaWhaD (5, 1, 1, 0), {B1, TGT25c}, EMPTY},
    460     {"br.call.spnt.many.clr",	B, OpPaWhaD (5, 1, 1, 1), {B1, TGT25c}, EMPTY},
    461     {"br.call.dptk.many",	B, OpPaWhaD (5, 1, 2, 0), {B1, TGT25c}, EMPTY},
    462     {"br.call.dptk.many.clr",	B, OpPaWhaD (5, 1, 2, 1), {B1, TGT25c}, EMPTY},
    463     {"br.call.dpnt.many",	B, OpPaWhaD (5, 1, 3, 0), {B1, TGT25c}, EMPTY},
    464     {"br.call.dpnt.many.clr",	B, OpPaWhaD (5, 1, 3, 1), {B1, TGT25c}, EMPTY},
    465 
    466     /* Branch predict.  */
    467 #define BRP(a,b) \
    468       B0, OpIhWhb (7, a, b), {TGT25c, TAG13}, NO_PRED, 0, NULL
    469     {"brp.sptk",		BRP (0, 0)},
    470     {"brp.loop",		BRP (0, 1)},
    471     {"brp.dptk",		BRP (0, 2)},
    472     {"brp.exit",		BRP (0, 3)},
    473     {"brp.sptk.imp",		BRP (1, 0)},
    474     {"brp.loop.imp",		BRP (1, 1)},
    475     {"brp.dptk.imp",		BRP (1, 2)},
    476     {"brp.exit.imp",		BRP (1, 3)},
    477 #undef BRP
    478 
    479     {NULL, 0, 0, 0, 0, {0}, 0, 0, NULL}
    480   };
    481 
    482 #undef B0
    483 #undef B
    484 #undef bBtype
    485 #undef bD
    486 #undef bIh
    487 #undef bPa
    488 #undef bPr
    489 #undef bWha
    490 #undef bWhb
    491 #undef bWhc
    492 #undef bX6
    493 #undef mBtype
    494 #undef mD
    495 #undef mIh
    496 #undef mPa
    497 #undef mPr
    498 #undef mWha
    499 #undef mWhb
    500 #undef mWhc
    501 #undef mX6
    502 #undef OpX6
    503 #undef OpPaWhaD
    504 #undef OpPaWhcD
    505 #undef OpBtypePaWhaD
    506 #undef OpBtypePaWhaDPr
    507 #undef OpX6BtypePaWhaD
    508 #undef OpX6BtypePaWhaDPr
    509 #undef OpIhWhb
    510 #undef OpX6IhWhb
    511 #undef EMPTY
    512