Mercurial > hg > truffle
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 } |