Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

x86opc.cc

Go to the documentation of this file.
00001 /* 
00002  *      HT Editor
00003  *      x86opc.cc
00004  *
00005  *      Copyright (C) 1999-2002 Stefan Weyergraf (stefan@weyergraf.de)
00006  *
00007  *      This program is free software; you can redistribute it and/or modify
00008  *      it under the terms of the GNU General Public License version 2 as
00009  *      published by the Free Software Foundation.
00010  *
00011  *      This program is distributed in the hope that it will be useful,
00012  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  *      GNU General Public License for more details.
00015  *
00016  *      You should have received a copy of the GNU General Public License
00017  *      along with this program; if not, write to the Free Software
00018  *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00019  */
00020 
00021 #include "x86opc.h"
00022 
00023 /*      Percent tokens in strings:
00024         First char after '%':
00025                 A - direct address
00026                 C - reg of r/m picks control register
00027                 D - reg of r/m picks debug register
00028                 E - r/m picks operand
00029                 F - flags register
00030                 G - reg of r/m picks general register
00031                 I - immediate data (takes extended size, data size)
00032                 J - relative IP offset
00033                 M - r/m picks memory
00034                 O - no r/m, offset only
00035                 P - reg of r/m picks mm register (mm0-mm7)
00036                 Q - r/m picks mm operand (mm0-mm7/mem64)
00037                 R - mod of r/m picks register only
00038                 S - reg of r/m picks segment register
00039                 T - reg of r/m picks test register
00040                 X - DS:ESI
00041                 Y - ES:EDI
00042                 2 - prefix of two-unsigned char opcode
00043                 3 - prefix of 3DNow! opcode
00044                 e - put in 'e' if use32 (second char is part of reg name)
00045                     put in 'w' for use16 or 'd' for use32 (second char is 'w')
00046                 f - floating point (second char is esc value)
00047                 g - do r/m group n (where n may be one of 0-9,A-Z)
00048                 p - prefix
00049                 s - size override (second char is a,o)
00050                 + - make default signed
00051         Second char after '%':
00052                 a - two words in memory (BOUND)
00053                 b - byte
00054                 c - byte or word
00055                 d - dword
00056                 p - 32 or 48 bit pointer
00057                 q - quadword
00058                 s - six unsigned char pseudo-descriptor
00059                 v - word or dword
00060                 w - word
00061                 F - use floating regs in mod/rm
00062                 + - always sign
00063                 - - sign if negative
00064                 1-8 - group number, esc value, etc
00065 */
00066 
00067 #define Ap      TYPE_A, 0, SIZE_P, SIZE_P
00068 #define Cd      TYPE_C, 0, SIZE_D, SIZE_D
00069 #define Dd      TYPE_D, 0, SIZE_D, SIZE_D
00070 #define E       TYPE_E, 0, SIZE_0, SIZE_0
00071 #define Eb      TYPE_E, 0, SIZE_B, SIZE_B
00072 #define Ew      TYPE_E, 0, SIZE_W, SIZE_W
00073 #define Ed      TYPE_E, 0, SIZE_D, SIZE_D
00074 #define Eq      TYPE_E, 0, SIZE_Q, SIZE_Q
00075 #define Ev      TYPE_E, 0, SIZE_V, SIZE_V
00076 #define Es      TYPE_E, 0, SIZE_S, SIZE_S
00077 #define El      TYPE_E, 0, SIZE_L, SIZE_L
00078 #define Et      TYPE_E, 0, SIZE_T, SIZE_T
00079 #define Ea      TYPE_E, 0, SIZE_A, SIZE_A
00080 #define Gb      TYPE_G, 0, SIZE_B, SIZE_B
00081 #define Gw      TYPE_G, 0, SIZE_W, SIZE_W
00082 #define Gv      TYPE_G, 0, SIZE_V, SIZE_V
00083 #define Ib      TYPE_I, 0, SIZE_B, SIZE_B
00084 #define Iw      TYPE_I, 0, SIZE_W, SIZE_W
00085 #define Iv      TYPE_I, 0, SIZE_V, SIZE_V
00086 #define Ibv     TYPE_I, 0, SIZE_B, SIZE_V
00087 #define sIbv    TYPE_Is,0, SIZE_B, SIZE_V
00088 #define Jb      TYPE_J, 0, SIZE_B, SIZE_B
00089 #define Jv      TYPE_J, 0, SIZE_V, SIZE_V
00090 #define M       TYPE_M, 0, 0, 0
00091 #define Mw      TYPE_M, 0, SIZE_W, SIZE_W
00092 #define Md      TYPE_M, 0, SIZE_D, SIZE_D
00093 #define Mp      TYPE_M, 0, SIZE_P, SIZE_P
00094 #define Mq      TYPE_M, 0, SIZE_Q, SIZE_Q
00095 #define Ms      TYPE_M, 0, SIZE_S, SIZE_S
00096 #define Ml      TYPE_M, 0, SIZE_L, SIZE_L
00097 #define Mt      TYPE_M, 0, SIZE_T, SIZE_T
00098 #define Ma      TYPE_M, 0, SIZE_A, SIZE_A
00099 #define Ob      TYPE_O, 0, SIZE_B, SIZE_B
00100 #define Ov      TYPE_O, 0, SIZE_V, SIZE_V
00101 #define Pd      TYPE_P, 0, SIZE_D, SIZE_D
00102 #define Pq      TYPE_P, 0, SIZE_Q, SIZE_Q
00103 #define Qd      TYPE_Q, 0, SIZE_D, SIZE_D
00104 #define Qq      TYPE_Q, 0, SIZE_Q, SIZE_Q
00105 #define Rb      TYPE_R, 0, SIZE_B, SIZE_B
00106 #define Rw      TYPE_R, 0, SIZE_W, SIZE_W
00107 #define Rd      TYPE_R, 0, SIZE_D, SIZE_D
00108 #define Rv      TYPE_R, 0, SIZE_V, SIZE_V
00109 #define Sw      TYPE_S, 0, SIZE_W, SIZE_W
00110 #define Td      TYPE_T, 0, SIZE_D, SIZE_D
00111 
00112 #define Ft      TYPE_F, 0, SIZE_T, SIZE_T
00113 
00114 #define __st    TYPE_Fx, 0, SIZE_T, SIZE_T
00115 
00116 #define __1     TYPE_Ix, 1, SIZE_B, SIZE_B
00117 #define __3     TYPE_Ix, 3, SIZE_B, SIZE_B              /* for int 3 */
00118 
00119 #define __al    TYPE_Rx, 0, SIZE_B, SIZE_B
00120 #define __cl    TYPE_Rx, 1, SIZE_B, SIZE_B
00121 #define __dl    TYPE_Rx, 2, SIZE_B, SIZE_B
00122 #define __bl    TYPE_Rx, 3, SIZE_B, SIZE_B
00123 #define __ah    TYPE_Rx, 4, SIZE_B, SIZE_B
00124 #define __ch    TYPE_Rx, 5, SIZE_B, SIZE_B
00125 #define __dh    TYPE_Rx, 6, SIZE_B, SIZE_B
00126 #define __bh    TYPE_Rx, 7, SIZE_B, SIZE_B
00127 
00128 #define __ax    TYPE_Rx, 0, SIZE_V, SIZE_V
00129 #define __cx    TYPE_Rx, 1, SIZE_V, SIZE_V
00130 #define __dx    TYPE_Rx, 2, SIZE_V, SIZE_V
00131 #define __bx    TYPE_Rx, 3, SIZE_V, SIZE_V
00132 #define __sp    TYPE_Rx, 4, SIZE_V, SIZE_V
00133 #define __bp    TYPE_Rx, 5, SIZE_V, SIZE_V
00134 #define __si    TYPE_Rx, 6, SIZE_V, SIZE_V
00135 #define __di    TYPE_Rx, 7, SIZE_V, SIZE_V
00136 
00137 #define __axw   TYPE_Rx, 0, SIZE_W, SIZE_W
00138 #define __dxw   TYPE_Rx, 2, SIZE_W, SIZE_W
00139 
00140 #define __axd   TYPE_Rx, 0, SIZE_D, SIZE_D
00141 #define __cxd   TYPE_Rx, 1, SIZE_D, SIZE_D
00142 #define __dxd   TYPE_Rx, 2, SIZE_D, SIZE_D
00143 #define __bxd   TYPE_Rx, 3, SIZE_D, SIZE_D
00144 #define __spd   TYPE_Rx, 4, SIZE_D, SIZE_D
00145 #define __bpd   TYPE_Rx, 5, SIZE_D, SIZE_D
00146 #define __sid   TYPE_Rx, 6, SIZE_D, SIZE_D
00147 #define __did   TYPE_Rx, 7, SIZE_D, SIZE_D
00148 
00149 #define __es    TYPE_Sx, 0, SIZE_W, SIZE_W
00150 #define __cs    TYPE_Sx, 1, SIZE_W, SIZE_W
00151 #define __ss    TYPE_Sx, 2, SIZE_W, SIZE_W
00152 #define __ds    TYPE_Sx, 3, SIZE_W, SIZE_W
00153 #define __fs    TYPE_Sx, 4, SIZE_W, SIZE_W
00154 #define __gs    TYPE_Sx, 5, SIZE_W, SIZE_W
00155 
00156 #define __st0   TYPE_F, 0, SIZE_T, SIZE_T
00157 #define __st1   TYPE_F, 1, SIZE_T, SIZE_T
00158 #define __st2   TYPE_F, 2, SIZE_T, SIZE_T
00159 #define __st3   TYPE_F, 3, SIZE_T, SIZE_T
00160 #define __st4   TYPE_F, 4, SIZE_T, SIZE_T
00161 #define __st5   TYPE_F, 5, SIZE_T, SIZE_T
00162 #define __st6   TYPE_F, 6, SIZE_T, SIZE_T
00163 #define __st7   TYPE_F, 7, SIZE_T, SIZE_T
00164 
00165 char *x86_regs[3][8] = {
00166 {"al",  "cl",  "dl",  "bl",  "ah",  "ch",  "dh",  "bh"},
00167 {"ax",  "cx",  "dx",  "bx",  "sp",  "bp",  "si",  "di"},
00168 {"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"}
00169 };
00170 
00171 char *x86_segs[8] = {
00172 "es", "cs", "ss", "ds", "fs", "gs", 0, 0
00173 };
00174 
00175 #define GROUP_80                0
00176 #define GROUP_81                1
00177 #define GROUP_83                2
00178 #define GROUP_C0                3
00179 #define GROUP_C1                4
00180 #define GROUP_D0                5
00181 #define GROUP_D1                6
00182 #define GROUP_D2                7
00183 #define GROUP_D3                8
00184 #define GROUP_F6                9
00185 #define GROUP_F7                10
00186 #define GROUP_FE                11
00187 #define GROUP_FF                12
00188 #define GROUP_EXT_00            13
00189 #define GROUP_EXT_01            14
00190 #define GROUP_EXT_71            15
00191 #define GROUP_EXT_72            16
00192 #define GROUP_EXT_73            17
00193 #define GROUP_EXT_BA            18
00194 #define GROUP_EXT_C7            19
00195 //#define GROUP_EXT_AE          20
00196 
00197 x86opc_insn x86_insns[256] = {
00198 /* 00 */
00199 {"add", {{Eb}, {Gb}}},
00200 {"add", {{Ev}, {Gv}}},
00201 {"add", {{Gb}, {Eb}}},
00202 {"add", {{Gv}, {Ev}}},
00203 {"add", {{__al}, {Ib}}},
00204 {"add", {{__ax}, {Iv}}},
00205 {"push", {{__es}}},
00206 {"pop", {{__es}}},
00207 /* 08 */
00208 {"or", {{Eb}, {Gb}}},
00209 {"or", {{Ev}, {Gv}}},
00210 {"or", {{Gb}, {Eb}}},
00211 {"or", {{Gv}, {Ev}}},
00212 {"or", {{__al}, {Ib}}},
00213 {"or", {{__ax}, {Iv}}},
00214 {"push", {{__cs}}},
00215 {0, {{SPECIAL_TYPE_PREFIX}}},                   /* prefix */
00216 /* 10 */
00217 {"adc", {{Eb}, {Gb}}},
00218 {"adc", {{Ev}, {Gv}}},
00219 {"adc", {{Gb}, {Eb}}},
00220 {"adc", {{Gv}, {Ev}}},
00221 {"adc", {{__al}, {Ib}}},
00222 {"adc", {{__ax}, {Iv}}},
00223 {"push", {{__ss}}},
00224 {"pop", {{__ss}}},
00225 /* 18 */
00226 {"sbb", {{Eb}, {Gb}}},
00227 {"sbb", {{Ev}, {Gv}}},
00228 {"sbb", {{Gb}, {Eb}}},
00229 {"sbb", {{Gv}, {Ev}}},
00230 {"sbb", {{__al}, {Ib}}},
00231 {"sbb", {{__ax}, {Iv}}},
00232 {"push", {{__ds}}},
00233 {"pop", {{__ds}}},
00234 /* 20 */
00235 {"and", {{Eb}, {Gb}}},
00236 {"and", {{Ev}, {Gv}}},
00237 {"and", {{Gb}, {Eb}}},
00238 {"and", {{Gv}, {Ev}}},
00239 {"and", {{__al}, {Ib}}},
00240 {"and", {{__ax}, {Iv}}},
00241 {0, {{SPECIAL_TYPE_PREFIX}}},           /* es-prefix */
00242 {"daa"},
00243 /* 28 */
00244 {"sub", {{Eb}, {Gb}}},
00245 {"sub", {{Ev}, {Gv}}},
00246 {"sub", {{Gb}, {Eb}}},
00247 {"sub", {{Gv}, {Ev}}},
00248 {"sub", {{__al}, {Ib}}},
00249 {"sub", {{__ax}, {Iv}}},
00250 {0, {{SPECIAL_TYPE_PREFIX}}},           /* cs-prefix */
00251 {"das"},
00252 /* 30 */
00253 {"xor", {{Eb}, {Gb}}},
00254 {"xor", {{Ev}, {Gv}}},
00255 {"xor", {{Gb}, {Eb}}},
00256 {"xor", {{Gv}, {Ev}}},
00257 {"xor", {{__al}, {Ib}}},
00258 {"xor", {{__ax}, {Iv}}},
00259 {0, {{SPECIAL_TYPE_PREFIX}}},           /* ss-prefix */
00260 {"aaa"},
00261 /* 38 */
00262 {"cmp", {{Eb}, {Gb}}},
00263 {"cmp", {{Ev}, {Gv}}},
00264 {"cmp", {{Gb}, {Eb}}},
00265 {"cmp", {{Gv}, {Ev}}},
00266 {"cmp", {{__al}, {Ib}}},
00267 {"cmp", {{__ax}, {Iv}}},
00268 {0, {{SPECIAL_TYPE_PREFIX}}},           /* ds-prefix */
00269 {"aas"},
00270 /* 40 */
00271 {"inc", {{__ax}}},
00272 {"inc", {{__cx}}},
00273 {"inc", {{__dx}}},
00274 {"inc", {{__bx}}},
00275 {"inc", {{__sp}}},
00276 {"inc", {{__bp}}},
00277 {"inc", {{__si}}},
00278 {"inc", {{__di}}},
00279 /* 48 */
00280 {"dec", {{__ax}}},
00281 {"dec", {{__cx}}},
00282 {"dec", {{__dx}}},
00283 {"dec", {{__bx}}},
00284 {"dec", {{__sp}}},
00285 {"dec", {{__bp}}},
00286 {"dec", {{__si}}},
00287 {"dec", {{__di}}},
00288 /* 50 */
00289 {"push", {{__ax}}},
00290 {"push", {{__cx}}},
00291 {"push", {{__dx}}},
00292 {"push", {{__bx}}},
00293 {"push", {{__sp}}},
00294 {"push", {{__bp}}},
00295 {"push", {{__si}}},
00296 {"push", {{__di}}},
00297 /* 58 */
00298 {"pop", {{__ax}}},
00299 {"pop", {{__cx}}},
00300 {"pop", {{__dx}}},
00301 {"pop", {{__bx}}},
00302 {"pop", {{__sp}}},
00303 {"pop", {{__bp}}},
00304 {"pop", {{__si}}},
00305 {"pop", {{__di}}},
00306 /* 60 */
00307 {"pusha"},
00308 {"popa"},
00309 {"bound", {{Gv}, {Mq}}},
00310 {"arpl", {{Ew}, {Rw}}},
00311 {0, {{SPECIAL_TYPE_PREFIX}}},           /* fs-prefix */
00312 {0, {{SPECIAL_TYPE_PREFIX}}},           /* gs-prefix */
00313 {0, {{SPECIAL_TYPE_PREFIX}}},           /* op-size prefix */
00314 {0, {{SPECIAL_TYPE_PREFIX}}},           /* addr-size prefix */
00315 /* 68 */
00316 {"push", {{Iv}}},
00317 {"imul", {{Gv}, {Ev}, {Iv}}},
00318 {"push", {{sIbv}}},
00319 {"imul", {{Gv}, {Ev}, {sIbv}}},
00320 {"insb"},
00321 {"ins%c"},
00322 {"outsb"},
00323 {"outs%c"},
00324 /* 70 */
00325 {"jo", {{Jb}}},
00326 {"jno", {{Jb}}},
00327 {"jc", {{Jb}}},
00328 {"jnc", {{Jb}}},
00329 {"jz", {{Jb}}},
00330 {"jnz", {{Jb}}},
00331 {"jna", {{Jb}}},
00332 {"ja", {{Jb}}},
00333 /* 78 */
00334 {"js", {{Jb}}},
00335 {"jns", {{Jb}}},
00336 {"jp", {{Jb}}},
00337 {"jnp", {{Jb}}},
00338 {"jl", {{Jb}}},         /* aka jnge */
00339 {"jnl", {{Jb}}},        /* aka jge */
00340 {"jng", {{Jb}}},        /* aka jle */
00341 {"jg", {{Jb}}},         /* aka jnle */
00342 /* 80 */
00343 {0, {{SPECIAL_TYPE_GROUP, GROUP_80}}},
00344 {0, {{SPECIAL_TYPE_GROUP, GROUP_81}}},
00345 {0},
00346 {0, {{SPECIAL_TYPE_GROUP, GROUP_83}}},
00347 {"test", {{Eb}, {Gb}}},
00348 {"test", {{Ev}, {Gv}}},
00349 {"xchg", {{Eb}, {Gb}}},
00350 {"xchg", {{Ev}, {Gv}}},
00351 /* 88 */
00352 {"mov", {{Eb}, {Gb}}},
00353 {"mov", {{Ev}, {Gv}}},
00354 {"mov", {{Gb}, {Eb}}},
00355 {"mov", {{Gv}, {Ev}}},
00356 {"mov", {{Ev}, {Sw}}},
00357 {"lea", {{Gv}, {M}}},
00358 {"mov", {{Sw}, {Ev}}},
00359 {"pop", {{Ev}}},
00360 /* 90 */
00361 {"nop"},                /* same as xchg (e)ax, (e)ax */
00362 {"xchg", {{__ax}, {__cx}}},
00363 {"xchg", {{__ax}, {__dx}}},
00364 {"xchg", {{__ax}, {__bx}}},
00365 {"xchg", {{__ax}, {__sp}}},
00366 {"xchg", {{__ax}, {__bp}}},
00367 {"xchg", {{__ax}, {__si}}},
00368 {"xchg", {{__ax}, {__di}}},
00369 /* 98 */
00370 {"cbw"},
00371 {"cwd"},
00372 {"call", {{Ap}}},
00373 {"fwait"},
00374 {"pushf%c"},
00375 {"popf%c"},
00376 {"sahf"},
00377 {"lahf"},
00378 /* A0 */
00379 {"mov", {{__al}, {Ob}}},
00380 {"mov", {{__ax}, {Ov}}},
00381 {"mov", {{Ob}, {__al}}},
00382 {"mov", {{Ov}, {__ax}}},
00383 {"movsb"},
00384 {"movs%c"},
00385 {"cmpsb"},
00386 {"cmps%c"},
00387 /* A8 */
00388 {"test", {{__al}, {Ib}}},
00389 {"test", {{__ax}, {Iv}}},
00390 {"stosb"},
00391 {"stos%c"},
00392 {"lodsb"},
00393 {"lods%c"},
00394 {"scasb"},
00395 {"scas%c"},
00396 /* B0 */
00397 {"mov", {{__al}, {Ib}}},
00398 {"mov", {{__cl}, {Ib}}},
00399 {"mov", {{__dl}, {Ib}}},
00400 {"mov", {{__bl}, {Ib}}},
00401 {"mov", {{__ah}, {Ib}}},
00402 {"mov", {{__ch}, {Ib}}},
00403 {"mov", {{__dh}, {Ib}}},
00404 {"mov", {{__bh}, {Ib}}},
00405 /* B8 */
00406 {"mov", {{__ax}, {Iv}}},
00407 {"mov", {{__cx}, {Iv}}},
00408 {"mov", {{__dx}, {Iv}}},
00409 {"mov", {{__bx}, {Iv}}},
00410 {"mov", {{__sp}, {Iv}}},
00411 {"mov", {{__bp}, {Iv}}},
00412 {"mov", {{__si}, {Iv}}},
00413 {"mov", {{__di}, {Iv}}},
00414 /* C0 */
00415 {0, {{SPECIAL_TYPE_GROUP, GROUP_C0}}},
00416 {0, {{SPECIAL_TYPE_GROUP, GROUP_C1}}},
00417 {"ret", {{Iw}}},
00418 {"ret"},
00419 {"les", {{Gv}, {Mp}}},
00420 {"lds", {{Gv}, {Mp}}},
00421 {"mov", {{Eb}, {Ib}}},
00422 {"mov", {{Ev}, {Iv}}},
00423 /* C8 */
00424 {"enter", {{Iw}, {Ib}}},
00425 {"leave"},
00426 {"retf", {{Iw}}},
00427 {"retf"},
00428 {"int", {{__3}}},
00429 {"int", {{Ib}}},
00430 {"into"},
00431 {"iret%c"},
00432 /* D0 */
00433 {0, {{SPECIAL_TYPE_GROUP, GROUP_D0}}},
00434 {0, {{SPECIAL_TYPE_GROUP, GROUP_D1}}},
00435 {0, {{SPECIAL_TYPE_GROUP, GROUP_D2}}},
00436 {0, {{SPECIAL_TYPE_GROUP, GROUP_D3}}},
00437 {"aam", {{Ib}}},
00438 {"aad", {{Ib}}},
00439 {"setalc"},
00440 {"xlat"},
00441 /* D8 */
00442 {0, {{SPECIAL_TYPE_FGROUP, 0}}},
00443 {0, {{SPECIAL_TYPE_FGROUP, 1}}},
00444 {0, {{SPECIAL_TYPE_FGROUP, 2}}},
00445 {0, {{SPECIAL_TYPE_FGROUP, 3}}},
00446 {0, {{SPECIAL_TYPE_FGROUP, 4}}},
00447 {0, {{SPECIAL_TYPE_FGROUP, 5}}},
00448 {0, {{SPECIAL_TYPE_FGROUP, 6}}},
00449 {0, {{SPECIAL_TYPE_FGROUP, 7}}},
00450 /* E0 */
00451 {"loopnz", {{Jb}}},
00452 {"loopz", {{Jb}}},
00453 {"loop", {{Jb}}},
00454 {"jcxz", {{Jb}}},
00455 {"in", {{__al}, {Ib}}},
00456 {"in", {{__ax}, {Ib}}},
00457 {"out", {{Ib}, {__al}}},
00458 {"out", {{Ib}, {__ax}}},
00459 /* E8 */
00460 {"call", {{Jv}}},
00461 {"jmp", {{Jv}}},
00462 {"jmp", {{Ap}}},
00463 {"jmp", {{Jb}}},
00464 {"in", {{__al}, {__dxw}}},
00465 {"in", {{__ax}, {__dxw}}},
00466 {"out", {{__dxw}, {__al}}},
00467 {"out", {{__dxw}, {__ax}}},
00468 /* F0 */
00469 {0, {{SPECIAL_TYPE_PREFIX}}},           /* lock-prefix */
00470 {"smi"},
00471 {0, {{SPECIAL_TYPE_PREFIX}}},           /* repnz-prefix */
00472 {0, {{SPECIAL_TYPE_PREFIX}}},           /* rep-prefix */
00473 {"hlt"},
00474 {"cmc"},
00475 {0, {{SPECIAL_TYPE_GROUP, GROUP_F6}}},
00476 {0, {{SPECIAL_TYPE_GROUP, GROUP_F7}}},
00477 /* F8 */
00478 {"clc"},
00479 {"stc"},
00480 {"cli"},
00481 {"sti"},
00482 {"cld"},
00483 {"std"},
00484 {0, {{SPECIAL_TYPE_GROUP, GROUP_FE}}},
00485 {0, {{SPECIAL_TYPE_GROUP, GROUP_FF}}},
00486 };
00487 
00488 x86opc_insn x86_insns_ext[256] = {
00489 /* 00 */
00490 {0, {{SPECIAL_TYPE_GROUP, GROUP_EXT_00}}},
00491 {0, {{SPECIAL_TYPE_GROUP, GROUP_EXT_01}}},
00492 {"lar", {{Gv}, {Ew}}},
00493 {"lsl", {{Gv}, {Ew}}},
00494 {0},
00495 {0},
00496 {"clts"},
00497 {0},
00498 /* 08 */
00499 {"invd"},
00500 {"wbinvd"},
00501 {0},
00502 {"ud2"},
00503 {0},
00504 {"prefetch", {{Eb}}},
00505 {"femms"},
00506 {0, {{SPECIAL_TYPE_PREFIX}}},
00507 /* 10 */
00508 {0},
00509 {0},
00510 {0},
00511 {0},
00512 {0},
00513 {0},
00514 {0},
00515 {0},
00516 /* 18 */
00517 {0},
00518 {0},
00519 {0},
00520 {0},
00521 {0},
00522 {0},
00523 {0},
00524 {0},
00525 /* 20 */
00526 {"mov", {{Rd}, {Cd}}},
00527 {"mov", {{Rd}, {Dd}}},
00528 {"mov", {{Cd}, {Rd}}},
00529 {"mov", {{Dd}, {Rd}}},
00530 {"mov", {{Rd}, {Td}}},
00531 {0},
00532 {"mov", {{Td}, {Rd}}},
00533 {0},
00534 /* 28 */
00535 {0},
00536 {0},
00537 {0},
00538 {0},
00539 {0},
00540 {0},
00541 {0},
00542 {0},
00543 /* 30 */
00544 {"wrmsr"},
00545 {"rdtsc"},
00546 {"rdmsr"},
00547 {"rdpmc"},
00548 {"sysenter"},
00549 {"sysexit"},
00550 {0},
00551 {0},
00552 /* 38 */
00553 {0},
00554 {0},
00555 {0},
00556 {0},
00557 {0},
00558 {0},
00559 {0},
00560 {0},
00561 /* 40 */
00562 {"cmovo", {{Gv}, {Ev}}},
00563 {"cmovno", {{Gv}, {Ev}}},
00564 {"cmovc", {{Gv}, {Ev}}},
00565 {"cmovnc", {{Gv}, {Ev}}},
00566 {"cmovz", {{Gv}, {Ev}}},
00567 {"cmovnz", {{Gv}, {Ev}}},
00568 {"cmova", {{Gv}, {Ev}}},
00569 {"cmovna", {{Gv}, {Ev}}},
00570 /* 48 */
00571 {"cmovs", {{Gv}, {Ev}}},
00572 {"cmovns", {{Gv}, {Ev}}},
00573 {"cmovp", {{Gv}, {Ev}}},
00574 {"cmovnp", {{Gv}, {Ev}}},
00575 {"cmovl", {{Gv}, {Ev}}},
00576 {"cmovnl", {{Gv}, {Ev}}},
00577 {"cmovng", {{Gv}, {Ev}}},
00578 {"cmovg", {{Gv}, {Ev}}},
00579 /* 50 */
00580 {0},
00581 {0},
00582 {0},
00583 {0},
00584 {0},
00585 {0},
00586 {0},
00587 {0},
00588 /* 58 */
00589 {0},
00590 {0},
00591 {0},
00592 {0},
00593 {0},
00594 {0},
00595 {0},
00596 {0},
00597 /* 60 */
00598 {"punpcklbw", {{Pq}, {Qd}}},
00599 {"punpcklwd", {{Pq}, {Qd}}},
00600 {"punpckldq", {{Pq}, {Qd}}},
00601 {"packsswb", {{Pq}, {Qd}}},
00602 {"pcmpgtb", {{Pq}, {Qd}}},
00603 {"pcmpgtw", {{Pq}, {Qd}}},
00604 {"pcmpgtd", {{Pq}, {Qd}}},
00605 {"packuswb", {{Pq}, {Qd}}},
00606 /* 68 */
00607 {"punpckhbw", {{Pq}, {Qd}}},
00608 {"punpckhwd", {{Pq}, {Qd}}},
00609 {"punpckhdq", {{Pq}, {Qd}}},
00610 {"packssdw", {{Pq}, {Qd}}},
00611 {0},
00612 {0},
00613 {"movd", {{Pd}, {Ed}}},
00614 {"movq", {{Pq}, {Qq}}},
00615 /* 70 */
00616 {0},
00617 {0, {{SPECIAL_TYPE_GROUP, GROUP_EXT_71}}},
00618 {0, {{SPECIAL_TYPE_GROUP, GROUP_EXT_72}}},
00619 {0, {{SPECIAL_TYPE_GROUP, GROUP_EXT_73}}},
00620 {"pcmpeqb", {{Pq}, {Qq}}},
00621 {"pcmpeqw", {{Pq}, {Qq}}},
00622 {"pcmpewd", {{Pq}, {Qq}}},
00623 {"emms"},
00624 /* 78 */
00625 {0},
00626 {0},
00627 {0},
00628 {0},
00629 {0},
00630 {0},
00631 {"movd", {{Ed}, {Pd}}},
00632 {"movq", {{Qq}, {Pq}}},
00633 /* 80 */
00634 {"jo", {{Jv}}},
00635 {"jno", {{Jv}}},
00636 {"jc", {{Jv}}},
00637 {"jnc", {{Jv}}},
00638 {"jz", {{Jv}}},
00639 {"jnz", {{Jv}}},
00640 {"jna", {{Jv}}},
00641 {"ja", {{Jv}}},
00642 /* 88 */
00643 {"js", {{Jv}}},
00644 {"jns", {{Jv}}},
00645 {"jpe", {{Jv}}},
00646 {"jpo", {{Jv}}},
00647 {"jl", {{Jv}}},
00648 {"jnl", {{Jv}}},
00649 {"jng", {{Jv}}},
00650 {"jg", {{Jv}}},
00651 /* 90 */
00652 {"seto", {{Eb}}},
00653 {"setno", {{Eb}}},
00654 {"setc", {{Eb}}},
00655 {"setnc", {{Eb}}},
00656 {"setz", {{Eb}}},
00657 {"setnz", {{Eb}}},
00658 {"setna", {{Eb}}},
00659 {"seta", {{Eb}}},
00660 /* 98 */
00661 {"sets", {{Eb}}},
00662 {"setns", {{Eb}}},
00663 {"setpe", {{Eb}}},
00664 {"setpo", {{Eb}}},
00665 {"setl", {{Eb}}},
00666 {"setnl", {{Eb}}},
00667 {"setng", {{Eb}}},
00668 {"setg", {{Eb}}},
00669 /* A0 */
00670 {"push", {{__fs}}},
00671 {"pop", {{__fs}}},
00672 {"cpuid"},
00673 {"bt", {{Ev}, {Gv}}},
00674 {"shld", {{Ev}, {Gv}, {Ib}}},
00675 {"shld", {{Ev}, {Gv}, {__cl}}},
00676 {0},
00677 {0},
00678 /* A8 */
00679 {"push", {{__gs}}},
00680 {"pop", {{__gs}}},
00681 {"rsm"},
00682 {"bts", {{Ev}, {Gv}}},
00683 {"shrd", {{Ev}, {Gv}, {Ib}}},
00684 {"shrd", {{Ev}, {Gv}, {__cl}}},
00685 {0},
00686 {"imul", {{Gv}, {Ev}}},
00687 /* B0 */
00688 {"cmpxchg", {{Eb}, {Gb}}},
00689 {"cmpxchg", {{Ev}, {Gv}}},
00690 {"lss", {{Gv}, {Mp}}},
00691 {"btr", {{Ev}, {Gv}}},
00692 {"lfs", {{Gv}, {Mp}}},
00693 {"lgs", {{Gv}, {Mp}}},
00694 {"movzx", {{Gv}, {Eb}}},
00695 {"movzx", {{Gv}, {Ew}}},
00696 /* B8 */
00697 {0},
00698 {"ud2"},
00699 {0, {{SPECIAL_TYPE_GROUP, GROUP_EXT_BA}}},
00700 {"btc", {{Ev}, {Gv}}},
00701 {"bsf", {{Gv}, {Ev}}},
00702 {"bsr", {{Gv}, {Ev}}},
00703 {"movsx", {{Gv}, {Eb}}},
00704 {"movsx", {{Gv}, {Ew}}},
00705 /* C0 */
00706 {"xadd", {{Eb}, {Gb}}},
00707 {"xadd", {{Ev}, {Gv}}},
00708 {0},
00709 {0},
00710 {0},
00711 {0},
00712 {0},
00713 {0, {{SPECIAL_TYPE_GROUP, GROUP_EXT_C7}}},
00714 /* C8 */
00715 {"bswap", {{__axd}}},
00716 {"bswap", {{__cxd}}},
00717 {"bswap", {{__dxd}}},
00718 {"bswap", {{__bxd}}},
00719 {"bswap", {{__spd}}},
00720 {"bswap", {{__bpd}}},
00721 {"bswap", {{__sid}}},
00722 {"bswap", {{__did}}},
00723 /* D0 */
00724 {0},
00725 {"psrlw", {{Pq}, {Qq}}},
00726 {"psrld", {{Pq}, {Qq}}},
00727 {"psrlq", {{Pq}, {Qq}}},
00728 {0},
00729 {"pmullw", {{Pq}, {Qq}}},
00730 {0},
00731 {0},
00732 /* D8 */
00733 {"psubusb", {{Pq}, {Qq}}},
00734 {"psubusw", {{Pq}, {Qq}}},
00735 {0},
00736 {"pand", {{Pq}, {Qq}}},
00737 {"paddusb", {{Pq}, {Qq}}},
00738 {"paddusw", {{Pq}, {Qq}}},
00739 {0},
00740 {"pandn", {{Pq}, {Qq}}},
00741 /* E0 */
00742 {0},
00743 {"psraw", {{Pq}, {Qq}}},
00744 {"psrad", {{Pq}, {Qq}}},
00745 {0},
00746 {0},
00747 {"pmulhw", {{Pq}, {Qq}}},
00748 {0},
00749 {0},
00750 /* E8 */
00751 {"psubsb", {{Pq}, {Qq}}},
00752 {"psubsw", {{Pq}, {Qq}}},
00753 {0},
00754 {"por", {{Pq}, {Qq}}},
00755 {"paddsb", {{Pq}, {Qq}}},
00756 {"paddsw", {{Pq}, {Qq}}},
00757 {0},
00758 {"pxor", {{Pq}, {Qq}}},
00759 /* F0 */
00760 {0},
00761 {"psllw", {{Pq}, {Qq}}},
00762 {"pslld", {{Pq}, {Qq}}},
00763 {"psllq", {{Pq}, {Qq}}},
00764 {0},
00765 {"pmuladdwd", {{Pq}, {Qq}}},
00766 {0},
00767 {0},
00768 /* F8 */
00769 {"psubb", {{Pq}, {Qq}}},
00770 {"psubw", {{Pq}, {Qq}}},
00771 {"psubq", {{Pq}, {Qq}}},
00772 {0},
00773 {"paddb", {{Pq}, {Qq}}},
00774 {"paddw", {{Pq}, {Qq}}},
00775 {"paddq", {{Pq}, {Qq}}},
00776 {0}
00777 };
00778 
00779 x86opc_insn x86_group_insns[X86_GROUPS][8] = {
00780 /* 0 - GROUP_80 */
00781 {
00782 {"add", {{Eb}, {Ib}}},
00783 {"or", {{Eb}, {Ib}}},
00784 {"adc", {{Eb}, {Ib}}},
00785 {"sbb", {{Eb}, {Ib}}},
00786 {"and", {{Eb}, {Ib}}},
00787 {"sub", {{Eb}, {Ib}}},
00788 {"xor", {{Eb}, {Ib}}},
00789 {"cmp", {{Eb}, {Ib}}}
00790 },
00791 /* 1 - GROUP_81 */
00792 {
00793 {"add", {{Ev}, {Iv}}},
00794 {"or", {{Ev}, {Iv}}},
00795 {"adc", {{Ev}, {Iv}}},
00796 {"sbb", {{Ev}, {Iv}}},
00797 {"and", {{Ev}, {Iv}}},
00798 {"sub", {{Ev}, {Iv}}},
00799 {"xor", {{Ev}, {Iv}}},
00800 {"cmp", {{Ev}, {Iv}}}
00801 },
00802 /* 2 - GROUP_83 */
00803 {
00804 {"add", {{Ev}, {sIbv}}},
00805 {"or", {{Ev}, {sIbv}}},
00806 {"adc", {{Ev}, {sIbv}}},
00807 {"sbb", {{Ev}, {sIbv}}},
00808 {"and", {{Ev}, {sIbv}}},
00809 {"sub", {{Ev}, {sIbv}}},
00810 {"xor", {{Ev}, {sIbv}}},
00811 {"cmp", {{Ev}, {sIbv}}}
00812 },
00813 /* 3 - GROUP_C0 */
00814 {
00815 {"rol", {{Eb}, {Ib}}},
00816 {"ror", {{Eb}, {Ib}}},
00817 {"rcl", {{Eb}, {Ib}}},
00818 {"rcr", {{Eb}, {Ib}}},
00819 {"shl", {{Eb}, {Ib}}},
00820 {"shr", {{Eb}, {Ib}}},
00821 {"sal", {{Eb}, {Ib}}},
00822 {"sar", {{Eb}, {Ib}}}
00823 },
00824 /* 4 - GROUP_C1 */
00825 {
00826 {"rol", {{Ev}, {Ib}}},
00827 {"ror", {{Ev}, {Ib}}},
00828 {"rcl", {{Ev}, {Ib}}},
00829 {"rcr", {{Ev}, {Ib}}},
00830 {"shl", {{Ev}, {Ib}}},
00831 {"shr", {{Ev}, {Ib}}},
00832 {"sal", {{Ev}, {Ib}}},
00833 {"sar", {{Ev}, {Ib}}}
00834 },
00835 /* 5 - GROUP_D0 */
00836 {
00837 {"rol", {{Eb}, {__1}}},
00838 {"ror", {{Eb}, {__1}}},
00839 {"rcl", {{Eb}, {__1}}},
00840 {"rcr", {{Eb}, {__1}}},
00841 {"shl", {{Eb}, {__1}}},
00842 {"shr", {{Eb}, {__1}}},
00843 {"sal", {{Eb}, {__1}}},
00844 {"sar", {{Eb}, {__1}}}
00845 },
00846 /* 6 - GROUP_D1 */
00847 {
00848 {"rol", {{Ev}, {__1}}},
00849 {"ror", {{Ev}, {__1}}},
00850 {"rcl", {{Ev}, {__1}}},
00851 {"rcr", {{Ev}, {__1}}},
00852 {"shl", {{Ev}, {__1}}},
00853 {"shr", {{Ev}, {__1}}},
00854 {"sal", {{Ev}, {__1}}},
00855 {"sar", {{Ev}, {__1}}}
00856 },
00857 /* 7 - GROUP_D2 */
00858 {
00859 {"rol", {{Eb}, {__cl}}},
00860 {"ror", {{Eb}, {__cl}}},
00861 {"rcl", {{Eb}, {__cl}}},
00862 {"rcr", {{Eb}, {__cl}}},
00863 {"shl", {{Eb}, {__cl}}},
00864 {"shr", {{Eb}, {__cl}}},
00865 {"sal", {{Eb}, {__cl}}},
00866 {"sar", {{Eb}, {__cl}}}
00867 },
00868 /* 8 - GROUP_D3 */
00869 {
00870 {"rol", {{Ev}, {__cl}}},
00871 {"ror", {{Ev}, {__cl}}},
00872 {"rcl", {{Ev}, {__cl}}},
00873 {"rcr", {{Ev}, {__cl}}},
00874 {"shl", {{Ev}, {__cl}}},
00875 {"shr", {{Ev}, {__cl}}},
00876 {"sal", {{Ev}, {__cl}}},
00877 {"sar", {{Ev}, {__cl}}}
00878 },
00879 /* 9 - GROUP_F6 */
00880 {
00881 {"test", {{Eb}, {Ib}}},
00882 //{"test", {{Eb}, {Ib}}},       unsure...
00883 {0},
00884 {"not", {{Eb}}},
00885 {"neg", {{Eb}}},
00886 {"mul", {{__al}, {Eb}}},
00887 {"imul", {{__al}, {Eb}}},
00888 {"div", {{__al}, {Eb}}},
00889 {"idiv", {{__al}, {Eb}}}
00890 },
00891 /* 10 - GROUP_F7 */
00892 {
00893 {"test", {{Ev}, {Iv}}},
00894 {"test", {{Ev}, {Iv}}},
00895 {"not", {{Ev}}},
00896 {"neg", {{Ev}}},
00897 {"mul", {{__ax}, {Ev}}},
00898 {"imul", {{__ax}, {Ev}}},
00899 {"div", {{__ax}, {Ev}}},
00900 {"idiv", {{__ax}, {Ev}}}
00901 },
00902 /* 11 - GROUP_FE */
00903 {
00904 {"inc", {{Eb}}},
00905 {"dec", {{Eb}}},
00906 {0},
00907 {0},
00908 {0},
00909 {0},
00910 {0},
00911 {0}
00912 },
00913 /* 12 - GROUP_FF */
00914 {
00915 {"inc", {{Ev}}},
00916 {"dec", {{Ev}}},
00917 {"call", {{Ev}}},
00918 {"call", {{Mp}}},
00919 {"jmp", {{Ev}}},
00920 {"jmp", {{Mp}}},
00921 {"push", {{Ev}}},
00922 {0}
00923 },
00924 /* 13 - GROUP_EXT_00 */
00925 {
00926 {"sldt", {{Ew}}},
00927 {"str", {{Ew}}},
00928 {"lldt", {{Ew}}},
00929 {"ltr", {{Ew}}},
00930 {"verr", {{Ew}}},
00931 {"verw", {{Ew}}},
00932 {0},
00933 {0}
00934 },
00935 /* 14 - GROUP_EXT_01 */
00936 {
00937 {"sgdt", {{M}}},
00938 {"sidt", {{M}}},
00939 {"lgdt", {{M}}},
00940 {"lidt", {{M}}},
00941 {"smsw", {{Ew}}},
00942 {0},
00943 {"lmsw", {{Ew}}},
00944 {0}
00945 },
00946 /* 15 - GROUP_EXT_71 */
00947 {
00948 {0},
00949 {0},
00950 {"psrlw", {{Pq}, {Ib}}},
00951 {0},
00952 {"psraw", {{Pq}, {Ib}}},
00953 {0},
00954 {"psslw", {{Pq}, {Ib}}},
00955 {0}
00956 },
00957 /* 16 - GROUP_EXT_72 */
00958 {
00959 {0},
00960 {0},
00961 {"psrld", {{Pq}, {Ib}}},
00962 {0},
00963 {"psrad", {{Pq}, {Ib}}},
00964 {0},
00965 {"pssld", {{Pq}, {Ib}}},
00966 {0}
00967 },
00968 /* 17 - GROUP_EXT_73 */
00969 {
00970 {0},
00971 {0},
00972 {"psrlq", {{Pq}, {Ib}}},
00973 {0},
00974 {"psraq", {{Pq}, {Ib}}},
00975 {0},
00976 {"psslq", {{Pq}, {Ib}}},
00977 {0}
00978 },
00979 /* 18 - GROUP_EXT_BA */
00980 {
00981 {0},
00982 {0},
00983 {0},
00984 {0},
00985 {"bt", {{Ev}, {Ib}}},
00986 {"bts", {{Ev}, {Ib}}},
00987 {"btr", {{Ev}, {Ib}}},
00988 {"btc", {{Ev}, {Ib}}}
00989 },
00990 /* 19 - GROUP_EXT_C7 */
00991 {
00992 {0},
00993 {"cmpxchg8b", {{Eq}}},
00994 {0},
00995 {0},
00996 {0},
00997 {0},
00998 {0},
00999 {0}
01000 }
01001 /*
01002 ,
01003 / * 20 - GROUP_EXT_AE * /
01004 {
01005 {"fxsave", {{Eb}}},
01006 {"fxrstor", {{Eb}}},
01007 {"ldmxcsr", {{Md}}},
01008 {"stmxcsr", {{Md}}},
01009 {0},
01010 {0},
01011 {0},
01012 {"sfence"}
01013 }*/
01014 
01015 };
01016 
01017 /*
01018  *      The ModR/M byte is < 0xC0
01019  */
01020 
01021 x86opc_insn x86_modfloat_group_insns[8][8] = {
01022 /* prefix D8 */
01023 {
01024 {"fadd", {{Ms}}},
01025 {"fmul", {{Ms}}},
01026 {"fcom", {{Ms}}},
01027 {"fcomp", {{Ms}}},
01028 {"fsub", {{Ms}}},
01029 {"fsubr", {{Ms}}},
01030 {"fdiv", {{Ms}}},
01031 {"fdivr", {{Ms}}}
01032 },
01033 /* prefix D9 */
01034 {
01035 {"fld", {{Ms}}},
01036 {0},
01037 {"fst", {{Ms}}},
01038 {"fstp", {{Ms}}},
01039 {"fldenv", {{M}}},
01040 {"fldcw", {{Mw}}},
01041 {"fstenv", {{M}}},
01042 {"fstcw", {{Mw}}}
01043 },
01044 /* prefix DA */
01045 {
01046 {"fiadd", {{Md}}},
01047 {"fimul", {{Md}}},
01048 {"ficom", {{Md}}},
01049 {"ficomp", {{Md}}},
01050 {"fisub", {{Md}}},
01051 {"fisubr", {{Md}}},
01052 {"fidiv", {{Md}}},
01053 {"fidivr", {{Md}}}
01054 },
01055 /* prefix DB */
01056 {
01057 {"fild", {{Md}}},
01058 {0},
01059 {"fist", {{Md}}},
01060 {"fistp", {{Md}}},
01061 {0},
01062 {"fld", {{Mt}}},
01063 {0},
01064 {"fstp", {{Mt}}}
01065 },
01066 /* prefix DC */
01067 {
01068 {"fadd", {{Ml}}},
01069 {"fmul", {{Ml}}},
01070 {"fcom", {{Ml}}},
01071 {"fcomp", {{Ml}}},
01072 {"fsub", {{Ml}}},
01073 {"fsubr", {{Ml}}},
01074 {"fdiv", {{Ml}}},
01075 {"fdivr", {{Ml}}}
01076 },
01077 /* prefix DD */
01078 {
01079 {"fld", {{Ml}}},
01080 {0},
01081 {"fst", {{Ml}}},
01082 {"fstp", {{Ml}}},
01083 {"frstor", {{M}}},
01084 {0},
01085 {"fsave", {{M}}},
01086 {"fstsw", {{Mw}}}
01087 },
01088 /* prefix DE */
01089 {
01090 {"fiadd", {{Mw}}},
01091 {"fimul", {{Mw}}},
01092 {"ficom", {{Mw}}},
01093 {"ficomp", {{Mw}}},
01094 {"fisub", {{Mw}}},
01095 {"fisubr", {{Mw}}},
01096 {"fidiv", {{Mw}}},
01097 {"fidivr", {{Mw}}}
01098 },
01099 /* prefix DF */
01100 {
01101 {"fild", {{Mw}}},
01102 {0},
01103 {"fist", {{Mw}}},
01104 {"fistp", {{Mw}}},
01105 {"fbld", {{Ma}}},
01106 {"fild", {{Mq}}},
01107 {"fbstp", {{Ma}}},
01108 {"fistp", {{Mq}}}
01109 }
01110 
01111 };
01112 
01113 x86opc_insn fgroup_12[8] = {
01114 {"fnop"},
01115 {0},
01116 {0},
01117 {0},
01118 {0},
01119 {0},
01120 {0},
01121 {0}
01122 };
01123 
01124 x86opc_insn fgroup_14[8] = {
01125 {"fchs"},
01126 {"fabs"},
01127 {0},
01128 {0},
01129 {"ftst"},
01130 {"fxam"},
01131 {0},
01132 {0}
01133 };
01134 
01135 x86opc_insn fgroup_15[8] = {
01136 {"fld1"},
01137 {"fldl2t"},
01138 {"fldl2e"},
01139 {"fldpi"},
01140 {"fldlg2"},
01141 {"fldln2"},
01142 {"fldz"},
01143 {0}
01144 };
01145 
01146 x86opc_insn fgroup_16[8] = {
01147 {"f2xm1"},
01148 {"fyl2x"},
01149 {"fptan"},
01150 {"fpatan"},
01151 {"fxtract"},
01152 {"fprem1"},
01153 {"fdecstp"},
01154 {"fincstp"}
01155 };
01156 
01157 x86opc_insn fgroup_17[8] = {
01158 {"fprem"},
01159 {"fyl2xp1"},
01160 {"fsqrt"},
01161 {"fsincos"},
01162 {"frndint"},
01163 {"fscale"},
01164 {"fsin"},
01165 {"fcos"}
01166 };
01167 
01168 x86opc_insn fgroup_25[8] = {
01169 {0},
01170 {"fucompp"},
01171 {0},
01172 {0},
01173 {0},
01174 {0},
01175 {0},
01176 {0}
01177 };
01178 
01179 x86opc_insn fgroup_34[8] = {
01180 {0},
01181 {0},
01182 {"fclex"},
01183 {"finit"},
01184 {0},
01185 {0},
01186 {0},
01187 {0}
01188 };
01189 
01190 x86opc_insn fgroup_63[8] = {
01191 {0},
01192 {"fcompp"},
01193 {0},
01194 {0},
01195 {0},
01196 {0},
01197 {0},
01198 {0}
01199 };
01200 
01201 x86opc_insn fgroup_74[8] = {
01202 {"fstsw", {{__axw}}},
01203 {0},
01204 {0},
01205 {0},
01206 {0},
01207 {0},
01208 {0},
01209 {0}
01210 };
01211 
01212 /*
01213  *      The ModR/M byte is >= 0xC0
01214  */
01215 
01216 x86opc_finsn x86_float_group_insns[8][8] = {
01217 /* prefix D8 */
01218 {
01219 {0, {"fadd", {{__st}, {Ft}}}},
01220 {0, {"fmul", {{__st}, {Ft}}}},
01221 {0, {"fcom", {{__st}, {Ft}}}},
01222 {0, {"fcomp", {{__st}, {Ft}}}},
01223 {0, {"fsub", {{__st}, {Ft}}}},
01224 {0, {"fsubr", {{__st}, {Ft}}}},
01225 {0, {"fdiv", {{__st}, {Ft}}}},
01226 {0, {"fdivr", {{__st}, {Ft}}}}
01227 },
01228 /* prefix D9 */
01229 {
01230 {0, {"fld", {{__st}, {Ft}}}},
01231 {0, {"fxch", {{__st}, {Ft}}}},
01232 {(x86opc_insn *)&fgroup_12},
01233 {0},
01234 {(x86opc_insn *)&fgroup_14},
01235 {(x86opc_insn *)&fgroup_15},
01236 {(x86opc_insn *)&fgroup_16},
01237 {(x86opc_insn *)&fgroup_17}
01238 },
01239 /* prefix DA */
01240 {
01241 {0, {"fcmovb", {{__st}, {Ft}}}},
01242 {0, {"fcmove", {{__st}, {Ft}}}},
01243 {0, {"fcmovbe", {{__st}, {Ft}}}},
01244 {0, {"fcmovu", {{__st}, {Ft}}}},
01245 {0},
01246 {(x86opc_insn *)&fgroup_25},
01247 {0},
01248 {0}
01249 },
01250 /* prefix DB */
01251 {
01252 {0, {"fcmovnb", {{__st}, {Ft}}}},
01253 {0, {"fcmovne", {{__st}, {Ft}}}},
01254 {0, {"fcmovnbe", {{__st}, {Ft}}}},
01255 {0, {"fcmovnu", {{__st}, {Ft}}}},
01256 {(x86opc_insn*)&fgroup_34},
01257 {0, {"fucomi", {{__st}, {Ft}}}},
01258 {0, {"fcomi", {{__st}, {Ft}}}},
01259 {0}
01260 },
01261 /* prefix DC */
01262 {
01263 {0, {"fadd", {{Ft}, {__st}}}},
01264 {0, {"fmul", {{Ft}, {__st}}}},
01265 {0},
01266 {0},
01267 {0, {"fsubr", {{Ft}, {__st}}}},
01268 {0, {"fsub", {{Ft}, {__st}}}},
01269 {0, {"fdivr", {{Ft}, {__st}}}},
01270 {0, {"fdiv", {{Ft}, {__st}}}}
01271 },
01272 /* prefix DD */
01273 {
01274 {0, {"ffree", {{Ft}}}},
01275 {0},
01276 {0, {"fst", {{Ft}}}},
01277 {0, {"fstp", {{Ft}}}},
01278 {0, {"fucom", {{Ft}, {__st}}}},
01279 {0, {"fucomp", {{Ft}}}},
01280 {0},
01281 {0}
01282 },
01283 /* prefix DE */
01284 {
01285 {0, {"faddp", {{Ft}, {__st}}}},
01286 {0, {"fmulp", {{Ft}, {__st}}}},
01287 {0},
01288 {(x86opc_insn*)&fgroup_63},
01289 {0, {"fsubrp", {{Ft}, {__st}}}},
01290 {0, {"fsubp", {{Ft}, {__st}}}},
01291 {0, {"fdivrp", {{Ft}, {__st}}}},
01292 {0, {"fdivp", {{Ft}, {__st}}}}
01293 },
01294 /* prefix DF */
01295 {
01296 {0},
01297 {0},
01298 {0},
01299 {0},
01300 {(x86opc_insn*)&fgroup_74},
01301 {0, {"fucomip", {{__st}, {Ft}}}},
01302 {0, {"fcomip", {{__st}, {Ft}}}},
01303 {0}
01304 }
01305 
01306 };

Generated on Fri May 7 21:15:46 2004 by doxygen 1.3.5