1 /* $NetBSD: db_disasm.h,v 1.1 1996/01/28 11:31:27 ragge Exp $ */ 2 /* 3 * Copyright (c) 1996 Ludd, University of Lule}, Sweden. 4 * All rights reserved. 5 * 6 * This code is derived from software contributed to Ludd by 7 * Bertram Barth. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 3. All advertising materials mentioning features or use of this software 18 * must display the following acknowledgement: 19 * This product includes software developed at Ludd, University of 20 * Lule}, Sweden and its contributors. 21 * 4. The name of the author may not be used to endorse or promote products 22 * derived from this software without specific prior written permission 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 25 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 26 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 27 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 28 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 29 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 33 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34 */ 35 36 37 38 #define SIZE_BYTE 1 /* Byte */ 39 #define SIZE_WORD 2 /* Word */ 40 #define SIZE_LONG 4 /* Longword */ 41 #define SIZE_QWORD 8 /* Quadword */ 42 #define SIZE_OWORD 16 /* Octaword */ 43 44 /* 45 * The VAX instruction set has a variable length instruction format which 46 * may be as short as one byte and as long as needed depending on the type 47 * of instruction. [...] Each instruction consists of an opcode followed 48 * by zero to six operand specifiers whose number and type depend on the 49 * opcode. All operand specidiers are, themselves, of the same format -- 50 * i.e. an address mode plus additional information. 51 * 52 * [VAX Architecture Handbook, p.52: Instruction Format] 53 */ 54 55 struct { 56 char *mnemonic; 57 char *argdesc; 58 } vax_inst[256] = { 59 60 /* 61 * argdesc describes each arguments by two characters denoting 62 * the access-type and the data-type. 63 * 64 * Arguments (Access-Types): 65 * r: operand is read only 66 * w: operand is written only 67 * m: operand is modified (both R and W) 68 * b: no operand reference. Branch displacement is specified. 69 * a: calculate the adress of the specified operand 70 * v: if not "Rn", same as a. If "RN," R[n+1]R[n] 71 * Arguments (Data-Types): 72 * b: Byte 73 * w: Word 74 * l: Longword 75 * q: Quadword 76 * o: Octaword 77 * d: D_floating 78 * f: F_floating 79 * g: G_floating 80 * h: H_floating 81 * r: Register 82 * x: first data type specified by instruction 83 * y: second data type spcified by instructin 84 * -: no-args 85 * ?: unknown (variable?) 86 */ 87 88 /* 0x00 */ { "halt", "" }, 89 /* 0x01 */ { "nop", "" }, 90 /* 0x02 */ { "rei", "" }, 91 /* 0x03 */ { "bpt", "" }, 92 /* 0x04 */ { "ret", "" }, 93 /* 0x05 */ { "rsb", "" }, 94 /* 0x06 */ { "ldpctx", "" }, 95 /* 0x07 */ { "svpctx", "" }, 96 /* 0x08 */ { "cvtps", "rw,ab,rw,ab" }, 97 /* 0x09 */ { "cvtsp", "rw,ab,rw,ab" }, 98 /* 0x0a */ { "index", "rl,rl,rl,rl,rl,wl" }, 99 /* 0x0b */ { "crc", "ab,rl,rw,ab" }, 100 /* 0x0c */ { "prober", "rb,rw,ab" }, 101 /* 0x0d */ { "probew", "rb,rw,ab" }, 102 /* 0x0e */ { "insque", "ab,wl" }, 103 /* 0x0f */ { "remque", "ab,wl" }, 104 105 /* 0x10 */ { "bsbb", "bb" }, 106 /* 0x11 */ { "brb", "bb" }, 107 /* 0x12 */ { "*bneq", "bb" }, 108 /* 0x13 */ { "*beql", "bb" }, 109 /* 0x14 */ { "bgtr", "bb" }, 110 /* 0x15 */ { "bleq", "bb" }, 111 /* 0x16 */ { "jsb", "ab" }, 112 /* 0x17 */ { "jmp", "ab" }, 113 /* 0x18 */ { "bgeq", "bb" }, 114 /* 0x19 */ { "blss", "bb" }, 115 /* 0x1a */ { "bgtru", "bb" }, 116 /* 0x1b */ { "blequ", "bb" }, 117 /* 0x1c */ { "bvc", "bb" }, 118 /* 0x1d */ { "bvs", "bb" }, 119 /* 0x1e */ { "*bcc", "bb" }, 120 /* 0x1f */ { "*bcs", "bb" }, 121 122 /* 0x20 */ { "addp4", "rw,ab,rw,ab" }, 123 /* 0x21 */ { "addp6", "rw,ab,rw,ab,rw,ab" }, 124 /* 0x22 */ { "subp4", "rw,ab,rw,ab" }, 125 /* 0x23 */ { "subp6", "rw,ab,rw,ab,rw,ab" }, 126 /* 0x24 */ { "cvtpt", "rw,ab,ab,rw,ab" }, 127 /* 0x25 */ { "mulp", "rw,ab,rw,ab,rw,ab" }, 128 /* 0x26 */ { "cvttp", "rw,ab,ab,rw,ab" }, 129 /* 0x27 */ { "divp", "rw,ab,rw,ab,rw,ab" }, 130 /* 0x28 */ { "movc3", "rw,ab,ab" }, 131 /* 0x29 */ { "cmpc3", "rw,ab,ab" }, 132 /* 0x2a */ { "scanc", "rw,ab,ab,rb" }, 133 /* 0x2b */ { "spanc", "rw,ab,ab,rb" }, 134 /* 0x2c */ { "movc5", "rw,ab,rb,rw,ab" }, 135 /* 0x2d */ { "cmpc5", "rw,ab,rb,rw,ab" }, 136 /* 0x2e */ { "movtc", "rw,ab,rb,ab,rw,ab" }, 137 /* 0x2f */ { "movtuc", "rw,ab,rb,ab,rw,ab" }, 138 139 /* 0x30 */ { "bsbw", "bw" }, 140 /* 0x31 */ { "brw", "bw" }, 141 /* 0x32 */ { "cvtwl", "rw,wl" }, 142 /* 0x33 */ { "cvtwb", "rw,wb" }, 143 /* 0x34 */ { "movp", "rw,ab,ab" }, 144 /* 0x35 */ { "cmpp3", "rw,ab,ab" }, 145 /* 0x36 */ { "cvtpl", "rw,ab,wl" }, 146 /* 0x37 */ { "cmpp4", "rw,ab,rw,ab" }, 147 /* 0x38 */ { "editpc", "rw,ab,ab,ab" }, 148 /* 0x39 */ { "matchc", "rw,ab,rw,ab" }, 149 /* 0x3a */ { "locc", "rb,rw,ab" }, 150 /* 0x3b */ { "skpc", "rb,rw,ab" }, 151 /* 0x3c */ { "movzwl", "rw,wl" }, 152 /* 0x3d */ { "acbw", "rw,rw,mw,bw" }, 153 /* 0x3e */ { "movaw", "aw,wl" }, 154 /* 0x3f */ { "pushaw", "aw" }, 155 156 /* 0x40 */ { "addf2", "rf,mf" }, 157 /* 0x41 */ { "addf3", "rf,rf,wf" }, 158 /* 0x42 */ { "subf2", "rf,mf" }, 159 /* 0x43 */ { "subf3", "rf,rf,wf" }, 160 /* 0x44 */ { "mulf2", "rf,mf" }, 161 /* 0x45 */ { "mulf3", "rf,rf,wf" }, 162 /* 0x46 */ { "divf2", "rf,mf" }, 163 /* 0x47 */ { "divf3", "rf,rf,wf" }, 164 /* 0x48 */ { "cvtfb", "rf,wb" }, 165 /* 0x49 */ { "cvtfw", "rf,ww" }, 166 /* 0x4a */ { "cvtfl", "rf,wl" }, 167 /* 0x4b */ { "cvtrfl", "rf,wl" }, 168 /* 0x4c */ { "cvtbf", "rb,wf" }, 169 /* 0x4d */ { "cvtwf", "rw,wf" }, 170 /* 0x4e */ { "cvtlf", "rl,wf" }, 171 /* 0x4f */ { "acbf", "rf,rf,rf,bw" }, 172 173 /* 0x50 */ { "movf", "rf,wf" }, 174 /* 0x51 */ { "cmpf", "rf,rf" }, 175 /* 0x52 */ { "mnegf", "rf,wf" }, 176 /* 0x53 */ { "tstf", "rf" }, 177 /* 0x54 */ { "emodf", "rf,rb,rf,wl,wf" }, 178 /* 0x55 */ { "polyf", "rf,rw,ab" }, 179 /* 0x56 */ { "cvtfd", "rf,wd" }, 180 /* 0x57 */ { "-reserved-", "" }, 181 /* 0x58 */ { "adawi", "rw,mw" }, 182 /* 0x59 */ { "-reserved-", "" }, 183 /* 0x5a */ { "-reserved-", "" }, 184 /* 0x5b */ { "-reserved-", "" }, 185 /* 0x5c */ { "insqhi", "ab,aq" }, 186 /* 0x5d */ { "insqti", "ab,aq" }, 187 /* 0x5e */ { "remqhi", "aq,wl" }, 188 /* 0x5f */ { "remqti", "aq,wl" }, 189 190 /* 0x60 */ { "addd2", "rd,md" }, 191 /* 0x61 */ { "addd3", "rd,rd,wd" }, 192 /* 0x62 */ { "subd2", "rd,md" }, 193 /* 0x63 */ { "subd3", "rd,rd,wd" }, 194 /* 0x64 */ { "muld2", "rd,md" }, 195 /* 0x65 */ { "muld3", "rd,rd,wd" }, 196 /* 0x66 */ { "divd2", "rd,md" }, 197 /* 0x67 */ { "divd3", "rd,rd,wd" }, 198 /* 0x68 */ { "cvtdb", "rd,wb" }, 199 /* 0x69 */ { "cvtdw", "rd,ww" }, 200 /* 0x6a */ { "cvtdl", "rd,wl" }, 201 /* 0x6b */ { "cvtrdl", "rd,wl" }, 202 /* 0x6c */ { "cvtbd", "rb,wd" }, 203 /* 0x6d */ { "cvtwd", "rw,wd" }, 204 /* 0x6e */ { "cvtld", "rl,wd" }, 205 /* 0x6f */ { "acbd", "rd,rd,md,bw" }, 206 207 /* 0x70 */ { "movd", "rd,wd" }, 208 /* 0x71 */ { "cmpd", "rd,rd" }, 209 /* 0x72 */ { "mnegd", "rd,wd" }, 210 /* 0x73 */ { "tstd", "rd" }, 211 /* 0x74 */ { "emodd", "rd,rb,rd,wl,wd" }, 212 /* 0x75 */ { "polyd", "rd,rw,ab" }, 213 /* 0x76 */ { "cvtdf", "rd,wf" }, 214 /* 0x77 */ { "-reserved-", "" }, 215 /* 0x78 */ { "ashl", "rb,rl,wl" }, 216 /* 0x79 */ { "ashq", "rb,rq,wq" }, 217 /* 0x7a */ { "emul", "rl,rl,rl,wq" }, 218 /* 0x7b */ { "ediv", "rl,rq,wl,wl" }, 219 /* 0x7c */ { "*clrq", "wq" }, 220 /* 0x7d */ { "movq", "rq,wq" }, 221 /* 0x7e */ { "*movaq", "aq,wl" }, 222 /* 0x7f */ { "*pushaq", "aq" }, 223 224 /* 0x80 */ { "addb2", "rb,mb" }, 225 /* 0x81 */ { "addb3", "rb,rb,wb" }, 226 /* 0x82 */ { "subb2", "rb,mb" }, 227 /* 0x83 */ { "subb3", "rb,rb,wb" }, 228 /* 0x84 */ { "mulb2", "rb,mb" }, 229 /* 0x85 */ { "mulb3", "rb,rb,wb" }, 230 /* 0x86 */ { "divb2", "rb,mb" }, 231 /* 0x87 */ { "divb3", "rb,rb,wb" }, 232 /* 0x88 */ { "bisb2", "rb,mb" }, 233 /* 0x89 */ { "bisb3", "rb,rb,wb" }, 234 /* 0x8a */ { "bicb2", "rb,mb" }, 235 /* 0x8b */ { "bicb3", "rb,rb,wb" }, 236 /* 0x8c */ { "xorb2", "rb,mb" }, 237 /* 0x8d */ { "xorb3", "rb,rb,wb" }, 238 /* 0x8e */ { "mnegb", "rb,wb" }, 239 /* 0x8f */ { "caseb", "rb,rb,rb,bw-list" }, 240 241 /* 0x90 */ { "movb", "rb,wb" }, 242 /* 0x91 */ { "cmpb", "rb,rb" }, 243 /* 0x92 */ { "mcomb", "rb,wb" }, 244 /* 0x93 */ { "bitb", "rb,rb" }, 245 /* 0x94 */ { "clrb", "wb" }, 246 /* 0x95 */ { "tstb", "rb" }, 247 /* 0x96 */ { "incb", "mb" }, 248 /* 0x97 */ { "decb", "mb" }, 249 /* 0x98 */ { "cvtbl", "rb,wl" }, 250 /* 0x99 */ { "cvtbw", "rb,ww" }, 251 /* 0x9a */ { "movzbl", "rb,wl" }, 252 /* 0x9b */ { "movzbw", "wb,ww" }, 253 /* 0x9c */ { "rotl", "rb,rl,wl" }, 254 /* 0x9d */ { "acbb", "rb,rb,mb,bw" }, 255 /* 0x9e */ { "movab", "ab,wl" }, 256 /* 0x9f */ { "pushab", "ab" }, 257 258 /* 0xa0 */ { "addw2", "rw,mw" }, 259 /* 0xa1 */ { "addw3", "rw,rw,ww" }, 260 /* 0xa2 */ { "subw2", "rw,mw" }, 261 /* 0xa3 */ { "subw3", "rw,rw,ww" }, 262 /* 0xa4 */ { "mulw2", "rw,mw" }, 263 /* 0xa5 */ { "mulw3", "rw,rw,ww" }, 264 /* 0xa6 */ { "divw2", "rw,mw" }, 265 /* 0xa7 */ { "divw3", "rw,rw,ww" }, 266 /* 0xa8 */ { "bisw2", "rw,mw" }, 267 /* 0xa9 */ { "bisw3", "rw,rw,ww" }, 268 /* 0xaa */ { "bicw2", "rw,mw" }, 269 /* 0xab */ { "bicw3", "rw,rw,ww" }, 270 /* 0xac */ { "xorw2", "rw,mw" }, 271 /* 0xad */ { "xorw3", "rw,rw,ww" }, 272 /* 0xae */ { "mnegw", "rw,ww" }, 273 /* 0xaf */ { "casew", "rw,rw,rw,bw-list" }, 274 275 /* 0xb0 */ { "movw", "rw,ww" }, 276 /* 0xb1 */ { "cmpw", "rw,rw" }, 277 /* 0xb2 */ { "mcomw", "rw,ww" }, 278 /* 0xb3 */ { "bitw", "rw,rw" }, 279 /* 0xb4 */ { "clrw", "mw" }, 280 /* 0xb5 */ { "tstw", "rw" }, 281 /* 0xb6 */ { "incw", "mw" }, 282 /* 0xb7 */ { "decw", "mw" }, 283 /* 0xb8 */ { "bispsw", "rw" }, 284 /* 0xb9 */ { "bicpsw", "rw" }, 285 /* 0xba */ { "popr", "rw" }, 286 /* 0xbb */ { "pushr", "rw" }, 287 /* 0xbc */ { "chmk", "rw" }, 288 /* 0xbd */ { "chme", "rw" }, 289 /* 0xbe */ { "chms", "rw" }, 290 /* 0xbf */ { "chmu", "rw" }, 291 292 /* 0xc0 */ { "addl2", "rl,ml" }, 293 /* 0xc1 */ { "addl3", "rl,rl,wl" }, 294 /* 0xc2 */ { "subl2", "rl,ml" }, 295 /* 0xc3 */ { "subl3", "rl,rl,wl" }, 296 /* 0xc4 */ { "mull2", "rl,ml" }, 297 /* 0xc5 */ { "mull3", "rl,rl,wl" }, 298 /* 0xc6 */ { "divl2", "rl,ml" }, 299 /* 0xc7 */ { "divl3", "rl,rl,wl" }, 300 /* 0xc8 */ { "bisl2", "rl,ml" }, 301 /* 0xc9 */ { "bisl3", "rl,rl,wl" }, 302 /* 0xca */ { "bicl2", "rl,ml" }, 303 /* 0xcb */ { "bicl3", "rl,rl,wl" }, 304 /* 0xcc */ { "xorl2", "rl,ml" }, 305 /* 0xcd */ { "xorl3", "rl,rl,wl" }, 306 /* 0xce */ { "mnegl", "rl,wl" }, 307 /* 0xcf */ { "casel", "rl,rl,rl,bw-list" }, 308 309 /* 0xd0 */ { "movl", "rl,wl" }, 310 /* 0xd1 */ { "cmpl", "rl,rl" }, 311 /* 0xd2 */ { "mcoml", "rl,wl" }, 312 /* 0xd3 */ { "bitl", "rl,rl" }, 313 /* 0xd4 */ { "*clrl", "wl" }, 314 /* 0xd5 */ { "tstl", "rl" }, 315 /* 0xd6 */ { "incl", "ml" }, 316 /* 0xd7 */ { "decl", "ml" }, 317 /* 0xd8 */ { "adwc", "rl,ml" }, 318 /* 0xd9 */ { "sbwc", "rl,ml" }, 319 /* 0xda */ { "mtpr", "rl,rl" }, 320 /* 0xdb */ { "mfpr", "rl,wl" }, 321 /* 0xdc */ { "movpsl", "wl" }, 322 /* 0xdd */ { "pushl", "rl" }, 323 /* 0xde */ { "*moval", "al,wl" }, 324 /* 0xdf */ { "*pushal", "al" }, 325 326 /* 0xe0 */ { "bbs", "rl,vb,bb" }, 327 /* 0xe1 */ { "bbc", "rl,vb,bb" }, 328 /* 0xe2 */ { "bbss", "rl,vb,bb" }, 329 /* 0xe3 */ { "bbcs", "rl,vb,bb" }, 330 /* 0xe4 */ { "bbsc", "rl,vb,bb" }, 331 /* 0xe5 */ { "bbcc", "rl,vb,bb" }, 332 /* 0xe6 */ { "bbssi", "rl,vb,bb" }, 333 /* 0xe7 */ { "bbcci", "rl,vb,bb" }, 334 /* 0xe8 */ { "blbs", "rl,bb" }, 335 /* 0xe9 */ { "blbc", "rl,bb" }, 336 /* 0xea */ { "ffs", "rl,rb,vb" }, 337 /* 0xeb */ { "ffc", "rl,rb,vb" }, 338 /* 0xec */ { "cmpv", "rl,rb,vb,rl" }, 339 /* 0xed */ { "cmpzv", "rl,rb,vb,rl" }, 340 /* 0xee */ { "extv", "rl,rb,vb,wl" }, 341 /* 0xef */ { "extzv", "rl,rb,vb,wl" }, 342 343 /* 0xf0 */ { "insv", "rl,rl,rb,vb" }, 344 /* 0xf1 */ { "acbl", "rl,rl,ml,bw" }, 345 /* 0xf2 */ { "aoblss", "rl,ml,bb" }, 346 /* 0xf3 */ { "aobleq", "rl,ml,bb" }, 347 /* 0xf4 */ { "sobgeq", "ml,bb" }, 348 /* 0xf5 */ { "sobgtr", "ml,bb" }, 349 /* 0xf6 */ { "cvtlb", "rl,wb" }, 350 /* 0xf7 */ { "cvtlw", "rl,ww" }, 351 /* 0xf8 */ { "ashp", "rb,rw,ab,rb,rw,ab" }, 352 /* 0xf9 */ { "cvtlp", "rl,rw,ab" }, 353 /* 0xfa */ { "callg", "ab,ab" }, 354 /* 0xfb */ { "calls", "rl,ab" }, 355 /* 0xfc */ { "xfc", "?" }, 356 /* 0xfd */ { "-reserved-", "" }, 357 /* 0xfe */ { "-reserved-", "" }, 358 /* 0xff */ { "-reserved-", "" }, 359 360 }; 361 362