00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "x86opc.h"
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
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
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
00196
00197 x86opc_insn x86_insns[256] = {
00198
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
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}}},
00216
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
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
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}}},
00242 {"daa"},
00243
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}}},
00251 {"das"},
00252
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}}},
00260 {"aaa"},
00261
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}}},
00269 {"aas"},
00270
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
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
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
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
00307 {"pusha"},
00308 {"popa"},
00309 {"bound", {{Gv}, {Mq}}},
00310 {"arpl", {{Ew}, {Rw}}},
00311 {0, {{SPECIAL_TYPE_PREFIX}}},
00312 {0, {{SPECIAL_TYPE_PREFIX}}},
00313 {0, {{SPECIAL_TYPE_PREFIX}}},
00314 {0, {{SPECIAL_TYPE_PREFIX}}},
00315
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
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
00334 {"js", {{Jb}}},
00335 {"jns", {{Jb}}},
00336 {"jp", {{Jb}}},
00337 {"jnp", {{Jb}}},
00338 {"jl", {{Jb}}},
00339 {"jnl", {{Jb}}},
00340 {"jng", {{Jb}}},
00341 {"jg", {{Jb}}},
00342
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
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
00361 {"nop"},
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
00370 {"cbw"},
00371 {"cwd"},
00372 {"call", {{Ap}}},
00373 {"fwait"},
00374 {"pushf%c"},
00375 {"popf%c"},
00376 {"sahf"},
00377 {"lahf"},
00378
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
00388 {"test", {{__al}, {Ib}}},
00389 {"test", {{__ax}, {Iv}}},
00390 {"stosb"},
00391 {"stos%c"},
00392 {"lodsb"},
00393 {"lods%c"},
00394 {"scasb"},
00395 {"scas%c"},
00396
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
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
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
00424 {"enter", {{Iw}, {Ib}}},
00425 {"leave"},
00426 {"retf", {{Iw}}},
00427 {"retf"},
00428 {"int", {{__3}}},
00429 {"int", {{Ib}}},
00430 {"into"},
00431 {"iret%c"},
00432
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
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
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
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
00469 {0, {{SPECIAL_TYPE_PREFIX}}},
00470 {"smi"},
00471 {0, {{SPECIAL_TYPE_PREFIX}}},
00472 {0, {{SPECIAL_TYPE_PREFIX}}},
00473 {"hlt"},
00474 {"cmc"},
00475 {0, {{SPECIAL_TYPE_GROUP, GROUP_F6}}},
00476 {0, {{SPECIAL_TYPE_GROUP, GROUP_F7}}},
00477
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
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
00499 {"invd"},
00500 {"wbinvd"},
00501 {0},
00502 {"ud2"},
00503 {0},
00504 {"prefetch", {{Eb}}},
00505 {"femms"},
00506 {0, {{SPECIAL_TYPE_PREFIX}}},
00507
00508 {0},
00509 {0},
00510 {0},
00511 {0},
00512 {0},
00513 {0},
00514 {0},
00515 {0},
00516
00517 {0},
00518 {0},
00519 {0},
00520 {0},
00521 {0},
00522 {0},
00523 {0},
00524 {0},
00525
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
00535 {0},
00536 {0},
00537 {0},
00538 {0},
00539 {0},
00540 {0},
00541 {0},
00542 {0},
00543
00544 {"wrmsr"},
00545 {"rdtsc"},
00546 {"rdmsr"},
00547 {"rdpmc"},
00548 {"sysenter"},
00549 {"sysexit"},
00550 {0},
00551 {0},
00552
00553 {0},
00554 {0},
00555 {0},
00556 {0},
00557 {0},
00558 {0},
00559 {0},
00560 {0},
00561
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
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
00580 {0},
00581 {0},
00582 {0},
00583 {0},
00584 {0},
00585 {0},
00586 {0},
00587 {0},
00588
00589 {0},
00590 {0},
00591 {0},
00592 {0},
00593 {0},
00594 {0},
00595 {0},
00596 {0},
00597
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
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
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
00625 {0},
00626 {0},
00627 {0},
00628 {0},
00629 {0},
00630 {0},
00631 {"movd", {{Ed}, {Pd}}},
00632 {"movq", {{Qq}, {Pq}}},
00633
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
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
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
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
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
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
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
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
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
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
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
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
00742 {0},
00743 {"psraw", {{Pq}, {Qq}}},
00744 {"psrad", {{Pq}, {Qq}}},
00745 {0},
00746 {0},
00747 {"pmulhw", {{Pq}, {Qq}}},
00748 {0},
00749 {0},
00750
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
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
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
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
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
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
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
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
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
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
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
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
00880 {
00881 {"test", {{Eb}, {Ib}}},
00882
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
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
00903 {
00904 {"inc", {{Eb}}},
00905 {"dec", {{Eb}}},
00906 {0},
00907 {0},
00908 {0},
00909 {0},
00910 {0},
00911 {0}
00912 },
00913
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
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
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
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
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
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
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
00991 {
00992 {0},
00993 {"cmpxchg8b", {{Eq}}},
00994 {0},
00995 {0},
00996 {0},
00997 {0},
00998 {0},
00999 {0}
01000 }
01001
01002
01003
01004
01005
01006
01007
01008
01009
01010
01011
01012
01013
01014
01015 };
01016
01017
01018
01019
01020
01021 x86opc_insn x86_modfloat_group_insns[8][8] = {
01022
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
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
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
01056 {
01057 {"fild", {{Md}}},
01058 {0},
01059 {"fist", {{Md}}},
01060 {"fistp", {{Md}}},
01061 {0},
01062 {"fld", {{Mt}}},
01063 {0},
01064 {"fstp", {{Mt}}}
01065 },
01066
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
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
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
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
01214
01215
01216 x86opc_finsn x86_float_group_insns[8][8] = {
01217
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
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
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
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
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
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
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
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 };