/[pearpc]/src/debug/x86opc.cc
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /src/debug/x86opc.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (hide annotations)
Wed Sep 5 17:11:21 2007 UTC (16 years, 7 months ago) by dpavlin
File size: 24588 byte(s)
import upstream CVS
1 dpavlin 1 /*
2     * HT Editor
3     * x86opc.cc
4     *
5     * Copyright (C) 1999-2002 Stefan Weyergraf
6     *
7     * This program is free software; you can redistribute it and/or modify
8     * it under the terms of the GNU General Public License version 2 as
9     * published by the Free Software Foundation.
10     *
11     * This program is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with this program; if not, write to the Free Software
18     * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19     */
20    
21     #include "x86opc.h"
22    
23     /* Percent tokens in strings:
24     First char after '%':
25     A - direct address
26     C - reg of r/m picks control register
27     D - reg of r/m picks debug register
28     E - r/m picks operand
29     F - flags register
30     G - reg of r/m picks general register
31     I - immediate data (takes extended size, data size)
32     J - relative IP offset
33     M - r/m picks memory
34     O - no r/m, offset only
35     P - reg of r/m picks mm register (mm0-mm7)
36     Q - r/m picks mm operand (mm0-mm7/mem64)
37     R - mod of r/m picks register only
38     S - reg of r/m picks segment register
39     T - reg of r/m picks test register
40     X - DS:ESI
41     Y - ES:EDI
42     2 - prefix of two-unsigned char opcode
43     3 - prefix of 3DNow! opcode
44     e - put in 'e' if use32 (second char is part of reg name)
45     put in 'w' for use16 or 'd' for use32 (second char is 'w')
46     f - floating point (second char is esc value)
47     g - do r/m group n (where n may be one of 0-9,A-Z)
48     p - prefix
49     s - size override (second char is a,o)
50     + - make default signed
51     Second char after '%':
52     a - two words in memory (BOUND)
53     b - byte
54     c - byte or word
55     d - dword
56     p - 32 or 48 bit pointer
57     q - quadword
58     s - six unsigned char pseudo-descriptor
59     v - word or dword
60     w - word
61     F - use floating regs in mod/rm
62     + - always sign
63     - - sign if negative
64     1-8 - group number, esc value, etc
65     */
66    
67     #define Ap TYPE_A, 0, SIZE_P, SIZE_P
68     #define Cd TYPE_C, 0, SIZE_D, SIZE_D
69     #define Dd TYPE_D, 0, SIZE_D, SIZE_D
70     #define E TYPE_E, 0, SIZE_0, SIZE_0
71     #define Eb TYPE_E, 0, SIZE_B, SIZE_B
72     #define Ew TYPE_E, 0, SIZE_W, SIZE_W
73     #define Ed TYPE_E, 0, SIZE_D, SIZE_D
74     #define Eq TYPE_E, 0, SIZE_Q, SIZE_Q
75     #define Ev TYPE_E, 0, SIZE_V, SIZE_V
76     #define Es TYPE_E, 0, SIZE_S, SIZE_S
77     #define El TYPE_E, 0, SIZE_L, SIZE_L
78     #define Et TYPE_E, 0, SIZE_T, SIZE_T
79     #define Ea TYPE_E, 0, SIZE_A, SIZE_A
80     #define Gb TYPE_G, 0, SIZE_B, SIZE_B
81     #define Gw TYPE_G, 0, SIZE_W, SIZE_W
82     #define Gv TYPE_G, 0, SIZE_V, SIZE_V
83     #define Ib TYPE_I, 0, SIZE_B, SIZE_B
84     #define Iw TYPE_I, 0, SIZE_W, SIZE_W
85     #define Iv TYPE_I, 0, SIZE_V, SIZE_V
86     #define Ibv TYPE_I, 0, SIZE_B, SIZE_V
87     #define sIbv TYPE_Is,0, SIZE_B, SIZE_V
88     #define Jb TYPE_J, 0, SIZE_B, SIZE_B
89     #define Jv TYPE_J, 0, SIZE_V, SIZE_V
90     #define M TYPE_M, 0, 0, 0
91     #define Mw TYPE_M, 0, SIZE_W, SIZE_W
92     #define Md TYPE_M, 0, SIZE_D, SIZE_D
93     #define Mp TYPE_M, 0, SIZE_P, SIZE_P
94     #define Mq TYPE_M, 0, SIZE_Q, SIZE_Q
95     #define Ms TYPE_M, 0, SIZE_S, SIZE_S
96     #define Ml TYPE_M, 0, SIZE_L, SIZE_L
97     #define Mt TYPE_M, 0, SIZE_T, SIZE_T
98     #define Ma TYPE_M, 0, SIZE_A, SIZE_A
99     #define Ob TYPE_O, 0, SIZE_B, SIZE_B
100     #define Ov TYPE_O, 0, SIZE_V, SIZE_V
101     #define Pd TYPE_P, 0, SIZE_D, SIZE_D
102     #define Pq TYPE_P, 0, SIZE_Q, SIZE_Q
103     #define Qd TYPE_Q, 0, SIZE_D, SIZE_D
104     #define Qq TYPE_Q, 0, SIZE_Q, SIZE_Q
105     #define Rb TYPE_R, 0, SIZE_B, SIZE_B
106     #define Rw TYPE_R, 0, SIZE_W, SIZE_W
107     #define Rd TYPE_R, 0, SIZE_D, SIZE_D
108     #define Rv TYPE_R, 0, SIZE_V, SIZE_V
109     #define Sw TYPE_S, 0, SIZE_W, SIZE_W
110     #define Td TYPE_T, 0, SIZE_D, SIZE_D
111    
112     #define Ft TYPE_F, 0, SIZE_T, SIZE_T
113    
114     #define __st TYPE_Fx, 0, SIZE_T, SIZE_T
115    
116     #define __1 TYPE_Ix, 1, SIZE_B, SIZE_B
117     #define __3 TYPE_Ix, 3, SIZE_B, SIZE_B /* for int 3 */
118    
119     #define __al TYPE_Rx, 0, SIZE_B, SIZE_B
120     #define __cl TYPE_Rx, 1, SIZE_B, SIZE_B
121     #define __dl TYPE_Rx, 2, SIZE_B, SIZE_B
122     #define __bl TYPE_Rx, 3, SIZE_B, SIZE_B
123     #define __ah TYPE_Rx, 4, SIZE_B, SIZE_B
124     #define __ch TYPE_Rx, 5, SIZE_B, SIZE_B
125     #define __dh TYPE_Rx, 6, SIZE_B, SIZE_B
126     #define __bh TYPE_Rx, 7, SIZE_B, SIZE_B
127    
128     #define __ax TYPE_Rx, 0, SIZE_V, SIZE_V
129     #define __cx TYPE_Rx, 1, SIZE_V, SIZE_V
130     #define __dx TYPE_Rx, 2, SIZE_V, SIZE_V
131     #define __bx TYPE_Rx, 3, SIZE_V, SIZE_V
132     #define __sp TYPE_Rx, 4, SIZE_V, SIZE_V
133     #define __bp TYPE_Rx, 5, SIZE_V, SIZE_V
134     #define __si TYPE_Rx, 6, SIZE_V, SIZE_V
135     #define __di TYPE_Rx, 7, SIZE_V, SIZE_V
136    
137     #define __axw TYPE_Rx, 0, SIZE_W, SIZE_W
138     #define __dxw TYPE_Rx, 2, SIZE_W, SIZE_W
139    
140     #define __axd TYPE_Rx, 0, SIZE_D, SIZE_D
141     #define __cxd TYPE_Rx, 1, SIZE_D, SIZE_D
142     #define __dxd TYPE_Rx, 2, SIZE_D, SIZE_D
143     #define __bxd TYPE_Rx, 3, SIZE_D, SIZE_D
144     #define __spd TYPE_Rx, 4, SIZE_D, SIZE_D
145     #define __bpd TYPE_Rx, 5, SIZE_D, SIZE_D
146     #define __sid TYPE_Rx, 6, SIZE_D, SIZE_D
147     #define __did TYPE_Rx, 7, SIZE_D, SIZE_D
148    
149     #define __es TYPE_Sx, 0, SIZE_W, SIZE_W
150     #define __cs TYPE_Sx, 1, SIZE_W, SIZE_W
151     #define __ss TYPE_Sx, 2, SIZE_W, SIZE_W
152     #define __ds TYPE_Sx, 3, SIZE_W, SIZE_W
153     #define __fs TYPE_Sx, 4, SIZE_W, SIZE_W
154     #define __gs TYPE_Sx, 5, SIZE_W, SIZE_W
155    
156     #define __st0 TYPE_F, 0, SIZE_T, SIZE_T
157     #define __st1 TYPE_F, 1, SIZE_T, SIZE_T
158     #define __st2 TYPE_F, 2, SIZE_T, SIZE_T
159     #define __st3 TYPE_F, 3, SIZE_T, SIZE_T
160     #define __st4 TYPE_F, 4, SIZE_T, SIZE_T
161     #define __st5 TYPE_F, 5, SIZE_T, SIZE_T
162     #define __st6 TYPE_F, 6, SIZE_T, SIZE_T
163     #define __st7 TYPE_F, 7, SIZE_T, SIZE_T
164    
165     char *x86_regs[3][8] = {
166     {"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh"},
167     {"ax", "cx", "dx", "bx", "sp", "bp", "si", "di"},
168     {"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"}
169     };
170    
171     char *x86_segs[8] = {
172     "es", "cs", "ss", "ds", "fs", "gs", 0, 0
173     };
174    
175     #define GROUP_80 0
176     #define GROUP_81 1
177     #define GROUP_83 2
178     #define GROUP_C0 3
179     #define GROUP_C1 4
180     #define GROUP_D0 5
181     #define GROUP_D1 6
182     #define GROUP_D2 7
183     #define GROUP_D3 8
184     #define GROUP_F6 9
185     #define GROUP_F7 10
186     #define GROUP_FE 11
187     #define GROUP_FF 12
188     #define GROUP_EXT_00 13
189     #define GROUP_EXT_01 14
190     #define GROUP_EXT_71 15
191     #define GROUP_EXT_72 16
192     #define GROUP_EXT_73 17
193     #define GROUP_EXT_BA 18
194     #define GROUP_EXT_C7 19
195     //#define GROUP_EXT_AE 20
196    
197     x86opc_insn x86_insns[256] = {
198     /* 00 */
199     {"add", {{Eb}, {Gb}}},
200     {"add", {{Ev}, {Gv}}},
201     {"add", {{Gb}, {Eb}}},
202     {"add", {{Gv}, {Ev}}},
203     {"add", {{__al}, {Ib}}},
204     {"add", {{__ax}, {Iv}}},
205     {"push", {{__es}}},
206     {"pop", {{__es}}},
207     /* 08 */
208     {"or", {{Eb}, {Gb}}},
209     {"or", {{Ev}, {Gv}}},
210     {"or", {{Gb}, {Eb}}},
211     {"or", {{Gv}, {Ev}}},
212     {"or", {{__al}, {Ib}}},
213     {"or", {{__ax}, {Iv}}},
214     {"push", {{__cs}}},
215     {0, {{SPECIAL_TYPE_PREFIX}}}, /* prefix */
216     /* 10 */
217     {"adc", {{Eb}, {Gb}}},
218     {"adc", {{Ev}, {Gv}}},
219     {"adc", {{Gb}, {Eb}}},
220     {"adc", {{Gv}, {Ev}}},
221     {"adc", {{__al}, {Ib}}},
222     {"adc", {{__ax}, {Iv}}},
223     {"push", {{__ss}}},
224     {"pop", {{__ss}}},
225     /* 18 */
226     {"sbb", {{Eb}, {Gb}}},
227     {"sbb", {{Ev}, {Gv}}},
228     {"sbb", {{Gb}, {Eb}}},
229     {"sbb", {{Gv}, {Ev}}},
230     {"sbb", {{__al}, {Ib}}},
231     {"sbb", {{__ax}, {Iv}}},
232     {"push", {{__ds}}},
233     {"pop", {{__ds}}},
234     /* 20 */
235     {"and", {{Eb}, {Gb}}},
236     {"and", {{Ev}, {Gv}}},
237     {"and", {{Gb}, {Eb}}},
238     {"and", {{Gv}, {Ev}}},
239     {"and", {{__al}, {Ib}}},
240     {"and", {{__ax}, {Iv}}},
241     {0, {{SPECIAL_TYPE_PREFIX}}}, /* es-prefix */
242     {"daa"},
243     /* 28 */
244     {"sub", {{Eb}, {Gb}}},
245     {"sub", {{Ev}, {Gv}}},
246     {"sub", {{Gb}, {Eb}}},
247     {"sub", {{Gv}, {Ev}}},
248     {"sub", {{__al}, {Ib}}},
249     {"sub", {{__ax}, {Iv}}},
250     {0, {{SPECIAL_TYPE_PREFIX}}}, /* cs-prefix */
251     {"das"},
252     /* 30 */
253     {"xor", {{Eb}, {Gb}}},
254     {"xor", {{Ev}, {Gv}}},
255     {"xor", {{Gb}, {Eb}}},
256     {"xor", {{Gv}, {Ev}}},
257     {"xor", {{__al}, {Ib}}},
258     {"xor", {{__ax}, {Iv}}},
259     {0, {{SPECIAL_TYPE_PREFIX}}}, /* ss-prefix */
260     {"aaa"},
261     /* 38 */
262     {"cmp", {{Eb}, {Gb}}},
263     {"cmp", {{Ev}, {Gv}}},
264     {"cmp", {{Gb}, {Eb}}},
265     {"cmp", {{Gv}, {Ev}}},
266     {"cmp", {{__al}, {Ib}}},
267     {"cmp", {{__ax}, {Iv}}},
268     {0, {{SPECIAL_TYPE_PREFIX}}}, /* ds-prefix */
269     {"aas"},
270     /* 40 */
271     {"inc", {{__ax}}},
272     {"inc", {{__cx}}},
273     {"inc", {{__dx}}},
274     {"inc", {{__bx}}},
275     {"inc", {{__sp}}},
276     {"inc", {{__bp}}},
277     {"inc", {{__si}}},
278     {"inc", {{__di}}},
279     /* 48 */
280     {"dec", {{__ax}}},
281     {"dec", {{__cx}}},
282     {"dec", {{__dx}}},
283     {"dec", {{__bx}}},
284     {"dec", {{__sp}}},
285     {"dec", {{__bp}}},
286     {"dec", {{__si}}},
287     {"dec", {{__di}}},
288     /* 50 */
289     {"push", {{__ax}}},
290     {"push", {{__cx}}},
291     {"push", {{__dx}}},
292     {"push", {{__bx}}},
293     {"push", {{__sp}}},
294     {"push", {{__bp}}},
295     {"push", {{__si}}},
296     {"push", {{__di}}},
297     /* 58 */
298     {"pop", {{__ax}}},
299     {"pop", {{__cx}}},
300     {"pop", {{__dx}}},
301     {"pop", {{__bx}}},
302     {"pop", {{__sp}}},
303     {"pop", {{__bp}}},
304     {"pop", {{__si}}},
305     {"pop", {{__di}}},
306     /* 60 */
307     {"pusha"},
308     {"popa"},
309     {"bound", {{Gv}, {Mq}}},
310     {"arpl", {{Ew}, {Rw}}},
311     {0, {{SPECIAL_TYPE_PREFIX}}}, /* fs-prefix */
312     {0, {{SPECIAL_TYPE_PREFIX}}}, /* gs-prefix */
313     {0, {{SPECIAL_TYPE_PREFIX}}}, /* op-size prefix */
314     {0, {{SPECIAL_TYPE_PREFIX}}}, /* addr-size prefix */
315     /* 68 */
316     {"push", {{Iv}}},
317     {"imul", {{Gv}, {Ev}, {Iv}}},
318     {"push", {{sIbv}}},
319     {"imul", {{Gv}, {Ev}, {sIbv}}},
320     {"insb"},
321     {"ins%c"},
322     {"outsb"},
323     {"outs%c"},
324     /* 70 */
325     {"jo", {{Jb}}},
326     {"jno", {{Jb}}},
327     {"jc", {{Jb}}},
328     {"jnc", {{Jb}}},
329     {"jz", {{Jb}}},
330     {"jnz", {{Jb}}},
331     {"jna", {{Jb}}},
332     {"ja", {{Jb}}},
333     /* 78 */
334     {"js", {{Jb}}},
335     {"jns", {{Jb}}},
336     {"jp", {{Jb}}},
337     {"jnp", {{Jb}}},
338     {"jl", {{Jb}}}, /* aka jnge */
339     {"jnl", {{Jb}}}, /* aka jge */
340     {"jng", {{Jb}}}, /* aka jle */
341     {"jg", {{Jb}}}, /* aka jnle */
342     /* 80 */
343     {0, {{SPECIAL_TYPE_GROUP, GROUP_80}}},
344     {0, {{SPECIAL_TYPE_GROUP, GROUP_81}}},
345     {0},
346     {0, {{SPECIAL_TYPE_GROUP, GROUP_83}}},
347     {"test", {{Eb}, {Gb}}},
348     {"test", {{Ev}, {Gv}}},
349     {"xchg", {{Eb}, {Gb}}},
350     {"xchg", {{Ev}, {Gv}}},
351     /* 88 */
352     {"mov", {{Eb}, {Gb}}},
353     {"mov", {{Ev}, {Gv}}},
354     {"mov", {{Gb}, {Eb}}},
355     {"mov", {{Gv}, {Ev}}},
356     {"mov", {{Ev}, {Sw}}},
357     {"lea", {{Gv}, {M}}},
358     {"mov", {{Sw}, {Ev}}},
359     {"pop", {{Ev}}},
360     /* 90 */
361     {"nop"}, /* same as xchg (e)ax, (e)ax */
362     {"xchg", {{__ax}, {__cx}}},
363     {"xchg", {{__ax}, {__dx}}},
364     {"xchg", {{__ax}, {__bx}}},
365     {"xchg", {{__ax}, {__sp}}},
366     {"xchg", {{__ax}, {__bp}}},
367     {"xchg", {{__ax}, {__si}}},
368     {"xchg", {{__ax}, {__di}}},
369     /* 98 */
370     {"cbw"},
371     {"cwd"},
372     {"call", {{Ap}}},
373     {"fwait"},
374     {"pushf%c"},
375     {"popf%c"},
376     {"sahf"},
377     {"lahf"},
378     /* A0 */
379     {"mov", {{__al}, {Ob}}},
380     {"mov", {{__ax}, {Ov}}},
381     {"mov", {{Ob}, {__al}}},
382     {"mov", {{Ov}, {__ax}}},
383     {"movsb"},
384     {"movs%c"},
385     {"cmpsb"},
386     {"cmps%c"},
387     /* A8 */
388     {"test", {{__al}, {Ib}}},
389     {"test", {{__ax}, {Iv}}},
390     {"stosb"},
391     {"stos%c"},
392     {"lodsb"},
393     {"lods%c"},
394     {"scasb"},
395     {"scas%c"},
396     /* B0 */
397     {"mov", {{__al}, {Ib}}},
398     {"mov", {{__cl}, {Ib}}},
399     {"mov", {{__dl}, {Ib}}},
400     {"mov", {{__bl}, {Ib}}},
401     {"mov", {{__ah}, {Ib}}},
402     {"mov", {{__ch}, {Ib}}},
403     {"mov", {{__dh}, {Ib}}},
404     {"mov", {{__bh}, {Ib}}},
405     /* B8 */
406     {"mov", {{__ax}, {Iv}}},
407     {"mov", {{__cx}, {Iv}}},
408     {"mov", {{__dx}, {Iv}}},
409     {"mov", {{__bx}, {Iv}}},
410     {"mov", {{__sp}, {Iv}}},
411     {"mov", {{__bp}, {Iv}}},
412     {"mov", {{__si}, {Iv}}},
413     {"mov", {{__di}, {Iv}}},
414     /* C0 */
415     {0, {{SPECIAL_TYPE_GROUP, GROUP_C0}}},
416     {0, {{SPECIAL_TYPE_GROUP, GROUP_C1}}},
417     {"ret", {{Iw}}},
418     {"ret"},
419     {"les", {{Gv}, {Mp}}},
420     {"lds", {{Gv}, {Mp}}},
421     {"mov", {{Eb}, {Ib}}},
422     {"mov", {{Ev}, {Iv}}},
423     /* C8 */
424     {"enter", {{Iw}, {Ib}}},
425     {"leave"},
426     {"retf", {{Iw}}},
427     {"retf"},
428     {"int", {{__3}}},
429     {"int", {{Ib}}},
430     {"into"},
431     {"iret%c"},
432     /* D0 */
433     {0, {{SPECIAL_TYPE_GROUP, GROUP_D0}}},
434     {0, {{SPECIAL_TYPE_GROUP, GROUP_D1}}},
435     {0, {{SPECIAL_TYPE_GROUP, GROUP_D2}}},
436     {0, {{SPECIAL_TYPE_GROUP, GROUP_D3}}},
437     {"aam", {{Ib}}},
438     {"aad", {{Ib}}},
439     {"setalc"},
440     {"xlat"},
441     /* D8 */
442     {0, {{SPECIAL_TYPE_FGROUP, 0}}},
443     {0, {{SPECIAL_TYPE_FGROUP, 1}}},
444     {0, {{SPECIAL_TYPE_FGROUP, 2}}},
445     {0, {{SPECIAL_TYPE_FGROUP, 3}}},
446     {0, {{SPECIAL_TYPE_FGROUP, 4}}},
447     {0, {{SPECIAL_TYPE_FGROUP, 5}}},
448     {0, {{SPECIAL_TYPE_FGROUP, 6}}},
449     {0, {{SPECIAL_TYPE_FGROUP, 7}}},
450     /* E0 */
451     {"loopnz", {{Jb}}},
452     {"loopz", {{Jb}}},
453     {"loop", {{Jb}}},
454     {"jcxz", {{Jb}}},
455     {"in", {{__al}, {Ib}}},
456     {"in", {{__ax}, {Ib}}},
457     {"out", {{Ib}, {__al}}},
458     {"out", {{Ib}, {__ax}}},
459     /* E8 */
460     {"call", {{Jv}}},
461     {"jmp", {{Jv}}},
462     {"jmp", {{Ap}}},
463     {"jmp", {{Jb}}},
464     {"in", {{__al}, {__dxw}}},
465     {"in", {{__ax}, {__dxw}}},
466     {"out", {{__dxw}, {__al}}},
467     {"out", {{__dxw}, {__ax}}},
468     /* F0 */
469     {0, {{SPECIAL_TYPE_PREFIX}}}, /* lock-prefix */
470     {"smi"},
471     {0, {{SPECIAL_TYPE_PREFIX}}}, /* repnz-prefix */
472     {0, {{SPECIAL_TYPE_PREFIX}}}, /* rep-prefix */
473     {"hlt"},
474     {"cmc"},
475     {0, {{SPECIAL_TYPE_GROUP, GROUP_F6}}},
476     {0, {{SPECIAL_TYPE_GROUP, GROUP_F7}}},
477     /* F8 */
478     {"clc"},
479     {"stc"},
480     {"cli"},
481     {"sti"},
482     {"cld"},
483     {"std"},
484     {0, {{SPECIAL_TYPE_GROUP, GROUP_FE}}},
485     {0, {{SPECIAL_TYPE_GROUP, GROUP_FF}}},
486     };
487    
488     x86opc_insn x86_insns_ext[256] = {
489     /* 00 */
490     {0, {{SPECIAL_TYPE_GROUP, GROUP_EXT_00}}},
491     {0, {{SPECIAL_TYPE_GROUP, GROUP_EXT_01}}},
492     {"lar", {{Gv}, {Ew}}},
493     {"lsl", {{Gv}, {Ew}}},
494     {0},
495     {0},
496     {"clts"},
497     {0},
498     /* 08 */
499     {"invd"},
500     {"wbinvd"},
501     {0},
502     {"ud2"},
503     {0},
504     {"prefetch", {{Eb}}},
505     {"femms"},
506     {0, {{SPECIAL_TYPE_PREFIX}}},
507     /* 10 */
508     {0},
509     {0},
510     {0},
511     {0},
512     {0},
513     {0},
514     {0},
515     {0},
516     /* 18 */
517     {0},
518     {0},
519     {0},
520     {0},
521     {0},
522     {0},
523     {0},
524     {0},
525     /* 20 */
526     {"mov", {{Rd}, {Cd}}},
527     {"mov", {{Rd}, {Dd}}},
528     {"mov", {{Cd}, {Rd}}},
529     {"mov", {{Dd}, {Rd}}},
530     {"mov", {{Rd}, {Td}}},
531     {0},
532     {"mov", {{Td}, {Rd}}},
533     {0},
534     /* 28 */
535     {0},
536     {0},
537     {0},
538     {0},
539     {0},
540     {0},
541     {0},
542     {0},
543     /* 30 */
544     {"wrmsr"},
545     {"rdtsc"},
546     {"rdmsr"},
547     {"rdpmc"},
548     {"sysenter"},
549     {"sysexit"},
550     {0},
551     {0},
552     /* 38 */
553     {0},
554     {0},
555     {0},
556     {0},
557     {0},
558     {0},
559     {0},
560     {0},
561     /* 40 */
562     {"cmovo", {{Gv}, {Ev}}},
563     {"cmovno", {{Gv}, {Ev}}},
564     {"cmovc", {{Gv}, {Ev}}},
565     {"cmovnc", {{Gv}, {Ev}}},
566     {"cmovz", {{Gv}, {Ev}}},
567     {"cmovnz", {{Gv}, {Ev}}},
568     {"cmova", {{Gv}, {Ev}}},
569     {"cmovna", {{Gv}, {Ev}}},
570     /* 48 */
571     {"cmovs", {{Gv}, {Ev}}},
572     {"cmovns", {{Gv}, {Ev}}},
573     {"cmovp", {{Gv}, {Ev}}},
574     {"cmovnp", {{Gv}, {Ev}}},
575     {"cmovl", {{Gv}, {Ev}}},
576     {"cmovnl", {{Gv}, {Ev}}},
577     {"cmovng", {{Gv}, {Ev}}},
578     {"cmovg", {{Gv}, {Ev}}},
579     /* 50 */
580     {0},
581     {0},
582     {0},
583     {0},
584     {0},
585     {0},
586     {0},
587     {0},
588     /* 58 */
589     {0},
590     {0},
591     {0},
592     {0},
593     {0},
594     {0},
595     {0},
596     {0},
597     /* 60 */
598     {"punpcklbw", {{Pq}, {Qd}}},
599     {"punpcklwd", {{Pq}, {Qd}}},
600     {"punpckldq", {{Pq}, {Qd}}},
601     {"packsswb", {{Pq}, {Qd}}},
602     {"pcmpgtb", {{Pq}, {Qd}}},
603     {"pcmpgtw", {{Pq}, {Qd}}},
604     {"pcmpgtd", {{Pq}, {Qd}}},
605     {"packuswb", {{Pq}, {Qd}}},
606     /* 68 */
607     {"punpckhbw", {{Pq}, {Qd}}},
608     {"punpckhwd", {{Pq}, {Qd}}},
609     {"punpckhdq", {{Pq}, {Qd}}},
610     {"packssdw", {{Pq}, {Qd}}},
611     {0},
612     {0},
613     {"movd", {{Pd}, {Ed}}},
614     {"movq", {{Pq}, {Qq}}},
615     /* 70 */
616     {0},
617     {0, {{SPECIAL_TYPE_GROUP, GROUP_EXT_71}}},
618     {0, {{SPECIAL_TYPE_GROUP, GROUP_EXT_72}}},
619     {0, {{SPECIAL_TYPE_GROUP, GROUP_EXT_73}}},
620     {"pcmpeqb", {{Pq}, {Qq}}},
621     {"pcmpeqw", {{Pq}, {Qq}}},
622     {"pcmpewd", {{Pq}, {Qq}}},
623     {"emms"},
624     /* 78 */
625     {0},
626     {0},
627     {0},
628     {0},
629     {0},
630     {0},
631     {"movd", {{Ed}, {Pd}}},
632     {"movq", {{Qq}, {Pq}}},
633     /* 80 */
634     {"jo", {{Jv}}},
635     {"jno", {{Jv}}},
636     {"jc", {{Jv}}},
637     {"jnc", {{Jv}}},
638     {"jz", {{Jv}}},
639     {"jnz", {{Jv}}},
640     {"jna", {{Jv}}},
641     {"ja", {{Jv}}},
642     /* 88 */
643     {"js", {{Jv}}},
644     {"jns", {{Jv}}},
645     {"jpe", {{Jv}}},
646     {"jpo", {{Jv}}},
647     {"jl", {{Jv}}},
648     {"jnl", {{Jv}}},
649     {"jng", {{Jv}}},
650     {"jg", {{Jv}}},
651     /* 90 */
652     {"seto", {{Eb}}},
653     {"setno", {{Eb}}},
654     {"setc", {{Eb}}},
655     {"setnc", {{Eb}}},
656     {"setz", {{Eb}}},
657     {"setnz", {{Eb}}},
658     {"setna", {{Eb}}},
659     {"seta", {{Eb}}},
660     /* 98 */
661     {"sets", {{Eb}}},
662     {"setns", {{Eb}}},
663     {"setpe", {{Eb}}},
664     {"setpo", {{Eb}}},
665     {"setl", {{Eb}}},
666     {"setnl", {{Eb}}},
667     {"setng", {{Eb}}},
668     {"setg", {{Eb}}},
669     /* A0 */
670     {"push", {{__fs}}},
671     {"pop", {{__fs}}},
672     {"cpuid"},
673     {"bt", {{Ev}, {Gv}}},
674     {"shld", {{Ev}, {Gv}, {Ib}}},
675     {"shld", {{Ev}, {Gv}, {__cl}}},
676     {0},
677     {0},
678     /* A8 */
679     {"push", {{__gs}}},
680     {"pop", {{__gs}}},
681     {"rsm"},
682     {"bts", {{Ev}, {Gv}}},
683     {"shrd", {{Ev}, {Gv}, {Ib}}},
684     {"shrd", {{Ev}, {Gv}, {__cl}}},
685     {0},
686     {"imul", {{Gv}, {Ev}}},
687     /* B0 */
688     {"cmpxchg", {{Eb}, {Gb}}},
689     {"cmpxchg", {{Ev}, {Gv}}},
690     {"lss", {{Gv}, {Mp}}},
691     {"btr", {{Ev}, {Gv}}},
692     {"lfs", {{Gv}, {Mp}}},
693     {"lgs", {{Gv}, {Mp}}},
694     {"movzx", {{Gv}, {Eb}}},
695     {"movzx", {{Gv}, {Ew}}},
696     /* B8 */
697     {0},
698     {"ud2"},
699     {0, {{SPECIAL_TYPE_GROUP, GROUP_EXT_BA}}},
700     {"btc", {{Ev}, {Gv}}},
701     {"bsf", {{Gv}, {Ev}}},
702     {"bsr", {{Gv}, {Ev}}},
703     {"movsx", {{Gv}, {Eb}}},
704     {"movsx", {{Gv}, {Ew}}},
705     /* C0 */
706     {"xadd", {{Eb}, {Gb}}},
707     {"xadd", {{Ev}, {Gv}}},
708     {0},
709     {0},
710     {0},
711     {0},
712     {0},
713     {0, {{SPECIAL_TYPE_GROUP, GROUP_EXT_C7}}},
714     /* C8 */
715     {"bswap", {{__axd}}},
716     {"bswap", {{__cxd}}},
717     {"bswap", {{__dxd}}},
718     {"bswap", {{__bxd}}},
719     {"bswap", {{__spd}}},
720     {"bswap", {{__bpd}}},
721     {"bswap", {{__sid}}},
722     {"bswap", {{__did}}},
723     /* D0 */
724     {0},
725     {"psrlw", {{Pq}, {Qq}}},
726     {"psrld", {{Pq}, {Qq}}},
727     {"psrlq", {{Pq}, {Qq}}},
728     {0},
729     {"pmullw", {{Pq}, {Qq}}},
730     {0},
731     {0},
732     /* D8 */
733     {"psubusb", {{Pq}, {Qq}}},
734     {"psubusw", {{Pq}, {Qq}}},
735     {0},
736     {"pand", {{Pq}, {Qq}}},
737     {"paddusb", {{Pq}, {Qq}}},
738     {"paddusw", {{Pq}, {Qq}}},
739     {0},
740     {"pandn", {{Pq}, {Qq}}},
741     /* E0 */
742     {0},
743     {"psraw", {{Pq}, {Qq}}},
744     {"psrad", {{Pq}, {Qq}}},
745     {0},
746     {0},
747     {"pmulhw", {{Pq}, {Qq}}},
748     {0},
749     {0},
750     /* E8 */
751     {"psubsb", {{Pq}, {Qq}}},
752     {"psubsw", {{Pq}, {Qq}}},
753     {0},
754     {"por", {{Pq}, {Qq}}},
755     {"paddsb", {{Pq}, {Qq}}},
756     {"paddsw", {{Pq}, {Qq}}},
757     {0},
758     {"pxor", {{Pq}, {Qq}}},
759     /* F0 */
760     {0},
761     {"psllw", {{Pq}, {Qq}}},
762     {"pslld", {{Pq}, {Qq}}},
763     {"psllq", {{Pq}, {Qq}}},
764     {0},
765     {"pmuladdwd", {{Pq}, {Qq}}},
766     {0},
767     {0},
768     /* F8 */
769     {"psubb", {{Pq}, {Qq}}},
770     {"psubw", {{Pq}, {Qq}}},
771     {"psubq", {{Pq}, {Qq}}},
772     {0},
773     {"paddb", {{Pq}, {Qq}}},
774     {"paddw", {{Pq}, {Qq}}},
775     {"paddq", {{Pq}, {Qq}}},
776     {0}
777     };
778    
779     x86opc_insn x86_group_insns[X86_GROUPS][8] = {
780     /* 0 - GROUP_80 */
781     {
782     {"add", {{Eb}, {Ib}}},
783     {"or", {{Eb}, {Ib}}},
784     {"adc", {{Eb}, {Ib}}},
785     {"sbb", {{Eb}, {Ib}}},
786     {"and", {{Eb}, {Ib}}},
787     {"sub", {{Eb}, {Ib}}},
788     {"xor", {{Eb}, {Ib}}},
789     {"cmp", {{Eb}, {Ib}}}
790     },
791     /* 1 - GROUP_81 */
792     {
793     {"add", {{Ev}, {Iv}}},
794     {"or", {{Ev}, {Iv}}},
795     {"adc", {{Ev}, {Iv}}},
796     {"sbb", {{Ev}, {Iv}}},
797     {"and", {{Ev}, {Iv}}},
798     {"sub", {{Ev}, {Iv}}},
799     {"xor", {{Ev}, {Iv}}},
800     {"cmp", {{Ev}, {Iv}}}
801     },
802     /* 2 - GROUP_83 */
803     {
804     {"add", {{Ev}, {sIbv}}},
805     {"or", {{Ev}, {sIbv}}},
806     {"adc", {{Ev}, {sIbv}}},
807     {"sbb", {{Ev}, {sIbv}}},
808     {"and", {{Ev}, {sIbv}}},
809     {"sub", {{Ev}, {sIbv}}},
810     {"xor", {{Ev}, {sIbv}}},
811     {"cmp", {{Ev}, {sIbv}}}
812     },
813     /* 3 - GROUP_C0 */
814     {
815     {"rol", {{Eb}, {Ib}}},
816     {"ror", {{Eb}, {Ib}}},
817     {"rcl", {{Eb}, {Ib}}},
818     {"rcr", {{Eb}, {Ib}}},
819     {"shl", {{Eb}, {Ib}}},
820     {"shr", {{Eb}, {Ib}}},
821     {"sal", {{Eb}, {Ib}}},
822     {"sar", {{Eb}, {Ib}}}
823     },
824     /* 4 - GROUP_C1 */
825     {
826     {"rol", {{Ev}, {Ib}}},
827     {"ror", {{Ev}, {Ib}}},
828     {"rcl", {{Ev}, {Ib}}},
829     {"rcr", {{Ev}, {Ib}}},
830     {"shl", {{Ev}, {Ib}}},
831     {"shr", {{Ev}, {Ib}}},
832     {"sal", {{Ev}, {Ib}}},
833     {"sar", {{Ev}, {Ib}}}
834     },
835     /* 5 - GROUP_D0 */
836     {
837     {"rol", {{Eb}, {__1}}},
838     {"ror", {{Eb}, {__1}}},
839     {"rcl", {{Eb}, {__1}}},
840     {"rcr", {{Eb}, {__1}}},
841     {"shl", {{Eb}, {__1}}},
842     {"shr", {{Eb}, {__1}}},
843     {"sal", {{Eb}, {__1}}},
844     {"sar", {{Eb}, {__1}}}
845     },
846     /* 6 - GROUP_D1 */
847     {
848     {"rol", {{Ev}, {__1}}},
849     {"ror", {{Ev}, {__1}}},
850     {"rcl", {{Ev}, {__1}}},
851     {"rcr", {{Ev}, {__1}}},
852     {"shl", {{Ev}, {__1}}},
853     {"shr", {{Ev}, {__1}}},
854     {"sal", {{Ev}, {__1}}},
855     {"sar", {{Ev}, {__1}}}
856     },
857     /* 7 - GROUP_D2 */
858     {
859     {"rol", {{Eb}, {__cl}}},
860     {"ror", {{Eb}, {__cl}}},
861     {"rcl", {{Eb}, {__cl}}},
862     {"rcr", {{Eb}, {__cl}}},
863     {"shl", {{Eb}, {__cl}}},
864     {"shr", {{Eb}, {__cl}}},
865     {"sal", {{Eb}, {__cl}}},
866     {"sar", {{Eb}, {__cl}}}
867     },
868     /* 8 - GROUP_D3 */
869     {
870     {"rol", {{Ev}, {__cl}}},
871     {"ror", {{Ev}, {__cl}}},
872     {"rcl", {{Ev}, {__cl}}},
873     {"rcr", {{Ev}, {__cl}}},
874     {"shl", {{Ev}, {__cl}}},
875     {"shr", {{Ev}, {__cl}}},
876     {"sal", {{Ev}, {__cl}}},
877     {"sar", {{Ev}, {__cl}}}
878     },
879     /* 9 - GROUP_F6 */
880     {
881     {"test", {{Eb}, {Ib}}},
882     //{"test", {{Eb}, {Ib}}}, unsure...
883     {0},
884     {"not", {{Eb}}},
885     {"neg", {{Eb}}},
886     {"mul", {{__al}, {Eb}}},
887     {"imul", {{__al}, {Eb}}},
888     {"div", {{__al}, {Eb}}},
889     {"idiv", {{__al}, {Eb}}}
890     },
891     /* 10 - GROUP_F7 */
892     {
893     {"test", {{Ev}, {Iv}}},
894     {"test", {{Ev}, {Iv}}},
895     {"not", {{Ev}}},
896     {"neg", {{Ev}}},
897     {"mul", {{__ax}, {Ev}}},
898     {"imul", {{__ax}, {Ev}}},
899     {"div", {{__ax}, {Ev}}},
900     {"idiv", {{__ax}, {Ev}}}
901     },
902     /* 11 - GROUP_FE */
903     {
904     {"inc", {{Eb}}},
905     {"dec", {{Eb}}},
906     {0},
907     {0},
908     {0},
909     {0},
910     {0},
911     {0}
912     },
913     /* 12 - GROUP_FF */
914     {
915     {"inc", {{Ev}}},
916     {"dec", {{Ev}}},
917     {"call", {{Ev}}},
918     {"call", {{Mp}}},
919     {"jmp", {{Ev}}},
920     {"jmp", {{Mp}}},
921     {"push", {{Ev}}},
922     {0}
923     },
924     /* 13 - GROUP_EXT_00 */
925     {
926     {"sldt", {{Ew}}},
927     {"str", {{Ew}}},
928     {"lldt", {{Ew}}},
929     {"ltr", {{Ew}}},
930     {"verr", {{Ew}}},
931     {"verw", {{Ew}}},
932     {0},
933     {0}
934     },
935     /* 14 - GROUP_EXT_01 */
936     {
937     {"sgdt", {{M}}},
938     {"sidt", {{M}}},
939     {"lgdt", {{M}}},
940     {"lidt", {{M}}},
941     {"smsw", {{Ew}}},
942     {0},
943     {"lmsw", {{Ew}}},
944     {0}
945     },
946     /* 15 - GROUP_EXT_71 */
947     {
948     {0},
949     {0},
950     {"psrlw", {{Pq}, {Ib}}},
951     {0},
952     {"psraw", {{Pq}, {Ib}}},
953     {0},
954     {"psslw", {{Pq}, {Ib}}},
955     {0}
956     },
957     /* 16 - GROUP_EXT_72 */
958     {
959     {0},
960     {0},
961     {"psrld", {{Pq}, {Ib}}},
962     {0},
963     {"psrad", {{Pq}, {Ib}}},
964     {0},
965     {"pssld", {{Pq}, {Ib}}},
966     {0}
967     },
968     /* 17 - GROUP_EXT_73 */
969     {
970     {0},
971     {0},
972     {"psrlq", {{Pq}, {Ib}}},
973     {0},
974     {"psraq", {{Pq}, {Ib}}},
975     {0},
976     {"psslq", {{Pq}, {Ib}}},
977     {0}
978     },
979     /* 18 - GROUP_EXT_BA */
980     {
981     {0},
982     {0},
983     {0},
984     {0},
985     {"bt", {{Ev}, {Ib}}},
986     {"bts", {{Ev}, {Ib}}},
987     {"btr", {{Ev}, {Ib}}},
988     {"btc", {{Ev}, {Ib}}}
989     },
990     /* 19 - GROUP_EXT_C7 */
991     {
992     {0},
993     {"cmpxchg8b", {{Eq}}},
994     {0},
995     {0},
996     {0},
997     {0},
998     {0},
999     {0}
1000     }
1001     /*
1002     ,
1003     / * 20 - GROUP_EXT_AE * /
1004     {
1005     {"fxsave", {{Eb}}},
1006     {"fxrstor", {{Eb}}},
1007     {"ldmxcsr", {{Md}}},
1008     {"stmxcsr", {{Md}}},
1009     {0},
1010     {0},
1011     {0},
1012     {"sfence"}
1013     }*/
1014    
1015     };
1016    
1017     /*
1018     * The ModR/M byte is < 0xC0
1019     */
1020    
1021     x86opc_insn x86_modfloat_group_insns[8][8] = {
1022     /* prefix D8 */
1023     {
1024     {"fadd", {{Ms}}},
1025     {"fmul", {{Ms}}},
1026     {"fcom", {{Ms}}},
1027     {"fcomp", {{Ms}}},
1028     {"fsub", {{Ms}}},
1029     {"fsubr", {{Ms}}},
1030     {"fdiv", {{Ms}}},
1031     {"fdivr", {{Ms}}}
1032     },
1033     /* prefix D9 */
1034     {
1035     {"fld", {{Ms}}},
1036     {0},
1037     {"fst", {{Ms}}},
1038     {"fstp", {{Ms}}},
1039     {"fldenv", {{M}}},
1040     {"fldcw", {{Mw}}},
1041     {"fstenv", {{M}}},
1042     {"fstcw", {{Mw}}}
1043     },
1044     /* prefix DA */
1045     {
1046     {"fiadd", {{Md}}},
1047     {"fimul", {{Md}}},
1048     {"ficom", {{Md}}},
1049     {"ficomp", {{Md}}},
1050     {"fisub", {{Md}}},
1051     {"fisubr", {{Md}}},
1052     {"fidiv", {{Md}}},
1053     {"fidivr", {{Md}}}
1054     },
1055     /* prefix DB */
1056     {
1057     {"fild", {{Md}}},
1058     {"fisttp", {{Md}}},
1059     {"fist", {{Md}}},
1060     {"fistp", {{Md}}},
1061     {0},
1062     {"fld", {{Mt}}},
1063     {0},
1064     {"fstp", {{Mt}}}
1065     },
1066     /* prefix DC */
1067     {
1068     {"fadd", {{Ml}}},
1069     {"fmul", {{Ml}}},
1070     {"fcom", {{Ml}}},
1071     {"fcomp", {{Ml}}},
1072     {"fsub", {{Ml}}},
1073     {"fsubr", {{Ml}}},
1074     {"fdiv", {{Ml}}},
1075     {"fdivr", {{Ml}}}
1076     },
1077     /* prefix DD */
1078     {
1079     {"fld", {{Ml}}},
1080     {0},
1081     {"fst", {{Ml}}},
1082     {"fstp", {{Ml}}},
1083     {"frstor", {{M}}},
1084     {0},
1085     {"fsave", {{M}}},
1086     {"fstsw", {{Mw}}}
1087     },
1088     /* prefix DE */
1089     {
1090     {"fiadd", {{Mw}}},
1091     {"fimul", {{Mw}}},
1092     {"ficom", {{Mw}}},
1093     {"ficomp", {{Mw}}},
1094     {"fisub", {{Mw}}},
1095     {"fisubr", {{Mw}}},
1096     {"fidiv", {{Mw}}},
1097     {"fidivr", {{Mw}}}
1098     },
1099     /* prefix DF */
1100     {
1101     {"fild", {{Mw}}},
1102     {0},
1103     {"fist", {{Mw}}},
1104     {"fistp", {{Mw}}},
1105     {"fbld", {{Ma}}},
1106     {"fild", {{Mq}}},
1107     {"fbstp", {{Ma}}},
1108     {"fistp", {{Mq}}}
1109     }
1110    
1111     };
1112    
1113     x86opc_insn fgroup_12[8] = {
1114     {"fnop"},
1115     {0},
1116     {0},
1117     {0},
1118     {0},
1119     {0},
1120     {0},
1121     {0}
1122     };
1123    
1124     x86opc_insn fgroup_14[8] = {
1125     {"fchs"},
1126     {"fabs"},
1127     {0},
1128     {0},
1129     {"ftst"},
1130     {"fxam"},
1131     {0},
1132     {0}
1133     };
1134    
1135     x86opc_insn fgroup_15[8] = {
1136     {"fld1"},
1137     {"fldl2t"},
1138     {"fldl2e"},
1139     {"fldpi"},
1140     {"fldlg2"},
1141     {"fldln2"},
1142     {"fldz"},
1143     {0}
1144     };
1145    
1146     x86opc_insn fgroup_16[8] = {
1147     {"f2xm1"},
1148     {"fyl2x"},
1149     {"fptan"},
1150     {"fpatan"},
1151     {"fxtract"},
1152     {"fprem1"},
1153     {"fdecstp"},
1154     {"fincstp"}
1155     };
1156    
1157     x86opc_insn fgroup_17[8] = {
1158     {"fprem"},
1159     {"fyl2xp1"},
1160     {"fsqrt"},
1161     {"fsincos"},
1162     {"frndint"},
1163     {"fscale"},
1164     {"fsin"},
1165     {"fcos"}
1166     };
1167    
1168     x86opc_insn fgroup_25[8] = {
1169     {0},
1170     {"fucompp"},
1171     {0},
1172     {0},
1173     {0},
1174     {0},
1175     {0},
1176     {0}
1177     };
1178    
1179     x86opc_insn fgroup_34[8] = {
1180     {0},
1181     {0},
1182     {"fclex"},
1183     {"finit"},
1184     {0},
1185     {0},
1186     {0},
1187     {0}
1188     };
1189    
1190     x86opc_insn fgroup_63[8] = {
1191     {0},
1192     {"fcompp"},
1193     {0},
1194     {0},
1195     {0},
1196     {0},
1197     {0},
1198     {0}
1199     };
1200    
1201     x86opc_insn fgroup_74[8] = {
1202     {"fstsw", {{__axw}}},
1203     {0},
1204     {0},
1205     {0},
1206     {0},
1207     {0},
1208     {0},
1209     {0}
1210     };
1211    
1212     /*
1213     * The ModR/M byte is >= 0xC0
1214     */
1215    
1216     x86opc_finsn x86_float_group_insns[8][8] = {
1217     /* prefix D8 */
1218     {
1219     {0, {"fadd", {{__st}, {Ft}}}},
1220     {0, {"fmul", {{__st}, {Ft}}}},
1221     {0, {"fcom", {{__st}, {Ft}}}},
1222     {0, {"fcomp", {{__st}, {Ft}}}},
1223     {0, {"fsub", {{__st}, {Ft}}}},
1224     {0, {"fsubr", {{__st}, {Ft}}}},
1225     {0, {"fdiv", {{__st}, {Ft}}}},
1226     {0, {"fdivr", {{__st}, {Ft}}}}
1227     },
1228     /* prefix D9 */
1229     {
1230     {0, {"fld", {{__st}, {Ft}}}},
1231     {0, {"fxch", {{__st}, {Ft}}}},
1232     {(x86opc_insn *)&fgroup_12},
1233     {0},
1234     {(x86opc_insn *)&fgroup_14},
1235     {(x86opc_insn *)&fgroup_15},
1236     {(x86opc_insn *)&fgroup_16},
1237     {(x86opc_insn *)&fgroup_17}
1238     },
1239     /* prefix DA */
1240     {
1241     {0, {"fcmovb", {{__st}, {Ft}}}},
1242     {0, {"fcmove", {{__st}, {Ft}}}},
1243     {0, {"fcmovbe", {{__st}, {Ft}}}},
1244     {0, {"fcmovu", {{__st}, {Ft}}}},
1245     {0},
1246     {(x86opc_insn *)&fgroup_25},
1247     {0},
1248     {0}
1249     },
1250     /* prefix DB */
1251     {
1252     {0, {"fcmovnb", {{__st}, {Ft}}}},
1253     {0, {"fcmovne", {{__st}, {Ft}}}},
1254     {0, {"fcmovnbe", {{__st}, {Ft}}}},
1255     {0, {"fcmovnu", {{__st}, {Ft}}}},
1256     {(x86opc_insn*)&fgroup_34},
1257     {0, {"fucomi", {{__st}, {Ft}}}},
1258     {0, {"fcomi", {{__st}, {Ft}}}},
1259     {0}
1260     },
1261     /* prefix DC */
1262     {
1263     {0, {"fadd", {{Ft}, {__st}}}},
1264     {0, {"fmul", {{Ft}, {__st}}}},
1265     {0},
1266     {0},
1267     {0, {"fsubr", {{Ft}, {__st}}}},
1268     {0, {"fsub", {{Ft}, {__st}}}},
1269     {0, {"fdivr", {{Ft}, {__st}}}},
1270     {0, {"fdiv", {{Ft}, {__st}}}}
1271     },
1272     /* prefix DD */
1273     {
1274     {0, {"ffree", {{Ft}}}},
1275     {0},
1276     {0, {"fst", {{Ft}}}},
1277     {0, {"fstp", {{Ft}}}},
1278     {0, {"fucom", {{Ft}, {__st}}}},
1279     {0, {"fucomp", {{Ft}}}},
1280     {0},
1281     {0}
1282     },
1283     /* prefix DE */
1284     {
1285     {0, {"faddp", {{Ft}, {__st}}}},
1286     {0, {"fmulp", {{Ft}, {__st}}}},
1287     {0},
1288     {(x86opc_insn*)&fgroup_63},
1289     {0, {"fsubrp", {{Ft}, {__st}}}},
1290     {0, {"fsubp", {{Ft}, {__st}}}},
1291     {0, {"fdivrp", {{Ft}, {__st}}}},
1292     {0, {"fdivp", {{Ft}, {__st}}}}
1293     },
1294     /* prefix DF */
1295     {
1296     {0, {"ffreep", {{Ft}}}},
1297     {0},
1298     {0},
1299     {0},
1300     {(x86opc_insn*)&fgroup_74},
1301     {0, {"fucomip", {{__st}, {Ft}}}},
1302     {0, {"fcomip", {{__st}, {Ft}}}},
1303     {0}
1304     }
1305    
1306     };

  ViewVC Help
Powered by ViewVC 1.1.26