two_byte_opcodes.isa revision 5031
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
734828Sgblack@eecs.umich.edu                0x05: SyscallInst::syscall('xc->syscall(rax)', IsSyscall);
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 {
935020Sgblack@eecs.umich.edu                    0x0: movups_Vo_Wo();
945020Sgblack@eecs.umich.edu                    0x1: movups_Wo_Vo();
955020Sgblack@eecs.umich.edu                    0x2: decode MODRM_MOD {
965020Sgblack@eecs.umich.edu                        0x3: movhlps_Vq_VRq();
975020Sgblack@eecs.umich.edu                        default: movlps_Vq_Mq();
985020Sgblack@eecs.umich.edu                    }
995020Sgblack@eecs.umich.edu                    0x3: movlps_Mq_Vq();
1005020Sgblack@eecs.umich.edu                    0x4: unpcklps();
1015020Sgblack@eecs.umich.edu                    0x5: unpckhps();
1025020Sgblack@eecs.umich.edu                    0x6: decode MODRM_MOD {
1035020Sgblack@eecs.umich.edu                        0x3: movlhps_Vq_VRq();
1045020Sgblack@eecs.umich.edu                        default: movhps_Vq_Mq();
1055020Sgblack@eecs.umich.edu                    }
1065020Sgblack@eecs.umich.edu                    0x7: movhps_Mq_Vq();
1074760Sgblack@eecs.umich.edu                }
1084760Sgblack@eecs.umich.edu                // repe (0xF3)
1094760Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
1105020Sgblack@eecs.umich.edu                    0x0: movss_Vd_Wd();
1115020Sgblack@eecs.umich.edu                    0x1: movss_Wd_Vd();
1125020Sgblack@eecs.umich.edu                    0x2: movsldup_Vo_Wo();
1135020Sgblack@eecs.umich.edu                    0x6: movshdup_Vo_Wo();
1145020Sgblack@eecs.umich.edu                    default: Inst::UD2();
1154760Sgblack@eecs.umich.edu                }
1164760Sgblack@eecs.umich.edu                // operand size (0x66)
1174760Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
1185020Sgblack@eecs.umich.edu                    0x0: movupd_Vo_Wo();
1195020Sgblack@eecs.umich.edu                    0x1: movupd_Wo_Vo();
1205029Sgblack@eecs.umich.edu                    0x2: Inst::MOVLPD(Vq,Mq);
1215029Sgblack@eecs.umich.edu                    0x3: Inst::MOVLPD(Mq,Vq);
1225020Sgblack@eecs.umich.edu                    0x4: unpcklpd_Vo_Wq();
1235020Sgblack@eecs.umich.edu                    0x5: unpckhpd_Vo_Wo();
1245020Sgblack@eecs.umich.edu                    0x6: movhpd_Vq_Mq();
1255020Sgblack@eecs.umich.edu                    0x7: movhpd_Mq_Vq();
1264760Sgblack@eecs.umich.edu                }
1274760Sgblack@eecs.umich.edu                // repne (0xF2)
1284760Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
1295030Sgblack@eecs.umich.edu                    0x0: Inst::MOVSD(Vq,Wq);
1305030Sgblack@eecs.umich.edu                    0x1: Inst::MOVSD(Wq,Vq);
1315020Sgblack@eecs.umich.edu                    0x2: movddup_Vo_Wq();
1325020Sgblack@eecs.umich.edu                    default: Inst::UD2();
1334760Sgblack@eecs.umich.edu                }
1344760Sgblack@eecs.umich.edu                default: Inst::UD2();
1354276Sgblack@eecs.umich.edu            }
1364276Sgblack@eecs.umich.edu            0x03: decode OPCODE_OP_BOTTOM3 {
1374712Sgblack@eecs.umich.edu                0x0: group17();
1384712Sgblack@eecs.umich.edu                0x1: group17();
1394712Sgblack@eecs.umich.edu                0x2: group17();
1404712Sgblack@eecs.umich.edu                0x3: group17();
1414712Sgblack@eecs.umich.edu                0x4: group17();
1424712Sgblack@eecs.umich.edu                0x5: group17();
1434712Sgblack@eecs.umich.edu                0x6: group17();
1444712Sgblack@eecs.umich.edu                0x7: group17();
1454276Sgblack@eecs.umich.edu            }
1465020Sgblack@eecs.umich.edu            0x04: decode LEGACY_DECODEVAL {
1475020Sgblack@eecs.umich.edu                // no prefix
1485020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
1495020Sgblack@eecs.umich.edu                    0x0: mov_Rd_Cd();
1505020Sgblack@eecs.umich.edu                    0x1: mov_Rd_Dd();
1515020Sgblack@eecs.umich.edu                    0x2: mov_Cd_Rd();
1525020Sgblack@eecs.umich.edu                    0x3: mov_Dd_Rd();
1535020Sgblack@eecs.umich.edu                    0x4: mov_Rd_Td();
1545020Sgblack@eecs.umich.edu                    0x6: mov_Td_Rd();
1555020Sgblack@eecs.umich.edu                    default: Inst::UD2();
1565020Sgblack@eecs.umich.edu                }
1575020Sgblack@eecs.umich.edu                // lock prefix (0xF0)
1585020Sgblack@eecs.umich.edu                0x2: decode OPCODE_OP_BOTTOM3 {
1595020Sgblack@eecs.umich.edu                    0x0: mov_Rd_CR8D();
1605020Sgblack@eecs.umich.edu                    0x2: mov_CR8D_Rd();
1615020Sgblack@eecs.umich.edu                }
1625020Sgblack@eecs.umich.edu                default: Inst::UD2();
1634276Sgblack@eecs.umich.edu            }
1645020Sgblack@eecs.umich.edu            0x05: decode LEGACY_DECODEVAL {
1655020Sgblack@eecs.umich.edu                // no prefix
1665020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
1675031Sgblack@eecs.umich.edu                    //These moves should really use size o (octword), but
1685031Sgblack@eecs.umich.edu                    //because they are split in two, they use q (quadword).
1695031Sgblack@eecs.umich.edu                    0x0: Inst::MOVAPS(Vq,Wq);
1705031Sgblack@eecs.umich.edu                    0x1: Inst::MOVAPS(Wq,Vq);
1715020Sgblack@eecs.umich.edu                    0x2: decode MODRM_MOD {
1725020Sgblack@eecs.umich.edu                        0x3: cvtpi2pS_Vq_Pq();
1735020Sgblack@eecs.umich.edu                        default: cvtpi2ps_Vq_Mq();
1745020Sgblack@eecs.umich.edu                    }
1755020Sgblack@eecs.umich.edu                    0x3: movntps_Mo_Vo();
1765020Sgblack@eecs.umich.edu                    0x4: cvttps2pi_Pq_Wq();
1775020Sgblack@eecs.umich.edu                    0x5: cvtpS2pi_Pq_Wq();
1785020Sgblack@eecs.umich.edu                    0x6: ucomiss_Vd_Wd();
1795020Sgblack@eecs.umich.edu                    0x7: comiss_Vd_Wd();
1805020Sgblack@eecs.umich.edu                }
1815020Sgblack@eecs.umich.edu                // repe (0xF3)
1825020Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
1835020Sgblack@eecs.umich.edu                    0x2: cvtsi2ss_Vd_Ed();
1845020Sgblack@eecs.umich.edu                    0x4: cvttss2si_Gd_Wd();
1855020Sgblack@eecs.umich.edu                    0x5: cvtss2si_Gd_Wd();
1865020Sgblack@eecs.umich.edu                    default: Inst::UD2();
1875020Sgblack@eecs.umich.edu                }
1885020Sgblack@eecs.umich.edu                // operand size (0x66)
1895020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
1905020Sgblack@eecs.umich.edu                    0x0: movapd_Vo_Wo();
1915020Sgblack@eecs.umich.edu                    0x1: movapd_Wo_Vo();
1925020Sgblack@eecs.umich.edu                    0x2: decode MODRM_MOD {
1935020Sgblack@eecs.umich.edu                        0x3: cvtpi2pd_Vo_Pq();
1945020Sgblack@eecs.umich.edu                        default: cvtpi2pd_Vo_Mq();
1955020Sgblack@eecs.umich.edu                    }
1965020Sgblack@eecs.umich.edu                    0x3: movntpd_Mo_Vo();
1975020Sgblack@eecs.umich.edu                    0x4: cvttpd2pi_Pq_Wo();
1985020Sgblack@eecs.umich.edu                    0x5: cvtpd2pi_Pq_Wo();
1995020Sgblack@eecs.umich.edu                    0x6: ucomisd_Vq_Wq();
2005020Sgblack@eecs.umich.edu                    0x7: comisd_Vq_Wq();
2015020Sgblack@eecs.umich.edu                }
2025020Sgblack@eecs.umich.edu                // repne (0xF2)
2035020Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
2045020Sgblack@eecs.umich.edu                    0x2: cvtsi2sd_Vq_Ed();
2055020Sgblack@eecs.umich.edu                    0x4: cvttsd2si_Gd_Wq();
2065020Sgblack@eecs.umich.edu                    0x5: cvtsd2si_Gd_Wq();
2075020Sgblack@eecs.umich.edu                    default: Inst::UD2();
2085020Sgblack@eecs.umich.edu                }
2095020Sgblack@eecs.umich.edu                default: Inst::UD2();
2104276Sgblack@eecs.umich.edu            }
2114276Sgblack@eecs.umich.edu            0x06: decode OPCODE_OP_BOTTOM3 {
2124712Sgblack@eecs.umich.edu                0x0: wrmsr();
2134712Sgblack@eecs.umich.edu                0x1: rdtsc();
2144712Sgblack@eecs.umich.edu                0x2: rdmsr();
2154712Sgblack@eecs.umich.edu                0x3: rdpmc();
2164712Sgblack@eecs.umich.edu                0x4: sysenter();
2174712Sgblack@eecs.umich.edu                0x5: sysexit();
2184730Sgblack@eecs.umich.edu                0x6: Inst::UD2();
2194712Sgblack@eecs.umich.edu                0x7: getsec();
2204276Sgblack@eecs.umich.edu            }
2214276Sgblack@eecs.umich.edu            0x07: decode OPCODE_OP_BOTTOM3 {
2224712Sgblack@eecs.umich.edu                0x0: three_byte_opcode();
2234712Sgblack@eecs.umich.edu                0x1: three_byte_opcode();
2244712Sgblack@eecs.umich.edu                0x2: three_byte_opcode();
2254712Sgblack@eecs.umich.edu                0x3: three_byte_opcode();
2264712Sgblack@eecs.umich.edu                0x4: three_byte_opcode();
2274712Sgblack@eecs.umich.edu                0x5: three_byte_opcode();
2284712Sgblack@eecs.umich.edu                0x6: three_byte_opcode();
2294712Sgblack@eecs.umich.edu                0x7: three_byte_opcode();
2304276Sgblack@eecs.umich.edu            }
2314760Sgblack@eecs.umich.edu            format Inst {
2324760Sgblack@eecs.umich.edu                0x08: decode OPCODE_OP_BOTTOM3 {
2334760Sgblack@eecs.umich.edu                    0x0: CMOVO(Gv,Ev);
2344760Sgblack@eecs.umich.edu                    0x1: CMOVNO(Gv,Ev);
2354760Sgblack@eecs.umich.edu                    0x2: CMOVB(Gv,Ev);
2364760Sgblack@eecs.umich.edu                    0x3: CMOVNB(Gv,Ev);
2374760Sgblack@eecs.umich.edu                    0x4: CMOVZ(Gv,Ev);
2384760Sgblack@eecs.umich.edu                    0x5: CMOVNZ(Gv,Ev);
2394760Sgblack@eecs.umich.edu                    0x6: CMOVBE(Gv,Ev);
2404760Sgblack@eecs.umich.edu                    0x7: CMOVNBE(Gv,Ev);
2414760Sgblack@eecs.umich.edu                }
2424760Sgblack@eecs.umich.edu                0x09: decode OPCODE_OP_BOTTOM3 {
2434760Sgblack@eecs.umich.edu                    0x0: CMOVS(Gv,Ev);
2444760Sgblack@eecs.umich.edu                    0x1: CMOVNS(Gv,Ev);
2454760Sgblack@eecs.umich.edu                    0x2: CMOVP(Gv,Ev);
2464760Sgblack@eecs.umich.edu                    0x3: CMOVNP(Gv,Ev);
2474760Sgblack@eecs.umich.edu                    0x4: CMOVL(Gv,Ev);
2484760Sgblack@eecs.umich.edu                    0x5: CMOVNL(Gv,Ev);
2494760Sgblack@eecs.umich.edu                    0x6: CMOVLE(Gv,Ev);
2504760Sgblack@eecs.umich.edu                    0x7: CMOVNLE(Gv,Ev);
2514760Sgblack@eecs.umich.edu                }
2524276Sgblack@eecs.umich.edu            }
2535020Sgblack@eecs.umich.edu            0x0A: decode LEGACY_DECODEVAL {
2545020Sgblack@eecs.umich.edu                // no prefix
2555020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
2565020Sgblack@eecs.umich.edu                    0x0: movmskps_Gd_VRo();
2575020Sgblack@eecs.umich.edu                    0x1: sqrtps_Vo_Wo();
2585020Sgblack@eecs.umich.edu                    0x2: rqsrtps_Vo_Wo();
2595020Sgblack@eecs.umich.edu                    0x3: rcpps_Vo_Wo();
2605020Sgblack@eecs.umich.edu                    0x4: andps_Vo_Wo();
2615020Sgblack@eecs.umich.edu                    0x5: andnps_Vo_Wo();
2625020Sgblack@eecs.umich.edu                    0x6: orps_Vo_Wo();
2635020Sgblack@eecs.umich.edu                    0x7: xorps_Vo_Wo();
2645020Sgblack@eecs.umich.edu                }
2655020Sgblack@eecs.umich.edu                // repe (0xF3)
2665020Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
2675020Sgblack@eecs.umich.edu                    0x1: sqrtss_Vd_Wd();
2685020Sgblack@eecs.umich.edu                    0x2: rsqrtss_Vd_Wd();
2695020Sgblack@eecs.umich.edu                    0x3: rcpss_Vd_Wd();
2705020Sgblack@eecs.umich.edu                    default: Inst::UD2();
2715020Sgblack@eecs.umich.edu                }
2725020Sgblack@eecs.umich.edu                // operand size (0x66)
2735020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
2745020Sgblack@eecs.umich.edu                    0x0: movmskpd_Gd_VRo();
2755020Sgblack@eecs.umich.edu                    0x1: sqrtpd_Vo_Wo();
2765020Sgblack@eecs.umich.edu                    0x4: andpd_Vo_Wo();
2775020Sgblack@eecs.umich.edu                    0x5: andnpd_Vo_Wo();
2785020Sgblack@eecs.umich.edu                    0x6: orpd_Vo_Wo();
2795020Sgblack@eecs.umich.edu                    0x7: xorpd_Vo_Wo();
2805020Sgblack@eecs.umich.edu                    default: Inst::UD2();
2815020Sgblack@eecs.umich.edu                }
2825020Sgblack@eecs.umich.edu                // repne (0xF2)
2835020Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
2845020Sgblack@eecs.umich.edu                    0x1: sqrtsd_Vq_Wq();
2855020Sgblack@eecs.umich.edu                    default: Inst::UD2();
2865020Sgblack@eecs.umich.edu                }
2875020Sgblack@eecs.umich.edu                default: Inst::UD2();
2884276Sgblack@eecs.umich.edu            }
2895020Sgblack@eecs.umich.edu            0x0B: decode LEGACY_DECODEVAL {
2905020Sgblack@eecs.umich.edu                // no prefix
2915020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
2925020Sgblack@eecs.umich.edu                    0x0: addps_Vo_Wo();
2935020Sgblack@eecs.umich.edu                    0x1: mulps_Vo_Wo();
2945020Sgblack@eecs.umich.edu                    0x2: cvtps2pd_Vo_Wq();
2955020Sgblack@eecs.umich.edu                    0x3: cvtdq2ps_Vo_Wo();
2965020Sgblack@eecs.umich.edu                    0x4: subps_Vo_Wo();
2975020Sgblack@eecs.umich.edu                    0x5: minps_Vo_Wo();
2985020Sgblack@eecs.umich.edu                    0x6: divps_Vo_Wo();
2995020Sgblack@eecs.umich.edu                    0x7: maxps_Vo_Wo();
3005020Sgblack@eecs.umich.edu                }
3015020Sgblack@eecs.umich.edu                // repe (0xF3)
3025020Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
3035020Sgblack@eecs.umich.edu                    0x0: addss_Vd_Wd();
3045020Sgblack@eecs.umich.edu                    0x1: mulss_Vd_Wd();
3055020Sgblack@eecs.umich.edu                    0x2: cvtss2sd_Vq_Wd();
3065020Sgblack@eecs.umich.edu                    0x3: cvttps2dq_Vo_Wo();
3075020Sgblack@eecs.umich.edu                    0x4: subss_Vd_Wd();
3085020Sgblack@eecs.umich.edu                    0x5: minss_Vd_Wd();
3095020Sgblack@eecs.umich.edu                    0x6: divss_Vd_Wd();
3105020Sgblack@eecs.umich.edu                    0x7: maxss_Vd_Wd();
3115020Sgblack@eecs.umich.edu                }
3125020Sgblack@eecs.umich.edu                // operand size (0x66)
3135020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
3145020Sgblack@eecs.umich.edu                    0x0: addpd_Vo_Wo();
3155020Sgblack@eecs.umich.edu                    0x1: mulpd_Vo_Wo();
3165020Sgblack@eecs.umich.edu                    0x2: cvtpd2ps_Vo_Wo();
3175020Sgblack@eecs.umich.edu                    0x3: cvtps2dq_Vo_Wo();
3185020Sgblack@eecs.umich.edu                    0x4: subpd_Vo_Wo();
3195020Sgblack@eecs.umich.edu                    0x5: minpd_Vo_Wo();
3205020Sgblack@eecs.umich.edu                    0x6: divpd_Vo_Wo();
3215020Sgblack@eecs.umich.edu                    0x7: maxpd_Vo_Wo();
3225020Sgblack@eecs.umich.edu                }
3235020Sgblack@eecs.umich.edu                // repne (0xF2)
3245020Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
3255020Sgblack@eecs.umich.edu                    0x0: addsd_Vq_Wq();
3265020Sgblack@eecs.umich.edu                    0x1: mulsd_Vq_Wq();
3275020Sgblack@eecs.umich.edu                    0x2: cvtsd2ss_Vd_Wq();
3285020Sgblack@eecs.umich.edu                    0x4: subsd_Vq_Wq();
3295020Sgblack@eecs.umich.edu                    0x5: minsd_Vq_Wq();
3305020Sgblack@eecs.umich.edu                    0x6: divsd_Vq_Wq();
3315020Sgblack@eecs.umich.edu                    0x7: maxsd_Vq_Wq();
3325020Sgblack@eecs.umich.edu                    default: Inst::UD2();
3335020Sgblack@eecs.umich.edu                }
3345020Sgblack@eecs.umich.edu                default: Inst::UD2();
3354276Sgblack@eecs.umich.edu            }
3365020Sgblack@eecs.umich.edu            0x0C: decode LEGACY_DECODEVAL {
3375020Sgblack@eecs.umich.edu                // no prefix
3385020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
3395020Sgblack@eecs.umich.edu                    0x0: punpcklbw_Pq_Qd();
3405020Sgblack@eecs.umich.edu                    0x1: punpcklwd_Pq_Qd();
3415020Sgblack@eecs.umich.edu                    0x2: punpckldq_Pq_Qd();
3425020Sgblack@eecs.umich.edu                    0x3: packsswb_Pq_Qq();
3435020Sgblack@eecs.umich.edu                    0x4: pcmpgtb_Pq_Qq();
3445020Sgblack@eecs.umich.edu                    0x5: pcmpgtw_Pq_Qq();
3455020Sgblack@eecs.umich.edu                    0x6: pcmpgtd_Pq_Qq();
3465020Sgblack@eecs.umich.edu                    0x7: packuswb_Pq_Qq();
3475020Sgblack@eecs.umich.edu                }
3485020Sgblack@eecs.umich.edu                // operand size (0x66)
3495020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
3505020Sgblack@eecs.umich.edu                    0x0: punpcklbw_Vo_Wq();
3515020Sgblack@eecs.umich.edu                    0x1: punpcklwd_Vo_Wq();
3525020Sgblack@eecs.umich.edu                    0x2: punpckldq_Vo_Wq();
3535020Sgblack@eecs.umich.edu                    0x3: packsswb_Vo_Wo();
3545020Sgblack@eecs.umich.edu                    0x4: pcmpgtb_Vo_Wo();
3555020Sgblack@eecs.umich.edu                    0x5: pcmpgtw_Vo_Wo();
3565020Sgblack@eecs.umich.edu                    0x6: pcmpgtd_Vo_Wo();
3575020Sgblack@eecs.umich.edu                    0x7: packuswb_Vo_Wo();
3585020Sgblack@eecs.umich.edu                }
3595020Sgblack@eecs.umich.edu                default: Inst::UD2();
3604276Sgblack@eecs.umich.edu            }
3615020Sgblack@eecs.umich.edu            0x0D: decode LEGACY_DECODEVAL {
3625020Sgblack@eecs.umich.edu                // no prefix
3635020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
3645020Sgblack@eecs.umich.edu                    0x0: punpckhbw_Pq_Qq();
3655020Sgblack@eecs.umich.edu                    0x1: punpckhwd_Pq_Qq();
3665020Sgblack@eecs.umich.edu                    0x2: punpckhdq_Pq_Qq();
3675020Sgblack@eecs.umich.edu                    0x3: packssdw_Pq_Qq();
3685020Sgblack@eecs.umich.edu                    0x6: movd_Pq_Ed();
3695020Sgblack@eecs.umich.edu                    0x7: movq_Pq_Qq();
3705020Sgblack@eecs.umich.edu                    default: Inst::UD2();
3715020Sgblack@eecs.umich.edu                }
3725020Sgblack@eecs.umich.edu                // repe (0xF3)
3735020Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
3745020Sgblack@eecs.umich.edu                    0x7: movdqu_Vo_Wo();
3755020Sgblack@eecs.umich.edu                    default: Inst::UD2();
3765020Sgblack@eecs.umich.edu                }
3775020Sgblack@eecs.umich.edu                // operand size (0x66)
3785020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
3795020Sgblack@eecs.umich.edu                    0x0: punpckhbw_Vo_Wo();
3805020Sgblack@eecs.umich.edu                    0x1: punpckhwd_Vo_Wo();
3815020Sgblack@eecs.umich.edu                    0x2: punpckhdq_Vo_Wo();
3825020Sgblack@eecs.umich.edu                    0x3: packssdw_Vo_Wo();
3835020Sgblack@eecs.umich.edu                    0x4: punpcklqdq_Vo_Wq();
3845020Sgblack@eecs.umich.edu                    0x5: punpcklqdq_Vo_Wq();
3855020Sgblack@eecs.umich.edu                    0x6: movd_Vo_Ed();
3865020Sgblack@eecs.umich.edu                    0x7: movdqa_Vo_Wo();
3875020Sgblack@eecs.umich.edu                }
3885020Sgblack@eecs.umich.edu                default: Inst::UD2();
3894276Sgblack@eecs.umich.edu            }
3905020Sgblack@eecs.umich.edu            0x0E: decode LEGACY_DECODEVAL {
3915020Sgblack@eecs.umich.edu                // no prefix
3925020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
3935020Sgblack@eecs.umich.edu                    0x0: pshufw_Pq_Qq_Ib();
3945020Sgblack@eecs.umich.edu                    0x1: group13_pshimw();
3955020Sgblack@eecs.umich.edu                    0x2: group14_pshimd();
3965020Sgblack@eecs.umich.edu                    0x3: group15_pshimq();
3975020Sgblack@eecs.umich.edu                    0x4: pcmpeqb_Pq_Qq();
3985020Sgblack@eecs.umich.edu                    0x5: pcmpeqw_Pq_Qq();
3995020Sgblack@eecs.umich.edu                    0x6: pcmpeqd_Pq_Qq();
4005020Sgblack@eecs.umich.edu                    0x7: emms();
4015020Sgblack@eecs.umich.edu                }
4025020Sgblack@eecs.umich.edu                // repe (0xF3)
4035020Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
4045020Sgblack@eecs.umich.edu                    0x0: pshufhw_Vo_Wo_Ib();
4055020Sgblack@eecs.umich.edu                    default: Inst::UD2();
4065020Sgblack@eecs.umich.edu                }
4075020Sgblack@eecs.umich.edu                // operand size (0x66)
4085020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
4095020Sgblack@eecs.umich.edu                    0x0: pshufd_Vo_Wo_Ib();
4105020Sgblack@eecs.umich.edu                    0x1: group13_pshimw();
4115020Sgblack@eecs.umich.edu                    0x2: group14_pshimd();
4125020Sgblack@eecs.umich.edu                    0x3: group15_pshimq_dq();
4135020Sgblack@eecs.umich.edu                    0x4: pcmpeqb_Vo_Wo();
4145020Sgblack@eecs.umich.edu                    0x5: pcmpeqw_Vo_Wo();
4155020Sgblack@eecs.umich.edu                    0x6: pcmpeqd_Vo_Wo();
4165020Sgblack@eecs.umich.edu                    default: Inst::UD2();
4175020Sgblack@eecs.umich.edu                }
4185020Sgblack@eecs.umich.edu                // repne (0xF2)
4195020Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
4205020Sgblack@eecs.umich.edu                    0x0: pshuflw_Vo_Wo_Ib();
4215020Sgblack@eecs.umich.edu                    default: Inst::UD2();
4225020Sgblack@eecs.umich.edu                }
4235020Sgblack@eecs.umich.edu                default: Inst::UD2();
4244276Sgblack@eecs.umich.edu            }
4255020Sgblack@eecs.umich.edu            0x0F: decode LEGACY_DECODEVAL {
4265020Sgblack@eecs.umich.edu                // no prefix
4275020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
4285020Sgblack@eecs.umich.edu                    0x0: vmread_Ed_or_Eq_Gd_or_Gq();
4295020Sgblack@eecs.umich.edu                    0x1: vmwrite_Gd_or_Gq_Ed_or_Eq();
4305020Sgblack@eecs.umich.edu                    0x6: mov_Ed_Pd();
4315020Sgblack@eecs.umich.edu                    0x7: mov_Qq_Pq();
4325020Sgblack@eecs.umich.edu                    default: Inst::UD2();
4335020Sgblack@eecs.umich.edu                }
4345020Sgblack@eecs.umich.edu                // repe (0xF3)
4355020Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
4365020Sgblack@eecs.umich.edu                    0x6: movq_Vo_Mq_or_Vq_Vq();
4375020Sgblack@eecs.umich.edu                    0x7: movdqu_Wo_Vo();
4385020Sgblack@eecs.umich.edu                    default: Inst::UD2();
4395020Sgblack@eecs.umich.edu                }
4405020Sgblack@eecs.umich.edu                // operand size (0x66)
4415020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
4425020Sgblack@eecs.umich.edu                    0x4: haddpd_Vo_Wo();
4435020Sgblack@eecs.umich.edu                    0x5: hsubpd_Vo_Wo();
4445020Sgblack@eecs.umich.edu                    0x6: movd_Ed_Vd();
4455020Sgblack@eecs.umich.edu                    0x7: movdqa_Wo_Vo();
4465020Sgblack@eecs.umich.edu                    default: Inst::UD2();
4475020Sgblack@eecs.umich.edu                }
4485020Sgblack@eecs.umich.edu                // repne (0xF2)
4495020Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
4505020Sgblack@eecs.umich.edu                    0x4: haddps_Vo_Wo();
4515020Sgblack@eecs.umich.edu                    0x5: hsubps_Vo_Wo();
4525020Sgblack@eecs.umich.edu                    default: Inst::UD2();
4535020Sgblack@eecs.umich.edu                }
4545020Sgblack@eecs.umich.edu                default: Inst::UD2();
4554276Sgblack@eecs.umich.edu            }
4564727Sgblack@eecs.umich.edu            format Inst {
4574727Sgblack@eecs.umich.edu                0x10: decode OPCODE_OP_BOTTOM3 {
4584727Sgblack@eecs.umich.edu                    0x0: JO(Jz);
4594727Sgblack@eecs.umich.edu                    0x1: JNO(Jz);
4604727Sgblack@eecs.umich.edu                    0x2: JB(Jz);
4614727Sgblack@eecs.umich.edu                    0x3: JNB(Jz);
4624727Sgblack@eecs.umich.edu                    0x4: JZ(Jz);
4634727Sgblack@eecs.umich.edu                    0x5: JNZ(Jz);
4644727Sgblack@eecs.umich.edu                    0x6: JBE(Jz);
4654727Sgblack@eecs.umich.edu                    0x7: JNBE(Jz);
4664727Sgblack@eecs.umich.edu                }
4674727Sgblack@eecs.umich.edu                0x11: decode OPCODE_OP_BOTTOM3 {
4684727Sgblack@eecs.umich.edu                    0x0: JS(Jz);
4694727Sgblack@eecs.umich.edu                    0x1: JNS(Jz);
4704727Sgblack@eecs.umich.edu                    0x2: JP(Jz);
4714727Sgblack@eecs.umich.edu                    0x3: JNP(Jz);
4724727Sgblack@eecs.umich.edu                    0x4: JL(Jz);
4734727Sgblack@eecs.umich.edu                    0x5: JNL(Jz);
4744727Sgblack@eecs.umich.edu                    0x6: JLE(Jz);
4754727Sgblack@eecs.umich.edu                    0x7: JNLE(Jz);
4764727Sgblack@eecs.umich.edu                }
4774760Sgblack@eecs.umich.edu                0x12: decode OPCODE_OP_BOTTOM3 {
4784760Sgblack@eecs.umich.edu                    0x0: SETO(Eb);
4794760Sgblack@eecs.umich.edu                    0x1: SETNO(Eb);
4804760Sgblack@eecs.umich.edu                    0x2: SETB(Eb);
4814760Sgblack@eecs.umich.edu                    0x3: SETNB(Eb);
4824760Sgblack@eecs.umich.edu                    0x4: SETZ(Eb);
4834760Sgblack@eecs.umich.edu                    0x5: SETNZ(Eb);
4844760Sgblack@eecs.umich.edu                    0x6: SETBE(Eb);
4854760Sgblack@eecs.umich.edu                    0x7: SETNBE(Eb);
4864760Sgblack@eecs.umich.edu                }
4874760Sgblack@eecs.umich.edu                0x13: decode OPCODE_OP_BOTTOM3 {
4884760Sgblack@eecs.umich.edu                    0x0: SETS(Eb);
4894760Sgblack@eecs.umich.edu                    0x1: SETNS(Eb);
4904760Sgblack@eecs.umich.edu                    0x2: SETP(Eb);
4914760Sgblack@eecs.umich.edu                    0x3: SETNP(Eb);
4924760Sgblack@eecs.umich.edu                    0x4: SETL(Eb);
4934760Sgblack@eecs.umich.edu                    0x5: SETNL(Eb);
4944760Sgblack@eecs.umich.edu                    0x6: SETLE(Eb);
4954760Sgblack@eecs.umich.edu                    0x7: SETNLE(Eb);
4964760Sgblack@eecs.umich.edu                }
4974276Sgblack@eecs.umich.edu            }
4984276Sgblack@eecs.umich.edu            0x14: decode OPCODE_OP_BOTTOM3 {
4994712Sgblack@eecs.umich.edu                0x0: push_fs();
5004712Sgblack@eecs.umich.edu                0x1: pop_fs();
5014814Sgblack@eecs.umich.edu                0x2: Inst::CPUID(rAd);
5024712Sgblack@eecs.umich.edu                0x3: bt_Ev_Gv();
5034712Sgblack@eecs.umich.edu                0x4: shld_Ev_Gv_Ib();
5044712Sgblack@eecs.umich.edu                0x5: shld_Ev_Gv_rCl();
5054712Sgblack@eecs.umich.edu                0x6: xbts_and_cmpxchg();
5064712Sgblack@eecs.umich.edu                0x7: ibts_and_cmpxchg();
5074276Sgblack@eecs.umich.edu            }
5084276Sgblack@eecs.umich.edu            0x15: decode OPCODE_OP_BOTTOM3 {
5094712Sgblack@eecs.umich.edu                0x0: push_gs();
5104712Sgblack@eecs.umich.edu                0x1: pop_gs();
5114712Sgblack@eecs.umich.edu                0x2: rsm_smm();
5124712Sgblack@eecs.umich.edu                0x3: bts_Ev_Gv();
5134712Sgblack@eecs.umich.edu                0x4: shrd_Ev_Gv_Ib();
5144712Sgblack@eecs.umich.edu                0x5: shrd_Ev_Gv_rCl();
5154712Sgblack@eecs.umich.edu                0x6: group16();
5164724Sgblack@eecs.umich.edu                0x7: Inst::IMUL(Gv,Ev);
5174276Sgblack@eecs.umich.edu            }
5184276Sgblack@eecs.umich.edu            0x16: decode OPCODE_OP_BOTTOM3 {
5194864Sgblack@eecs.umich.edu                0x0: Inst::CMPXCHG(Eb,Gb);
5204864Sgblack@eecs.umich.edu                0x1: Inst::CMPXCHG(Ev,Gv);
5214712Sgblack@eecs.umich.edu                0x2: lss_Gz_Mp();
5224712Sgblack@eecs.umich.edu                0x3: btr_Ev_Gv();
5234712Sgblack@eecs.umich.edu                0x4: lfs_Gz_Mp();
5244712Sgblack@eecs.umich.edu                0x5: lgs_Gz_Mp();
5254746Sgblack@eecs.umich.edu                //The size of the second operand in these instructions should
5264746Sgblack@eecs.umich.edu                //really be "b" or "w", but it's set to v in order to have a
5274746Sgblack@eecs.umich.edu                //consistent register size. This shouldn't affect behavior.
5284746Sgblack@eecs.umich.edu                0x6: Inst::MOVZX_B(Gv,Ev);
5294746Sgblack@eecs.umich.edu                0x7: Inst::MOVZX_W(Gv,Ev);
5304276Sgblack@eecs.umich.edu            }
5314276Sgblack@eecs.umich.edu            0x17: decode OPCODE_OP_BOTTOM3 {
5324712Sgblack@eecs.umich.edu                0x0: jmpe_Jz(); // IA-64?
5334712Sgblack@eecs.umich.edu                0x1: group11_UD2();
5344712Sgblack@eecs.umich.edu                0x2: group8_Ev_Ib();
5354712Sgblack@eecs.umich.edu                0x3: btc_Ev_Gv();
5364712Sgblack@eecs.umich.edu                0x4: bsf_Gv_Ev();
5374712Sgblack@eecs.umich.edu                0x5: bsr_Gv_Ev();
5384746Sgblack@eecs.umich.edu                //The size of the second operand in these instructions should
5394746Sgblack@eecs.umich.edu                //really be "b" or "w", but it's set to v in order to have a
5404746Sgblack@eecs.umich.edu                //consistent register size. This shouldn't affect behavior.
5414746Sgblack@eecs.umich.edu                0x6: Inst::MOVSX_B(Gv,Ev);
5424746Sgblack@eecs.umich.edu                0x7: Inst::MOVSX_W(Gv,Ev);
5434276Sgblack@eecs.umich.edu            }
5444276Sgblack@eecs.umich.edu            0x18: decode OPCODE_OP_BOTTOM3 {
5455020Sgblack@eecs.umich.edu                0x0: xadd_Eb_Gb();
5465020Sgblack@eecs.umich.edu                0x1: xadd_Ev_Gv();
5475020Sgblack@eecs.umich.edu                0x7: group9();
5485020Sgblack@eecs.umich.edu                default: decode LEGACY_DECODEVAL {
5495020Sgblack@eecs.umich.edu                    // no prefix
5505020Sgblack@eecs.umich.edu                    0x0: decode OPCODE_OP_BOTTOM3 {
5515020Sgblack@eecs.umich.edu                        0x2: cmpccps_Vo_Wo_Ib();
5525020Sgblack@eecs.umich.edu                        0x3: cvtdq2ps_Vo_Wo();
5535020Sgblack@eecs.umich.edu                        0x4: subps_Vo_Wo();
5545020Sgblack@eecs.umich.edu                        0x5: minps_Vo_Wo();
5555020Sgblack@eecs.umich.edu                        0x6: divps_Vo_Wo();
5565020Sgblack@eecs.umich.edu                    }
5575020Sgblack@eecs.umich.edu                    // repe (0xF3)
5585020Sgblack@eecs.umich.edu                    0x4: decode OPCODE_OP_BOTTOM3 {
5595020Sgblack@eecs.umich.edu                        0x2: cmpccss_Vd_Wd_Ib();
5605020Sgblack@eecs.umich.edu                        default: Inst::UD2();
5615020Sgblack@eecs.umich.edu                    }
5625020Sgblack@eecs.umich.edu                    // operand size (0x66)
5635020Sgblack@eecs.umich.edu                    0x1: decode OPCODE_OP_BOTTOM3 {
5645020Sgblack@eecs.umich.edu                        0x2: cmpccpd_Vo_Wo_Ib();
5655020Sgblack@eecs.umich.edu                        0x4: subpd_Vo_Wo();
5665020Sgblack@eecs.umich.edu                        0x5: minpd_Vo_Wo();
5675020Sgblack@eecs.umich.edu                        0x6: divpd_Vo_Wo();
5685020Sgblack@eecs.umich.edu                        default: Inst::UD2();
5695020Sgblack@eecs.umich.edu                    }
5705020Sgblack@eecs.umich.edu                    // repne (0xF2)
5715020Sgblack@eecs.umich.edu                    0x8: decode OPCODE_OP_BOTTOM3 {
5725020Sgblack@eecs.umich.edu                        0x2: cmpccsd_Vq_Wq_Ib();
5735020Sgblack@eecs.umich.edu                        default: Inst::UD2();
5745020Sgblack@eecs.umich.edu                    }
5755020Sgblack@eecs.umich.edu                    default: Inst::UD2();
5765020Sgblack@eecs.umich.edu                }
5774276Sgblack@eecs.umich.edu            }
5784726Sgblack@eecs.umich.edu            0x19: bswap_B();
5795020Sgblack@eecs.umich.edu            0x1A: decode LEGACY_DECODEVAL {
5805020Sgblack@eecs.umich.edu                // no prefix
5815020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
5825020Sgblack@eecs.umich.edu                    0x1: psrlw_Pq_Qq();
5835020Sgblack@eecs.umich.edu                    0x2: psrld_Pq_Qq();
5845020Sgblack@eecs.umich.edu                    0x3: psrlq_Pq_Qq();
5855020Sgblack@eecs.umich.edu                    0x4: paddq_Pq_Qq();
5865020Sgblack@eecs.umich.edu                    0x5: pmullw_Pq_Qq();
5875020Sgblack@eecs.umich.edu                    0x7: pmovmskb_Gd_PRq();
5885020Sgblack@eecs.umich.edu                    default: Inst::UD2();
5895020Sgblack@eecs.umich.edu                }
5905020Sgblack@eecs.umich.edu                // repe (0xF3)
5915020Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
5925020Sgblack@eecs.umich.edu                    0x6: movq2dq_Vo_PRq();
5935020Sgblack@eecs.umich.edu                    default: Inst::UD2();
5945020Sgblack@eecs.umich.edu                }
5955020Sgblack@eecs.umich.edu                // operand size (0x66)
5965020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
5975020Sgblack@eecs.umich.edu                    0x0: addsubpd_Vo_Wo();
5985020Sgblack@eecs.umich.edu                    0x1: psrlw_Vo_Wo();
5995020Sgblack@eecs.umich.edu                    0x2: psrld_Vo_Wo();
6005020Sgblack@eecs.umich.edu                    0x3: psrlq_Vo_Wo();
6015020Sgblack@eecs.umich.edu                    0x4: paddq_Vo_Wo();
6025020Sgblack@eecs.umich.edu                    0x5: pmullw_Vo_Wo();
6035020Sgblack@eecs.umich.edu                    0x6: decode MODRM_MOD {
6045020Sgblack@eecs.umich.edu                        0x3: movq_Vq_Vq();
6055020Sgblack@eecs.umich.edu                        default: movq_Mq_Vq();
6065020Sgblack@eecs.umich.edu                    }
6075020Sgblack@eecs.umich.edu                    0x7: pmovmskb_Gd_VRo();
6085020Sgblack@eecs.umich.edu                }
6095020Sgblack@eecs.umich.edu                // repne (0xF2)
6105020Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
6115020Sgblack@eecs.umich.edu                    0x0: addsubps_Vo_Wo();
6125020Sgblack@eecs.umich.edu                    0x6: movdq2q_Pq_VRq();
6135020Sgblack@eecs.umich.edu                    default: Inst::UD2();
6145020Sgblack@eecs.umich.edu                }
6155020Sgblack@eecs.umich.edu                default: Inst::UD2();
6164276Sgblack@eecs.umich.edu            }
6175020Sgblack@eecs.umich.edu            0x1B: decode LEGACY_DECODEVAL {
6185020Sgblack@eecs.umich.edu                // no prefix
6195020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
6205020Sgblack@eecs.umich.edu                    0x0: psubusb_Pq_Qq();
6215020Sgblack@eecs.umich.edu                    0x1: psubusw_Pq_Qq();
6225020Sgblack@eecs.umich.edu                    0x2: pminub_Pq_Qq();
6235020Sgblack@eecs.umich.edu                    0x3: pand_Pq_Qq();
6245020Sgblack@eecs.umich.edu                    0x4: paddusb_Pq_Qq();
6255020Sgblack@eecs.umich.edu                    0x5: paddusw_Pq_Qq();
6265020Sgblack@eecs.umich.edu                    0x6: pmaxub_Pq_Qq();
6275020Sgblack@eecs.umich.edu                    0x7: pandn_Pq_Qq();
6285020Sgblack@eecs.umich.edu                }
6295020Sgblack@eecs.umich.edu                // operand size (0x66)
6305020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
6315020Sgblack@eecs.umich.edu                    0x0: psubusb_Vo_Wo();
6325020Sgblack@eecs.umich.edu                    0x1: psubusw_Vo_Wo();
6335020Sgblack@eecs.umich.edu                    0x2: pminub_Vo_Wo();
6345020Sgblack@eecs.umich.edu                    0x3: pand_Vo_Wo();
6355020Sgblack@eecs.umich.edu                    0x4: paddusb_Vo_Wo();
6365020Sgblack@eecs.umich.edu                    0x5: paddusw_Vo_Wo();
6375020Sgblack@eecs.umich.edu                    0x6: pmaxub_Vo_Wo();
6385020Sgblack@eecs.umich.edu                    0x7: pandn_Vo_Wo();
6395020Sgblack@eecs.umich.edu                }
6405020Sgblack@eecs.umich.edu                default: Inst::UD2();
6414276Sgblack@eecs.umich.edu            }
6425022Sgblack@eecs.umich.edu            0x1C: decode LEGACY_DECODEVAL {
6435022Sgblack@eecs.umich.edu                // no prefix
6445022Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
6455022Sgblack@eecs.umich.edu                    0x0: pavgb_Pq_Qq();
6465022Sgblack@eecs.umich.edu                    0x1: psraw_Pq_Qq();
6475022Sgblack@eecs.umich.edu                    0x2: psrad_Pq_Qq();
6485022Sgblack@eecs.umich.edu                    0x3: pavgw_Pq_Qq();
6495022Sgblack@eecs.umich.edu                    0x4: pmulhuw_Pq_Qq();
6505022Sgblack@eecs.umich.edu                    0x5: pmulhw_Pq_Qq();
6515022Sgblack@eecs.umich.edu                    0x7: movntq_Mq_Pq();
6525022Sgblack@eecs.umich.edu                    default: Inst::UD2();
6535022Sgblack@eecs.umich.edu                }
6545022Sgblack@eecs.umich.edu                // repe (0xF3)
6555022Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
6565022Sgblack@eecs.umich.edu                    0x6: cvtdq2pd_Vo_Wq();
6575022Sgblack@eecs.umich.edu                    default: Inst::UD2();
6585022Sgblack@eecs.umich.edu                }
6595022Sgblack@eecs.umich.edu                // operand size (0x66)
6605022Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
6615022Sgblack@eecs.umich.edu                    0x0: pavgb_Vo_Wo();
6625022Sgblack@eecs.umich.edu                    0x1: psraw_Vo_Wo();
6635022Sgblack@eecs.umich.edu                    0x2: psrad_Vo_Wo();
6645022Sgblack@eecs.umich.edu                    0x3: pavgw_Vo_Wo();
6655022Sgblack@eecs.umich.edu                    0x4: pmulhuw_Vo_Wo();
6665022Sgblack@eecs.umich.edu                    0x5: pmulhw_Vo_Wo();
6675022Sgblack@eecs.umich.edu                    0x6: cvttpd2dq_Vo_Wo();
6685022Sgblack@eecs.umich.edu                    0x7: movntdq_Mo_Vo();
6695022Sgblack@eecs.umich.edu                }
6705022Sgblack@eecs.umich.edu                // repne (0xF2)
6715022Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
6725022Sgblack@eecs.umich.edu                    0x6: cvtpd2dq_Vo_Wo();
6735022Sgblack@eecs.umich.edu                    default: Inst::UD2();
6745022Sgblack@eecs.umich.edu                }
6755022Sgblack@eecs.umich.edu                default: Inst::UD2();
6764276Sgblack@eecs.umich.edu            }
6775020Sgblack@eecs.umich.edu            0x1D: decode LEGACY_DECODEVAL {
6785020Sgblack@eecs.umich.edu                // no prefix
6795020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
6805020Sgblack@eecs.umich.edu                    0x0: psubsb_Pq_Qq();
6815020Sgblack@eecs.umich.edu                    0x1: psubsw_Pq_Qq();
6825020Sgblack@eecs.umich.edu                    0x2: pminsw_Pq_Qq();
6835020Sgblack@eecs.umich.edu                    0x3: por_Pq_Qq();
6845020Sgblack@eecs.umich.edu                    0x4: paddsb_Pq_Qq();
6855020Sgblack@eecs.umich.edu                    0x5: paddsw_Pq_Qq();
6865020Sgblack@eecs.umich.edu                    0x6: pmaxsw_Pq_Qq();
6875020Sgblack@eecs.umich.edu                    0x7: pxor_Pq_Qq();
6885020Sgblack@eecs.umich.edu                }
6895020Sgblack@eecs.umich.edu                // operand size (0x66)
6905020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
6915020Sgblack@eecs.umich.edu                    0x0: psubsb_Vo_Wo();
6925020Sgblack@eecs.umich.edu                    0x1: psubsw_Vo_Wo();
6935020Sgblack@eecs.umich.edu                    0x2: pminsw_Vo_Wo();
6945020Sgblack@eecs.umich.edu                    0x3: por_Vo_Wo();
6955020Sgblack@eecs.umich.edu                    0x4: paddsb_Vo_Wo();
6965020Sgblack@eecs.umich.edu                    0x5: paddsw_Vo_Wo();
6975020Sgblack@eecs.umich.edu                    0x6: pmaxsw_Vo_Wo();
6985020Sgblack@eecs.umich.edu                    0x7: pxor_Vo_Wo();
6995020Sgblack@eecs.umich.edu                }
7005020Sgblack@eecs.umich.edu                default: Inst::UD2();
7014276Sgblack@eecs.umich.edu            }
7024276Sgblack@eecs.umich.edu            0x1E: decode OPCODE_OP_BOTTOM3 {
7035022Sgblack@eecs.umich.edu                // no prefix
7045022Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
7055022Sgblack@eecs.umich.edu                    0x1: psllw_Pq_Qq();
7065022Sgblack@eecs.umich.edu                    0x2: pslld_Pq_Qq();
7075022Sgblack@eecs.umich.edu                    0x3: psllq_Pq_Qq();
7085022Sgblack@eecs.umich.edu                    0x4: pmuludq_Pq_Qq();
7095022Sgblack@eecs.umich.edu                    0x5: pmaddwd_Pq_Qq();
7105022Sgblack@eecs.umich.edu                    0x6: psadbw_Pq_Qq();
7115022Sgblack@eecs.umich.edu                    0x7: maskmovq_Pq_PRq();
7125022Sgblack@eecs.umich.edu                    default: Inst::UD2();
7135022Sgblack@eecs.umich.edu                }
7145022Sgblack@eecs.umich.edu                // operand size (0x66)
7155022Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
7165022Sgblack@eecs.umich.edu                    0x1: psllw_Vo_Wo();
7175022Sgblack@eecs.umich.edu                    0x2: pslld_Vo_Wo();
7185022Sgblack@eecs.umich.edu                    0x3: psllq_Vo_Wo();
7195022Sgblack@eecs.umich.edu                    0x4: pmuludq_Vo_Wo();
7205022Sgblack@eecs.umich.edu                    0x5: pmaddwd_Vo_Wo();
7215022Sgblack@eecs.umich.edu                    0x6: psadbw_Vo_Wo();
7225022Sgblack@eecs.umich.edu                    0x7: maskmovdqu_Vo_VRo();
7235022Sgblack@eecs.umich.edu                    default: Inst::UD2();
7245022Sgblack@eecs.umich.edu                }
7255022Sgblack@eecs.umich.edu                // repne (0xF2)
7265022Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
7275022Sgblack@eecs.umich.edu                    0x0: lddqu_Vo_Mo();
7285022Sgblack@eecs.umich.edu                    default: Inst::UD2();
7295022Sgblack@eecs.umich.edu                }
7305022Sgblack@eecs.umich.edu                default: Inst::UD2();
7314276Sgblack@eecs.umich.edu            }
7325020Sgblack@eecs.umich.edu            0x1F: decode LEGACY_DECODEVAL {
7335020Sgblack@eecs.umich.edu                // no prefix
7345020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
7355020Sgblack@eecs.umich.edu                    0x0: psubb_Pq_Qq();
7365020Sgblack@eecs.umich.edu                    0x1: psubw_Pq_Qq();
7375020Sgblack@eecs.umich.edu                    0x2: psubd_Pq_Qq();
7385020Sgblack@eecs.umich.edu                    0x3: psubq_Pq_Qq();
7395020Sgblack@eecs.umich.edu                    0x4: paddb_Pq_Qq();
7405020Sgblack@eecs.umich.edu                    0x5: paddw_Pq_Qq();
7415020Sgblack@eecs.umich.edu                    0x6: paddd_Pq_Qq();
7425020Sgblack@eecs.umich.edu                    0x7: Inst::UD2();
7435020Sgblack@eecs.umich.edu                }
7445020Sgblack@eecs.umich.edu                // operand size (0x66)
7455020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
7465020Sgblack@eecs.umich.edu                    0x0: psubb_Vo_Wo();
7475020Sgblack@eecs.umich.edu                    0x1: psubw_Vo_Wo();
7485020Sgblack@eecs.umich.edu                    0x2: psubd_Vo_Wo();
7495020Sgblack@eecs.umich.edu                    0x3: psubq_Vo_Wo();
7505020Sgblack@eecs.umich.edu                    0x4: paddb_Vo_Wo();
7515020Sgblack@eecs.umich.edu                    0x5: paddw_Vo_Wo();
7525020Sgblack@eecs.umich.edu                    0x6: paddd_Vo_Wo();
7535020Sgblack@eecs.umich.edu                    0x7: Inst::UD2();
7545020Sgblack@eecs.umich.edu                }
7555020Sgblack@eecs.umich.edu                default: Inst::UD2();
7564276Sgblack@eecs.umich.edu            }
7574276Sgblack@eecs.umich.edu            default: FailUnimpl::twoByteOps();
7584276Sgblack@eecs.umich.edu        }
7594276Sgblack@eecs.umich.edu    }
7604276Sgblack@eecs.umich.edu    default: M5InternalError::error(
7614276Sgblack@eecs.umich.edu        {{"Unexpected first opcode byte in two byte opcode!"}});
7624276Sgblack@eecs.umich.edu}
763