two_byte_opcodes.isa revision 5292
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 {
645238Sgblack@eecs.umich.edu                //0x00: group6();
655238Sgblack@eecs.umich.edu                0x00: decode MODRM_REG {
665238Sgblack@eecs.umich.edu                    0x0: sldt_Mw_or_Rv();
675238Sgblack@eecs.umich.edu                    0x1: str_Mw_or_Rv();
685238Sgblack@eecs.umich.edu                    0x2: lldt_Mw_or_Rv();
695238Sgblack@eecs.umich.edu                    0x3: ltr_Mw_or_Rv();
705238Sgblack@eecs.umich.edu                    0x4: verr_Mw_or_Rv();
715238Sgblack@eecs.umich.edu                    0x5: verw_Mw_or_Rv();
725238Sgblack@eecs.umich.edu                    //0x6: jmpe_Ev(); // IA-64
735238Sgblack@eecs.umich.edu                    default: Inst::UD2();
745238Sgblack@eecs.umich.edu                }
755238Sgblack@eecs.umich.edu                //0x01: group7(); // Ugly, ugly, ugly...
765238Sgblack@eecs.umich.edu                0x01: decode MODRM_MOD {
775238Sgblack@eecs.umich.edu                    0x3: decode MODRM_REG {
785238Sgblack@eecs.umich.edu                        0x0: decode MODRM_RM {
795238Sgblack@eecs.umich.edu                            0x1: vmcall();
805238Sgblack@eecs.umich.edu                            0x2: vmlaunch();
815238Sgblack@eecs.umich.edu                            0x3: vmresume();
825238Sgblack@eecs.umich.edu                            0x4: vmxoff();
835238Sgblack@eecs.umich.edu                            default: Inst::UD2();
845238Sgblack@eecs.umich.edu                        }
855238Sgblack@eecs.umich.edu                        0x1: decode MODRM_RM {
865238Sgblack@eecs.umich.edu                            0x0: monitor();
875238Sgblack@eecs.umich.edu                            0x1: mwait();
885238Sgblack@eecs.umich.edu                            default: Inst::UD2();
895238Sgblack@eecs.umich.edu                        }
905238Sgblack@eecs.umich.edu                        0x3: decode MODRM_RM {
915238Sgblack@eecs.umich.edu                            0x0: vmrun();
925238Sgblack@eecs.umich.edu                            0x1: vmmcall();
935238Sgblack@eecs.umich.edu                            0x2: vmload();
945238Sgblack@eecs.umich.edu                            0x3: vmsave();
955238Sgblack@eecs.umich.edu                            0x4: stgi();
965238Sgblack@eecs.umich.edu                            0x5: clgi();
975238Sgblack@eecs.umich.edu                            0x6: skinit();
985238Sgblack@eecs.umich.edu                            0x7: invlpga();
995238Sgblack@eecs.umich.edu                        }
1005238Sgblack@eecs.umich.edu                        0x4: smsw_Rv();
1015238Sgblack@eecs.umich.edu                        0x6: lmsw_Rv();
1025238Sgblack@eecs.umich.edu                        0x7: decode MODRM_RM {
1035238Sgblack@eecs.umich.edu                            0x0: swapgs();
1045238Sgblack@eecs.umich.edu                            0x1: rdtscp();
1055238Sgblack@eecs.umich.edu                            default: Inst::UD2();
1065238Sgblack@eecs.umich.edu                        }
1075238Sgblack@eecs.umich.edu                        default: Inst::UD2();
1085238Sgblack@eecs.umich.edu                    }
1095238Sgblack@eecs.umich.edu                    default: decode MODRM_REG {
1105238Sgblack@eecs.umich.edu                        0x0: sgdt_Ms();
1115238Sgblack@eecs.umich.edu                        0x1: sidt_Ms();
1125291Sgblack@eecs.umich.edu                        0x2: decode MODE_SUBMODE {
1135291Sgblack@eecs.umich.edu                            0x0: Inst::LGDT(M);
1145291Sgblack@eecs.umich.edu                            default: decode OPSIZE {
1155291Sgblack@eecs.umich.edu                                // 16 bit operand sizes are special, but only
1165291Sgblack@eecs.umich.edu                                // in legacy and compatability modes.
1175291Sgblack@eecs.umich.edu                                0x2: Inst::LGDT_16(M);
1185291Sgblack@eecs.umich.edu                                default: Inst::LGDT(M);
1195291Sgblack@eecs.umich.edu                            }
1205291Sgblack@eecs.umich.edu                        }
1215292Sgblack@eecs.umich.edu                        0x3: decode MODE_SUBMODE {
1225292Sgblack@eecs.umich.edu                            0x0: Inst::LIDT(M);
1235292Sgblack@eecs.umich.edu                            default: decode OPSIZE {
1245292Sgblack@eecs.umich.edu                                // 16 bit operand sizes are special, but only
1255292Sgblack@eecs.umich.edu                                // in legacy and compatability modes.
1265292Sgblack@eecs.umich.edu                                0x2: Inst::LIDT_16(M);
1275292Sgblack@eecs.umich.edu                                default: Inst::LIDT(M);
1285292Sgblack@eecs.umich.edu                            }
1295292Sgblack@eecs.umich.edu                        }
1305238Sgblack@eecs.umich.edu                        0x4: smsw_Mw();
1315238Sgblack@eecs.umich.edu                        0x6: lmsw_Mw();
1325238Sgblack@eecs.umich.edu                        0x7: invlpg_M();
1335238Sgblack@eecs.umich.edu                        default: Inst::UD2();
1345238Sgblack@eecs.umich.edu                    }
1355238Sgblack@eecs.umich.edu                }
1364276Sgblack@eecs.umich.edu                0x02: lar_Gv_Ew();
1374276Sgblack@eecs.umich.edu                0x03: lsl_Gv_Ew();
1384276Sgblack@eecs.umich.edu                //sandpile.org doesn't seem to know what this is... ?
1394276Sgblack@eecs.umich.edu                0x04: loadall_or_reset_or_hang();
1404712Sgblack@eecs.umich.edu#if FULL_SYSTEM
1414711Sgblack@eecs.umich.edu                0x05: syscall();
1424712Sgblack@eecs.umich.edu#else
1434828Sgblack@eecs.umich.edu                0x05: SyscallInst::syscall('xc->syscall(rax)', IsSyscall);
1444712Sgblack@eecs.umich.edu#endif
1454276Sgblack@eecs.umich.edu                0x06: clts();
1464276Sgblack@eecs.umich.edu                //sandpile.org says (AMD) after sysret, so I might want to check
1474276Sgblack@eecs.umich.edu                //if that means amd64 or AMD machines
1484276Sgblack@eecs.umich.edu                0x07: loadall_or_sysret();
1494276Sgblack@eecs.umich.edu            }
1504276Sgblack@eecs.umich.edu            0x01: decode OPCODE_OP_BOTTOM3 {
1514712Sgblack@eecs.umich.edu                0x0: invd();
1524712Sgblack@eecs.umich.edu                0x1: wbinvd();
1534730Sgblack@eecs.umich.edu                0x2: Inst::UD2();
1544760Sgblack@eecs.umich.edu                0x3: Inst::UD2();
1554730Sgblack@eecs.umich.edu                0x4: Inst::UD2();
1564712Sgblack@eecs.umich.edu                0x5: threednow();
1574712Sgblack@eecs.umich.edu                0x6: threednow();
1584712Sgblack@eecs.umich.edu                0x7: threednow();
1594276Sgblack@eecs.umich.edu            }
1604760Sgblack@eecs.umich.edu            0x02: decode LEGACY_DECODEVAL {
1614760Sgblack@eecs.umich.edu                // no prefix
1624760Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
1635020Sgblack@eecs.umich.edu                    0x0: movups_Vo_Wo();
1645020Sgblack@eecs.umich.edu                    0x1: movups_Wo_Vo();
1655020Sgblack@eecs.umich.edu                    0x2: decode MODRM_MOD {
1665020Sgblack@eecs.umich.edu                        0x3: movhlps_Vq_VRq();
1675020Sgblack@eecs.umich.edu                        default: movlps_Vq_Mq();
1685020Sgblack@eecs.umich.edu                    }
1695020Sgblack@eecs.umich.edu                    0x3: movlps_Mq_Vq();
1705020Sgblack@eecs.umich.edu                    0x4: unpcklps();
1715020Sgblack@eecs.umich.edu                    0x5: unpckhps();
1725020Sgblack@eecs.umich.edu                    0x6: decode MODRM_MOD {
1735020Sgblack@eecs.umich.edu                        0x3: movlhps_Vq_VRq();
1745020Sgblack@eecs.umich.edu                        default: movhps_Vq_Mq();
1755020Sgblack@eecs.umich.edu                    }
1765020Sgblack@eecs.umich.edu                    0x7: movhps_Mq_Vq();
1774760Sgblack@eecs.umich.edu                }
1784760Sgblack@eecs.umich.edu                // repe (0xF3)
1794760Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
1805020Sgblack@eecs.umich.edu                    0x0: movss_Vd_Wd();
1815020Sgblack@eecs.umich.edu                    0x1: movss_Wd_Vd();
1825020Sgblack@eecs.umich.edu                    0x2: movsldup_Vo_Wo();
1835020Sgblack@eecs.umich.edu                    0x6: movshdup_Vo_Wo();
1845020Sgblack@eecs.umich.edu                    default: Inst::UD2();
1854760Sgblack@eecs.umich.edu                }
1864760Sgblack@eecs.umich.edu                // operand size (0x66)
1874760Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
1885020Sgblack@eecs.umich.edu                    0x0: movupd_Vo_Wo();
1895020Sgblack@eecs.umich.edu                    0x1: movupd_Wo_Vo();
1905029Sgblack@eecs.umich.edu                    0x2: Inst::MOVLPD(Vq,Mq);
1915029Sgblack@eecs.umich.edu                    0x3: Inst::MOVLPD(Mq,Vq);
1925020Sgblack@eecs.umich.edu                    0x4: unpcklpd_Vo_Wq();
1935020Sgblack@eecs.umich.edu                    0x5: unpckhpd_Vo_Wo();
1945020Sgblack@eecs.umich.edu                    0x6: movhpd_Vq_Mq();
1955020Sgblack@eecs.umich.edu                    0x7: movhpd_Mq_Vq();
1964760Sgblack@eecs.umich.edu                }
1974760Sgblack@eecs.umich.edu                // repne (0xF2)
1984760Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
1995030Sgblack@eecs.umich.edu                    0x0: Inst::MOVSD(Vq,Wq);
2005030Sgblack@eecs.umich.edu                    0x1: Inst::MOVSD(Wq,Vq);
2015020Sgblack@eecs.umich.edu                    0x2: movddup_Vo_Wq();
2025020Sgblack@eecs.umich.edu                    default: Inst::UD2();
2034760Sgblack@eecs.umich.edu                }
2044760Sgblack@eecs.umich.edu                default: Inst::UD2();
2054276Sgblack@eecs.umich.edu            }
2064276Sgblack@eecs.umich.edu            0x03: decode OPCODE_OP_BOTTOM3 {
2074712Sgblack@eecs.umich.edu                0x0: group17();
2084712Sgblack@eecs.umich.edu                0x1: group17();
2094712Sgblack@eecs.umich.edu                0x2: group17();
2104712Sgblack@eecs.umich.edu                0x3: group17();
2114712Sgblack@eecs.umich.edu                0x4: group17();
2124712Sgblack@eecs.umich.edu                0x5: group17();
2134712Sgblack@eecs.umich.edu                0x6: group17();
2144712Sgblack@eecs.umich.edu                0x7: group17();
2154276Sgblack@eecs.umich.edu            }
2165020Sgblack@eecs.umich.edu            0x04: decode LEGACY_DECODEVAL {
2175020Sgblack@eecs.umich.edu                // no prefix
2185020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
2195020Sgblack@eecs.umich.edu                    0x0: mov_Rd_Cd();
2205020Sgblack@eecs.umich.edu                    0x1: mov_Rd_Dd();
2215241Sgblack@eecs.umich.edu                    0x2: Inst::MOV(Cd,Rd);
2225020Sgblack@eecs.umich.edu                    0x3: mov_Dd_Rd();
2235020Sgblack@eecs.umich.edu                    0x4: mov_Rd_Td();
2245020Sgblack@eecs.umich.edu                    0x6: mov_Td_Rd();
2255020Sgblack@eecs.umich.edu                    default: Inst::UD2();
2265020Sgblack@eecs.umich.edu                }
2275020Sgblack@eecs.umich.edu                // lock prefix (0xF0)
2285020Sgblack@eecs.umich.edu                0x2: decode OPCODE_OP_BOTTOM3 {
2295020Sgblack@eecs.umich.edu                    0x0: mov_Rd_CR8D();
2305020Sgblack@eecs.umich.edu                    0x2: mov_CR8D_Rd();
2315020Sgblack@eecs.umich.edu                }
2325020Sgblack@eecs.umich.edu                default: Inst::UD2();
2334276Sgblack@eecs.umich.edu            }
2345020Sgblack@eecs.umich.edu            0x05: decode LEGACY_DECODEVAL {
2355020Sgblack@eecs.umich.edu                // no prefix
2365020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
2375031Sgblack@eecs.umich.edu                    //These moves should really use size o (octword), but
2385031Sgblack@eecs.umich.edu                    //because they are split in two, they use q (quadword).
2395031Sgblack@eecs.umich.edu                    0x0: Inst::MOVAPS(Vq,Wq);
2405031Sgblack@eecs.umich.edu                    0x1: Inst::MOVAPS(Wq,Vq);
2415020Sgblack@eecs.umich.edu                    0x2: decode MODRM_MOD {
2425020Sgblack@eecs.umich.edu                        0x3: cvtpi2pS_Vq_Pq();
2435020Sgblack@eecs.umich.edu                        default: cvtpi2ps_Vq_Mq();
2445020Sgblack@eecs.umich.edu                    }
2455020Sgblack@eecs.umich.edu                    0x3: movntps_Mo_Vo();
2465020Sgblack@eecs.umich.edu                    0x4: cvttps2pi_Pq_Wq();
2475020Sgblack@eecs.umich.edu                    0x5: cvtpS2pi_Pq_Wq();
2485020Sgblack@eecs.umich.edu                    0x6: ucomiss_Vd_Wd();
2495020Sgblack@eecs.umich.edu                    0x7: comiss_Vd_Wd();
2505020Sgblack@eecs.umich.edu                }
2515020Sgblack@eecs.umich.edu                // repe (0xF3)
2525020Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
2535020Sgblack@eecs.umich.edu                    0x2: cvtsi2ss_Vd_Ed();
2545020Sgblack@eecs.umich.edu                    0x4: cvttss2si_Gd_Wd();
2555020Sgblack@eecs.umich.edu                    0x5: cvtss2si_Gd_Wd();
2565020Sgblack@eecs.umich.edu                    default: Inst::UD2();
2575020Sgblack@eecs.umich.edu                }
2585020Sgblack@eecs.umich.edu                // operand size (0x66)
2595020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
2605020Sgblack@eecs.umich.edu                    0x0: movapd_Vo_Wo();
2615020Sgblack@eecs.umich.edu                    0x1: movapd_Wo_Vo();
2625020Sgblack@eecs.umich.edu                    0x2: decode MODRM_MOD {
2635020Sgblack@eecs.umich.edu                        0x3: cvtpi2pd_Vo_Pq();
2645020Sgblack@eecs.umich.edu                        default: cvtpi2pd_Vo_Mq();
2655020Sgblack@eecs.umich.edu                    }
2665020Sgblack@eecs.umich.edu                    0x3: movntpd_Mo_Vo();
2675020Sgblack@eecs.umich.edu                    0x4: cvttpd2pi_Pq_Wo();
2685020Sgblack@eecs.umich.edu                    0x5: cvtpd2pi_Pq_Wo();
2695058Sgblack@eecs.umich.edu                    0x6: Inst::UCOMISD(Vq,Wq);
2705020Sgblack@eecs.umich.edu                    0x7: comisd_Vq_Wq();
2715020Sgblack@eecs.umich.edu                }
2725020Sgblack@eecs.umich.edu                // repne (0xF2)
2735020Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
2745046Sgblack@eecs.umich.edu                    // The size of the V operand should be q, not dp
2755046Sgblack@eecs.umich.edu                    0x2: Inst::CVTSI2SD(Vdp,Edp);
2765046Sgblack@eecs.umich.edu                    // The size of the W operand should be q, not dp
2775046Sgblack@eecs.umich.edu                    0x4: Inst::CVTTSD2SI(Gdp,Wdp);
2785020Sgblack@eecs.umich.edu                    0x5: cvtsd2si_Gd_Wq();
2795020Sgblack@eecs.umich.edu                    default: Inst::UD2();
2805020Sgblack@eecs.umich.edu                }
2815020Sgblack@eecs.umich.edu                default: Inst::UD2();
2824276Sgblack@eecs.umich.edu            }
2834276Sgblack@eecs.umich.edu            0x06: decode OPCODE_OP_BOTTOM3 {
2845149Sgblack@eecs.umich.edu                0x0: Inst::WRMSR();
2854712Sgblack@eecs.umich.edu                0x1: rdtsc();
2865149Sgblack@eecs.umich.edu                0x2: Inst::RDMSR();
2874712Sgblack@eecs.umich.edu                0x3: rdpmc();
2884712Sgblack@eecs.umich.edu                0x4: sysenter();
2894712Sgblack@eecs.umich.edu                0x5: sysexit();
2904730Sgblack@eecs.umich.edu                0x6: Inst::UD2();
2914712Sgblack@eecs.umich.edu                0x7: getsec();
2924276Sgblack@eecs.umich.edu            }
2934276Sgblack@eecs.umich.edu            0x07: decode OPCODE_OP_BOTTOM3 {
2944712Sgblack@eecs.umich.edu                0x0: three_byte_opcode();
2954712Sgblack@eecs.umich.edu                0x1: three_byte_opcode();
2964712Sgblack@eecs.umich.edu                0x2: three_byte_opcode();
2974712Sgblack@eecs.umich.edu                0x3: three_byte_opcode();
2984712Sgblack@eecs.umich.edu                0x4: three_byte_opcode();
2994712Sgblack@eecs.umich.edu                0x5: three_byte_opcode();
3004712Sgblack@eecs.umich.edu                0x6: three_byte_opcode();
3014712Sgblack@eecs.umich.edu                0x7: three_byte_opcode();
3024276Sgblack@eecs.umich.edu            }
3034760Sgblack@eecs.umich.edu            format Inst {
3044760Sgblack@eecs.umich.edu                0x08: decode OPCODE_OP_BOTTOM3 {
3054760Sgblack@eecs.umich.edu                    0x0: CMOVO(Gv,Ev);
3064760Sgblack@eecs.umich.edu                    0x1: CMOVNO(Gv,Ev);
3074760Sgblack@eecs.umich.edu                    0x2: CMOVB(Gv,Ev);
3084760Sgblack@eecs.umich.edu                    0x3: CMOVNB(Gv,Ev);
3094760Sgblack@eecs.umich.edu                    0x4: CMOVZ(Gv,Ev);
3104760Sgblack@eecs.umich.edu                    0x5: CMOVNZ(Gv,Ev);
3114760Sgblack@eecs.umich.edu                    0x6: CMOVBE(Gv,Ev);
3124760Sgblack@eecs.umich.edu                    0x7: CMOVNBE(Gv,Ev);
3134760Sgblack@eecs.umich.edu                }
3144760Sgblack@eecs.umich.edu                0x09: decode OPCODE_OP_BOTTOM3 {
3154760Sgblack@eecs.umich.edu                    0x0: CMOVS(Gv,Ev);
3164760Sgblack@eecs.umich.edu                    0x1: CMOVNS(Gv,Ev);
3174760Sgblack@eecs.umich.edu                    0x2: CMOVP(Gv,Ev);
3184760Sgblack@eecs.umich.edu                    0x3: CMOVNP(Gv,Ev);
3194760Sgblack@eecs.umich.edu                    0x4: CMOVL(Gv,Ev);
3204760Sgblack@eecs.umich.edu                    0x5: CMOVNL(Gv,Ev);
3214760Sgblack@eecs.umich.edu                    0x6: CMOVLE(Gv,Ev);
3224760Sgblack@eecs.umich.edu                    0x7: CMOVNLE(Gv,Ev);
3234760Sgblack@eecs.umich.edu                }
3244276Sgblack@eecs.umich.edu            }
3255020Sgblack@eecs.umich.edu            0x0A: decode LEGACY_DECODEVAL {
3265020Sgblack@eecs.umich.edu                // no prefix
3275020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
3285020Sgblack@eecs.umich.edu                    0x0: movmskps_Gd_VRo();
3295020Sgblack@eecs.umich.edu                    0x1: sqrtps_Vo_Wo();
3305020Sgblack@eecs.umich.edu                    0x2: rqsrtps_Vo_Wo();
3315020Sgblack@eecs.umich.edu                    0x3: rcpps_Vo_Wo();
3325020Sgblack@eecs.umich.edu                    0x4: andps_Vo_Wo();
3335020Sgblack@eecs.umich.edu                    0x5: andnps_Vo_Wo();
3345020Sgblack@eecs.umich.edu                    0x6: orps_Vo_Wo();
3355020Sgblack@eecs.umich.edu                    0x7: xorps_Vo_Wo();
3365020Sgblack@eecs.umich.edu                }
3375020Sgblack@eecs.umich.edu                // repe (0xF3)
3385020Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
3395020Sgblack@eecs.umich.edu                    0x1: sqrtss_Vd_Wd();
3405020Sgblack@eecs.umich.edu                    0x2: rsqrtss_Vd_Wd();
3415020Sgblack@eecs.umich.edu                    0x3: rcpss_Vd_Wd();
3425020Sgblack@eecs.umich.edu                    default: Inst::UD2();
3435020Sgblack@eecs.umich.edu                }
3445020Sgblack@eecs.umich.edu                // operand size (0x66)
3455020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
3465020Sgblack@eecs.umich.edu                    0x0: movmskpd_Gd_VRo();
3475020Sgblack@eecs.umich.edu                    0x1: sqrtpd_Vo_Wo();
3485020Sgblack@eecs.umich.edu                    0x4: andpd_Vo_Wo();
3495020Sgblack@eecs.umich.edu                    0x5: andnpd_Vo_Wo();
3505020Sgblack@eecs.umich.edu                    0x6: orpd_Vo_Wo();
3515052Sgblack@eecs.umich.edu                    //This really should be type o, but it works on q sized
3525052Sgblack@eecs.umich.edu                    //chunks at a time.
3535052Sgblack@eecs.umich.edu                    0x7: Inst::XORPD(Vq,Wq);
3545020Sgblack@eecs.umich.edu                    default: Inst::UD2();
3555020Sgblack@eecs.umich.edu                }
3565059Sgblack@eecs.umich.edu                format Inst {
3575059Sgblack@eecs.umich.edu                    // repne (0xF2)
3585059Sgblack@eecs.umich.edu                    0x8: decode OPCODE_OP_BOTTOM3 {
3595059Sgblack@eecs.umich.edu                        0x1: SQRTSD(Vq,Wq);
3605059Sgblack@eecs.umich.edu                        default: UD2();
3615059Sgblack@eecs.umich.edu                    }
3625059Sgblack@eecs.umich.edu                    default: UD2();
3635020Sgblack@eecs.umich.edu                }
3644276Sgblack@eecs.umich.edu            }
3655020Sgblack@eecs.umich.edu            0x0B: decode LEGACY_DECODEVAL {
3665020Sgblack@eecs.umich.edu                // no prefix
3675020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
3685020Sgblack@eecs.umich.edu                    0x0: addps_Vo_Wo();
3695020Sgblack@eecs.umich.edu                    0x1: mulps_Vo_Wo();
3705020Sgblack@eecs.umich.edu                    0x2: cvtps2pd_Vo_Wq();
3715020Sgblack@eecs.umich.edu                    0x3: cvtdq2ps_Vo_Wo();
3725020Sgblack@eecs.umich.edu                    0x4: subps_Vo_Wo();
3735020Sgblack@eecs.umich.edu                    0x5: minps_Vo_Wo();
3745020Sgblack@eecs.umich.edu                    0x6: divps_Vo_Wo();
3755020Sgblack@eecs.umich.edu                    0x7: maxps_Vo_Wo();
3765020Sgblack@eecs.umich.edu                }
3775020Sgblack@eecs.umich.edu                // repe (0xF3)
3785020Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
3795020Sgblack@eecs.umich.edu                    0x0: addss_Vd_Wd();
3805020Sgblack@eecs.umich.edu                    0x1: mulss_Vd_Wd();
3815020Sgblack@eecs.umich.edu                    0x2: cvtss2sd_Vq_Wd();
3825020Sgblack@eecs.umich.edu                    0x3: cvttps2dq_Vo_Wo();
3835020Sgblack@eecs.umich.edu                    0x4: subss_Vd_Wd();
3845020Sgblack@eecs.umich.edu                    0x5: minss_Vd_Wd();
3855020Sgblack@eecs.umich.edu                    0x6: divss_Vd_Wd();
3865020Sgblack@eecs.umich.edu                    0x7: maxss_Vd_Wd();
3875020Sgblack@eecs.umich.edu                }
3885020Sgblack@eecs.umich.edu                // operand size (0x66)
3895020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
3905020Sgblack@eecs.umich.edu                    0x0: addpd_Vo_Wo();
3915020Sgblack@eecs.umich.edu                    0x1: mulpd_Vo_Wo();
3925020Sgblack@eecs.umich.edu                    0x2: cvtpd2ps_Vo_Wo();
3935020Sgblack@eecs.umich.edu                    0x3: cvtps2dq_Vo_Wo();
3945020Sgblack@eecs.umich.edu                    0x4: subpd_Vo_Wo();
3955020Sgblack@eecs.umich.edu                    0x5: minpd_Vo_Wo();
3965020Sgblack@eecs.umich.edu                    0x6: divpd_Vo_Wo();
3975020Sgblack@eecs.umich.edu                    0x7: maxpd_Vo_Wo();
3985020Sgblack@eecs.umich.edu                }
3995020Sgblack@eecs.umich.edu                // repne (0xF2)
4005020Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
4015047Sgblack@eecs.umich.edu                    0x0: Inst::ADDSD(Vq,Wq);
4025047Sgblack@eecs.umich.edu                    0x1: Inst::MULSD(Vq,Wq);
4035020Sgblack@eecs.umich.edu                    0x2: cvtsd2ss_Vd_Wq();
4045047Sgblack@eecs.umich.edu                    0x4: Inst::SUBSD(Vq,Wq);
4055020Sgblack@eecs.umich.edu                    0x5: minsd_Vq_Wq();
4065047Sgblack@eecs.umich.edu                    0x6: Inst::DIVSD(Vq,Wq);
4075020Sgblack@eecs.umich.edu                    0x7: maxsd_Vq_Wq();
4085020Sgblack@eecs.umich.edu                    default: Inst::UD2();
4095020Sgblack@eecs.umich.edu                }
4105020Sgblack@eecs.umich.edu                default: Inst::UD2();
4114276Sgblack@eecs.umich.edu            }
4125020Sgblack@eecs.umich.edu            0x0C: decode LEGACY_DECODEVAL {
4135020Sgblack@eecs.umich.edu                // no prefix
4145020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
4155020Sgblack@eecs.umich.edu                    0x0: punpcklbw_Pq_Qd();
4165020Sgblack@eecs.umich.edu                    0x1: punpcklwd_Pq_Qd();
4175020Sgblack@eecs.umich.edu                    0x2: punpckldq_Pq_Qd();
4185020Sgblack@eecs.umich.edu                    0x3: packsswb_Pq_Qq();
4195020Sgblack@eecs.umich.edu                    0x4: pcmpgtb_Pq_Qq();
4205020Sgblack@eecs.umich.edu                    0x5: pcmpgtw_Pq_Qq();
4215020Sgblack@eecs.umich.edu                    0x6: pcmpgtd_Pq_Qq();
4225020Sgblack@eecs.umich.edu                    0x7: packuswb_Pq_Qq();
4235020Sgblack@eecs.umich.edu                }
4245020Sgblack@eecs.umich.edu                // operand size (0x66)
4255020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
4265020Sgblack@eecs.umich.edu                    0x0: punpcklbw_Vo_Wq();
4275020Sgblack@eecs.umich.edu                    0x1: punpcklwd_Vo_Wq();
4285020Sgblack@eecs.umich.edu                    0x2: punpckldq_Vo_Wq();
4295020Sgblack@eecs.umich.edu                    0x3: packsswb_Vo_Wo();
4305020Sgblack@eecs.umich.edu                    0x4: pcmpgtb_Vo_Wo();
4315020Sgblack@eecs.umich.edu                    0x5: pcmpgtw_Vo_Wo();
4325020Sgblack@eecs.umich.edu                    0x6: pcmpgtd_Vo_Wo();
4335020Sgblack@eecs.umich.edu                    0x7: packuswb_Vo_Wo();
4345020Sgblack@eecs.umich.edu                }
4355020Sgblack@eecs.umich.edu                default: Inst::UD2();
4364276Sgblack@eecs.umich.edu            }
4375020Sgblack@eecs.umich.edu            0x0D: decode LEGACY_DECODEVAL {
4385020Sgblack@eecs.umich.edu                // no prefix
4395020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
4405020Sgblack@eecs.umich.edu                    0x0: punpckhbw_Pq_Qq();
4415020Sgblack@eecs.umich.edu                    0x1: punpckhwd_Pq_Qq();
4425020Sgblack@eecs.umich.edu                    0x2: punpckhdq_Pq_Qq();
4435020Sgblack@eecs.umich.edu                    0x3: packssdw_Pq_Qq();
4445020Sgblack@eecs.umich.edu                    0x6: movd_Pq_Ed();
4455020Sgblack@eecs.umich.edu                    0x7: movq_Pq_Qq();
4465020Sgblack@eecs.umich.edu                    default: Inst::UD2();
4475020Sgblack@eecs.umich.edu                }
4485020Sgblack@eecs.umich.edu                // repe (0xF3)
4495020Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
4505020Sgblack@eecs.umich.edu                    0x7: movdqu_Vo_Wo();
4515020Sgblack@eecs.umich.edu                    default: Inst::UD2();
4525020Sgblack@eecs.umich.edu                }
4535020Sgblack@eecs.umich.edu                // operand size (0x66)
4545020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
4555020Sgblack@eecs.umich.edu                    0x0: punpckhbw_Vo_Wo();
4565020Sgblack@eecs.umich.edu                    0x1: punpckhwd_Vo_Wo();
4575020Sgblack@eecs.umich.edu                    0x2: punpckhdq_Vo_Wo();
4585020Sgblack@eecs.umich.edu                    0x3: packssdw_Vo_Wo();
4595020Sgblack@eecs.umich.edu                    0x4: punpcklqdq_Vo_Wq();
4605020Sgblack@eecs.umich.edu                    0x5: punpcklqdq_Vo_Wq();
4615020Sgblack@eecs.umich.edu                    0x6: movd_Vo_Ed();
4625020Sgblack@eecs.umich.edu                    0x7: movdqa_Vo_Wo();
4635020Sgblack@eecs.umich.edu                }
4645020Sgblack@eecs.umich.edu                default: Inst::UD2();
4654276Sgblack@eecs.umich.edu            }
4665020Sgblack@eecs.umich.edu            0x0E: decode LEGACY_DECODEVAL {
4675020Sgblack@eecs.umich.edu                // no prefix
4685020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
4695020Sgblack@eecs.umich.edu                    0x0: pshufw_Pq_Qq_Ib();
4705238Sgblack@eecs.umich.edu                    //0x1: group13_pshimw();
4715238Sgblack@eecs.umich.edu                    0x1: decode MODRM_REG {
4725238Sgblack@eecs.umich.edu                        0x2: decode LEGACY_OP {
4735238Sgblack@eecs.umich.edu                            0x0: psrlw_PRq_Ib();
4745238Sgblack@eecs.umich.edu                            0x1: psrlw_VRo_Ib();
4755238Sgblack@eecs.umich.edu                        }
4765238Sgblack@eecs.umich.edu                        0x4: decode LEGACY_OP {
4775238Sgblack@eecs.umich.edu                            0x0: psraw_PRq_Ib();
4785238Sgblack@eecs.umich.edu                            0x1: psraw_VRo_Ib();
4795238Sgblack@eecs.umich.edu                        }
4805238Sgblack@eecs.umich.edu                        0x6: decode LEGACY_OP {
4815238Sgblack@eecs.umich.edu                            0x0: psllw_PRq_Ib();
4825238Sgblack@eecs.umich.edu                            0x1: psllw_VRo_Ib();
4835238Sgblack@eecs.umich.edu                        }
4845238Sgblack@eecs.umich.edu                        default: Inst::UD2();
4855238Sgblack@eecs.umich.edu                    }
4865238Sgblack@eecs.umich.edu                    //0x2: group14_pshimd();
4875238Sgblack@eecs.umich.edu                    0x2: decode MODRM_REG {
4885238Sgblack@eecs.umich.edu                        0x2: decode LEGACY_OP {
4895238Sgblack@eecs.umich.edu                            0x0: psrld_PRq_Ib();
4905238Sgblack@eecs.umich.edu                            0x1: psrld_VRo_Ib();
4915238Sgblack@eecs.umich.edu                        }
4925238Sgblack@eecs.umich.edu                        0x4: decode LEGACY_OP {
4935238Sgblack@eecs.umich.edu                            0x0: psrad_PRq_Ib();
4945238Sgblack@eecs.umich.edu                            0x1: psrad_VRo_Ib();
4955238Sgblack@eecs.umich.edu                        }
4965238Sgblack@eecs.umich.edu                        0x6: decode LEGACY_OP {
4975238Sgblack@eecs.umich.edu                            0x0: pslld_PRq_Ib();
4985238Sgblack@eecs.umich.edu                            0x1: pslld_VRo_Ib();
4995238Sgblack@eecs.umich.edu                        }
5005238Sgblack@eecs.umich.edu                        default: Inst::UD2();
5015238Sgblack@eecs.umich.edu                    }
5025238Sgblack@eecs.umich.edu                    //0x3: group15_pshimq();
5035238Sgblack@eecs.umich.edu                    0x3: decode MODRM_REG {
5045238Sgblack@eecs.umich.edu                        0x2: decode LEGACY_OP {
5055238Sgblack@eecs.umich.edu                            0x0: psrlq_PRq_Ib();
5065238Sgblack@eecs.umich.edu                            0x1: psrlq_VRo_Ib();
5075238Sgblack@eecs.umich.edu                        }
5085238Sgblack@eecs.umich.edu                        0x3: decode LEGACY_OP {
5095238Sgblack@eecs.umich.edu                            0x0: Inst::UD2();
5105238Sgblack@eecs.umich.edu                            0x1: psrldq_VRo_Ib();
5115238Sgblack@eecs.umich.edu                        }
5125238Sgblack@eecs.umich.edu                        0x6: decode LEGACY_OP {
5135238Sgblack@eecs.umich.edu                            0x0: psllq_PRq_Ib();
5145238Sgblack@eecs.umich.edu                            0x1: psllq_VRo_Ib();
5155238Sgblack@eecs.umich.edu                        }
5165238Sgblack@eecs.umich.edu                        0x7: decode LEGACY_OP {
5175238Sgblack@eecs.umich.edu                            0x0: Inst::UD2();
5185238Sgblack@eecs.umich.edu                            0x1: pslldq_VRo_Ib();
5195238Sgblack@eecs.umich.edu                        }
5205238Sgblack@eecs.umich.edu                        default: Inst::UD2();
5215238Sgblack@eecs.umich.edu                    }
5225020Sgblack@eecs.umich.edu                    0x4: pcmpeqb_Pq_Qq();
5235020Sgblack@eecs.umich.edu                    0x5: pcmpeqw_Pq_Qq();
5245020Sgblack@eecs.umich.edu                    0x6: pcmpeqd_Pq_Qq();
5255020Sgblack@eecs.umich.edu                    0x7: emms();
5265020Sgblack@eecs.umich.edu                }
5275020Sgblack@eecs.umich.edu                // repe (0xF3)
5285020Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
5295020Sgblack@eecs.umich.edu                    0x0: pshufhw_Vo_Wo_Ib();
5305020Sgblack@eecs.umich.edu                    default: Inst::UD2();
5315020Sgblack@eecs.umich.edu                }
5325020Sgblack@eecs.umich.edu                // operand size (0x66)
5335020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
5345020Sgblack@eecs.umich.edu                    0x0: pshufd_Vo_Wo_Ib();
5355238Sgblack@eecs.umich.edu                    //0x1: group13_pshimw();
5365238Sgblack@eecs.umich.edu                    0x1: decode MODRM_REG {
5375238Sgblack@eecs.umich.edu                        0x2: decode LEGACY_OP {
5385238Sgblack@eecs.umich.edu                            0x0: psrlw_PRq_Ib();
5395238Sgblack@eecs.umich.edu                            0x1: psrlw_VRo_Ib();
5405238Sgblack@eecs.umich.edu                        }
5415238Sgblack@eecs.umich.edu                        0x4: decode LEGACY_OP {
5425238Sgblack@eecs.umich.edu                            0x0: psraw_PRq_Ib();
5435238Sgblack@eecs.umich.edu                            0x1: psraw_VRo_Ib();
5445238Sgblack@eecs.umich.edu                        }
5455238Sgblack@eecs.umich.edu                        0x6: decode LEGACY_OP {
5465238Sgblack@eecs.umich.edu                            0x0: psllw_PRq_Ib();
5475238Sgblack@eecs.umich.edu                            0x1: psllw_VRo_Ib();
5485238Sgblack@eecs.umich.edu                        }
5495238Sgblack@eecs.umich.edu                        default: Inst::UD2();
5505238Sgblack@eecs.umich.edu                    }
5515238Sgblack@eecs.umich.edu                    //0x2: group14_pshimd();
5525238Sgblack@eecs.umich.edu                    0x2: decode MODRM_REG {
5535238Sgblack@eecs.umich.edu                        0x2: decode LEGACY_OP {
5545238Sgblack@eecs.umich.edu                            0x0: psrld_PRq_Ib();
5555238Sgblack@eecs.umich.edu                            0x1: psrld_VRo_Ib();
5565238Sgblack@eecs.umich.edu                        }
5575238Sgblack@eecs.umich.edu                        0x4: decode LEGACY_OP {
5585238Sgblack@eecs.umich.edu                            0x0: psrad_PRq_Ib();
5595238Sgblack@eecs.umich.edu                            0x1: psrad_VRo_Ib();
5605238Sgblack@eecs.umich.edu                        }
5615238Sgblack@eecs.umich.edu                        0x6: decode LEGACY_OP {
5625238Sgblack@eecs.umich.edu                            0x0: pslld_PRq_Ib();
5635238Sgblack@eecs.umich.edu                            0x1: pslld_VRo_Ib();
5645238Sgblack@eecs.umich.edu                        }
5655238Sgblack@eecs.umich.edu                        default: Inst::UD2();
5665238Sgblack@eecs.umich.edu                    }
5675238Sgblack@eecs.umich.edu                    //0x3: group15_pshimq();
5685238Sgblack@eecs.umich.edu                    0x3: decode MODRM_REG {
5695238Sgblack@eecs.umich.edu                        0x2: decode LEGACY_OP {
5705238Sgblack@eecs.umich.edu                            0x0: psrlq_PRq_Ib();
5715238Sgblack@eecs.umich.edu                            0x1: psrlq_VRo_Ib();
5725238Sgblack@eecs.umich.edu                        }
5735238Sgblack@eecs.umich.edu                        0x3: decode LEGACY_OP {
5745238Sgblack@eecs.umich.edu                            0x0: Inst::UD2();
5755238Sgblack@eecs.umich.edu                            0x1: psrldq_VRo_Ib();
5765238Sgblack@eecs.umich.edu                        }
5775238Sgblack@eecs.umich.edu                        0x6: decode LEGACY_OP {
5785238Sgblack@eecs.umich.edu                            0x0: psllq_PRq_Ib();
5795238Sgblack@eecs.umich.edu                            0x1: psllq_VRo_Ib();
5805238Sgblack@eecs.umich.edu                        }
5815238Sgblack@eecs.umich.edu                        0x7: decode LEGACY_OP {
5825238Sgblack@eecs.umich.edu                            0x0: Inst::UD2();
5835238Sgblack@eecs.umich.edu                            0x1: pslldq_VRo_Ib();
5845238Sgblack@eecs.umich.edu                        }
5855238Sgblack@eecs.umich.edu                        default: Inst::UD2();
5865238Sgblack@eecs.umich.edu                    }
5875020Sgblack@eecs.umich.edu                    0x4: pcmpeqb_Vo_Wo();
5885020Sgblack@eecs.umich.edu                    0x5: pcmpeqw_Vo_Wo();
5895020Sgblack@eecs.umich.edu                    0x6: pcmpeqd_Vo_Wo();
5905020Sgblack@eecs.umich.edu                    default: Inst::UD2();
5915020Sgblack@eecs.umich.edu                }
5925020Sgblack@eecs.umich.edu                // repne (0xF2)
5935020Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
5945020Sgblack@eecs.umich.edu                    0x0: pshuflw_Vo_Wo_Ib();
5955020Sgblack@eecs.umich.edu                    default: Inst::UD2();
5965020Sgblack@eecs.umich.edu                }
5975020Sgblack@eecs.umich.edu                default: Inst::UD2();
5984276Sgblack@eecs.umich.edu            }
5995020Sgblack@eecs.umich.edu            0x0F: decode LEGACY_DECODEVAL {
6005020Sgblack@eecs.umich.edu                // no prefix
6015020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
6025020Sgblack@eecs.umich.edu                    0x0: vmread_Ed_or_Eq_Gd_or_Gq();
6035020Sgblack@eecs.umich.edu                    0x1: vmwrite_Gd_or_Gq_Ed_or_Eq();
6045020Sgblack@eecs.umich.edu                    0x6: mov_Ed_Pd();
6055020Sgblack@eecs.umich.edu                    0x7: mov_Qq_Pq();
6065020Sgblack@eecs.umich.edu                    default: Inst::UD2();
6075020Sgblack@eecs.umich.edu                }
6085020Sgblack@eecs.umich.edu                // repe (0xF3)
6095020Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
6105020Sgblack@eecs.umich.edu                    0x6: movq_Vo_Mq_or_Vq_Vq();
6115020Sgblack@eecs.umich.edu                    0x7: movdqu_Wo_Vo();
6125020Sgblack@eecs.umich.edu                    default: Inst::UD2();
6135020Sgblack@eecs.umich.edu                }
6145020Sgblack@eecs.umich.edu                // operand size (0x66)
6155020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
6165020Sgblack@eecs.umich.edu                    0x4: haddpd_Vo_Wo();
6175020Sgblack@eecs.umich.edu                    0x5: hsubpd_Vo_Wo();
6185020Sgblack@eecs.umich.edu                    0x6: movd_Ed_Vd();
6195020Sgblack@eecs.umich.edu                    0x7: movdqa_Wo_Vo();
6205020Sgblack@eecs.umich.edu                    default: Inst::UD2();
6215020Sgblack@eecs.umich.edu                }
6225020Sgblack@eecs.umich.edu                // repne (0xF2)
6235020Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
6245020Sgblack@eecs.umich.edu                    0x4: haddps_Vo_Wo();
6255020Sgblack@eecs.umich.edu                    0x5: hsubps_Vo_Wo();
6265020Sgblack@eecs.umich.edu                    default: Inst::UD2();
6275020Sgblack@eecs.umich.edu                }
6285020Sgblack@eecs.umich.edu                default: Inst::UD2();
6294276Sgblack@eecs.umich.edu            }
6304727Sgblack@eecs.umich.edu            format Inst {
6314727Sgblack@eecs.umich.edu                0x10: decode OPCODE_OP_BOTTOM3 {
6324727Sgblack@eecs.umich.edu                    0x0: JO(Jz);
6334727Sgblack@eecs.umich.edu                    0x1: JNO(Jz);
6344727Sgblack@eecs.umich.edu                    0x2: JB(Jz);
6354727Sgblack@eecs.umich.edu                    0x3: JNB(Jz);
6364727Sgblack@eecs.umich.edu                    0x4: JZ(Jz);
6374727Sgblack@eecs.umich.edu                    0x5: JNZ(Jz);
6384727Sgblack@eecs.umich.edu                    0x6: JBE(Jz);
6394727Sgblack@eecs.umich.edu                    0x7: JNBE(Jz);
6404727Sgblack@eecs.umich.edu                }
6414727Sgblack@eecs.umich.edu                0x11: decode OPCODE_OP_BOTTOM3 {
6424727Sgblack@eecs.umich.edu                    0x0: JS(Jz);
6434727Sgblack@eecs.umich.edu                    0x1: JNS(Jz);
6444727Sgblack@eecs.umich.edu                    0x2: JP(Jz);
6454727Sgblack@eecs.umich.edu                    0x3: JNP(Jz);
6464727Sgblack@eecs.umich.edu                    0x4: JL(Jz);
6474727Sgblack@eecs.umich.edu                    0x5: JNL(Jz);
6484727Sgblack@eecs.umich.edu                    0x6: JLE(Jz);
6494727Sgblack@eecs.umich.edu                    0x7: JNLE(Jz);
6504727Sgblack@eecs.umich.edu                }
6514760Sgblack@eecs.umich.edu                0x12: decode OPCODE_OP_BOTTOM3 {
6524760Sgblack@eecs.umich.edu                    0x0: SETO(Eb);
6534760Sgblack@eecs.umich.edu                    0x1: SETNO(Eb);
6544760Sgblack@eecs.umich.edu                    0x2: SETB(Eb);
6554760Sgblack@eecs.umich.edu                    0x3: SETNB(Eb);
6564760Sgblack@eecs.umich.edu                    0x4: SETZ(Eb);
6574760Sgblack@eecs.umich.edu                    0x5: SETNZ(Eb);
6584760Sgblack@eecs.umich.edu                    0x6: SETBE(Eb);
6594760Sgblack@eecs.umich.edu                    0x7: SETNBE(Eb);
6604760Sgblack@eecs.umich.edu                }
6614760Sgblack@eecs.umich.edu                0x13: decode OPCODE_OP_BOTTOM3 {
6624760Sgblack@eecs.umich.edu                    0x0: SETS(Eb);
6634760Sgblack@eecs.umich.edu                    0x1: SETNS(Eb);
6644760Sgblack@eecs.umich.edu                    0x2: SETP(Eb);
6654760Sgblack@eecs.umich.edu                    0x3: SETNP(Eb);
6664760Sgblack@eecs.umich.edu                    0x4: SETL(Eb);
6674760Sgblack@eecs.umich.edu                    0x5: SETNL(Eb);
6684760Sgblack@eecs.umich.edu                    0x6: SETLE(Eb);
6694760Sgblack@eecs.umich.edu                    0x7: SETNLE(Eb);
6704760Sgblack@eecs.umich.edu                }
6714276Sgblack@eecs.umich.edu            }
6724276Sgblack@eecs.umich.edu            0x14: decode OPCODE_OP_BOTTOM3 {
6734712Sgblack@eecs.umich.edu                0x0: push_fs();
6744712Sgblack@eecs.umich.edu                0x1: pop_fs();
6754814Sgblack@eecs.umich.edu                0x2: Inst::CPUID(rAd);
6765240Sgblack@eecs.umich.edu                0x3: Inst::BT(Ev,Gv);
6774712Sgblack@eecs.umich.edu                0x4: shld_Ev_Gv_Ib();
6784712Sgblack@eecs.umich.edu                0x5: shld_Ev_Gv_rCl();
6794712Sgblack@eecs.umich.edu                0x6: xbts_and_cmpxchg();
6804712Sgblack@eecs.umich.edu                0x7: ibts_and_cmpxchg();
6814276Sgblack@eecs.umich.edu            }
6824276Sgblack@eecs.umich.edu            0x15: decode OPCODE_OP_BOTTOM3 {
6834712Sgblack@eecs.umich.edu                0x0: push_gs();
6844712Sgblack@eecs.umich.edu                0x1: pop_gs();
6854712Sgblack@eecs.umich.edu                0x2: rsm_smm();
6865240Sgblack@eecs.umich.edu                0x3: Inst::BTS(Ev,Gv);
6874712Sgblack@eecs.umich.edu                0x4: shrd_Ev_Gv_Ib();
6884712Sgblack@eecs.umich.edu                0x5: shrd_Ev_Gv_rCl();
6895238Sgblack@eecs.umich.edu                //0x6: group16();
6905238Sgblack@eecs.umich.edu                0x6: decode MODRM_MOD {
6915238Sgblack@eecs.umich.edu                    0x3: decode MODRM_REG {
6925238Sgblack@eecs.umich.edu                        0x5: lfence();
6935238Sgblack@eecs.umich.edu                        0x6: mfence();
6945238Sgblack@eecs.umich.edu                        0x7: sfence();
6955238Sgblack@eecs.umich.edu                        default: Inst::UD2();
6965238Sgblack@eecs.umich.edu                    }
6975238Sgblack@eecs.umich.edu                    default: decode MODRM_REG {
6985238Sgblack@eecs.umich.edu                        0x0: fxsave();
6995238Sgblack@eecs.umich.edu                        0x1: fxrstor();
7005238Sgblack@eecs.umich.edu                        0x7: clflush();
7015238Sgblack@eecs.umich.edu                        default: Inst::UD2();
7025238Sgblack@eecs.umich.edu                    }
7035238Sgblack@eecs.umich.edu                }
7044724Sgblack@eecs.umich.edu                0x7: Inst::IMUL(Gv,Ev);
7054276Sgblack@eecs.umich.edu            }
7064276Sgblack@eecs.umich.edu            0x16: decode OPCODE_OP_BOTTOM3 {
7074864Sgblack@eecs.umich.edu                0x0: Inst::CMPXCHG(Eb,Gb);
7084864Sgblack@eecs.umich.edu                0x1: Inst::CMPXCHG(Ev,Gv);
7094712Sgblack@eecs.umich.edu                0x2: lss_Gz_Mp();
7105240Sgblack@eecs.umich.edu                0x3: Inst::BTR(Ev,Gv);
7114712Sgblack@eecs.umich.edu                0x4: lfs_Gz_Mp();
7124712Sgblack@eecs.umich.edu                0x5: lgs_Gz_Mp();
7134746Sgblack@eecs.umich.edu                //The size of the second operand in these instructions should
7144746Sgblack@eecs.umich.edu                //really be "b" or "w", but it's set to v in order to have a
7154746Sgblack@eecs.umich.edu                //consistent register size. This shouldn't affect behavior.
7164746Sgblack@eecs.umich.edu                0x6: Inst::MOVZX_B(Gv,Ev);
7174746Sgblack@eecs.umich.edu                0x7: Inst::MOVZX_W(Gv,Ev);
7184276Sgblack@eecs.umich.edu            }
7194276Sgblack@eecs.umich.edu            0x17: decode OPCODE_OP_BOTTOM3 {
7204712Sgblack@eecs.umich.edu                0x0: jmpe_Jz(); // IA-64?
7215240Sgblack@eecs.umich.edu                format Inst {
7225240Sgblack@eecs.umich.edu                    //0x1: group11_UD2();
7235240Sgblack@eecs.umich.edu                    0x1: UD2();
7245240Sgblack@eecs.umich.edu                    //0x2: group8_Ev_Ib();
7255240Sgblack@eecs.umich.edu                    0x2: decode MODRM_REG {
7265240Sgblack@eecs.umich.edu                        0x4: BT(Ev,Ib);
7275240Sgblack@eecs.umich.edu                        0x5: BTS(Ev,Ib);
7285240Sgblack@eecs.umich.edu                        0x6: BTR(Ev,Ib);
7295240Sgblack@eecs.umich.edu                        0x7: BTC(Ev,Ib);
7305240Sgblack@eecs.umich.edu                        default: UD2();
7315240Sgblack@eecs.umich.edu                    }
7325240Sgblack@eecs.umich.edu                    0x3: BTC(Ev,Gv);
7335238Sgblack@eecs.umich.edu                }
7344712Sgblack@eecs.umich.edu                0x4: bsf_Gv_Ev();
7354712Sgblack@eecs.umich.edu                0x5: bsr_Gv_Ev();
7364746Sgblack@eecs.umich.edu                //The size of the second operand in these instructions should
7374746Sgblack@eecs.umich.edu                //really be "b" or "w", but it's set to v in order to have a
7384746Sgblack@eecs.umich.edu                //consistent register size. This shouldn't affect behavior.
7394746Sgblack@eecs.umich.edu                0x6: Inst::MOVSX_B(Gv,Ev);
7404746Sgblack@eecs.umich.edu                0x7: Inst::MOVSX_W(Gv,Ev);
7414276Sgblack@eecs.umich.edu            }
7424276Sgblack@eecs.umich.edu            0x18: decode OPCODE_OP_BOTTOM3 {
7435020Sgblack@eecs.umich.edu                0x0: xadd_Eb_Gb();
7445020Sgblack@eecs.umich.edu                0x1: xadd_Ev_Gv();
7455238Sgblack@eecs.umich.edu                //0x7: group9();
7465238Sgblack@eecs.umich.edu                0x7: decode MODRM_REG {
7475238Sgblack@eecs.umich.edu                    0x1: cmpxchg_Mq();
7485238Sgblack@eecs.umich.edu                    0x6: decode LEGACY_OP {
7495238Sgblack@eecs.umich.edu                        0x1: vmclear_Mq();
7505238Sgblack@eecs.umich.edu                        default: decode LEGACY_REP {
7515238Sgblack@eecs.umich.edu                            0x1: vmxon_Mq();
7525238Sgblack@eecs.umich.edu                            0x0: vmptrld_Mq();
7535238Sgblack@eecs.umich.edu                        }
7545238Sgblack@eecs.umich.edu                    }
7555238Sgblack@eecs.umich.edu                    0x7: vmptrst_Mq();
7565238Sgblack@eecs.umich.edu                    default: Inst::UD2();
7575238Sgblack@eecs.umich.edu                }
7585020Sgblack@eecs.umich.edu                default: decode LEGACY_DECODEVAL {
7595020Sgblack@eecs.umich.edu                    // no prefix
7605020Sgblack@eecs.umich.edu                    0x0: decode OPCODE_OP_BOTTOM3 {
7615020Sgblack@eecs.umich.edu                        0x2: cmpccps_Vo_Wo_Ib();
7625020Sgblack@eecs.umich.edu                        0x3: cvtdq2ps_Vo_Wo();
7635020Sgblack@eecs.umich.edu                        0x4: subps_Vo_Wo();
7645020Sgblack@eecs.umich.edu                        0x5: minps_Vo_Wo();
7655020Sgblack@eecs.umich.edu                        0x6: divps_Vo_Wo();
7665020Sgblack@eecs.umich.edu                    }
7675020Sgblack@eecs.umich.edu                    // repe (0xF3)
7685020Sgblack@eecs.umich.edu                    0x4: decode OPCODE_OP_BOTTOM3 {
7695020Sgblack@eecs.umich.edu                        0x2: cmpccss_Vd_Wd_Ib();
7705020Sgblack@eecs.umich.edu                        default: Inst::UD2();
7715020Sgblack@eecs.umich.edu                    }
7725020Sgblack@eecs.umich.edu                    // operand size (0x66)
7735020Sgblack@eecs.umich.edu                    0x1: decode OPCODE_OP_BOTTOM3 {
7745020Sgblack@eecs.umich.edu                        0x2: cmpccpd_Vo_Wo_Ib();
7755020Sgblack@eecs.umich.edu                        0x4: subpd_Vo_Wo();
7765020Sgblack@eecs.umich.edu                        0x5: minpd_Vo_Wo();
7775020Sgblack@eecs.umich.edu                        0x6: divpd_Vo_Wo();
7785020Sgblack@eecs.umich.edu                        default: Inst::UD2();
7795020Sgblack@eecs.umich.edu                    }
7805020Sgblack@eecs.umich.edu                    // repne (0xF2)
7815020Sgblack@eecs.umich.edu                    0x8: decode OPCODE_OP_BOTTOM3 {
7825020Sgblack@eecs.umich.edu                        0x2: cmpccsd_Vq_Wq_Ib();
7835020Sgblack@eecs.umich.edu                        default: Inst::UD2();
7845020Sgblack@eecs.umich.edu                    }
7855020Sgblack@eecs.umich.edu                    default: Inst::UD2();
7865020Sgblack@eecs.umich.edu                }
7874276Sgblack@eecs.umich.edu            }
7884726Sgblack@eecs.umich.edu            0x19: bswap_B();
7895020Sgblack@eecs.umich.edu            0x1A: decode LEGACY_DECODEVAL {
7905020Sgblack@eecs.umich.edu                // no prefix
7915020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
7925020Sgblack@eecs.umich.edu                    0x1: psrlw_Pq_Qq();
7935020Sgblack@eecs.umich.edu                    0x2: psrld_Pq_Qq();
7945020Sgblack@eecs.umich.edu                    0x3: psrlq_Pq_Qq();
7955020Sgblack@eecs.umich.edu                    0x4: paddq_Pq_Qq();
7965020Sgblack@eecs.umich.edu                    0x5: pmullw_Pq_Qq();
7975020Sgblack@eecs.umich.edu                    0x7: pmovmskb_Gd_PRq();
7985020Sgblack@eecs.umich.edu                    default: Inst::UD2();
7995020Sgblack@eecs.umich.edu                }
8005020Sgblack@eecs.umich.edu                // repe (0xF3)
8015020Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
8025020Sgblack@eecs.umich.edu                    0x6: movq2dq_Vo_PRq();
8035020Sgblack@eecs.umich.edu                    default: Inst::UD2();
8045020Sgblack@eecs.umich.edu                }
8055020Sgblack@eecs.umich.edu                // operand size (0x66)
8065020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
8075020Sgblack@eecs.umich.edu                    0x0: addsubpd_Vo_Wo();
8085020Sgblack@eecs.umich.edu                    0x1: psrlw_Vo_Wo();
8095020Sgblack@eecs.umich.edu                    0x2: psrld_Vo_Wo();
8105020Sgblack@eecs.umich.edu                    0x3: psrlq_Vo_Wo();
8115020Sgblack@eecs.umich.edu                    0x4: paddq_Vo_Wo();
8125020Sgblack@eecs.umich.edu                    0x5: pmullw_Vo_Wo();
8135020Sgblack@eecs.umich.edu                    0x6: decode MODRM_MOD {
8145020Sgblack@eecs.umich.edu                        0x3: movq_Vq_Vq();
8155020Sgblack@eecs.umich.edu                        default: movq_Mq_Vq();
8165020Sgblack@eecs.umich.edu                    }
8175020Sgblack@eecs.umich.edu                    0x7: pmovmskb_Gd_VRo();
8185020Sgblack@eecs.umich.edu                }
8195020Sgblack@eecs.umich.edu                // repne (0xF2)
8205020Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
8215020Sgblack@eecs.umich.edu                    0x0: addsubps_Vo_Wo();
8225020Sgblack@eecs.umich.edu                    0x6: movdq2q_Pq_VRq();
8235020Sgblack@eecs.umich.edu                    default: Inst::UD2();
8245020Sgblack@eecs.umich.edu                }
8255020Sgblack@eecs.umich.edu                default: Inst::UD2();
8264276Sgblack@eecs.umich.edu            }
8275020Sgblack@eecs.umich.edu            0x1B: decode LEGACY_DECODEVAL {
8285020Sgblack@eecs.umich.edu                // no prefix
8295020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
8305020Sgblack@eecs.umich.edu                    0x0: psubusb_Pq_Qq();
8315020Sgblack@eecs.umich.edu                    0x1: psubusw_Pq_Qq();
8325020Sgblack@eecs.umich.edu                    0x2: pminub_Pq_Qq();
8335020Sgblack@eecs.umich.edu                    0x3: pand_Pq_Qq();
8345020Sgblack@eecs.umich.edu                    0x4: paddusb_Pq_Qq();
8355020Sgblack@eecs.umich.edu                    0x5: paddusw_Pq_Qq();
8365020Sgblack@eecs.umich.edu                    0x6: pmaxub_Pq_Qq();
8375020Sgblack@eecs.umich.edu                    0x7: pandn_Pq_Qq();
8385020Sgblack@eecs.umich.edu                }
8395020Sgblack@eecs.umich.edu                // operand size (0x66)
8405020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
8415020Sgblack@eecs.umich.edu                    0x0: psubusb_Vo_Wo();
8425020Sgblack@eecs.umich.edu                    0x1: psubusw_Vo_Wo();
8435020Sgblack@eecs.umich.edu                    0x2: pminub_Vo_Wo();
8445020Sgblack@eecs.umich.edu                    0x3: pand_Vo_Wo();
8455020Sgblack@eecs.umich.edu                    0x4: paddusb_Vo_Wo();
8465020Sgblack@eecs.umich.edu                    0x5: paddusw_Vo_Wo();
8475020Sgblack@eecs.umich.edu                    0x6: pmaxub_Vo_Wo();
8485020Sgblack@eecs.umich.edu                    0x7: pandn_Vo_Wo();
8495020Sgblack@eecs.umich.edu                }
8505020Sgblack@eecs.umich.edu                default: Inst::UD2();
8514276Sgblack@eecs.umich.edu            }
8525022Sgblack@eecs.umich.edu            0x1C: decode LEGACY_DECODEVAL {
8535022Sgblack@eecs.umich.edu                // no prefix
8545022Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
8555022Sgblack@eecs.umich.edu                    0x0: pavgb_Pq_Qq();
8565022Sgblack@eecs.umich.edu                    0x1: psraw_Pq_Qq();
8575022Sgblack@eecs.umich.edu                    0x2: psrad_Pq_Qq();
8585022Sgblack@eecs.umich.edu                    0x3: pavgw_Pq_Qq();
8595022Sgblack@eecs.umich.edu                    0x4: pmulhuw_Pq_Qq();
8605022Sgblack@eecs.umich.edu                    0x5: pmulhw_Pq_Qq();
8615022Sgblack@eecs.umich.edu                    0x7: movntq_Mq_Pq();
8625022Sgblack@eecs.umich.edu                    default: Inst::UD2();
8635022Sgblack@eecs.umich.edu                }
8645022Sgblack@eecs.umich.edu                // repe (0xF3)
8655022Sgblack@eecs.umich.edu                0x4: decode OPCODE_OP_BOTTOM3 {
8665022Sgblack@eecs.umich.edu                    0x6: cvtdq2pd_Vo_Wq();
8675022Sgblack@eecs.umich.edu                    default: Inst::UD2();
8685022Sgblack@eecs.umich.edu                }
8695022Sgblack@eecs.umich.edu                // operand size (0x66)
8705022Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
8715022Sgblack@eecs.umich.edu                    0x0: pavgb_Vo_Wo();
8725022Sgblack@eecs.umich.edu                    0x1: psraw_Vo_Wo();
8735022Sgblack@eecs.umich.edu                    0x2: psrad_Vo_Wo();
8745022Sgblack@eecs.umich.edu                    0x3: pavgw_Vo_Wo();
8755022Sgblack@eecs.umich.edu                    0x4: pmulhuw_Vo_Wo();
8765022Sgblack@eecs.umich.edu                    0x5: pmulhw_Vo_Wo();
8775022Sgblack@eecs.umich.edu                    0x6: cvttpd2dq_Vo_Wo();
8785022Sgblack@eecs.umich.edu                    0x7: movntdq_Mo_Vo();
8795022Sgblack@eecs.umich.edu                }
8805022Sgblack@eecs.umich.edu                // repne (0xF2)
8815022Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
8825022Sgblack@eecs.umich.edu                    0x6: cvtpd2dq_Vo_Wo();
8835022Sgblack@eecs.umich.edu                    default: Inst::UD2();
8845022Sgblack@eecs.umich.edu                }
8855022Sgblack@eecs.umich.edu                default: Inst::UD2();
8864276Sgblack@eecs.umich.edu            }
8875020Sgblack@eecs.umich.edu            0x1D: decode LEGACY_DECODEVAL {
8885020Sgblack@eecs.umich.edu                // no prefix
8895020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
8905020Sgblack@eecs.umich.edu                    0x0: psubsb_Pq_Qq();
8915020Sgblack@eecs.umich.edu                    0x1: psubsw_Pq_Qq();
8925020Sgblack@eecs.umich.edu                    0x2: pminsw_Pq_Qq();
8935020Sgblack@eecs.umich.edu                    0x3: por_Pq_Qq();
8945020Sgblack@eecs.umich.edu                    0x4: paddsb_Pq_Qq();
8955020Sgblack@eecs.umich.edu                    0x5: paddsw_Pq_Qq();
8965020Sgblack@eecs.umich.edu                    0x6: pmaxsw_Pq_Qq();
8975020Sgblack@eecs.umich.edu                    0x7: pxor_Pq_Qq();
8985020Sgblack@eecs.umich.edu                }
8995020Sgblack@eecs.umich.edu                // operand size (0x66)
9005020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
9015020Sgblack@eecs.umich.edu                    0x0: psubsb_Vo_Wo();
9025020Sgblack@eecs.umich.edu                    0x1: psubsw_Vo_Wo();
9035020Sgblack@eecs.umich.edu                    0x2: pminsw_Vo_Wo();
9045020Sgblack@eecs.umich.edu                    0x3: por_Vo_Wo();
9055020Sgblack@eecs.umich.edu                    0x4: paddsb_Vo_Wo();
9065020Sgblack@eecs.umich.edu                    0x5: paddsw_Vo_Wo();
9075020Sgblack@eecs.umich.edu                    0x6: pmaxsw_Vo_Wo();
9085020Sgblack@eecs.umich.edu                    0x7: pxor_Vo_Wo();
9095020Sgblack@eecs.umich.edu                }
9105020Sgblack@eecs.umich.edu                default: Inst::UD2();
9114276Sgblack@eecs.umich.edu            }
9124276Sgblack@eecs.umich.edu            0x1E: decode OPCODE_OP_BOTTOM3 {
9135022Sgblack@eecs.umich.edu                // no prefix
9145022Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
9155022Sgblack@eecs.umich.edu                    0x1: psllw_Pq_Qq();
9165022Sgblack@eecs.umich.edu                    0x2: pslld_Pq_Qq();
9175022Sgblack@eecs.umich.edu                    0x3: psllq_Pq_Qq();
9185022Sgblack@eecs.umich.edu                    0x4: pmuludq_Pq_Qq();
9195022Sgblack@eecs.umich.edu                    0x5: pmaddwd_Pq_Qq();
9205022Sgblack@eecs.umich.edu                    0x6: psadbw_Pq_Qq();
9215022Sgblack@eecs.umich.edu                    0x7: maskmovq_Pq_PRq();
9225022Sgblack@eecs.umich.edu                    default: Inst::UD2();
9235022Sgblack@eecs.umich.edu                }
9245022Sgblack@eecs.umich.edu                // operand size (0x66)
9255022Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
9265022Sgblack@eecs.umich.edu                    0x1: psllw_Vo_Wo();
9275022Sgblack@eecs.umich.edu                    0x2: pslld_Vo_Wo();
9285022Sgblack@eecs.umich.edu                    0x3: psllq_Vo_Wo();
9295022Sgblack@eecs.umich.edu                    0x4: pmuludq_Vo_Wo();
9305022Sgblack@eecs.umich.edu                    0x5: pmaddwd_Vo_Wo();
9315022Sgblack@eecs.umich.edu                    0x6: psadbw_Vo_Wo();
9325022Sgblack@eecs.umich.edu                    0x7: maskmovdqu_Vo_VRo();
9335022Sgblack@eecs.umich.edu                    default: Inst::UD2();
9345022Sgblack@eecs.umich.edu                }
9355022Sgblack@eecs.umich.edu                // repne (0xF2)
9365022Sgblack@eecs.umich.edu                0x8: decode OPCODE_OP_BOTTOM3 {
9375022Sgblack@eecs.umich.edu                    0x0: lddqu_Vo_Mo();
9385022Sgblack@eecs.umich.edu                    default: Inst::UD2();
9395022Sgblack@eecs.umich.edu                }
9405022Sgblack@eecs.umich.edu                default: Inst::UD2();
9414276Sgblack@eecs.umich.edu            }
9425020Sgblack@eecs.umich.edu            0x1F: decode LEGACY_DECODEVAL {
9435020Sgblack@eecs.umich.edu                // no prefix
9445020Sgblack@eecs.umich.edu                0x0: decode OPCODE_OP_BOTTOM3 {
9455020Sgblack@eecs.umich.edu                    0x0: psubb_Pq_Qq();
9465020Sgblack@eecs.umich.edu                    0x1: psubw_Pq_Qq();
9475020Sgblack@eecs.umich.edu                    0x2: psubd_Pq_Qq();
9485020Sgblack@eecs.umich.edu                    0x3: psubq_Pq_Qq();
9495020Sgblack@eecs.umich.edu                    0x4: paddb_Pq_Qq();
9505020Sgblack@eecs.umich.edu                    0x5: paddw_Pq_Qq();
9515020Sgblack@eecs.umich.edu                    0x6: paddd_Pq_Qq();
9525020Sgblack@eecs.umich.edu                    0x7: Inst::UD2();
9535020Sgblack@eecs.umich.edu                }
9545020Sgblack@eecs.umich.edu                // operand size (0x66)
9555020Sgblack@eecs.umich.edu                0x1: decode OPCODE_OP_BOTTOM3 {
9565020Sgblack@eecs.umich.edu                    0x0: psubb_Vo_Wo();
9575020Sgblack@eecs.umich.edu                    0x1: psubw_Vo_Wo();
9585020Sgblack@eecs.umich.edu                    0x2: psubd_Vo_Wo();
9595020Sgblack@eecs.umich.edu                    0x3: psubq_Vo_Wo();
9605020Sgblack@eecs.umich.edu                    0x4: paddb_Vo_Wo();
9615020Sgblack@eecs.umich.edu                    0x5: paddw_Vo_Wo();
9625020Sgblack@eecs.umich.edu                    0x6: paddd_Vo_Wo();
9635020Sgblack@eecs.umich.edu                    0x7: Inst::UD2();
9645020Sgblack@eecs.umich.edu                }
9655020Sgblack@eecs.umich.edu                default: Inst::UD2();
9664276Sgblack@eecs.umich.edu            }
9674276Sgblack@eecs.umich.edu            default: FailUnimpl::twoByteOps();
9684276Sgblack@eecs.umich.edu        }
9694276Sgblack@eecs.umich.edu    }
9704276Sgblack@eecs.umich.edu    default: M5InternalError::error(
9714276Sgblack@eecs.umich.edu        {{"Unexpected first opcode byte in two byte opcode!"}});
9724276Sgblack@eecs.umich.edu}
973