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