comparison graal/com.oracle.max.asmdis/src/com/sun/max/asm/gen/cisc/ia32/TwoByteOpcodeMap.java @ 3733:e233f5660da4

Added Java files from Maxine project.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Sat, 17 Dec 2011 19:59:18 +0100
parents
children
comparison
equal deleted inserted replaced
3732:3e2e8b8abdaf 3733:e233f5660da4
1 /*
2 * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23 package com.sun.max.asm.gen.cisc.ia32;
24
25 import static com.sun.max.asm.gen.cisc.ia32.IA32ModRMGroup.*;
26 import static com.sun.max.asm.gen.cisc.x86.HexByte.*;
27 import static com.sun.max.asm.gen.cisc.x86.OperandCode.*;
28 import static com.sun.max.asm.ia32.IA32GeneralRegister8.*;
29 import static com.sun.max.asm.x86.SegmentRegister.*;
30
31 import com.sun.max.asm.gen.cisc.x86.*;
32 import com.sun.max.asm.ia32.*;
33 import com.sun.max.lang.*;
34
35 /**
36 */
37 class TwoByteOpcodeMap extends X86InstructionDescriptionCreator {
38
39 private void create_low() {
40 define(_0F, _00, GROUP_6a);
41 define(_0F, _00, GROUP_6b);
42 define(_0F, _01, GROUP_7a);
43 define(_0F, _01, GROUP_7b);
44 define(_0F, _02, "LAR", Gv, Ev); // bug in table, wrongly suggesting Ew
45 define(_0F, _03, "LSL", Gv, Ev); // bug in table, wrongly suggesting Ew
46 define(_0F, _06, "CLTS");
47
48 define(_0F, _10, "MOVUPS", Vps, Wps);
49 define(_0F, _11, "MOVUPS", Wps, Vps);
50 define(_0F, _12, "MOVHLPS", Vps, VRq);
51 define(_0F, _13, "MOVLPS", Mq, Vps);
52 define(_0F, _14, "UNPCKLPS", Vps, Wq);
53 define(_0F, _15, "UNPCKHPS", Vps, Wq);
54 define(_0F, _16, "MOVLHPS", Vps, VRq);
55 define(_0F, _17, "MOVHPS", Mq, Vps);
56
57 define(_66, _0F, _10, "MOVUPD", Vpd, Wpd);
58 define(_66, _0F, _11, "MOVUPD", Wpd, Vpd);
59 define(_66, _0F, _12, "MOVLPD", Vsd, Mq);
60 define(_66, _0F, _13, "MOVLPD", Mq, Vsd);
61 define(_66, _0F, _14, "UNPCKLPD", Vpd, Wq);
62 define(_66, _0F, _15, "UNPCKHPD", Vpd, Wq);
63 define(_66, _0F, _16, "MOVHPD", Vsd, Mq);
64 define(_66, _0F, _17, "MOVHPD", Mq, Vsd);
65
66 define(_F2, _0F, _10, "MOVSD", Vdq, Wsd);
67 define(_F2, _0F, _10, "MOVSD", Vsd, Wsd);
68 define(_F2, _0F, _11, "MOVSD", Wsd, Vsd);
69 define(_F2, _0F, _12, "MOVDDUP", Vpd, Wsd);
70
71 define(_F3, _0F, _10, "MOVSS", Vdq, Wss);
72 define(_F3, _0F, _10, "MOVSS", Vss, Wss);
73 define(_F3, _0F, _11, "MOVSS", Wss, Vss);
74 define(_F3, _0F, _12, "MOVSLDUP", Vps, Wps);
75 define(_F3, _0F, _16, "MOVSHDUP", Vps, Wps);
76
77 define(_0F, _20, "MOV", Rd, Cd);
78 define(_0F, _21, "MOV", Rd, Dd);
79 define(_0F, _22, "MOV", Cd, Rd);
80
81 define(_0F, _20, "MOV", Rd, Cd);
82 define(_0F, _21, "MOV", Rd, Dd);
83 define(_0F, _22, "MOV", Cd, Rd);
84 define(_0F, _23, "MOV", Dd, Rd);
85
86 define(_0F, _30, "WRMSR");
87 define(_0F, _31, "RDTSC");
88 define(_0F, _32, "RDMSR");
89 define(_0F, _33, "RDPMC");
90
91 define(_0F, _40, "CMOVO", Gv, Ev);
92 define(_0F, _41, "CMOVNO", Gv, Ev);
93 define(_0F, _42, "CMOVB", Gv, Ev);
94 define(_0F, _43, "CMOVAE", Gv, Ev);
95 define(_0F, _44, "CMOVE", Gv, Ev);
96 define(_0F, _45, "CMOVNE", Gv, Ev);
97 define(_0F, _46, "CMOVBE", Gv, Ev);
98 define(_0F, _47, "CMOVA", Gv, Ev);
99
100 define(_0F, _50, "MOVMSKPS", Gd, VRps);
101 define(_0F, _51, "SQRTPS", Vps, Wps);
102 define(_0F, _52, "RSQRTPS", Vps, Wps);
103 define(_0F, _53, "RCPPS", Vps, Wps);
104 define(_0F, _54, "ANDPS", Vps, Wps);
105 define(_0F, _55, "ANDNPS", Vps, Wps);
106 define(_0F, _56, "ORPS", Vps, Wps);
107 define(_0F, _57, "XORPS", Vps, Wps);
108
109 define(_66, _0F, _50, "MOVMSKPD", Gd, VRpd);
110 define(_66, _0F, _51, "SQRTPD", Vpd, Wpd);
111 define(_66, _0F, _54, "ANDPD", Vpd, Wpd);
112 define(_66, _0F, _55, "ANDNPD", Vpd, Wpd);
113 define(_66, _0F, _56, "ORPD", Vpd, Wpd);
114 define(_66, _0F, _57, "XORPD", Vpd, Wpd);
115
116 define(_F2, _0F, _51, "SQRTSD", Vsd, Wsd);
117
118 define(_F3, _0F, _51, "SQRTSS", Vss, Wss);
119 define(_F3, _0F, _52, "RSQRTSS", Vss, Wss);
120 define(_F3, _0F, _53, "RCPSS", Vss, Wss);
121
122 define(_0F, _60, "PUNPCKLBW", Pq, Qd);
123 define(_0F, _61, "PUNPCKLWD", Pq, Qd);
124 define(_0F, _62, "PUNPCKLDQ", Pq, Qd);
125
126 define(_0F, _60, "PUNPCKLBW", Pq, Qd);
127 define(_0F, _61, "PUNPCKLWD", Pq, Qd);
128 define(_0F, _62, "PUNPCKLDQ", Pq, Qd);
129 define(_0F, _63, "PACKSSWB", Pq, Qd);
130 define(_0F, _64, "PCMPGTB", Pq, Qd);
131 define(_0F, _65, "PCMPGTW", Pq, Qd);
132 define(_0F, _66, "PCMPGTD", Pq, Qd);
133 define(_0F, _67, "PACKUSWB", Pq, Qd);
134
135 define(_0F, _70, "PSHUFW", Pq, Qd, Ib);
136 define(_0F, _71, GROUP_11);
137 define(_0F, _72, GROUP_12);
138 define(_0F, _73, GROUP_13a);
139 define(_0F, _74, "PCMPEQB", Pq, Qd);
140 define(_0F, _75, "PCMPEQW", Pq, Qd);
141 define(_0F, _76, "PCMPEQD", Pq, Qd);
142 define(_0F, _77, "EMMS");
143
144 define(_66, _0F, _60, "PUNPCKLBW", Vdq, Wq);
145 define(_66, _0F, _61, "PUNPCKLWD", Vdq, Wq);
146 define(_66, _0F, _62, "PUNPCKLDQ", Vdq, Wq);
147 define(_66, _0F, _63, "PACKSSWB", Vdq, Wdq);
148 define(_66, _0F, _64, "PCMPGTB", Vdq, Wdq);
149 define(_66, _0F, _65, "PCMPGTW", Vdq, Wdq);
150 define(_66, _0F, _66, "PCMPGTD", Vdq, Wdq);
151 define(_66, _0F, _67, "PACKUSWB", Vdq, Wdq);
152
153 define(_66, _0F, _73, GROUP_13b);
154 define(_66, _0F, _76, "PCMPEQD", Vdq, Wdq);
155
156 define(_0F, _80, "JO", Jv);
157 define(_0F, _81, "JNO", Jv);
158 define(_0F, _82, "JB", Jv);
159 define(_0F, _83, "JNB", Jv);
160 define(_0F, _84, "JZ", Jv);
161 define(_0F, _85, "JNZ", Jv);
162 define(_0F, _86, "JBE", Jv);
163 define(_0F, _87, "JNBE", Jv);
164
165 define(_0F, _90, "SETO", Eb);
166 define(_0F, _91, "SETNO", Eb);
167 define(_0F, _92, "SETB", Eb);
168 define(_0F, _93, "SETNB", Eb);
169 define(_0F, _94, "SETZ", Eb);
170 define(_0F, _95, "SETNZ", Eb);
171 define(_0F, _96, "SETBE", Eb);
172 define(_0F, _97, "SETNBE", Eb);
173
174 define(_0F, _A0, "PUSH", FS);
175 define(_0F, _A1, "POP", FS);
176 define(_0F, _A2, "CPUID");
177 define(_0F, _A3, "BT", Ev, Gv);
178 define(_0F, _A4, "SHLD", Ev, Gv, Ib);
179 define(_0F, _A5, "SHLD", Ev, Gv, CL);
180 //define(_0F, _A6, "CMPXCHG", Xb, Ts); // invalid opcode or undocumented instruction?
181 //define(_0F, _A7, "CMPXCHG", Ib, Ts); // invalid opcode or undocumented instruction?
182
183 define(_0F, _B0, "CMPXCHG", Eb, Gb);
184 define(_0F, _B1, "CMPXCHG", Ev, Gv);
185 define(_0F, _B2, "LSS", Gv, Mp); // bug in table: no Gv
186 define(_0F, _B3, "BTR", Ev, Gv);
187 define(_0F, _B4, "LFS", Gv, Mp); // bug in table: no Gv
188 define(_0F, _B5, "LGS", Gv, Mp); // bug in table: no Gv
189 define(_0F, _B6, "MOVZXB", Gv, Eb).setExternalName("movzx");
190 define(_0F, _B7, "MOVZXW", Gv, Ew).beNotExternallyTestable(); // gas unnecessarily prepends the operand size prefix 0x66
191
192 define(_0F, _C0, "XADD", Eb, Gb);
193 define(_0F, _C1, "XADD", Ev, Gv);
194 define(_0F, _C2, "CMPPS", Vps, Wps, ICb);
195 define(_0F, _C3, "MOVNTI", Md_q, Gd);
196 define(_0F, _C4, "PINSRW", Pq, Ed, Ib).requireOperandSize(WordWidth.BITS_32); // Ed instead of Ew to mimic intended Gd/Mw
197 define(_0F, _C5, "PEXTRW", Gd, PRq, Ib);
198 define(_0F, _C6, "SHUFPS", Vps, Wps, Ib);
199 define(_0F, _C7, GROUP_9);
200
201 define(_66, _0F, _C2, "CMPPD", Vpd, Wpd, ICb);
202 define(_66, _0F, _C4, "PINSRW", Vdq, Ed, Ib).requireOperandSize(WordWidth.BITS_32); // Ed instead of Ew to mimic intended Gd/Mw
203 define(_66, _0F, _C5, "PEXTRW", Gd, VRdq, Ib);
204 define(_66, _0F, _C6, "SHUFPD", Vpd, Wpd, Ib);
205
206 define(_F2, _0F, _C2, "CMPSD", Vsd, Wsd, ICb);
207
208 define(_F3, _0F, _C2, "CMPSS", Vss, Wss, ICb);
209
210 define(_0F, _C7, GROUP_9);
211
212 define(_0F, _D1, "PSRLW", Pq, Qd);
213 define(_0F, _D2, "PSRLD", Pq, Qd);
214 define(_0F, _D3, "PSRLQ", Pq, Qd);
215 define(_0F, _D5, "PMULLW", Pq, Qd);
216
217 define(_66, _0F, _D0, "ADDSUBPD", Vpd, Wpd);
218 define(_66, _0F, _D1, "PSRLW", Vdq, Wdq);
219 define(_66, _0F, _D2, "PSRLD", Vdq, Wdq);
220 define(_66, _0F, _D3, "PSRLQ", Vdq, Wdq);
221 define(_66, _0F, _D4, "PADDQ", Vdq, Wdq);
222 define(_66, _0F, _D5, "PMULLW", Vdq, Wdq);
223 define(_66, _0F, _D6, "MOVQ", Wq.excludeExternalTestArguments(IA32XMMRegister.ENUMERATOR), Vq); // gas uses F3 0F 7E for reg-reg
224 define(_66, _0F, _D7, "PMOVMSKB", Gd, VRdq);
225
226 define(_F2, _0F, _D6, "MOVDQ2Q", Pq, VRq);
227
228 define(_F3, _0F, _D6, "MOVQ2DQ", Vdq, PRq);
229
230 define(_0F, _E1, "PSRAW", Pq, Qd);
231 define(_0F, _E2, "PSRAD", Pq, Qd);
232 define(_0F, _E5, "PMULHW", Pq, Qd);
233
234 define(_66, _0F, _E0, "PAVGB", Vdq, Wdq);
235 define(_66, _0F, _E1, "PSRAW", Vdq, Wdq);
236 define(_66, _0F, _E2, "PSRAD", Vdq, Wdq);
237 define(_66, _0F, _E3, "PAVGW", Vdq, Wdq);
238 define(_66, _0F, _E4, "PMULHUW", Vdq, Wdq);
239 define(_66, _0F, _E5, "PMULHW", Vdq, Wdq);
240 define(_66, _0F, _E6, "CVTTPD2DQ", Vq, Wpd);
241 define(_66, _0F, _E7, "MVNTDQ", Mdq, Vdq).beNotExternallyTestable(); // gas does not know it
242
243 define(_F2, _0F, _E6, "CVTPD2DQ", Vq, Wpd);
244
245 define(_F3, _0F, _E6, "CVTDQ2PD", Vpd, Wq);
246
247 define(_0F, _F1, "PSLLW", Pq, Qd);
248 define(_0F, _F2, "PSLLD", Pq, Qd);
249 define(_0F, _F3, "PSLLQ", Pq, Qd);
250 define(_0F, _F5, "PMADDWD", Pq, Qd);
251
252 define(_66, _0F, _F1, "PSLLW", Vdq, Wdq);
253 define(_66, _0F, _F2, "PSLLD", Vdq, Wdq);
254 define(_66, _0F, _F3, "PSLLQ", Vdq, Wdq);
255 define(_66, _0F, _F4, "PMULUDQ", Vdq, Wdq);
256 define(_66, _0F, _F5, "PMADDWD", Vdq, Wdq);
257 define(_66, _0F, _F6, "PSADBW", Vdq, Wdq);
258 define(_66, _0F, _F7, "MASKMOVDQU", Vdq, VRdq);
259
260 define(_F2, _0F, _F0, "LDDQU", Vpd, Mdq);
261 }
262
263 private void create_high() {
264 define(_0F, _08, "INVD");
265 define(_0F, _09, "WBINVD");
266 define(_0F, _0B, "UD2");
267
268 define(_0F, _28, "MOVAPS", Vps, Wps);
269 define(_0F, _29, "MOVAPS", Wps, Vps);
270 define(_0F, _2A, "CVTPI2PS", Vps, Qq);
271 define(_0F, _2B, "MOVNTPS", Mdq, Vps);
272 define(_0F, _2C, "CVTTPS2PI", Pq, Wps);
273 define(_0F, _2D, "CVTPS2PI", Pq, Wps);
274 define(_0F, _2E, "UCOMISS", Vss, Wss);
275 define(_0F, _2F, "COMISS", Vps, Wps);
276
277 define(_66, _0F, _28, "MOVAPD", Vpd, Wpd);
278 define(_66, _0F, _29, "MOVAPD", Wpd, Vpd);
279 define(_66, _0F, _2A, "CVTPI2PD", Vpd, Qq);
280 define(_66, _0F, _2B, "MOVNTPD", Mdq, Vpd);
281 define(_66, _0F, _2C, "CVTTPD2PI", Pq, Wpd);
282 define(_66, _0F, _2D, "CVTPD2PI", Pq, Wpd);
283 define(_66, _0F, _2E, "UCOMISD", Vsd, Wsd);
284 define(_66, _0F, _2F, "COMISD", Vpd, Wsd);
285
286 define(_F2, _0F, _2A, "CVTSI2SD", Vsd, Ed);
287 define(_F2, _0F, _2C, "CVTTSD2SI", Gd, Wsd);
288 define(_F2, _0F, _2D, "CVTSD2SI", Gd, Wsd);
289
290 define(_F3, _0F, _2A, "CVTSI2SS", Vss, Ed);
291 define(_F3, _0F, _2C, "CVTTSS2SI", Gd, Wss);
292 define(_F3, _0F, _2D, "CVTSS2SI", Gd, Wss);
293
294 define(_0F, _48, "CMOVS", Gv, Ev);
295 define(_0F, _49, "CMOVNS", Gv, Ev);
296 define(_0F, _4A, "CMOVP", Gv, Ev);
297 define(_0F, _4B, "CMOVNP", Gv, Ev);
298 define(_0F, _4C, "CMOVL", Gv, Ev);
299 define(_0F, _4D, "CMOVGE", Gv, Ev);
300 define(_0F, _4E, "CMOVLE", Gv, Ev);
301 define(_0F, _4F, "CMOVG", Gv, Ev);
302
303 define(_0F, _58, "ADDPS", Vps, Wps);
304 define(_0F, _59, "MULPS", Vps, Wps);
305 define(_0F, _5A, "CVTPS2PD", Vpd, Wps);
306 define(_0F, _5B, "CVTDQ2PS", Vps, Wdq);
307 define(_0F, _5C, "SUBPS", Vps, Wps);
308 define(_0F, _5D, "MINPS", Vps, Wps);
309 define(_0F, _5E, "DIVPS", Vps, Wps);
310 define(_0F, _5F, "MAXPS", Vps, Wps);
311
312 define(_66, _0F, _58, "ADDPD", Vpd, Wpd);
313 define(_66, _0F, _59, "MULPD", Vpd, Wpd);
314 define(_66, _0F, _5A, "CVTPD2PS", Vps, Wpd);
315 define(_66, _0F, _5B, "CVTPS2DQ", Vdq, Wps);
316 define(_66, _0F, _5C, "SUBPD", Vpd, Wpd);
317 define(_66, _0F, _5D, "MINPD", Vpd, Wpd);
318 define(_66, _0F, _5E, "DIVPD", Vpd, Wpd);
319 define(_66, _0F, _5F, "MAXPD", Vpd, Wpd);
320
321 define(_F2, _0F, _58, "ADDSD", Vsd, Wsd);
322 define(_F2, _0F, _59, "MULSD", Vsd, Wsd);
323 define(_F2, _0F, _5A, "CVTSD2SS", Vss, Wsd);
324 define(_F2, _0F, _5C, "SUBSD", Vsd, Wsd);
325 define(_F2, _0F, _5D, "MINSD", Vsd, Wsd);
326 define(_F2, _0F, _5E, "DIVSD", Vsd, Wsd);
327 define(_F2, _0F, _5F, "MAXSD", Vsd, Wsd);
328
329 define(_F3, _0F, _58, "ADDSS", Vss, Wss);
330 define(_F3, _0F, _59, "MULSS", Vss, Wss);
331 define(_F3, _0F, _5A, "CVTSS2SD", Vsd, Wss);
332 define(_F3, _0F, _5B, "CVTTPS2DQ", Vdq, Wps);
333 define(_F3, _0F, _5C, "SUBSS", Vss, Wss);
334 define(_F3, _0F, _5D, "MINSS", Vss, Wss);
335 define(_F3, _0F, _5E, "DIVSS", Vss, Wss);
336 define(_F3, _0F, _5F, "MAXSS", Vss, Wss);
337
338 define(_0F, _68, "PUNPCKHBW", Pq, Qd);
339 define(_0F, _69, "PUNPCKHWD", Pq, Qd);
340 define(_0F, _6A, "PUNPCKHDQ", Pq, Qd);
341 define(_0F, _6B, "PACKSSDW", Pq, Qd);
342 define(_0F, _6E, "MOVD", Pd, Ed);
343 define(_0F, _6F, "MOVQ", Pq, Qq);
344
345 define(_66, _0F, _68, "PUNPCKHBW", Vdq, Wq);
346 define(_66, _0F, _69, "PUNPCKHWD", Vdq, Wq);
347 define(_66, _0F, _6A, "PUNPCKHDQ", Vdq, Wq);
348 define(_66, _0F, _6B, "PACKSSDW", Vdq, Wdq);
349 define(_66, _0F, _6C, "PUNPCKLQDQ", Vdq, Wq);
350 define(_66, _0F, _6D, "PUNPCKHQDQ", Vdq, Wq);
351 define(_66, _0F, _6E, "MOVD", Vdq, Ed).beNotExternallyTestable(); // gas does not feature suffix to distinguish operand width
352 define(_66, _0F, _6F, "MOVDQA", Vdq, Wdq);
353
354 define(_F3, _0F, _6F, "MOVDQU", Vdq, Wdq);
355
356 define(_0F, _7E, "MOVD", Ed, Pd);
357 define(_0F, _7F, "MOVQ", Qq, Pq);
358
359 define(_66, _0F, _7C, "HADDPD", Vpd, Wpd);
360 define(_66, _0F, _7D, "HSUBPD", Vpd, Wpd);
361 define(_66, _0F, _7E, "MOVD", Ed, Vdq).beNotExternallyTestable(); // gas does not feature suffix to distinguish operand width
362 define(_66, _0F, _7F, "MOVDQA", Wdq, Vdq);
363
364 define(_F2, _0F, _7C, "HADDPS", Vps, Wps);
365 define(_F2, _0F, _7D, "HSUBPS", Vps, Wps);
366
367 define(_F3, _0F, _7E, "MOVQ", Vq, Wq);
368 define(_F3, _0F, _7F, "MOVDQU", Wdq, Vdq);
369
370 define(_0F, _88, "JS", Jv);
371 define(_0F, _89, "JNS", Jv);
372 define(_0F, _8A, "JP", Jv);
373 define(_0F, _8B, "JNP", Jv);
374 define(_0F, _8C, "JL", Jv);
375 define(_0F, _8D, "JNL", Jv);
376 define(_0F, _8E, "JLE", Jv);
377 define(_0F, _8F, "JNLE", Jv);
378
379 define(_0F, _98, "SETS", Eb);
380 define(_0F, _99, "SETNS", Eb);
381 define(_0F, _9A, "SETP", Eb);
382 define(_0F, _9B, "SETNP", Eb);
383 define(_0F, _9C, "SETL", Eb);
384 define(_0F, _9D, "SETNL", Eb);
385 define(_0F, _9E, "SETLE", Eb);
386 define(_0F, _9F, "SETNLE", Eb);
387
388 define(_0F, _A8, "PUSH", GS);
389 define(_0F, _A9, "POP", GS);
390 define(_0F, _AA, "RSM");
391 define(_0F, _AB, "BTS", Ev, Gv);
392 define(_0F, _AC, "SHRD", Ev, Gv, Ib);
393 define(_0F, _AD, "SHRD", Ev, Gv, CL);
394 define(_0F, _AE, GROUP_15b, X86TemplateContext.ModCase.MOD_3);
395 define(_0F, _AF, "IMUL", Gv, Ev);
396
397 define(_0F, _B9, GROUP_10);
398 define(_0F, _BA, GROUP_8, Ev, Ib);
399 define(_0F, _BB, "BTC", Ev, Gv);
400 define(_0F, _BC, "BSF", Gv, Ev);
401 define(_0F, _BD, "BSR", Gv, Ev);
402 define(_0F, _BE, "MOVSXB", Gv, Eb).setExternalName("movsx");
403 define(_0F, _BF, "MOVSXW", Gv, Ew).beNotExternallyTestable(); // gas unnecessarily prepends the operand size prefix 0x66
404
405 define(_0F, _C8, "BSWAP", Nd);
406
407 define(_0F, _D8, "PSUBUSB", Pq, Qq);
408 define(_0F, _D9, "PSUBUSW", Pq, Qq);
409 define(_0F, _DB, "PAND", Pq, Qq);
410 define(_0F, _DC, "PADDUSB", Pq, Qq);
411 define(_0F, _DD, "PADDUSW", Pq, Qq);
412 define(_0F, _DF, "PANDN", Pq, Qq);
413
414 define(_66, _0F, _D8, "PSUBUSB", Vdq, Wdq);
415 define(_66, _0F, _D9, "PSUBUSW", Vdq, Wdq);
416 define(_66, _0F, _DA, "PMINUB", Vdq, Wdq);
417 define(_66, _0F, _DB, "PAND", Vdq, Wdq);
418 define(_66, _0F, _DC, "PADDUSB", Vdq, Wdq);
419 define(_66, _0F, _DD, "PADDUSW", Vdq, Wdq);
420 define(_66, _0F, _DE, "PMAXUB", Vdq, Wdq);
421 define(_66, _0F, _DF, "PANDN", Vdq, Wdq);
422
423 define(_0F, _E8, "PSUBSB", Pq, Qq);
424 define(_0F, _E9, "PSUBSW", Pq, Qq);
425 define(_0F, _EB, "POR", Pq, Qq);
426 define(_0F, _EC, "PADDSB", Pq, Qq);
427 define(_0F, _ED, "PADDSW", Pq, Qq);
428 define(_0F, _EF, "PXOR", Pq, Qq);
429
430 define(_66, _0F, _E8, "PSUBSB", Vdq, Wdq);
431 define(_66, _0F, _E9, "PSUBSW", Vdq, Wdq);
432 define(_66, _0F, _EA, "PMINSW", Vdq, Wdq);
433 define(_66, _0F, _EB, "POR", Vdq, Wdq);
434 define(_66, _0F, _EC, "PADDSB", Vdq, Wdq);
435 define(_66, _0F, _ED, "PADDSW", Vdq, Wdq);
436 define(_66, _0F, _EE, "PMAXSW", Vdq, Wdq);
437 define(_66, _0F, _EF, "PXOR", Vdq, Wdq);
438
439 define(_0F, _F8, "PSUBB", Pq, Qq);
440 define(_0F, _F9, "PSUBW", Pq, Qq);
441 define(_0F, _FA, "PSUBD", Pq, Qq);
442 define(_0F, _FC, "PADDB", Pq, Qq);
443 define(_0F, _FD, "PADDW", Pq, Qq);
444 define(_0F, _FE, "PADDD", Pq, Qq);
445
446 define(_66, _0F, _F8, "PSUBB", Vdq, Wdq);
447 define(_66, _0F, _F9, "PSUBW", Vdq, Wdq);
448 define(_66, _0F, _FA, "PSUBD", Vdq, Wdq);
449 define(_66, _0F, _FB, "PSUBQ", Vdq, Wdq);
450 define(_66, _0F, _FC, "PADDB", Vdq, Wdq);
451 define(_66, _0F, _FD, "PADDW", Vdq, Wdq);
452 define(_66, _0F, _FE, "PADDD", Vdq, Wdq);
453 }
454
455 TwoByteOpcodeMap() {
456 super(IA32Assembly.ASSEMBLY);
457 create_low();
458 create_high();
459 }
460 }