| 1 | /* ia64-opc-b.c -- IA-64 `B' opcode table. |
| 2 | Copyright (C) 1998-2020 Free Software Foundation, Inc. |
| 3 | Contributed by David Mosberger-Tang <davidm@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 |