1 DEF_ASM_OP0(clc, 0xf8) /* must be first OP0 */
2 DEF_ASM_OP0(cld, 0xfc)
3 DEF_ASM_OP0(cli, 0xfa)
4 DEF_ASM_OP0(clts, 0x0f06)
5 DEF_ASM_OP0(cmc, 0xf5)
6 DEF_ASM_OP0(lahf, 0x9f)
7 DEF_ASM_OP0(sahf, 0x9e)
8 DEF_ASM_OP0(pushfq, 0x9c)
9 DEF_ASM_OP0(popfq, 0x9d)
10 DEF_ASM_OP0(pushf, 0x9c)
11 DEF_ASM_OP0(popf, 0x9d)
12 DEF_ASM_OP0(stc, 0xf9)
13 DEF_ASM_OP0(std, 0xfd)
14 DEF_ASM_OP0(sti, 0xfb)
15 DEF_ASM_OP0(aaa, 0x37)
16 DEF_ASM_OP0(aas, 0x3f)
17 DEF_ASM_OP0(daa, 0x27)
18 DEF_ASM_OP0(das, 0x2f)
19 DEF_ASM_OP0(aad, 0xd50a)
20 DEF_ASM_OP0(aam, 0xd40a)
21 DEF_ASM_OP0(cbw, 0x6698)
22 DEF_ASM_OP0(cwd, 0x6699)
23 DEF_ASM_OP0(cwde, 0x98)
24 DEF_ASM_OP0(cdq, 0x99)
25 DEF_ASM_OP0(cbtw, 0x6698)
26 DEF_ASM_OP0(cwtl, 0x98)
27 DEF_ASM_OP0(cwtd, 0x6699)
28 DEF_ASM_OP0(cltd, 0x99)
29 DEF_ASM_OP0(cqto, 0x4899)
30 DEF_ASM_OP0(int3, 0xcc)
31 DEF_ASM_OP0(into, 0xce)
32 DEF_ASM_OP0(iret, 0xcf)
33 DEF_ASM_OP0(rsm, 0x0faa)
34 DEF_ASM_OP0(hlt, 0xf4)
35 DEF_ASM_OP0(wait, 0x9b)
36 DEF_ASM_OP0(nop, 0x90)
37 DEF_ASM_OP0(pause, 0xf390)
38 DEF_ASM_OP0(xlat, 0xd7)
39
40 /* strings */
41ALT(DEF_ASM_OP0L(cmpsb, 0xa6, 0, OPC_BWLX))
42ALT(DEF_ASM_OP0L(scmpb, 0xa6, 0, OPC_BWLX))
43
44ALT(DEF_ASM_OP0L(insb, 0x6c, 0, OPC_BWL))
45ALT(DEF_ASM_OP0L(outsb, 0x6e, 0, OPC_BWL))
46
47ALT(DEF_ASM_OP0L(lodsb, 0xac, 0, OPC_BWLX))
48ALT(DEF_ASM_OP0L(slodb, 0xac, 0, OPC_BWLX))
49
50ALT(DEF_ASM_OP0L(movsb, 0xa4, 0, OPC_BWLX))
51ALT(DEF_ASM_OP0L(smovb, 0xa4, 0, OPC_BWLX))
52
53ALT(DEF_ASM_OP0L(scasb, 0xae, 0, OPC_BWLX))
54ALT(DEF_ASM_OP0L(sscab, 0xae, 0, OPC_BWLX))
55
56ALT(DEF_ASM_OP0L(stosb, 0xaa, 0, OPC_BWLX))
57ALT(DEF_ASM_OP0L(sstob, 0xaa, 0, OPC_BWLX))
58
59 /* bits */
60
61ALT(DEF_ASM_OP2(bsfw, 0x0fbc, 0, OPC_MODRM | OPC_WLX, OPT_REGW | OPT_EA, OPT_REGW))
62ALT(DEF_ASM_OP2(bsrw, 0x0fbd, 0, OPC_MODRM | OPC_WLX, OPT_REGW | OPT_EA, OPT_REGW))
63
64ALT(DEF_ASM_OP2(btw, 0x0fa3, 0, OPC_MODRM | OPC_WLX, OPT_REGW, OPT_REGW | OPT_EA))
65ALT(DEF_ASM_OP2(btw, 0x0fba, 4, OPC_MODRM | OPC_WLX, OPT_IM8, OPT_REGW | OPT_EA))
66
67ALT(DEF_ASM_OP2(btsw, 0x0fab, 0, OPC_MODRM | OPC_WLX, OPT_REGW, OPT_REGW | OPT_EA))
68ALT(DEF_ASM_OP2(btsw, 0x0fba, 5, OPC_MODRM | OPC_WLX, OPT_IM8, OPT_REGW | OPT_EA))
69
70ALT(DEF_ASM_OP2(btrw, 0x0fb3, 0, OPC_MODRM | OPC_WLX, OPT_REGW, OPT_REGW | OPT_EA))
71ALT(DEF_ASM_OP2(btrw, 0x0fba, 6, OPC_MODRM | OPC_WLX, OPT_IM8, OPT_REGW | OPT_EA))
72
73ALT(DEF_ASM_OP2(btcw, 0x0fbb, 0, OPC_MODRM | OPC_WLX, OPT_REGW, OPT_REGW | OPT_EA))
74ALT(DEF_ASM_OP2(btcw, 0x0fba, 7, OPC_MODRM | OPC_WLX, OPT_IM8, OPT_REGW | OPT_EA))
75
76 /* prefixes */
77 DEF_ASM_OP0(lock, 0xf0)
78 DEF_ASM_OP0(rep, 0xf3)
79 DEF_ASM_OP0(repe, 0xf3)
80 DEF_ASM_OP0(repz, 0xf3)
81 DEF_ASM_OP0(repne, 0xf2)
82 DEF_ASM_OP0(repnz, 0xf2)
83
84 DEF_ASM_OP0(invd, 0x0f08)
85 DEF_ASM_OP0(wbinvd, 0x0f09)
86 DEF_ASM_OP0(cpuid, 0x0fa2)
87 DEF_ASM_OP0(wrmsr, 0x0f30)
88 DEF_ASM_OP0(rdtsc, 0x0f31)
89 DEF_ASM_OP0(rdmsr, 0x0f32)
90 DEF_ASM_OP0(rdpmc, 0x0f33)
91
92 DEF_ASM_OP0(syscall, 0x0f05)
93 DEF_ASM_OP0(sysret, 0x0f07)
94 DEF_ASM_OP0L(sysretq, 0x480f07, 0, 0)
95 DEF_ASM_OP0(ud2, 0x0f0b)
96
97 /* NOTE: we took the same order as gas opcode definition order */
98/* Right now we can't express the fact that 0xa1/0xa3 can't use $eax and a
99 32 bit moffset as operands.
100ALT(DEF_ASM_OP2(movb, 0xa0, 0, OPC_BWLX, OPT_ADDR, OPT_EAX))
101ALT(DEF_ASM_OP2(movb, 0xa2, 0, OPC_BWLX, OPT_EAX, OPT_ADDR)) */
102ALT(DEF_ASM_OP2(movb, 0x88, 0, OPC_MODRM | OPC_BWLX, OPT_REG, OPT_EA | OPT_REG))
103ALT(DEF_ASM_OP2(movb, 0x8a, 0, OPC_MODRM | OPC_BWLX, OPT_EA | OPT_REG, OPT_REG))
104/* The moves are special: the 0xb8 form supports IM64 (the only insn that
105 does) with REG64. It doesn't support IM32 with REG64, it would use
106 the full movabs form (64bit immediate). For IM32->REG64 we prefer
107 the 0xc7 opcode. So disallow all 64bit forms and code the rest by hand. */
108ALT(DEF_ASM_OP2(movb, 0xb0, 0, OPC_REG | OPC_BWLX, OPT_IM, OPT_REG))
109ALT(DEF_ASM_OP2(mov, 0xb8, 0, OPC_REG, OPT_IM64, OPT_REG64))
110ALT(DEF_ASM_OP2(movq, 0xb8, 0, OPC_REG, OPT_IM64, OPT_REG64))
111ALT(DEF_ASM_OP2(movb, 0xc6, 0, OPC_MODRM | OPC_BWLX, OPT_IM, OPT_REG | OPT_EA))
112
113ALT(DEF_ASM_OP2(movw, 0x8c, 0, OPC_MODRM | OPC_WLX, OPT_SEG, OPT_EA | OPT_REG))
114ALT(DEF_ASM_OP2(movw, 0x8e, 0, OPC_MODRM | OPC_WLX, OPT_EA | OPT_REG, OPT_SEG))
115
116ALT(DEF_ASM_OP2(movw, 0x0f20, 0, OPC_MODRM | OPC_WLX, OPT_CR, OPT_REG64))
117ALT(DEF_ASM_OP2(movw, 0x0f21, 0, OPC_MODRM | OPC_WLX, OPT_DB, OPT_REG64))
118ALT(DEF_ASM_OP2(movw, 0x0f22, 0, OPC_MODRM | OPC_WLX, OPT_REG64, OPT_CR))
119ALT(DEF_ASM_OP2(movw, 0x0f23, 0, OPC_MODRM | OPC_WLX, OPT_REG64, OPT_DB))
120
121ALT(DEF_ASM_OP2(movsbw, 0x660fbe, 0, OPC_MODRM, OPT_REG8 | OPT_EA, OPT_REG16))
122ALT(DEF_ASM_OP2(movsbl, 0x0fbe, 0, OPC_MODRM, OPT_REG8 | OPT_EA, OPT_REG32))
123ALT(DEF_ASM_OP2(movsbq, 0x0fbe, 0, OPC_MODRM, OPT_REG8 | OPT_EA, OPT_REGW))
124ALT(DEF_ASM_OP2(movswl, 0x0fbf, 0, OPC_MODRM, OPT_REG16 | OPT_EA, OPT_REG32))
125ALT(DEF_ASM_OP2(movswq, 0x0fbf, 0, OPC_MODRM, OPT_REG16 | OPT_EA, OPT_REG))
126ALT(DEF_ASM_OP2(movslq, 0x63, 0, OPC_MODRM, OPT_REG32 | OPT_EA, OPT_REG))
127ALT(DEF_ASM_OP2(movzbw, 0x0fb6, 0, OPC_MODRM | OPC_WLX, OPT_REG8 | OPT_EA, OPT_REGW))
128ALT(DEF_ASM_OP2(movzwl, 0x0fb7, 0, OPC_MODRM, OPT_REG16 | OPT_EA, OPT_REG32))
129ALT(DEF_ASM_OP2(movzwq, 0x0fb7, 0, OPC_MODRM, OPT_REG16 | OPT_EA, OPT_REG))
130
131ALT(DEF_ASM_OP1(pushq, 0x6a, 0, 0, OPT_IM8S))
132ALT(DEF_ASM_OP1(push, 0x6a, 0, 0, OPT_IM8S))
133ALT(DEF_ASM_OP1(pushw, 0x666a, 0, 0, OPT_IM8S))
134ALT(DEF_ASM_OP1(pushw, 0x50, 0, OPC_REG | OPC_WLX, OPT_REG64))
135ALT(DEF_ASM_OP1(pushw, 0x50, 0, OPC_REG | OPC_WLX, OPT_REG16))
136ALT(DEF_ASM_OP1(pushw, 0xff, 6, OPC_MODRM | OPC_WLX, OPT_REG64 | OPT_EA))
137ALT(DEF_ASM_OP1(pushw, 0x6668, 0, 0, OPT_IM16))
138ALT(DEF_ASM_OP1(pushw, 0x68, 0, OPC_WLX, OPT_IM32))
139ALT(DEF_ASM_OP1(pushw, 0x06, 0, OPC_WLX, OPT_SEG))
140
141ALT(DEF_ASM_OP1(popw, 0x58, 0, OPC_REG | OPC_WLX, OPT_REG64))
142ALT(DEF_ASM_OP1(popw, 0x58, 0, OPC_REG | OPC_WLX, OPT_REG16))
143ALT(DEF_ASM_OP1(popw, 0x8f, 0, OPC_MODRM | OPC_WLX, OPT_REGW | OPT_EA))
144ALT(DEF_ASM_OP1(popw, 0x07, 0, OPC_WLX, OPT_SEG))
145
146ALT(DEF_ASM_OP2(xchgw, 0x90, 0, OPC_REG | OPC_WLX, OPT_REGW, OPT_EAX))
147ALT(DEF_ASM_OP2(xchgw, 0x90, 0, OPC_REG | OPC_WLX, OPT_EAX, OPT_REGW))
148ALT(DEF_ASM_OP2(xchgb, 0x86, 0, OPC_MODRM | OPC_BWLX, OPT_REG, OPT_EA | OPT_REG))
149ALT(DEF_ASM_OP2(xchgb, 0x86, 0, OPC_MODRM | OPC_BWLX, OPT_EA | OPT_REG, OPT_REG))
150
151ALT(DEF_ASM_OP2(inb, 0xe4, 0, OPC_BWL, OPT_IM8, OPT_EAX))
152ALT(DEF_ASM_OP1(inb, 0xe4, 0, OPC_BWL, OPT_IM8))
153ALT(DEF_ASM_OP2(inb, 0xec, 0, OPC_BWL, OPT_DX, OPT_EAX))
154ALT(DEF_ASM_OP1(inb, 0xec, 0, OPC_BWL, OPT_DX))
155
156ALT(DEF_ASM_OP2(outb, 0xe6, 0, OPC_BWL, OPT_EAX, OPT_IM8))
157ALT(DEF_ASM_OP1(outb, 0xe6, 0, OPC_BWL, OPT_IM8))
158ALT(DEF_ASM_OP2(outb, 0xee, 0, OPC_BWL, OPT_EAX, OPT_DX))
159ALT(DEF_ASM_OP1(outb, 0xee, 0, OPC_BWL, OPT_DX))
160
161ALT(DEF_ASM_OP2(leaw, 0x8d, 0, OPC_MODRM | OPC_WLX, OPT_EA, OPT_REG))
162
163ALT(DEF_ASM_OP2(les, 0xc4, 0, OPC_MODRM, OPT_EA, OPT_REG32))
164ALT(DEF_ASM_OP2(lds, 0xc5, 0, OPC_MODRM, OPT_EA, OPT_REG32))
165ALT(DEF_ASM_OP2(lss, 0x0fb2, 0, OPC_MODRM, OPT_EA, OPT_REG32))
166ALT(DEF_ASM_OP2(lfs, 0x0fb4, 0, OPC_MODRM, OPT_EA, OPT_REG32))
167ALT(DEF_ASM_OP2(lgs, 0x0fb5, 0, OPC_MODRM, OPT_EA, OPT_REG32))
168
169 /* arith */
170ALT(DEF_ASM_OP2(addb, 0x00, 0, OPC_ARITH | OPC_MODRM | OPC_BWLX, OPT_REG, OPT_EA | OPT_REG)) /* XXX: use D bit ? */
171ALT(DEF_ASM_OP2(addb, 0x02, 0, OPC_ARITH | OPC_MODRM | OPC_BWLX, OPT_EA | OPT_REG, OPT_REG))
172ALT(DEF_ASM_OP2(addb, 0x04, 0, OPC_ARITH | OPC_BWLX, OPT_IM, OPT_EAX))
173ALT(DEF_ASM_OP2(addw, 0x83, 0, OPC_ARITH | OPC_MODRM | OPC_WLX, OPT_IM8S, OPT_EA | OPT_REGW))
174ALT(DEF_ASM_OP2(addb, 0x80, 0, OPC_ARITH | OPC_MODRM | OPC_BWLX, OPT_IM, OPT_EA | OPT_REG))
175
176ALT(DEF_ASM_OP2(testb, 0x84, 0, OPC_MODRM | OPC_BWLX, OPT_REG, OPT_EA | OPT_REG))
177ALT(DEF_ASM_OP2(testb, 0x84, 0, OPC_MODRM | OPC_BWLX, OPT_EA | OPT_REG, OPT_REG))
178ALT(DEF_ASM_OP2(testb, 0xa8, 0, OPC_BWLX, OPT_IM, OPT_EAX))
179ALT(DEF_ASM_OP2(testb, 0xf6, 0, OPC_MODRM | OPC_BWLX, OPT_IM, OPT_EA | OPT_REG))
180
181ALT(DEF_ASM_OP1(incb, 0xfe, 0, OPC_MODRM | OPC_BWLX, OPT_REG | OPT_EA))
182ALT(DEF_ASM_OP1(decb, 0xfe, 1, OPC_MODRM | OPC_BWLX, OPT_REG | OPT_EA))
183
184ALT(DEF_ASM_OP1(notb, 0xf6, 2, OPC_MODRM | OPC_BWLX, OPT_REG | OPT_EA))
185ALT(DEF_ASM_OP1(negb, 0xf6, 3, OPC_MODRM | OPC_BWLX, OPT_REG | OPT_EA))
186
187ALT(DEF_ASM_OP1(mulb, 0xf6, 4, OPC_MODRM | OPC_BWLX, OPT_REG | OPT_EA))
188ALT(DEF_ASM_OP1(imulb, 0xf6, 5, OPC_MODRM | OPC_BWLX, OPT_REG | OPT_EA))
189
190ALT(DEF_ASM_OP2(imulw, 0x0faf, 0, OPC_MODRM | OPC_WLX, OPT_REG | OPT_EA, OPT_REG))
191ALT(DEF_ASM_OP3(imulw, 0x6b, 0, OPC_MODRM | OPC_WLX, OPT_IM8S, OPT_REGW | OPT_EA, OPT_REGW))
192ALT(DEF_ASM_OP2(imulw, 0x6b, 0, OPC_MODRM | OPC_WLX, OPT_IM8S, OPT_REGW))
193ALT(DEF_ASM_OP3(imulw, 0x69, 0, OPC_MODRM | OPC_WLX, OPT_IMW, OPT_REGW | OPT_EA, OPT_REGW))
194ALT(DEF_ASM_OP2(imulw, 0x69, 0, OPC_MODRM | OPC_WLX, OPT_IMW, OPT_REGW))
195
196ALT(DEF_ASM_OP1(divb, 0xf6, 6, OPC_MODRM | OPC_BWLX, OPT_REG | OPT_EA))
197ALT(DEF_ASM_OP2(divb, 0xf6, 6, OPC_MODRM | OPC_BWLX, OPT_REG | OPT_EA, OPT_EAX))
198ALT(DEF_ASM_OP1(idivb, 0xf6, 7, OPC_MODRM | OPC_BWLX, OPT_REG | OPT_EA))
199ALT(DEF_ASM_OP2(idivb, 0xf6, 7, OPC_MODRM | OPC_BWLX, OPT_REG | OPT_EA, OPT_EAX))
200
201 /* shifts */
202ALT(DEF_ASM_OP2(rolb, 0xc0, 0, OPC_MODRM | OPC_BWLX | OPC_SHIFT, OPT_IM8, OPT_EA | OPT_REG))
203ALT(DEF_ASM_OP2(rolb, 0xd2, 0, OPC_MODRM | OPC_BWLX | OPC_SHIFT, OPT_CL, OPT_EA | OPT_REG))
204ALT(DEF_ASM_OP1(rolb, 0xd0, 0, OPC_MODRM | OPC_BWLX | OPC_SHIFT, OPT_EA | OPT_REG))
205
206ALT(DEF_ASM_OP3(shldw, 0x0fa4, 0, OPC_MODRM | OPC_WLX, OPT_IM8, OPT_REGW, OPT_EA | OPT_REGW))
207ALT(DEF_ASM_OP3(shldw, 0x0fa5, 0, OPC_MODRM | OPC_WLX, OPT_CL, OPT_REGW, OPT_EA | OPT_REGW))
208ALT(DEF_ASM_OP2(shldw, 0x0fa5, 0, OPC_MODRM | OPC_WLX, OPT_REGW, OPT_EA | OPT_REGW))
209ALT(DEF_ASM_OP3(shrdw, 0x0fac, 0, OPC_MODRM | OPC_WLX, OPT_IM8, OPT_REGW, OPT_EA | OPT_REGW))
210ALT(DEF_ASM_OP3(shrdw, 0x0fad, 0, OPC_MODRM | OPC_WLX, OPT_CL, OPT_REGW, OPT_EA | OPT_REGW))
211ALT(DEF_ASM_OP2(shrdw, 0x0fad, 0, OPC_MODRM | OPC_WLX, OPT_REGW, OPT_EA | OPT_REGW))
212
213ALT(DEF_ASM_OP1(call, 0xff, 2, OPC_MODRM, OPT_INDIR))
214ALT(DEF_ASM_OP1(call, 0xe8, 0, 0, OPT_DISP))
215ALT(DEF_ASM_OP1(jmp, 0xff, 4, OPC_MODRM, OPT_INDIR))
216ALT(DEF_ASM_OP1(jmp, 0xeb, 0, 0, OPT_DISP8))
217
218ALT(DEF_ASM_OP1(lcall, 0xff, 3, OPC_MODRM, OPT_EA))
219ALT(DEF_ASM_OP1(ljmp, 0xff, 5, OPC_MODRM, OPT_EA))
220 DEF_ASM_OP1(ljmpw, 0x66ff, 5, OPC_MODRM, OPT_EA)
221 DEF_ASM_OP1(ljmpl, 0xff, 5, OPC_MODRM, OPT_EA)
222
223ALT(DEF_ASM_OP1(int, 0xcd, 0, 0, OPT_IM8))
224ALT(DEF_ASM_OP1(seto, 0x0f90, 0, OPC_MODRM | OPC_TEST, OPT_REG8 | OPT_EA))
225ALT(DEF_ASM_OP1(setob, 0x0f90, 0, OPC_MODRM | OPC_TEST, OPT_REG8 | OPT_EA))
226 DEF_ASM_OP2(enter, 0xc8, 0, 0, OPT_IM16, OPT_IM8)
227 DEF_ASM_OP0(leave, 0xc9)
228 DEF_ASM_OP0(ret, 0xc3)
229 DEF_ASM_OP0(retq, 0xc3)
230ALT(DEF_ASM_OP1(retq, 0xc2, 0, 0, OPT_IM16))
231ALT(DEF_ASM_OP1(ret, 0xc2, 0, 0, OPT_IM16))
232 DEF_ASM_OP0(lret, 0xcb)
233ALT(DEF_ASM_OP1(lret, 0xca, 0, 0, OPT_IM16))
234
235ALT(DEF_ASM_OP1(jo, 0x70, 0, OPC_TEST, OPT_DISP8))
236 DEF_ASM_OP1(loopne, 0xe0, 0, 0, OPT_DISP8)
237 DEF_ASM_OP1(loopnz, 0xe0, 0, 0, OPT_DISP8)
238 DEF_ASM_OP1(loope, 0xe1, 0, 0, OPT_DISP8)
239 DEF_ASM_OP1(loopz, 0xe1, 0, 0, OPT_DISP8)
240 DEF_ASM_OP1(loop, 0xe2, 0, 0, OPT_DISP8)
241 DEF_ASM_OP1(jecxz, 0x67e3, 0, 0, OPT_DISP8)
242
243 /* float */
244 /* specific fcomp handling */
245ALT(DEF_ASM_OP0L(fcomp, 0xd8d9, 0, 0))
246
247ALT(DEF_ASM_OP1(fadd, 0xd8c0, 0, OPC_FARITH | OPC_REG, OPT_ST))
248ALT(DEF_ASM_OP2(fadd, 0xd8c0, 0, OPC_FARITH | OPC_REG, OPT_ST, OPT_ST0))
249ALT(DEF_ASM_OP2(fadd, 0xdcc0, 0, OPC_FARITH | OPC_REG, OPT_ST0, OPT_ST))
250ALT(DEF_ASM_OP2(fmul, 0xdcc8, 0, OPC_FARITH | OPC_REG, OPT_ST0, OPT_ST))
251ALT(DEF_ASM_OP0L(fadd, 0xdec1, 0, OPC_FARITH))
252ALT(DEF_ASM_OP1(faddp, 0xdec0, 0, OPC_FARITH | OPC_REG, OPT_ST))
253ALT(DEF_ASM_OP2(faddp, 0xdec0, 0, OPC_FARITH | OPC_REG, OPT_ST, OPT_ST0))
254ALT(DEF_ASM_OP2(faddp, 0xdec0, 0, OPC_FARITH | OPC_REG, OPT_ST0, OPT_ST))
255ALT(DEF_ASM_OP0L(faddp, 0xdec1, 0, OPC_FARITH))
256ALT(DEF_ASM_OP1(fadds, 0xd8, 0, OPC_FARITH | OPC_MODRM, OPT_EA))
257ALT(DEF_ASM_OP1(fiaddl, 0xda, 0, OPC_FARITH | OPC_MODRM, OPT_EA))
258ALT(DEF_ASM_OP1(faddl, 0xdc, 0, OPC_FARITH | OPC_MODRM, OPT_EA))
259ALT(DEF_ASM_OP1(fiadds, 0xde, 0, OPC_FARITH | OPC_MODRM, OPT_EA))
260
261 DEF_ASM_OP0(fucompp, 0xdae9)
262 DEF_ASM_OP0(ftst, 0xd9e4)
263 DEF_ASM_OP0(fxam, 0xd9e5)
264 DEF_ASM_OP0(fld1, 0xd9e8)
265 DEF_ASM_OP0(fldl2t, 0xd9e9)
266 DEF_ASM_OP0(fldl2e, 0xd9ea)
267 DEF_ASM_OP0(fldpi, 0xd9eb)
268 DEF_ASM_OP0(fldlg2, 0xd9ec)
269 DEF_ASM_OP0(fldln2, 0xd9ed)
270 DEF_ASM_OP0(fldz, 0xd9ee)
271
272 DEF_ASM_OP0(f2xm1, 0xd9f0)
273 DEF_ASM_OP0(fyl2x, 0xd9f1)
274 DEF_ASM_OP0(fptan, 0xd9f2)
275 DEF_ASM_OP0(fpatan, 0xd9f3)
276 DEF_ASM_OP0(fxtract, 0xd9f4)
277 DEF_ASM_OP0(fprem1, 0xd9f5)
278 DEF_ASM_OP0(fdecstp, 0xd9f6)
279 DEF_ASM_OP0(fincstp, 0xd9f7)
280 DEF_ASM_OP0(fprem, 0xd9f8)
281 DEF_ASM_OP0(fyl2xp1, 0xd9f9)
282 DEF_ASM_OP0(fsqrt, 0xd9fa)
283 DEF_ASM_OP0(fsincos, 0xd9fb)
284 DEF_ASM_OP0(frndint, 0xd9fc)
285 DEF_ASM_OP0(fscale, 0xd9fd)
286 DEF_ASM_OP0(fsin, 0xd9fe)
287 DEF_ASM_OP0(fcos, 0xd9ff)
288 DEF_ASM_OP0(fchs, 0xd9e0)
289 DEF_ASM_OP0(fabs, 0xd9e1)
290 DEF_ASM_OP0(fninit, 0xdbe3)
291 DEF_ASM_OP0(fnclex, 0xdbe2)
292 DEF_ASM_OP0(fnop, 0xd9d0)
293 DEF_ASM_OP0(fwait, 0x9b)
294
295 /* fp load */
296 DEF_ASM_OP1(fld, 0xd9c0, 0, OPC_REG, OPT_ST)
297 DEF_ASM_OP1(fldl, 0xd9c0, 0, OPC_REG, OPT_ST)
298 DEF_ASM_OP1(flds, 0xd9, 0, OPC_MODRM, OPT_EA)
299ALT(DEF_ASM_OP1(fldl, 0xdd, 0, OPC_MODRM, OPT_EA))
300 DEF_ASM_OP1(fildl, 0xdb, 0, OPC_MODRM, OPT_EA)
301 DEF_ASM_OP1(fildq, 0xdf, 5, OPC_MODRM, OPT_EA)
302 DEF_ASM_OP1(fildll, 0xdf, 5, OPC_MODRM,OPT_EA)
303 DEF_ASM_OP1(fldt, 0xdb, 5, OPC_MODRM, OPT_EA)
304 DEF_ASM_OP1(fbld, 0xdf, 4, OPC_MODRM, OPT_EA)
305
306 /* fp store */
307 DEF_ASM_OP1(fst, 0xddd0, 0, OPC_REG, OPT_ST)
308 DEF_ASM_OP1(fstl, 0xddd0, 0, OPC_REG, OPT_ST)
309 DEF_ASM_OP1(fsts, 0xd9, 2, OPC_MODRM, OPT_EA)
310 DEF_ASM_OP1(fstps, 0xd9, 3, OPC_MODRM, OPT_EA)
311ALT(DEF_ASM_OP1(fstl, 0xdd, 2, OPC_MODRM, OPT_EA))
312 DEF_ASM_OP1(fstpl, 0xdd, 3, OPC_MODRM, OPT_EA)
313 DEF_ASM_OP1(fist, 0xdf, 2, OPC_MODRM, OPT_EA)
314 DEF_ASM_OP1(fistp, 0xdf, 3, OPC_MODRM, OPT_EA)
315 DEF_ASM_OP1(fistl, 0xdb, 2, OPC_MODRM, OPT_EA)
316 DEF_ASM_OP1(fistpl, 0xdb, 3, OPC_MODRM, OPT_EA)
317
318 DEF_ASM_OP1(fstp, 0xddd8, 0, OPC_REG, OPT_ST)
319 DEF_ASM_OP1(fistpq, 0xdf, 7, OPC_MODRM, OPT_EA)
320 DEF_ASM_OP1(fistpll, 0xdf, 7, OPC_MODRM, OPT_EA)
321 DEF_ASM_OP1(fstpt, 0xdb, 7, OPC_MODRM, OPT_EA)
322 DEF_ASM_OP1(fbstp, 0xdf, 6, OPC_MODRM, OPT_EA)
323
324 /* exchange */
325 DEF_ASM_OP0(fxch, 0xd9c9)
326ALT(DEF_ASM_OP1(fxch, 0xd9c8, 0, OPC_REG, OPT_ST))
327
328 /* misc FPU */
329 DEF_ASM_OP1(fucom, 0xdde0, 0, OPC_REG, OPT_ST )
330 DEF_ASM_OP1(fucomp, 0xdde8, 0, OPC_REG, OPT_ST )
331
332 DEF_ASM_OP0L(finit, 0xdbe3, 0, OPC_FWAIT)
333 DEF_ASM_OP1(fldcw, 0xd9, 5, OPC_MODRM, OPT_EA )
334 DEF_ASM_OP1(fnstcw, 0xd9, 7, OPC_MODRM, OPT_EA )
335 DEF_ASM_OP1(fstcw, 0xd9, 7, OPC_MODRM | OPC_FWAIT, OPT_EA )
336 DEF_ASM_OP0(fnstsw, 0xdfe0)
337ALT(DEF_ASM_OP1(fnstsw, 0xdfe0, 0, 0, OPT_EAX ))
338ALT(DEF_ASM_OP1(fnstsw, 0xdd, 7, OPC_MODRM, OPT_EA ))
339 DEF_ASM_OP1(fstsw, 0xdfe0, 0, OPC_FWAIT, OPT_EAX )
340ALT(DEF_ASM_OP0L(fstsw, 0xdfe0, 0, OPC_FWAIT))
341ALT(DEF_ASM_OP1(fstsw, 0xdd, 7, OPC_MODRM | OPC_FWAIT, OPT_EA ))
342 DEF_ASM_OP0L(fclex, 0xdbe2, 0, OPC_FWAIT)
343 DEF_ASM_OP1(fnstenv, 0xd9, 6, OPC_MODRM, OPT_EA )
344 DEF_ASM_OP1(fstenv, 0xd9, 6, OPC_MODRM | OPC_FWAIT, OPT_EA )
345 DEF_ASM_OP1(fldenv, 0xd9, 4, OPC_MODRM, OPT_EA )
346 DEF_ASM_OP1(fnsave, 0xdd, 6, OPC_MODRM, OPT_EA )
347 DEF_ASM_OP1(fsave, 0xdd, 6, OPC_MODRM | OPC_FWAIT, OPT_EA )
348 DEF_ASM_OP1(frstor, 0xdd, 4, OPC_MODRM, OPT_EA )
349 DEF_ASM_OP1(ffree, 0xddc0, 4, OPC_REG, OPT_ST )
350 DEF_ASM_OP1(ffreep, 0xdfc0, 4, OPC_REG, OPT_ST )
351 DEF_ASM_OP1(fxsave, 0x0fae, 0, OPC_MODRM, OPT_EA )
352 DEF_ASM_OP1(fxrstor, 0x0fae, 1, OPC_MODRM, OPT_EA )
353 /* The *q forms of fxrstor/fxsave use a REX prefix.
354 If the operand would use extended registers we would have to modify
355 it instead of generating a second one. Currently that's no
356 problem with TCC, we don't use extended registers. */
357 DEF_ASM_OP1(fxsaveq, 0x0fae, 0, OPC_MODRM | OPC_48, OPT_EA )
358 DEF_ASM_OP1(fxrstorq, 0x0fae, 1, OPC_MODRM | OPC_48, OPT_EA )
359
360 /* segments */
361 DEF_ASM_OP2(arpl, 0x63, 0, OPC_MODRM, OPT_REG16, OPT_REG16 | OPT_EA)
362ALT(DEF_ASM_OP2(larw, 0x0f02, 0, OPC_MODRM | OPC_WLX, OPT_REG | OPT_EA, OPT_REG))
363 DEF_ASM_OP1(lgdt, 0x0f01, 2, OPC_MODRM, OPT_EA)
364 DEF_ASM_OP1(lgdtq, 0x0f01, 2, OPC_MODRM, OPT_EA)
365 DEF_ASM_OP1(lidt, 0x0f01, 3, OPC_MODRM, OPT_EA)
366 DEF_ASM_OP1(lidtq, 0x0f01, 3, OPC_MODRM, OPT_EA)
367 DEF_ASM_OP1(lldt, 0x0f00, 2, OPC_MODRM, OPT_EA | OPT_REG)
368 DEF_ASM_OP1(lmsw, 0x0f01, 6, OPC_MODRM, OPT_EA | OPT_REG)
369ALT(DEF_ASM_OP2(lslw, 0x0f03, 0, OPC_MODRM | OPC_WLX, OPT_EA | OPT_REG, OPT_REG))
370 DEF_ASM_OP1(ltr, 0x0f00, 3, OPC_MODRM, OPT_EA | OPT_REG16)
371 DEF_ASM_OP1(sgdt, 0x0f01, 0, OPC_MODRM, OPT_EA)
372 DEF_ASM_OP1(sgdtq, 0x0f01, 0, OPC_MODRM, OPT_EA)
373 DEF_ASM_OP1(sidt, 0x0f01, 1, OPC_MODRM, OPT_EA)
374 DEF_ASM_OP1(sidtq, 0x0f01, 1, OPC_MODRM, OPT_EA)
375 DEF_ASM_OP1(sldt, 0x0f00, 0, OPC_MODRM, OPT_REG | OPT_EA)
376 DEF_ASM_OP1(smsw, 0x0f01, 4, OPC_MODRM, OPT_REG | OPT_EA)
377 DEF_ASM_OP1(str, 0x0f00, 1, OPC_MODRM, OPT_REG32 | OPT_EA)
378ALT(DEF_ASM_OP1(str, 0x660f00, 1, OPC_MODRM, OPT_REG16))
379ALT(DEF_ASM_OP1(str, 0x0f00, 1, OPC_MODRM | OPC_48, OPT_REG64))
380 DEF_ASM_OP1(verr, 0x0f00, 4, OPC_MODRM, OPT_REG | OPT_EA)
381 DEF_ASM_OP1(verw, 0x0f00, 5, OPC_MODRM, OPT_REG | OPT_EA)
382 DEF_ASM_OP0L(swapgs, 0x0f01, 7, OPC_MODRM)
383
384 /* 486 */
385 /* bswap can't be applied to 16bit regs */
386 DEF_ASM_OP1(bswap, 0x0fc8, 0, OPC_REG, OPT_REG32 )
387 DEF_ASM_OP1(bswapl, 0x0fc8, 0, OPC_REG, OPT_REG32 )
388 DEF_ASM_OP1(bswapq, 0x0fc8, 0, OPC_REG | OPC_48, OPT_REG64 )
389
390ALT(DEF_ASM_OP2(xaddb, 0x0fc0, 0, OPC_MODRM | OPC_BWLX, OPT_REG, OPT_REG | OPT_EA ))
391ALT(DEF_ASM_OP2(cmpxchgb, 0x0fb0, 0, OPC_MODRM | OPC_BWLX, OPT_REG, OPT_REG | OPT_EA ))
392 DEF_ASM_OP1(invlpg, 0x0f01, 7, OPC_MODRM, OPT_EA )
393
394 /* pentium */
395 DEF_ASM_OP1(cmpxchg8b, 0x0fc7, 1, OPC_MODRM, OPT_EA )
396
397 /* AMD 64 */
398 DEF_ASM_OP1(cmpxchg16b, 0x0fc7, 1, OPC_MODRM | OPC_48, OPT_EA )
399
400 /* pentium pro */
401ALT(DEF_ASM_OP2(cmovo, 0x0f40, 0, OPC_MODRM | OPC_TEST | OPC_WLX, OPT_REGW | OPT_EA, OPT_REGW))
402
403 DEF_ASM_OP2(fcmovb, 0xdac0, 0, OPC_REG, OPT_ST, OPT_ST0 )
404 DEF_ASM_OP2(fcmove, 0xdac8, 0, OPC_REG, OPT_ST, OPT_ST0 )
405 DEF_ASM_OP2(fcmovbe, 0xdad0, 0, OPC_REG, OPT_ST, OPT_ST0 )
406 DEF_ASM_OP2(fcmovu, 0xdad8, 0, OPC_REG, OPT_ST, OPT_ST0 )
407 DEF_ASM_OP2(fcmovnb, 0xdbc0, 0, OPC_REG, OPT_ST, OPT_ST0 )
408 DEF_ASM_OP2(fcmovne, 0xdbc8, 0, OPC_REG, OPT_ST, OPT_ST0 )
409 DEF_ASM_OP2(fcmovnbe, 0xdbd0, 0, OPC_REG, OPT_ST, OPT_ST0 )
410 DEF_ASM_OP2(fcmovnu, 0xdbd8, 0, OPC_REG, OPT_ST, OPT_ST0 )
411
412 DEF_ASM_OP2(fucomi, 0xdbe8, 0, OPC_REG, OPT_ST, OPT_ST0 )
413 DEF_ASM_OP2(fcomi, 0xdbf0, 0, OPC_REG, OPT_ST, OPT_ST0 )
414 DEF_ASM_OP2(fucomip, 0xdfe8, 0, OPC_REG, OPT_ST, OPT_ST0 )
415 DEF_ASM_OP2(fcomip, 0xdff0, 0, OPC_REG, OPT_ST, OPT_ST0 )
416
417 /* mmx */
418 DEF_ASM_OP0(emms, 0x0f77) /* must be last OP0 */
419 DEF_ASM_OP2(movd, 0x0f6e, 0, OPC_MODRM, OPT_EA | OPT_REG32, OPT_MMXSSE )
420 /* movd shouldn't accept REG64, but AMD64 spec uses it for 32 and 64 bit
421 moves, so let's be compatible. */
422ALT(DEF_ASM_OP2(movd, 0x0f6e, 0, OPC_MODRM, OPT_EA | OPT_REG64, OPT_MMXSSE ))
423ALT(DEF_ASM_OP2(movq, 0x0f6e, 0, OPC_MODRM | OPC_48, OPT_REG64, OPT_MMXSSE ))
424ALT(DEF_ASM_OP2(movq, 0x0f6f, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ))
425ALT(DEF_ASM_OP2(movd, 0x0f7e, 0, OPC_MODRM, OPT_MMXSSE, OPT_EA | OPT_REG32 ))
426ALT(DEF_ASM_OP2(movd, 0x0f7e, 0, OPC_MODRM, OPT_MMXSSE, OPT_EA | OPT_REG64 ))
427ALT(DEF_ASM_OP2(movq, 0x0f7f, 0, OPC_MODRM, OPT_MMX, OPT_EA | OPT_MMX ))
428ALT(DEF_ASM_OP2(movq, 0x660fd6, 0, OPC_MODRM, OPT_SSE, OPT_EA | OPT_SSE ))
429ALT(DEF_ASM_OP2(movq, 0xf30f7e, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE ))
430ALT(DEF_ASM_OP2(movq, 0x0f7e, 0, OPC_MODRM, OPT_MMXSSE, OPT_EA | OPT_REG64 ))
431
432 DEF_ASM_OP2(packssdw, 0x0f6b, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
433 DEF_ASM_OP2(packsswb, 0x0f63, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
434 DEF_ASM_OP2(packuswb, 0x0f67, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
435 DEF_ASM_OP2(paddb, 0x0ffc, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
436 DEF_ASM_OP2(paddw, 0x0ffd, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
437 DEF_ASM_OP2(paddd, 0x0ffe, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
438 DEF_ASM_OP2(paddsb, 0x0fec, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
439 DEF_ASM_OP2(paddsw, 0x0fed, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
440 DEF_ASM_OP2(paddusb, 0x0fdc, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
441 DEF_ASM_OP2(paddusw, 0x0fdd, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
442 DEF_ASM_OP2(pand, 0x0fdb, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
443 DEF_ASM_OP2(pandn, 0x0fdf, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
444 DEF_ASM_OP2(pcmpeqb, 0x0f74, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
445 DEF_ASM_OP2(pcmpeqw, 0x0f75, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
446 DEF_ASM_OP2(pcmpeqd, 0x0f76, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
447 DEF_ASM_OP2(pcmpgtb, 0x0f64, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
448 DEF_ASM_OP2(pcmpgtw, 0x0f65, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
449 DEF_ASM_OP2(pcmpgtd, 0x0f66, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
450 DEF_ASM_OP2(pmaddwd, 0x0ff5, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
451 DEF_ASM_OP2(pmulhw, 0x0fe5, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
452 DEF_ASM_OP2(pmullw, 0x0fd5, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
453 DEF_ASM_OP2(por, 0x0feb, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
454 DEF_ASM_OP2(psllw, 0x0ff1, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
455ALT(DEF_ASM_OP2(psllw, 0x0f71, 6, OPC_MODRM, OPT_IM8, OPT_MMXSSE ))
456 DEF_ASM_OP2(pslld, 0x0ff2, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
457ALT(DEF_ASM_OP2(pslld, 0x0f72, 6, OPC_MODRM, OPT_IM8, OPT_MMXSSE ))
458 DEF_ASM_OP2(psllq, 0x0ff3, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
459ALT(DEF_ASM_OP2(psllq, 0x0f73, 6, OPC_MODRM, OPT_IM8, OPT_MMXSSE ))
460 DEF_ASM_OP2(psraw, 0x0fe1, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
461ALT(DEF_ASM_OP2(psraw, 0x0f71, 4, OPC_MODRM, OPT_IM8, OPT_MMXSSE ))
462 DEF_ASM_OP2(psrad, 0x0fe2, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
463ALT(DEF_ASM_OP2(psrad, 0x0f72, 4, OPC_MODRM, OPT_IM8, OPT_MMXSSE ))
464 DEF_ASM_OP2(psrlw, 0x0fd1, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
465ALT(DEF_ASM_OP2(psrlw, 0x0f71, 2, OPC_MODRM, OPT_IM8, OPT_MMXSSE ))
466 DEF_ASM_OP2(psrld, 0x0fd2, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
467ALT(DEF_ASM_OP2(psrld, 0x0f72, 2, OPC_MODRM, OPT_IM8, OPT_MMXSSE ))
468 DEF_ASM_OP2(psrlq, 0x0fd3, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
469ALT(DEF_ASM_OP2(psrlq, 0x0f73, 2, OPC_MODRM, OPT_IM8, OPT_MMXSSE ))
470 DEF_ASM_OP2(psubb, 0x0ff8, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
471 DEF_ASM_OP2(psubw, 0x0ff9, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
472 DEF_ASM_OP2(psubd, 0x0ffa, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
473 DEF_ASM_OP2(psubsb, 0x0fe8, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
474 DEF_ASM_OP2(psubsw, 0x0fe9, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
475 DEF_ASM_OP2(psubusb, 0x0fd8, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
476 DEF_ASM_OP2(psubusw, 0x0fd9, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
477 DEF_ASM_OP2(punpckhbw, 0x0f68, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
478 DEF_ASM_OP2(punpckhwd, 0x0f69, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
479 DEF_ASM_OP2(punpckhdq, 0x0f6a, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
480 DEF_ASM_OP2(punpcklbw, 0x0f60, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
481 DEF_ASM_OP2(punpcklwd, 0x0f61, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
482 DEF_ASM_OP2(punpckldq, 0x0f62, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
483 DEF_ASM_OP2(pxor, 0x0fef, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
484
485 /* sse */
486 DEF_ASM_OP2(movups, 0x0f10, 0, OPC_MODRM, OPT_EA | OPT_REG32, OPT_SSE )
487ALT(DEF_ASM_OP2(movups, 0x0f11, 0, OPC_MODRM, OPT_SSE, OPT_EA | OPT_REG32 ))
488 DEF_ASM_OP2(movaps, 0x0f28, 0, OPC_MODRM, OPT_EA | OPT_REG32, OPT_SSE )
489ALT(DEF_ASM_OP2(movaps, 0x0f29, 0, OPC_MODRM, OPT_SSE, OPT_EA | OPT_REG32 ))
490 DEF_ASM_OP2(movhps, 0x0f16, 0, OPC_MODRM, OPT_EA | OPT_REG32, OPT_SSE )
491ALT(DEF_ASM_OP2(movhps, 0x0f17, 0, OPC_MODRM, OPT_SSE, OPT_EA | OPT_REG32 ))
492 DEF_ASM_OP2(addps, 0x0f58, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE )
493 DEF_ASM_OP2(cvtpi2ps, 0x0f2a, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_SSE )
494 DEF_ASM_OP2(cvtps2pi, 0x0f2d, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_MMX )
495 DEF_ASM_OP2(cvttps2pi, 0x0f2c, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_MMX )
496 DEF_ASM_OP2(divps, 0x0f5e, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE )
497 DEF_ASM_OP2(maxps, 0x0f5f, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE )
498 DEF_ASM_OP2(minps, 0x0f5d, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE )
499 DEF_ASM_OP2(mulps, 0x0f59, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE )
500 DEF_ASM_OP2(pavgb, 0x0fe0, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE )
501 DEF_ASM_OP2(pavgw, 0x0fe3, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE )
502 DEF_ASM_OP2(pmaxsw, 0x0fee, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
503 DEF_ASM_OP2(pmaxub, 0x0fde, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
504 DEF_ASM_OP2(pminsw, 0x0fea, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
505 DEF_ASM_OP2(pminub, 0x0fda, 0, OPC_MODRM, OPT_EA | OPT_MMXSSE, OPT_MMXSSE )
506 DEF_ASM_OP2(rcpss, 0x0f53, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE )
507 DEF_ASM_OP2(rsqrtps, 0x0f52, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE )
508 DEF_ASM_OP2(sqrtps, 0x0f51, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE )
509 DEF_ASM_OP2(subps, 0x0f5c, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE )
510
511 DEF_ASM_OP1(prefetchnta, 0x0f18, 0, OPC_MODRM, OPT_EA)
512 DEF_ASM_OP1(prefetcht0, 0x0f18, 1, OPC_MODRM, OPT_EA)
513 DEF_ASM_OP1(prefetcht1, 0x0f18, 2, OPC_MODRM, OPT_EA)
514 DEF_ASM_OP1(prefetcht2, 0x0f18, 3, OPC_MODRM, OPT_EA)
515 DEF_ASM_OP1(prefetchw, 0x0f0d, 1, OPC_MODRM, OPT_EA)
516 DEF_ASM_OP0L(lfence, 0x0fae, 5, OPC_MODRM)
517 DEF_ASM_OP0L(mfence, 0x0fae, 6, OPC_MODRM)
518 DEF_ASM_OP0L(sfence, 0x0fae, 7, OPC_MODRM)
519 DEF_ASM_OP1(clflush, 0x0fae, 7, OPC_MODRM, OPT_EA)
520#undef ALT
521#undef DEF_ASM_OP0
522#undef DEF_ASM_OP0L
523#undef DEF_ASM_OP1
524#undef DEF_ASM_OP2
525#undef DEF_ASM_OP3
526