two_byte_opcodes.isa revision 4814
14276Sgblack@eecs.umich.edu// Copyright (c) 2007 The Hewlett-Packard Development Company
24276Sgblack@eecs.umich.edu// All rights reserved.
34276Sgblack@eecs.umich.edu//
44276Sgblack@eecs.umich.edu// Redistribution and use of this software in source and binary forms,
54276Sgblack@eecs.umich.edu// with or without modification, are permitted provided that the
64276Sgblack@eecs.umich.edu// following conditions are met:
74276Sgblack@eecs.umich.edu//
84276Sgblack@eecs.umich.edu// The software must be used only for Non-Commercial Use which means any
94276Sgblack@eecs.umich.edu// use which is NOT directed to receiving any direct monetary
104276Sgblack@eecs.umich.edu// compensation for, or commercial advantage from such use.  Illustrative
114276Sgblack@eecs.umich.edu// examples of non-commercial use are academic research, personal study,
124276Sgblack@eecs.umich.edu// teaching, education and corporate research & development.
134276Sgblack@eecs.umich.edu// Illustrative examples of commercial use are distributing products for
144276Sgblack@eecs.umich.edu// commercial advantage and providing services using the software for
154276Sgblack@eecs.umich.edu// commercial advantage.
164276Sgblack@eecs.umich.edu//
174276Sgblack@eecs.umich.edu// If you wish to use this software or functionality therein that may be
184276Sgblack@eecs.umich.edu// covered by patents for commercial use, please contact:
194276Sgblack@eecs.umich.edu//     Director of Intellectual Property Licensing
204276Sgblack@eecs.umich.edu//     Office of Strategy and Technology
214276Sgblack@eecs.umich.edu//     Hewlett-Packard Company
224276Sgblack@eecs.umich.edu//     1501 Page Mill Road
234276Sgblack@eecs.umich.edu//     Palo Alto, California  94304
244276Sgblack@eecs.umich.edu//
254276Sgblack@eecs.umich.edu// Redistributions of source code must retain the above copyright notice,
264276Sgblack@eecs.umich.edu// this list of conditions and the following disclaimer.  Redistributions
274276Sgblack@eecs.umich.edu// in binary form must reproduce the above copyright notice, this list of
284276Sgblack@eecs.umich.edu// conditions and the following disclaimer in the documentation and/or
294276Sgblack@eecs.umich.edu// other materials provided with the distribution.  Neither the name of
304276Sgblack@eecs.umich.edu// the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its
314276Sgblack@eecs.umich.edu// contributors may be used to endorse or promote products derived from
324276Sgblack@eecs.umich.edu// this software without specific prior written permission.  No right of
334276Sgblack@eecs.umich.edu// sublicense is granted herewith.  Derivatives of the software and
344276Sgblack@eecs.umich.edu// output created using the software may be prepared, but only for
354276Sgblack@eecs.umich.edu// Non-Commercial Uses.  Derivatives of the software may be shared with
364276Sgblack@eecs.umich.edu// others provided: (i) the others agree to abide by the list of
374276Sgblack@eecs.umich.edu// conditions herein which includes the Non-Commercial Use restrictions;
384276Sgblack@eecs.umich.edu// and (ii) such Derivatives of the software include the above copyright
394276Sgblack@eecs.umich.edu// notice to acknowledge the contribution from this software where
404276Sgblack@eecs.umich.edu// applicable, this list of conditions and the disclaimer below.
414276Sgblack@eecs.umich.edu//
424276Sgblack@eecs.umich.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
434276Sgblack@eecs.umich.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
444276Sgblack@eecs.umich.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
454276Sgblack@eecs.umich.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
464276Sgblack@eecs.umich.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
474276Sgblack@eecs.umich.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
484276Sgblack@eecs.umich.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
494276Sgblack@eecs.umich.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
504276Sgblack@eecs.umich.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
514276Sgblack@eecs.umich.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
524276Sgblack@eecs.umich.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
534276Sgblack@eecs.umich.edu//
544276Sgblack@eecs.umich.edu// Authors: Gabe Black
554276Sgblack@eecs.umich.edu
564276Sgblack@eecs.umich.edu////////////////////////////////////////////////////////////////////
574276Sgblack@eecs.umich.edu//
584276Sgblack@eecs.umich.edu// Decode the two byte opcodes
594276Sgblack@eecs.umich.edu//
604276Sgblack@eecs.umich.edu0x2: decode OPCODE_PREFIXA {
614711Sgblack@eecs.umich.edu    0x0F: decode OPCODE_OP_TOP5 {
624276Sgblack@eecs.umich.edu        format WarnUnimpl {
634276Sgblack@eecs.umich.edu            0x00: decode OPCODE_OP_BOTTOM3 {
644276Sgblack@eecs.umich.edu                0x00: group6();
654276Sgblack@eecs.umich.edu                0x01: group7();
664276Sgblack@eecs.umich.edu                0x02: lar_Gv_Ew();
674276Sgblack@eecs.umich.edu                0x03: lsl_Gv_Ew();
684276Sgblack@eecs.umich.edu                //sandpile.org doesn't seem to know what this is... ?
694276Sgblack@eecs.umich.edu                0x04: loadall_or_reset_or_hang();
704712Sgblack@eecs.umich.edu#if FULL_SYSTEM
714711Sgblack@eecs.umich.edu                0x05: syscall();
724712Sgblack@eecs.umich.edu#else
734712Sgblack@eecs.umich.edu                0x05: SyscallInst::syscall('xc->syscall(rax)');
744712Sgblack@eecs.umich.edu#endif
754276Sgblack@eecs.umich.edu                0x06: clts();
764276Sgblack@eecs.umich.edu                //sandpile.org says (AMD) after sysret, so I might want to check
774276Sgblack@eecs.umich.edu                //if that means amd64 or AMD machines
784276Sgblack@eecs.umich.edu                0x07: loadall_or_sysret();
794276Sgblack@eecs.umich.edu            }
804276Sgblack@eecs.umich.edu            0x01: decode OPCODE_OP_BOTTOM3 {
814712Sgblack@eecs.umich.edu                0x0: invd();
824712Sgblack@eecs.umich.edu                0x1: wbinvd();
834730Sgblack@eecs.umich.edu                0x2: Inst::UD2();
844760Sgblack@eecs.umich.edu                0x3: Inst::UD2();
854730Sgblack@eecs.umich.edu                0x4: Inst::UD2();
864712Sgblack@eecs.umich.edu                0x5: threednow();
874712Sgblack@eecs.umich.edu                0x6: threednow();
884712Sgblack@eecs.umich.edu                0x7: threednow();
894276Sgblack@eecs.umich.edu            }
904760Sgblack@eecs.umich.edu            0x02: decode LEGACY_DECODEVAL {
914760Sgblack@eecs.umich.edu                // no prefix
924760Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
934760Sgblack@eecs.umich.edu                    0x0: holder();
944760Sgblack@eecs.umich.edu                    0x1: holder();
954760Sgblack@eecs.umich.edu                    0x2: holder();
964760Sgblack@eecs.umich.edu                    0x3: holder();
974760Sgblack@eecs.umich.edu                    0x4: holder();
984760Sgblack@eecs.umich.edu                    0x5: holder();
994760Sgblack@eecs.umich.edu                    0x6: holder();
1004760Sgblack@eecs.umich.edu                    0x7: holder();
1014760Sgblack@eecs.umich.edu                }
1024760Sgblack@eecs.umich.edu                // repe (0xF3)
1034760Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
1044760Sgblack@eecs.umich.edu                    0x0: holder();
1054760Sgblack@eecs.umich.edu                    0x1: holder();
1064760Sgblack@eecs.umich.edu                    0x2: holder();
1074760Sgblack@eecs.umich.edu                    0x3: holder();
1084760Sgblack@eecs.umich.edu                    0x4: holder();
1094760Sgblack@eecs.umich.edu                    0x5: holder();
1104760Sgblack@eecs.umich.edu                    0x6: holder();
1114760Sgblack@eecs.umich.edu                    0x7: holder();
1124760Sgblack@eecs.umich.edu                }
1134760Sgblack@eecs.umich.edu                // operand size (0x66)
1144760Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
1154760Sgblack@eecs.umich.edu                    0x0: holder();
1164760Sgblack@eecs.umich.edu                    0x1: holder();
1174760Sgblack@eecs.umich.edu                    0x2: holder();
1184760Sgblack@eecs.umich.edu                    0x3: holder();
1194760Sgblack@eecs.umich.edu                    0x4: holder();
1204760Sgblack@eecs.umich.edu                    0x5: holder();
1214760Sgblack@eecs.umich.edu                    0x6: holder();
1224760Sgblack@eecs.umich.edu                    0x7: holder();
1234760Sgblack@eecs.umich.edu                }
1244760Sgblack@eecs.umich.edu                // repne (0xF2)
1254760Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
1264760Sgblack@eecs.umich.edu                    0x0: holder();
1274760Sgblack@eecs.umich.edu                    0x1: holder();
1284760Sgblack@eecs.umich.edu                    0x2: holder();
1294760Sgblack@eecs.umich.edu                    0x3: holder();
1304760Sgblack@eecs.umich.edu                    0x4: holder();
1314760Sgblack@eecs.umich.edu                    0x5: holder();
1324760Sgblack@eecs.umich.edu                    0x6: holder();
1334760Sgblack@eecs.umich.edu                    0x7: holder();
1344760Sgblack@eecs.umich.edu                }
1354760Sgblack@eecs.umich.edu                default: Inst::UD2();
1364276Sgblack@eecs.umich.edu            }
1374276Sgblack@eecs.umich.edu            0x03: decode OPCODE_OP_BOTTOM3 {
1384712Sgblack@eecs.umich.edu                0x0: group17();
1394712Sgblack@eecs.umich.edu                0x1: group17();
1404712Sgblack@eecs.umich.edu                0x2: group17();
1414712Sgblack@eecs.umich.edu                0x3: group17();
1424712Sgblack@eecs.umich.edu                0x4: group17();
1434712Sgblack@eecs.umich.edu                0x5: group17();
1444712Sgblack@eecs.umich.edu                0x6: group17();
1454712Sgblack@eecs.umich.edu                0x7: group17();
1464276Sgblack@eecs.umich.edu            }
1474276Sgblack@eecs.umich.edu            0x04: decode OPCODE_OP_BOTTOM3 {
1484276Sgblack@eecs.umich.edu                0x0: holder();
1494276Sgblack@eecs.umich.edu                0x1: holder();
1504276Sgblack@eecs.umich.edu                0x2: holder();
1514276Sgblack@eecs.umich.edu                0x3: holder();
1524276Sgblack@eecs.umich.edu                0x4: holder();
1534276Sgblack@eecs.umich.edu                0x5: holder();
1544276Sgblack@eecs.umich.edu                0x6: holder();
1554276Sgblack@eecs.umich.edu                0x7: holder();
1564276Sgblack@eecs.umich.edu            }
1574276Sgblack@eecs.umich.edu            0x05: decode OPCODE_OP_BOTTOM3 {
1584276Sgblack@eecs.umich.edu                0x0: holder();
1594276Sgblack@eecs.umich.edu                0x1: holder();
1604276Sgblack@eecs.umich.edu                0x2: holder();
1614276Sgblack@eecs.umich.edu                0x3: holder();
1624276Sgblack@eecs.umich.edu                0x4: holder();
1634276Sgblack@eecs.umich.edu                0x5: holder();
1644276Sgblack@eecs.umich.edu                0x6: holder();
1654276Sgblack@eecs.umich.edu                0x7: holder();
1664276Sgblack@eecs.umich.edu            }
1674276Sgblack@eecs.umich.edu            0x06: decode OPCODE_OP_BOTTOM3 {
1684712Sgblack@eecs.umich.edu                0x0: wrmsr();
1694712Sgblack@eecs.umich.edu                0x1: rdtsc();
1704712Sgblack@eecs.umich.edu                0x2: rdmsr();
1714712Sgblack@eecs.umich.edu                0x3: rdpmc();
1724712Sgblack@eecs.umich.edu                0x4: sysenter();
1734712Sgblack@eecs.umich.edu                0x5: sysexit();
1744730Sgblack@eecs.umich.edu                0x6: Inst::UD2();
1754712Sgblack@eecs.umich.edu                0x7: getsec();
1764276Sgblack@eecs.umich.edu            }
1774276Sgblack@eecs.umich.edu            0x07: decode OPCODE_OP_BOTTOM3 {
1784712Sgblack@eecs.umich.edu                0x0: three_byte_opcode();
1794712Sgblack@eecs.umich.edu                0x1: three_byte_opcode();
1804712Sgblack@eecs.umich.edu                0x2: three_byte_opcode();
1814712Sgblack@eecs.umich.edu                0x3: three_byte_opcode();
1824712Sgblack@eecs.umich.edu                0x4: three_byte_opcode();
1834712Sgblack@eecs.umich.edu                0x5: three_byte_opcode();
1844712Sgblack@eecs.umich.edu                0x6: three_byte_opcode();
1854712Sgblack@eecs.umich.edu                0x7: three_byte_opcode();
1864276Sgblack@eecs.umich.edu            }
1874760Sgblack@eecs.umich.edu            format Inst {
1884760Sgblack@eecs.umich.edu                0x08: decode OPCODE_OP_BOTTOM3 {
1894760Sgblack@eecs.umich.edu                    0x0: CMOVO(Gv,Ev);
1904760Sgblack@eecs.umich.edu                    0x1: CMOVNO(Gv,Ev);
1914760Sgblack@eecs.umich.edu                    0x2: CMOVB(Gv,Ev);
1924760Sgblack@eecs.umich.edu                    0x3: CMOVNB(Gv,Ev);
1934760Sgblack@eecs.umich.edu                    0x4: CMOVZ(Gv,Ev);
1944760Sgblack@eecs.umich.edu                    0x5: CMOVNZ(Gv,Ev);
1954760Sgblack@eecs.umich.edu                    0x6: CMOVBE(Gv,Ev);
1964760Sgblack@eecs.umich.edu                    0x7: CMOVNBE(Gv,Ev);
1974760Sgblack@eecs.umich.edu                }
1984760Sgblack@eecs.umich.edu                0x09: decode OPCODE_OP_BOTTOM3 {
1994760Sgblack@eecs.umich.edu                    0x0: CMOVS(Gv,Ev);
2004760Sgblack@eecs.umich.edu                    0x1: CMOVNS(Gv,Ev);
2014760Sgblack@eecs.umich.edu                    0x2: CMOVP(Gv,Ev);
2024760Sgblack@eecs.umich.edu                    0x3: CMOVNP(Gv,Ev);
2034760Sgblack@eecs.umich.edu                    0x4: CMOVL(Gv,Ev);
2044760Sgblack@eecs.umich.edu                    0x5: CMOVNL(Gv,Ev);
2054760Sgblack@eecs.umich.edu                    0x6: CMOVLE(Gv,Ev);
2064760Sgblack@eecs.umich.edu                    0x7: CMOVNLE(Gv,Ev);
2074760Sgblack@eecs.umich.edu                }
2084276Sgblack@eecs.umich.edu            }
2094276Sgblack@eecs.umich.edu            0x0A: decode OPCODE_OP_BOTTOM3 {
2104276Sgblack@eecs.umich.edu                0x0: holder();
2114276Sgblack@eecs.umich.edu                0x1: holder();
2124276Sgblack@eecs.umich.edu                0x2: holder();
2134276Sgblack@eecs.umich.edu                0x3: holder();
2144276Sgblack@eecs.umich.edu                0x4: holder();
2154276Sgblack@eecs.umich.edu                0x5: holder();
2164276Sgblack@eecs.umich.edu                0x6: holder();
2174276Sgblack@eecs.umich.edu                0x7: holder();
2184276Sgblack@eecs.umich.edu            }
2194276Sgblack@eecs.umich.edu            0x0B: decode OPCODE_OP_BOTTOM3 {
2204276Sgblack@eecs.umich.edu                0x0: holder();
2214276Sgblack@eecs.umich.edu                0x1: holder();
2224276Sgblack@eecs.umich.edu                0x2: holder();
2234276Sgblack@eecs.umich.edu                0x3: holder();
2244276Sgblack@eecs.umich.edu                0x4: holder();
2254276Sgblack@eecs.umich.edu                0x5: holder();
2264276Sgblack@eecs.umich.edu                0x6: holder();
2274276Sgblack@eecs.umich.edu                0x7: holder();
2284276Sgblack@eecs.umich.edu            }
2294276Sgblack@eecs.umich.edu            0x0C: decode OPCODE_OP_BOTTOM3 {
2304276Sgblack@eecs.umich.edu                0x0: holder();
2314276Sgblack@eecs.umich.edu                0x1: holder();
2324276Sgblack@eecs.umich.edu                0x2: holder();
2334276Sgblack@eecs.umich.edu                0x3: holder();
2344276Sgblack@eecs.umich.edu                0x4: holder();
2354276Sgblack@eecs.umich.edu                0x5: holder();
2364276Sgblack@eecs.umich.edu                0x6: holder();
2374276Sgblack@eecs.umich.edu                0x7: holder();
2384276Sgblack@eecs.umich.edu            }
2394276Sgblack@eecs.umich.edu            0x0D: decode OPCODE_OP_BOTTOM3 {
2404276Sgblack@eecs.umich.edu                0x0: holder();
2414276Sgblack@eecs.umich.edu                0x1: holder();
2424276Sgblack@eecs.umich.edu                0x2: holder();
2434276Sgblack@eecs.umich.edu                0x3: holder();
2444276Sgblack@eecs.umich.edu                0x4: holder();
2454276Sgblack@eecs.umich.edu                0x5: holder();
2464276Sgblack@eecs.umich.edu                0x6: holder();
2474276Sgblack@eecs.umich.edu                0x7: holder();
2484276Sgblack@eecs.umich.edu            }
2494276Sgblack@eecs.umich.edu            0x0E: decode OPCODE_OP_BOTTOM3 {
2504276Sgblack@eecs.umich.edu                0x0: holder();
2514276Sgblack@eecs.umich.edu                0x1: holder();
2524276Sgblack@eecs.umich.edu                0x2: holder();
2534276Sgblack@eecs.umich.edu                0x3: holder();
2544276Sgblack@eecs.umich.edu                0x4: holder();
2554276Sgblack@eecs.umich.edu                0x5: holder();
2564276Sgblack@eecs.umich.edu                0x6: holder();
2574276Sgblack@eecs.umich.edu                0x7: holder();
2584276Sgblack@eecs.umich.edu            }
2594276Sgblack@eecs.umich.edu            0x0F: decode OPCODE_OP_BOTTOM3 {
2604276Sgblack@eecs.umich.edu                0x0: holder();
2614276Sgblack@eecs.umich.edu                0x1: holder();
2624276Sgblack@eecs.umich.edu                0x2: holder();
2634276Sgblack@eecs.umich.edu                0x3: holder();
2644276Sgblack@eecs.umich.edu                0x4: holder();
2654276Sgblack@eecs.umich.edu                0x5: holder();
2664276Sgblack@eecs.umich.edu                0x6: holder();
2674276Sgblack@eecs.umich.edu                0x7: holder();
2684276Sgblack@eecs.umich.edu            }
2694727Sgblack@eecs.umich.edu            format Inst {
2704727Sgblack@eecs.umich.edu                0x10: decode OPCODE_OP_BOTTOM3 {
2714727Sgblack@eecs.umich.edu                    0x0: JO(Jz);
2724727Sgblack@eecs.umich.edu                    0x1: JNO(Jz);
2734727Sgblack@eecs.umich.edu                    0x2: JB(Jz);
2744727Sgblack@eecs.umich.edu                    0x3: JNB(Jz);
2754727Sgblack@eecs.umich.edu                    0x4: JZ(Jz);
2764727Sgblack@eecs.umich.edu                    0x5: JNZ(Jz);
2774727Sgblack@eecs.umich.edu                    0x6: JBE(Jz);
2784727Sgblack@eecs.umich.edu                    0x7: JNBE(Jz);
2794727Sgblack@eecs.umich.edu                }
2804727Sgblack@eecs.umich.edu                0x11: decode OPCODE_OP_BOTTOM3 {
2814727Sgblack@eecs.umich.edu                    0x0: JS(Jz);
2824727Sgblack@eecs.umich.edu                    0x1: JNS(Jz);
2834727Sgblack@eecs.umich.edu                    0x2: JP(Jz);
2844727Sgblack@eecs.umich.edu                    0x3: JNP(Jz);
2854727Sgblack@eecs.umich.edu                    0x4: JL(Jz);
2864727Sgblack@eecs.umich.edu                    0x5: JNL(Jz);
2874727Sgblack@eecs.umich.edu                    0x6: JLE(Jz);
2884727Sgblack@eecs.umich.edu                    0x7: JNLE(Jz);
2894727Sgblack@eecs.umich.edu                }
2904760Sgblack@eecs.umich.edu                0x12: decode OPCODE_OP_BOTTOM3 {
2914760Sgblack@eecs.umich.edu                    0x0: SETO(Eb);
2924760Sgblack@eecs.umich.edu                    0x1: SETNO(Eb);
2934760Sgblack@eecs.umich.edu                    0x2: SETB(Eb);
2944760Sgblack@eecs.umich.edu                    0x3: SETNB(Eb);
2954760Sgblack@eecs.umich.edu                    0x4: SETZ(Eb);
2964760Sgblack@eecs.umich.edu                    0x5: SETNZ(Eb);
2974760Sgblack@eecs.umich.edu                    0x6: SETBE(Eb);
2984760Sgblack@eecs.umich.edu                    0x7: SETNBE(Eb);
2994760Sgblack@eecs.umich.edu                }
3004760Sgblack@eecs.umich.edu                0x13: decode OPCODE_OP_BOTTOM3 {
3014760Sgblack@eecs.umich.edu                    0x0: SETS(Eb);
3024760Sgblack@eecs.umich.edu                    0x1: SETNS(Eb);
3034760Sgblack@eecs.umich.edu                    0x2: SETP(Eb);
3044760Sgblack@eecs.umich.edu                    0x3: SETNP(Eb);
3054760Sgblack@eecs.umich.edu                    0x4: SETL(Eb);
3064760Sgblack@eecs.umich.edu                    0x5: SETNL(Eb);
3074760Sgblack@eecs.umich.edu                    0x6: SETLE(Eb);
3084760Sgblack@eecs.umich.edu                    0x7: SETNLE(Eb);
3094760Sgblack@eecs.umich.edu                }
3104276Sgblack@eecs.umich.edu            }
3114276Sgblack@eecs.umich.edu            0x14: decode OPCODE_OP_BOTTOM3 {
3124712Sgblack@eecs.umich.edu                0x0: push_fs();
3134712Sgblack@eecs.umich.edu                0x1: pop_fs();
3144814Sgblack@eecs.umich.edu                0x2: Inst::CPUID(rAd);
3154712Sgblack@eecs.umich.edu                0x3: bt_Ev_Gv();
3164712Sgblack@eecs.umich.edu                0x4: shld_Ev_Gv_Ib();
3174712Sgblack@eecs.umich.edu                0x5: shld_Ev_Gv_rCl();
3184712Sgblack@eecs.umich.edu                0x6: xbts_and_cmpxchg();
3194712Sgblack@eecs.umich.edu                0x7: ibts_and_cmpxchg();
3204276Sgblack@eecs.umich.edu            }
3214276Sgblack@eecs.umich.edu            0x15: decode OPCODE_OP_BOTTOM3 {
3224712Sgblack@eecs.umich.edu                0x0: push_gs();
3234712Sgblack@eecs.umich.edu                0x1: pop_gs();
3244712Sgblack@eecs.umich.edu                0x2: rsm_smm();
3254712Sgblack@eecs.umich.edu                0x3: bts_Ev_Gv();
3264712Sgblack@eecs.umich.edu                0x4: shrd_Ev_Gv_Ib();
3274712Sgblack@eecs.umich.edu                0x5: shrd_Ev_Gv_rCl();
3284712Sgblack@eecs.umich.edu                0x6: group16();
3294724Sgblack@eecs.umich.edu                0x7: Inst::IMUL(Gv,Ev);
3304276Sgblack@eecs.umich.edu            }
3314276Sgblack@eecs.umich.edu            0x16: decode OPCODE_OP_BOTTOM3 {
3324712Sgblack@eecs.umich.edu                0x0: cmpxchg_Eb_Gb();
3334712Sgblack@eecs.umich.edu                0x1: cmpxchg_Ev_Gv();
3344712Sgblack@eecs.umich.edu                0x2: lss_Gz_Mp();
3354712Sgblack@eecs.umich.edu                0x3: btr_Ev_Gv();
3364712Sgblack@eecs.umich.edu                0x4: lfs_Gz_Mp();
3374712Sgblack@eecs.umich.edu                0x5: lgs_Gz_Mp();
3384746Sgblack@eecs.umich.edu                //The size of the second operand in these instructions should
3394746Sgblack@eecs.umich.edu                //really be "b" or "w", but it's set to v in order to have a
3404746Sgblack@eecs.umich.edu                //consistent register size. This shouldn't affect behavior.
3414746Sgblack@eecs.umich.edu                0x6: Inst::MOVZX_B(Gv,Ev);
3424746Sgblack@eecs.umich.edu                0x7: Inst::MOVZX_W(Gv,Ev);
3434276Sgblack@eecs.umich.edu            }
3444276Sgblack@eecs.umich.edu            0x17: decode OPCODE_OP_BOTTOM3 {
3454712Sgblack@eecs.umich.edu                0x0: jmpe_Jz(); // IA-64?
3464712Sgblack@eecs.umich.edu                0x1: group11_UD2();
3474712Sgblack@eecs.umich.edu                0x2: group8_Ev_Ib();
3484712Sgblack@eecs.umich.edu                0x3: btc_Ev_Gv();
3494712Sgblack@eecs.umich.edu                0x4: bsf_Gv_Ev();
3504712Sgblack@eecs.umich.edu                0x5: bsr_Gv_Ev();
3514746Sgblack@eecs.umich.edu                //The size of the second operand in these instructions should
3524746Sgblack@eecs.umich.edu                //really be "b" or "w", but it's set to v in order to have a
3534746Sgblack@eecs.umich.edu                //consistent register size. This shouldn't affect behavior.
3544746Sgblack@eecs.umich.edu                0x6: Inst::MOVSX_B(Gv,Ev);
3554746Sgblack@eecs.umich.edu                0x7: Inst::MOVSX_W(Gv,Ev);
3564276Sgblack@eecs.umich.edu            }
3574276Sgblack@eecs.umich.edu            0x18: decode OPCODE_OP_BOTTOM3 {
3584276Sgblack@eecs.umich.edu                0x0: holder();
3594276Sgblack@eecs.umich.edu                0x1: holder();
3604276Sgblack@eecs.umich.edu                0x2: holder();
3614276Sgblack@eecs.umich.edu                0x3: holder();
3624276Sgblack@eecs.umich.edu                0x4: holder();
3634276Sgblack@eecs.umich.edu                0x5: holder();
3644276Sgblack@eecs.umich.edu                0x6: holder();
3654276Sgblack@eecs.umich.edu                0x7: holder();
3664276Sgblack@eecs.umich.edu            }
3674726Sgblack@eecs.umich.edu            0x19: bswap_B();
3684276Sgblack@eecs.umich.edu            0x1A: decode OPCODE_OP_BOTTOM3 {
3694276Sgblack@eecs.umich.edu                0x0: holder();
3704276Sgblack@eecs.umich.edu                0x1: holder();
3714276Sgblack@eecs.umich.edu                0x2: holder();
3724276Sgblack@eecs.umich.edu                0x3: holder();
3734276Sgblack@eecs.umich.edu                0x4: holder();
3744276Sgblack@eecs.umich.edu                0x5: holder();
3754276Sgblack@eecs.umich.edu                0x6: holder();
3764276Sgblack@eecs.umich.edu                0x7: holder();
3774276Sgblack@eecs.umich.edu            }
3784276Sgblack@eecs.umich.edu            0x1B: decode OPCODE_OP_BOTTOM3 {
3794276Sgblack@eecs.umich.edu                0x0: holder();
3804276Sgblack@eecs.umich.edu                0x1: holder();
3814276Sgblack@eecs.umich.edu                0x2: holder();
3824276Sgblack@eecs.umich.edu                0x3: holder();
3834276Sgblack@eecs.umich.edu                0x4: holder();
3844276Sgblack@eecs.umich.edu                0x5: holder();
3854276Sgblack@eecs.umich.edu                0x6: holder();
3864276Sgblack@eecs.umich.edu                0x7: holder();
3874276Sgblack@eecs.umich.edu            }
3884276Sgblack@eecs.umich.edu            0x1C: decode OPCODE_OP_BOTTOM3 {
3894276Sgblack@eecs.umich.edu                0x0: holder();
3904276Sgblack@eecs.umich.edu                0x1: holder();
3914276Sgblack@eecs.umich.edu                0x2: holder();
3924276Sgblack@eecs.umich.edu                0x3: holder();
3934276Sgblack@eecs.umich.edu                0x4: holder();
3944276Sgblack@eecs.umich.edu                0x5: holder();
3954276Sgblack@eecs.umich.edu                0x6: holder();
3964276Sgblack@eecs.umich.edu                0x7: holder();
3974276Sgblack@eecs.umich.edu            }
3984276Sgblack@eecs.umich.edu            0x1D: decode OPCODE_OP_BOTTOM3 {
3994276Sgblack@eecs.umich.edu                0x0: holder();
4004276Sgblack@eecs.umich.edu                0x1: holder();
4014276Sgblack@eecs.umich.edu                0x2: holder();
4024276Sgblack@eecs.umich.edu                0x3: holder();
4034276Sgblack@eecs.umich.edu                0x4: holder();
4044276Sgblack@eecs.umich.edu                0x5: holder();
4054276Sgblack@eecs.umich.edu                0x6: holder();
4064276Sgblack@eecs.umich.edu                0x7: holder();
4074276Sgblack@eecs.umich.edu            }
4084276Sgblack@eecs.umich.edu            0x1E: decode OPCODE_OP_BOTTOM3 {
4094276Sgblack@eecs.umich.edu                0x0: holder();
4104276Sgblack@eecs.umich.edu                0x1: holder();
4114276Sgblack@eecs.umich.edu                0x2: holder();
4124276Sgblack@eecs.umich.edu                0x3: holder();
4134276Sgblack@eecs.umich.edu                0x4: holder();
4144276Sgblack@eecs.umich.edu                0x5: holder();
4154276Sgblack@eecs.umich.edu                0x6: holder();
4164276Sgblack@eecs.umich.edu                0x7: holder();
4174276Sgblack@eecs.umich.edu            }
4184276Sgblack@eecs.umich.edu            0x1F: decode OPCODE_OP_BOTTOM3 {
4194276Sgblack@eecs.umich.edu                0x0: holder();
4204276Sgblack@eecs.umich.edu                0x1: holder();
4214276Sgblack@eecs.umich.edu                0x2: holder();
4224276Sgblack@eecs.umich.edu                0x3: holder();
4234276Sgblack@eecs.umich.edu                0x4: holder();
4244276Sgblack@eecs.umich.edu                0x5: holder();
4254276Sgblack@eecs.umich.edu                0x6: holder();
4264276Sgblack@eecs.umich.edu                0x7: holder();
4274276Sgblack@eecs.umich.edu            }
4284276Sgblack@eecs.umich.edu            default: FailUnimpl::twoByteOps();
4294276Sgblack@eecs.umich.edu        }
4304276Sgblack@eecs.umich.edu    }
4314276Sgblack@eecs.umich.edu    default: M5InternalError::error(
4324276Sgblack@eecs.umich.edu        {{"Unexpected first opcode byte in two byte opcode!"}});
4334276Sgblack@eecs.umich.edu}
434