two_byte_opcodes.isa (4727:8a6b7746df57) two_byte_opcodes.isa (4730:77e3e9b15e7e)
1// Copyright (c) 2007 The Hewlett-Packard Development Company
2// All rights reserved.
3//
4// Redistribution and use of this software in source and binary forms,
5// with or without modification, are permitted provided that the
6// following conditions are met:
7//
8// The software must be used only for Non-Commercial Use which means any
9// use which is NOT directed to receiving any direct monetary
10// compensation for, or commercial advantage from such use. Illustrative
11// examples of non-commercial use are academic research, personal study,
12// teaching, education and corporate research & development.
13// Illustrative examples of commercial use are distributing products for
14// commercial advantage and providing services using the software for
15// commercial advantage.
16//
17// If you wish to use this software or functionality therein that may be
18// covered by patents for commercial use, please contact:
19// Director of Intellectual Property Licensing
20// Office of Strategy and Technology
21// Hewlett-Packard Company
22// 1501 Page Mill Road
23// Palo Alto, California 94304
24//
25// Redistributions of source code must retain the above copyright notice,
26// this list of conditions and the following disclaimer. Redistributions
27// in binary form must reproduce the above copyright notice, this list of
28// conditions and the following disclaimer in the documentation and/or
29// other materials provided with the distribution. Neither the name of
30// the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its
31// contributors may be used to endorse or promote products derived from
32// this software without specific prior written permission. No right of
33// sublicense is granted herewith. Derivatives of the software and
34// output created using the software may be prepared, but only for
35// Non-Commercial Uses. Derivatives of the software may be shared with
36// others provided: (i) the others agree to abide by the list of
37// conditions herein which includes the Non-Commercial Use restrictions;
38// and (ii) such Derivatives of the software include the above copyright
39// notice to acknowledge the contribution from this software where
40// applicable, this list of conditions and the disclaimer below.
41//
42// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
43// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
44// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
45// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
46// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
47// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
48// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
49// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
50// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
51// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
52// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
53//
54// Authors: Gabe Black
55
56////////////////////////////////////////////////////////////////////
57//
58// Decode the two byte opcodes
59//
600x2: decode OPCODE_PREFIXA {
61 0x0F: decode OPCODE_OP_TOP5 {
62 format WarnUnimpl {
63 0x00: decode OPCODE_OP_BOTTOM3 {
64 0x00: group6();
65 0x01: group7();
66 0x02: lar_Gv_Ew();
67 0x03: lsl_Gv_Ew();
68 //sandpile.org doesn't seem to know what this is... ?
69 0x04: loadall_or_reset_or_hang();
70#if FULL_SYSTEM
71 0x05: syscall();
72#else
73 0x05: SyscallInst::syscall('xc->syscall(rax)');
74#endif
75 0x06: clts();
76 //sandpile.org says (AMD) after sysret, so I might want to check
77 //if that means amd64 or AMD machines
78 0x07: loadall_or_sysret();
79 }
80 0x01: decode OPCODE_OP_BOTTOM3 {
81 0x0: invd();
82 0x1: wbinvd();
1// Copyright (c) 2007 The Hewlett-Packard Development Company
2// All rights reserved.
3//
4// Redistribution and use of this software in source and binary forms,
5// with or without modification, are permitted provided that the
6// following conditions are met:
7//
8// The software must be used only for Non-Commercial Use which means any
9// use which is NOT directed to receiving any direct monetary
10// compensation for, or commercial advantage from such use. Illustrative
11// examples of non-commercial use are academic research, personal study,
12// teaching, education and corporate research & development.
13// Illustrative examples of commercial use are distributing products for
14// commercial advantage and providing services using the software for
15// commercial advantage.
16//
17// If you wish to use this software or functionality therein that may be
18// covered by patents for commercial use, please contact:
19// Director of Intellectual Property Licensing
20// Office of Strategy and Technology
21// Hewlett-Packard Company
22// 1501 Page Mill Road
23// Palo Alto, California 94304
24//
25// Redistributions of source code must retain the above copyright notice,
26// this list of conditions and the following disclaimer. Redistributions
27// in binary form must reproduce the above copyright notice, this list of
28// conditions and the following disclaimer in the documentation and/or
29// other materials provided with the distribution. Neither the name of
30// the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its
31// contributors may be used to endorse or promote products derived from
32// this software without specific prior written permission. No right of
33// sublicense is granted herewith. Derivatives of the software and
34// output created using the software may be prepared, but only for
35// Non-Commercial Uses. Derivatives of the software may be shared with
36// others provided: (i) the others agree to abide by the list of
37// conditions herein which includes the Non-Commercial Use restrictions;
38// and (ii) such Derivatives of the software include the above copyright
39// notice to acknowledge the contribution from this software where
40// applicable, this list of conditions and the disclaimer below.
41//
42// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
43// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
44// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
45// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
46// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
47// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
48// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
49// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
50// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
51// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
52// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
53//
54// Authors: Gabe Black
55
56////////////////////////////////////////////////////////////////////
57//
58// Decode the two byte opcodes
59//
600x2: decode OPCODE_PREFIXA {
61 0x0F: decode OPCODE_OP_TOP5 {
62 format WarnUnimpl {
63 0x00: decode OPCODE_OP_BOTTOM3 {
64 0x00: group6();
65 0x01: group7();
66 0x02: lar_Gv_Ew();
67 0x03: lsl_Gv_Ew();
68 //sandpile.org doesn't seem to know what this is... ?
69 0x04: loadall_or_reset_or_hang();
70#if FULL_SYSTEM
71 0x05: syscall();
72#else
73 0x05: SyscallInst::syscall('xc->syscall(rax)');
74#endif
75 0x06: clts();
76 //sandpile.org says (AMD) after sysret, so I might want to check
77 //if that means amd64 or AMD machines
78 0x07: loadall_or_sysret();
79 }
80 0x01: decode OPCODE_OP_BOTTOM3 {
81 0x0: invd();
82 0x1: wbinvd();
83 0x2: This_should_be_an_illegal_instruction();
84 0x3: UD1();
85 0x4: This_should_be_an_illegal_instruction();
83 0x2: Inst::UD2();
84 0x3: UD2();
85 0x4: Inst::UD2();
86 0x5: threednow();
87 0x6: threednow();
88 0x7: threednow();
89 }
90 0x02: decode OPCODE_OP_BOTTOM3 {
91 0x0: holder();
92 0x1: holder();
93 0x2: holder();
94 0x3: holder();
95 0x4: holder();
96 0x5: holder();
97 0x6: holder();
98 0x7: holder();
99 }
100 0x03: decode OPCODE_OP_BOTTOM3 {
101 0x0: group17();
102 0x1: group17();
103 0x2: group17();
104 0x3: group17();
105 0x4: group17();
106 0x5: group17();
107 0x6: group17();
108 0x7: group17();
109 }
110 0x04: decode OPCODE_OP_BOTTOM3 {
111 0x0: holder();
112 0x1: holder();
113 0x2: holder();
114 0x3: holder();
115 0x4: holder();
116 0x5: holder();
117 0x6: holder();
118 0x7: holder();
119 }
120 0x05: decode OPCODE_OP_BOTTOM3 {
121 0x0: holder();
122 0x1: holder();
123 0x2: holder();
124 0x3: holder();
125 0x4: holder();
126 0x5: holder();
127 0x6: holder();
128 0x7: holder();
129 }
130 0x06: decode OPCODE_OP_BOTTOM3 {
131 0x0: wrmsr();
132 0x1: rdtsc();
133 0x2: rdmsr();
134 0x3: rdpmc();
135 0x4: sysenter();
136 0x5: sysexit();
86 0x5: threednow();
87 0x6: threednow();
88 0x7: threednow();
89 }
90 0x02: decode OPCODE_OP_BOTTOM3 {
91 0x0: holder();
92 0x1: holder();
93 0x2: holder();
94 0x3: holder();
95 0x4: holder();
96 0x5: holder();
97 0x6: holder();
98 0x7: holder();
99 }
100 0x03: decode OPCODE_OP_BOTTOM3 {
101 0x0: group17();
102 0x1: group17();
103 0x2: group17();
104 0x3: group17();
105 0x4: group17();
106 0x5: group17();
107 0x6: group17();
108 0x7: group17();
109 }
110 0x04: decode OPCODE_OP_BOTTOM3 {
111 0x0: holder();
112 0x1: holder();
113 0x2: holder();
114 0x3: holder();
115 0x4: holder();
116 0x5: holder();
117 0x6: holder();
118 0x7: holder();
119 }
120 0x05: decode OPCODE_OP_BOTTOM3 {
121 0x0: holder();
122 0x1: holder();
123 0x2: holder();
124 0x3: holder();
125 0x4: holder();
126 0x5: holder();
127 0x6: holder();
128 0x7: holder();
129 }
130 0x06: decode OPCODE_OP_BOTTOM3 {
131 0x0: wrmsr();
132 0x1: rdtsc();
133 0x2: rdmsr();
134 0x3: rdpmc();
135 0x4: sysenter();
136 0x5: sysexit();
137 0x6: This_should_be_an_illegal_instruction();
137 0x6: Inst::UD2();
138 0x7: getsec();
139 }
140 0x07: decode OPCODE_OP_BOTTOM3 {
141 0x0: three_byte_opcode();
142 0x1: three_byte_opcode();
143 0x2: three_byte_opcode();
144 0x3: three_byte_opcode();
145 0x4: three_byte_opcode();
146 0x5: three_byte_opcode();
147 0x6: three_byte_opcode();
148 0x7: three_byte_opcode();
149 }
150 0x08: decode OPCODE_OP_BOTTOM3 {
151 0x0: cmovo_Gv_Ev();
152 0x1: cmovno_Gv_Ev();
153 0x2: cmovb_Gv_Ev();
154 0x3: cmovnb_Gv_Ev();
155 0x4: cmovz_Gv_Ev();
156 0x5: cmovnz_Gv_Ev();
157 0x6: cmovbe_Gv_Ev();
158 0x7: cmovnbe_Gv_Ev();
159 }
160 0x09: decode OPCODE_OP_BOTTOM3 {
161 0x0: cmovs_Gv_Ev();
162 0x1: cmovns_Gv_Ev();
163 0x2: cmovp_Gv_Ev();
164 0x3: cmovnp_Gv_Ev();
165 0x4: cmovl_Gv_Ev();
166 0x5: cmovnl_Gv_Ev();
167 0x6: cmovle_Gv_Ev();
168 0x7: cmovnle_Gv_Ev();
169 }
170 0x0A: decode OPCODE_OP_BOTTOM3 {
171 0x0: holder();
172 0x1: holder();
173 0x2: holder();
174 0x3: holder();
175 0x4: holder();
176 0x5: holder();
177 0x6: holder();
178 0x7: holder();
179 }
180 0x0B: decode OPCODE_OP_BOTTOM3 {
181 0x0: holder();
182 0x1: holder();
183 0x2: holder();
184 0x3: holder();
185 0x4: holder();
186 0x5: holder();
187 0x6: holder();
188 0x7: holder();
189 }
190 0x0C: decode OPCODE_OP_BOTTOM3 {
191 0x0: holder();
192 0x1: holder();
193 0x2: holder();
194 0x3: holder();
195 0x4: holder();
196 0x5: holder();
197 0x6: holder();
198 0x7: holder();
199 }
200 0x0D: decode OPCODE_OP_BOTTOM3 {
201 0x0: holder();
202 0x1: holder();
203 0x2: holder();
204 0x3: holder();
205 0x4: holder();
206 0x5: holder();
207 0x6: holder();
208 0x7: holder();
209 }
210 0x0E: decode OPCODE_OP_BOTTOM3 {
211 0x0: holder();
212 0x1: holder();
213 0x2: holder();
214 0x3: holder();
215 0x4: holder();
216 0x5: holder();
217 0x6: holder();
218 0x7: holder();
219 }
220 0x0F: decode OPCODE_OP_BOTTOM3 {
221 0x0: holder();
222 0x1: holder();
223 0x2: holder();
224 0x3: holder();
225 0x4: holder();
226 0x5: holder();
227 0x6: holder();
228 0x7: holder();
229 }
230 format Inst {
231 0x10: decode OPCODE_OP_BOTTOM3 {
232 0x0: JO(Jz);
233 0x1: JNO(Jz);
234 0x2: JB(Jz);
235 0x3: JNB(Jz);
236 0x4: JZ(Jz);
237 0x5: JNZ(Jz);
238 0x6: JBE(Jz);
239 0x7: JNBE(Jz);
240 }
241 0x11: decode OPCODE_OP_BOTTOM3 {
242 0x0: JS(Jz);
243 0x1: JNS(Jz);
244 0x2: JP(Jz);
245 0x3: JNP(Jz);
246 0x4: JL(Jz);
247 0x5: JNL(Jz);
248 0x6: JLE(Jz);
249 0x7: JNLE(Jz);
250 }
251 }
252 0x12: decode OPCODE_OP_BOTTOM3 {
253 0x0: seto_Eb();
254 0x1: setno_Eb();
255 0x2: setb_Eb();
256 0x3: setnb_Eb();
257 0x4: setz_Eb();
258 0x5: setnz_Eb();
259 0x6: setbe_Eb();
260 0x7: setnbe_Eb();
261 }
262 0x13: decode OPCODE_OP_BOTTOM3 {
263 0x0: sets_Eb();
264 0x1: setns_Eb();
265 0x2: setp_Eb();
266 0x3: setnp_Eb();
267 0x4: setl_Eb();
268 0x5: setnl_Eb();
269 0x6: setle_Eb();
270 0x7: setnle_Eb();
271 }
272 0x14: decode OPCODE_OP_BOTTOM3 {
273 0x0: push_fs();
274 0x1: pop_fs();
275 0x2: cpuid();
276 0x3: bt_Ev_Gv();
277 0x4: shld_Ev_Gv_Ib();
278 0x5: shld_Ev_Gv_rCl();
279 0x6: xbts_and_cmpxchg();
280 0x7: ibts_and_cmpxchg();
281 }
282 0x15: decode OPCODE_OP_BOTTOM3 {
283 0x0: push_gs();
284 0x1: pop_gs();
285 0x2: rsm_smm();
286 0x3: bts_Ev_Gv();
287 0x4: shrd_Ev_Gv_Ib();
288 0x5: shrd_Ev_Gv_rCl();
289 0x6: group16();
290 0x7: Inst::IMUL(Gv,Ev);
291 }
292 0x16: decode OPCODE_OP_BOTTOM3 {
293 0x0: cmpxchg_Eb_Gb();
294 0x1: cmpxchg_Ev_Gv();
295 0x2: lss_Gz_Mp();
296 0x3: btr_Ev_Gv();
297 0x4: lfs_Gz_Mp();
298 0x5: lgs_Gz_Mp();
299 0x6: Inst::MOVZX_B(Gv,Eb);
300 0x7: Inst::MOVZX_W(Gv,Ew);
301 }
302 0x17: decode OPCODE_OP_BOTTOM3 {
303 0x0: jmpe_Jz(); // IA-64?
304 0x1: group11_UD2();
305 0x2: group8_Ev_Ib();
306 0x3: btc_Ev_Gv();
307 0x4: bsf_Gv_Ev();
308 0x5: bsr_Gv_Ev();
309 0x6: Inst::MOVSX_B(Gv,Eb);
310 0x7: Inst::MOVSX_W(Gv,Ew);
311 }
312 0x18: decode OPCODE_OP_BOTTOM3 {
313 0x0: holder();
314 0x1: holder();
315 0x2: holder();
316 0x3: holder();
317 0x4: holder();
318 0x5: holder();
319 0x6: holder();
320 0x7: holder();
321 }
322 0x19: bswap_B();
323 0x1A: decode OPCODE_OP_BOTTOM3 {
324 0x0: holder();
325 0x1: holder();
326 0x2: holder();
327 0x3: holder();
328 0x4: holder();
329 0x5: holder();
330 0x6: holder();
331 0x7: holder();
332 }
333 0x1B: decode OPCODE_OP_BOTTOM3 {
334 0x0: holder();
335 0x1: holder();
336 0x2: holder();
337 0x3: holder();
338 0x4: holder();
339 0x5: holder();
340 0x6: holder();
341 0x7: holder();
342 }
343 0x1C: decode OPCODE_OP_BOTTOM3 {
344 0x0: holder();
345 0x1: holder();
346 0x2: holder();
347 0x3: holder();
348 0x4: holder();
349 0x5: holder();
350 0x6: holder();
351 0x7: holder();
352 }
353 0x1D: decode OPCODE_OP_BOTTOM3 {
354 0x0: holder();
355 0x1: holder();
356 0x2: holder();
357 0x3: holder();
358 0x4: holder();
359 0x5: holder();
360 0x6: holder();
361 0x7: holder();
362 }
363 0x1E: decode OPCODE_OP_BOTTOM3 {
364 0x0: holder();
365 0x1: holder();
366 0x2: holder();
367 0x3: holder();
368 0x4: holder();
369 0x5: holder();
370 0x6: holder();
371 0x7: holder();
372 }
373 0x1F: decode OPCODE_OP_BOTTOM3 {
374 0x0: holder();
375 0x1: holder();
376 0x2: holder();
377 0x3: holder();
378 0x4: holder();
379 0x5: holder();
380 0x6: holder();
381 0x7: holder();
382 }
383 default: FailUnimpl::twoByteOps();
384 }
385 }
386 default: M5InternalError::error(
387 {{"Unexpected first opcode byte in two byte opcode!"}});
388}
138 0x7: getsec();
139 }
140 0x07: decode OPCODE_OP_BOTTOM3 {
141 0x0: three_byte_opcode();
142 0x1: three_byte_opcode();
143 0x2: three_byte_opcode();
144 0x3: three_byte_opcode();
145 0x4: three_byte_opcode();
146 0x5: three_byte_opcode();
147 0x6: three_byte_opcode();
148 0x7: three_byte_opcode();
149 }
150 0x08: decode OPCODE_OP_BOTTOM3 {
151 0x0: cmovo_Gv_Ev();
152 0x1: cmovno_Gv_Ev();
153 0x2: cmovb_Gv_Ev();
154 0x3: cmovnb_Gv_Ev();
155 0x4: cmovz_Gv_Ev();
156 0x5: cmovnz_Gv_Ev();
157 0x6: cmovbe_Gv_Ev();
158 0x7: cmovnbe_Gv_Ev();
159 }
160 0x09: decode OPCODE_OP_BOTTOM3 {
161 0x0: cmovs_Gv_Ev();
162 0x1: cmovns_Gv_Ev();
163 0x2: cmovp_Gv_Ev();
164 0x3: cmovnp_Gv_Ev();
165 0x4: cmovl_Gv_Ev();
166 0x5: cmovnl_Gv_Ev();
167 0x6: cmovle_Gv_Ev();
168 0x7: cmovnle_Gv_Ev();
169 }
170 0x0A: decode OPCODE_OP_BOTTOM3 {
171 0x0: holder();
172 0x1: holder();
173 0x2: holder();
174 0x3: holder();
175 0x4: holder();
176 0x5: holder();
177 0x6: holder();
178 0x7: holder();
179 }
180 0x0B: decode OPCODE_OP_BOTTOM3 {
181 0x0: holder();
182 0x1: holder();
183 0x2: holder();
184 0x3: holder();
185 0x4: holder();
186 0x5: holder();
187 0x6: holder();
188 0x7: holder();
189 }
190 0x0C: decode OPCODE_OP_BOTTOM3 {
191 0x0: holder();
192 0x1: holder();
193 0x2: holder();
194 0x3: holder();
195 0x4: holder();
196 0x5: holder();
197 0x6: holder();
198 0x7: holder();
199 }
200 0x0D: decode OPCODE_OP_BOTTOM3 {
201 0x0: holder();
202 0x1: holder();
203 0x2: holder();
204 0x3: holder();
205 0x4: holder();
206 0x5: holder();
207 0x6: holder();
208 0x7: holder();
209 }
210 0x0E: decode OPCODE_OP_BOTTOM3 {
211 0x0: holder();
212 0x1: holder();
213 0x2: holder();
214 0x3: holder();
215 0x4: holder();
216 0x5: holder();
217 0x6: holder();
218 0x7: holder();
219 }
220 0x0F: decode OPCODE_OP_BOTTOM3 {
221 0x0: holder();
222 0x1: holder();
223 0x2: holder();
224 0x3: holder();
225 0x4: holder();
226 0x5: holder();
227 0x6: holder();
228 0x7: holder();
229 }
230 format Inst {
231 0x10: decode OPCODE_OP_BOTTOM3 {
232 0x0: JO(Jz);
233 0x1: JNO(Jz);
234 0x2: JB(Jz);
235 0x3: JNB(Jz);
236 0x4: JZ(Jz);
237 0x5: JNZ(Jz);
238 0x6: JBE(Jz);
239 0x7: JNBE(Jz);
240 }
241 0x11: decode OPCODE_OP_BOTTOM3 {
242 0x0: JS(Jz);
243 0x1: JNS(Jz);
244 0x2: JP(Jz);
245 0x3: JNP(Jz);
246 0x4: JL(Jz);
247 0x5: JNL(Jz);
248 0x6: JLE(Jz);
249 0x7: JNLE(Jz);
250 }
251 }
252 0x12: decode OPCODE_OP_BOTTOM3 {
253 0x0: seto_Eb();
254 0x1: setno_Eb();
255 0x2: setb_Eb();
256 0x3: setnb_Eb();
257 0x4: setz_Eb();
258 0x5: setnz_Eb();
259 0x6: setbe_Eb();
260 0x7: setnbe_Eb();
261 }
262 0x13: decode OPCODE_OP_BOTTOM3 {
263 0x0: sets_Eb();
264 0x1: setns_Eb();
265 0x2: setp_Eb();
266 0x3: setnp_Eb();
267 0x4: setl_Eb();
268 0x5: setnl_Eb();
269 0x6: setle_Eb();
270 0x7: setnle_Eb();
271 }
272 0x14: decode OPCODE_OP_BOTTOM3 {
273 0x0: push_fs();
274 0x1: pop_fs();
275 0x2: cpuid();
276 0x3: bt_Ev_Gv();
277 0x4: shld_Ev_Gv_Ib();
278 0x5: shld_Ev_Gv_rCl();
279 0x6: xbts_and_cmpxchg();
280 0x7: ibts_and_cmpxchg();
281 }
282 0x15: decode OPCODE_OP_BOTTOM3 {
283 0x0: push_gs();
284 0x1: pop_gs();
285 0x2: rsm_smm();
286 0x3: bts_Ev_Gv();
287 0x4: shrd_Ev_Gv_Ib();
288 0x5: shrd_Ev_Gv_rCl();
289 0x6: group16();
290 0x7: Inst::IMUL(Gv,Ev);
291 }
292 0x16: decode OPCODE_OP_BOTTOM3 {
293 0x0: cmpxchg_Eb_Gb();
294 0x1: cmpxchg_Ev_Gv();
295 0x2: lss_Gz_Mp();
296 0x3: btr_Ev_Gv();
297 0x4: lfs_Gz_Mp();
298 0x5: lgs_Gz_Mp();
299 0x6: Inst::MOVZX_B(Gv,Eb);
300 0x7: Inst::MOVZX_W(Gv,Ew);
301 }
302 0x17: decode OPCODE_OP_BOTTOM3 {
303 0x0: jmpe_Jz(); // IA-64?
304 0x1: group11_UD2();
305 0x2: group8_Ev_Ib();
306 0x3: btc_Ev_Gv();
307 0x4: bsf_Gv_Ev();
308 0x5: bsr_Gv_Ev();
309 0x6: Inst::MOVSX_B(Gv,Eb);
310 0x7: Inst::MOVSX_W(Gv,Ew);
311 }
312 0x18: decode OPCODE_OP_BOTTOM3 {
313 0x0: holder();
314 0x1: holder();
315 0x2: holder();
316 0x3: holder();
317 0x4: holder();
318 0x5: holder();
319 0x6: holder();
320 0x7: holder();
321 }
322 0x19: bswap_B();
323 0x1A: decode OPCODE_OP_BOTTOM3 {
324 0x0: holder();
325 0x1: holder();
326 0x2: holder();
327 0x3: holder();
328 0x4: holder();
329 0x5: holder();
330 0x6: holder();
331 0x7: holder();
332 }
333 0x1B: decode OPCODE_OP_BOTTOM3 {
334 0x0: holder();
335 0x1: holder();
336 0x2: holder();
337 0x3: holder();
338 0x4: holder();
339 0x5: holder();
340 0x6: holder();
341 0x7: holder();
342 }
343 0x1C: decode OPCODE_OP_BOTTOM3 {
344 0x0: holder();
345 0x1: holder();
346 0x2: holder();
347 0x3: holder();
348 0x4: holder();
349 0x5: holder();
350 0x6: holder();
351 0x7: holder();
352 }
353 0x1D: decode OPCODE_OP_BOTTOM3 {
354 0x0: holder();
355 0x1: holder();
356 0x2: holder();
357 0x3: holder();
358 0x4: holder();
359 0x5: holder();
360 0x6: holder();
361 0x7: holder();
362 }
363 0x1E: decode OPCODE_OP_BOTTOM3 {
364 0x0: holder();
365 0x1: holder();
366 0x2: holder();
367 0x3: holder();
368 0x4: holder();
369 0x5: holder();
370 0x6: holder();
371 0x7: holder();
372 }
373 0x1F: decode OPCODE_OP_BOTTOM3 {
374 0x0: holder();
375 0x1: holder();
376 0x2: holder();
377 0x3: holder();
378 0x4: holder();
379 0x5: holder();
380 0x6: holder();
381 0x7: holder();
382 }
383 default: FailUnimpl::twoByteOps();
384 }
385 }
386 default: M5InternalError::error(
387 {{"Unexpected first opcode byte in two byte opcode!"}});
388}