| // Copyright (c) 2015 Mark D. Hill and David A. Wood |
| // All rights reserved. |
| // |
| // Redistribution and use in source and binary forms, with or without |
| // modification, are permitted provided that the following conditions are |
| // met: redistributions of source code must retain the above copyright |
| // notice, this list of conditions and the following disclaimer; |
| // redistributions in binary form must reproduce the above copyright |
| // notice, this list of conditions and the following disclaimer in the |
| // documentation and/or other materials provided with the distribution; |
| // neither the name of the copyright holders nor the names of its |
| // contributors may be used to endorse or promote products derived from |
| // this software without specific prior written permission. |
| // |
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| // |
| // Authors: Nilay Vaish |
| |
| //////////////////////////////////////////////////////////////////// |
| // |
| // Decode the opcodes with vex prefix. |
| // |
| format WarnUnimpl { |
| 'X86ISA::Vex': decode VEX_MAP { |
| 0x01: decode OPCODE_OP_TOP5 { |
| 0x02: decode VEX_PP { |
| 0x0: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_VVVV { |
| 0x15: vmovups(); |
| default: Inst::UD2(); |
| } |
| 0x1: decode VEX_VVVV { |
| 0x15: vmovups(); |
| default: Inst::UD2(); |
| } |
| 0x2: decode VEX_L { |
| 0x0: decode MODRM_MOD { |
| 0x03: vmovhlps(); |
| default: decode VEX_VVVV { |
| 0x15: vmovlps(); |
| default: Inst::UD2(); |
| } |
| } |
| default: Inst::UD2(); |
| } |
| 0x3: decode VEX_VVVV { |
| 0x15: decode VEX_L { |
| 0x0: vmovlps(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| 0x4: vunpcklps(); |
| 0x5: vunpckhps(); |
| 0x6: decode VEX_L { |
| 0x0: decode MODRM_MOD { |
| 0x03: vmovlhps(); |
| 0x0: vmovhps(); |
| } |
| default: Inst::UD2(); |
| } |
| 0x7: decode VEX_L { |
| 0x0: vmovhps(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_VVVV { |
| 0x15: vmovupd(); |
| default: Inst::UD2(); |
| } |
| 0x1: decode VEX_VVVV { |
| 0x15: vmovupd(); |
| default: Inst::UD2(); |
| } |
| 0x2: decode VEX_L { |
| 0x0: vmovlpd(); |
| default: Inst::UD2(); |
| } |
| 0x3: decode VEX_L { |
| 0x0: vmovlpd(); |
| default: Inst::UD2(); |
| } |
| 0x4: vunpcklpd(); |
| 0x5: vunpckhpd(); |
| 0x6: decode VEX_L { |
| 0x0: vmovhpd(); |
| default: Inst::UD2(); |
| } |
| 0x7: decode VEX_L { |
| 0x0: vmovhpd(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x2: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode MODRM_MOD { |
| 0x03: vmovss(); |
| default: vmovss(); |
| } |
| 0x1: decode MODRM_MOD { |
| 0x03: vmovss(); |
| default: vmovss(); |
| } |
| 0x2: decode VEX_VVVV { |
| 0x15: vmovsldup(); |
| default: Inst::UD2(); |
| } |
| 0x6: decode VEX_VVVV { |
| 0x15: vmovshdup(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x3: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode MODRM_MOD { |
| 0x03: vmovsd(); |
| default: vmovsd(); |
| } |
| 0x1: decode MODRM_MOD { |
| 0x03: vmovsd(); |
| default: vmovsd(); |
| } |
| 0x2: decode VEX_VVVV { |
| 0x15: decode VEX_L { |
| 0x0: vmovddup(); |
| default: vmovddup(); |
| } |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x0A: decode VEX_PP { |
| 0x0: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_VVVV { |
| 0x15: vmovmskps(); |
| default: Inst::UD2(); |
| } |
| 0x1: decode VEX_VVVV { |
| 0x015: vsqrtps(); |
| default: Inst::UD2(); |
| } |
| 0x2: decode VEX_VVVV { |
| 0x15: vrsqrtps(); |
| default: Inst::UD2(); |
| } |
| 0x3: decode VEX_VVVV { |
| 0x15: vrcpps(); |
| default: Inst::UD2(); |
| } |
| 0x4: vandps(); |
| 0x5: vandnps(); |
| 0x6: vorps(); |
| 0x7: vxorps(); |
| default: Inst::UD2(); |
| } |
| |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_VVVV { |
| 0x15: vmovmskpd(); |
| default: Inst::UD2(); |
| } |
| 0x1: decode VEX_VVVV { |
| 0x15: vsqrtpd(); |
| default: Inst::UD2(); |
| } |
| 0x4: vandpd(); |
| 0x5: vandnpd(); |
| 0x6: vorpd(); |
| 0x7: vxorpd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x2: decode OPCODE_OP_BOTTOM3 { |
| 0x1: vsqrtss(); |
| 0x2: vrsqrtss(); |
| 0x3: vrcpss(); |
| default: Inst::UD2(); |
| } |
| |
| 0x3: decode OPCODE_OP_BOTTOM3 { |
| 0x1: vsqrtsd(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x0C: decode VEX_PP { |
| 0x1: decode VEX_L { |
| 0x0: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vpunpcklbw(); |
| 0x1: vpunpcklwd(); |
| 0x2: vpunpckldq(); |
| 0x3: vpacksswb(); |
| 0x4: vpcmpgtb(); |
| 0x5: vpcmpgtw(); |
| 0x6: vpcmpgtd(); |
| 0x7: vpackuswb(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x0E: decode VEX_PP { |
| 0x0: decode OPCODE_OP_BOTTOM3 { |
| 0x7: decode VEX_L { |
| 0x0: vzeroupper(); |
| 0x1: vzeroall(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_VVVV { |
| 0x15: vpshufd(); |
| default: Inst::UD2(); |
| } |
| 0x1: decode VEX_L { |
| 0x0: decode MODRM_REG { |
| 0x2: vpsrlw(); |
| 0x4: vpsraw(); |
| 0x6: vpsllw(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x2: decode VEX_L { |
| 0x0: decode MODRM_REG { |
| 0x2: vpsrld(); |
| 0x4: vpsrad(); |
| 0x6: vpslld(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x3: decode VEX_L { |
| 0x0: decode MODRM_REG { |
| 0x2: vpsrlq(); |
| 0x3: vpsrldq(); |
| 0x6: vpsllq(); |
| 0x7: vpslldq(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x4: decode VEX_L { |
| 0x0: vpcmpeqb(); |
| default: Inst::UD2(); |
| } |
| |
| 0x5: decode VEX_L { |
| 0x0: vpcmpeqw(); |
| default: Inst::UD2(); |
| } |
| 0x6: decode VEX_L { |
| 0x0: vpcmpeqd(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| 0x2: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_VVVV { |
| 0x15: decode VEX_L { |
| 0x0: vpshufhw(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| 0x3: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_VVVV { |
| 0x15: decode VEX_L { |
| 0x0: vpshuflw(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x18: decode VEX_PP { |
| 0x0: decode OPCODE_OP_BOTTOM3 { |
| 0x2: vcmpccps(); |
| 0x6: vshufps(); |
| default: Inst::UD2(); |
| } |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x2: vcmpccpd(); |
| 0x4: decode MODRM_MOD { |
| 0x03: vpinsrw(); |
| default: vpinsrw(); |
| } |
| 0x5: decode VEX_VVVV { |
| 0x15: decode VEX_L { |
| 0x0: vpextrw(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| 0x6: vshufpd(); |
| default: Inst::UD2(); |
| } |
| 0x2: decode OPCODE_OP_BOTTOM3 { |
| 0x2: vcmpccss(); |
| default: Inst::UD2(); |
| } |
| 0x3: decode OPCODE_OP_BOTTOM3 { |
| 0x2: vcmpccsd(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x1A: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vaddsubpd(); |
| 0x1: decode VEX_L { |
| 0x0: vpsrlw(); |
| default: Inst::UD2(); |
| } |
| 0x2: decode VEX_L { |
| 0x0: vpsrld(); |
| default: Inst::UD2(); |
| } |
| 0x3: decode VEX_L { |
| 0x0: vpsrlq(); |
| default: Inst::UD2(); |
| } |
| 0x4: decode VEX_L { |
| 0x0: vpaddq(); |
| default: Inst::UD2(); |
| } |
| 0x5: decode VEX_L { |
| 0x0: vpmullw(); |
| default: Inst::UD2(); |
| } |
| 0x6: decode VEX_VVVV { |
| 0x15: decode VEX_L { |
| 0x0: vmovq(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| 0x7: decode VEX_VVVV { |
| 0x15: vpmovmskb(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| 0x3: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vaddsubps(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x1C: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_L { |
| 0x0: vpavgb(); |
| default: Inst::UD2(); |
| } |
| 0x1: vpsraw(); |
| 0x2: vpsrad(); |
| 0x3: decode VEX_L { |
| 0x0: vpavgw(); |
| default: Inst::UD2(); |
| } |
| 0x4: vpmulhuw(); |
| 0x5: vpmulhw(); |
| 0x6: vcvttpd2dq(); |
| 0x7: decode VEX_VVVV { |
| 0x015: decode VEX_L { |
| 0x0: vmovntdq(); |
| default: vmovntdq(); |
| } |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x2: decode OPCODE_OP_BOTTOM3 { |
| 0x6: vcvtdq2pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x3: decode OPCODE_OP_BOTTOM3 { |
| 0x6: vcvtpd2dq(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x1E: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x1: vpsllw(); |
| 0x2: vpslld(); |
| 0x3: vpsllq(); |
| 0x4: vpmuludq(); |
| 0x5: vpmaddwd(); |
| 0x6: vpsadbw(); |
| 0x7: decode VEX_L { |
| 0x0: vmaskmovdqu(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x3: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_L { |
| 0x0: vlddqu(); |
| default: vlddqu(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x05: decode VEX_PP { |
| 0x0: decode VEX_VVVV { |
| 0x15: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vmovaps(); |
| 0x1: vmovaps(); |
| 0x3: vmovntps(); |
| 0x6: vucomiss(); |
| 0x7: vcomiss(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x1: decode VEX_VVVV { |
| 0x15: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vmovapd(); |
| 0x1: vmovapd(); |
| 0x3: vmovntpd(); |
| 0x6: vucomisd(); |
| 0x7: vcomisd(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x2: decode OPCODE_OP_BOTTOM3 { |
| 0x2: vcvtsi2ss(); |
| 0x4: vcvttss2si(); |
| 0x5: vcvtss2si(); |
| default: Inst::UD2(); |
| } |
| |
| 0x3: decode OPCODE_OP_BOTTOM3 { |
| 0x2: vcvtsi2sd(); |
| 0x4: vcvttsd2si(); |
| 0x5: vcvtsd2si(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x0B: decode VEX_PP { |
| 0x0: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vaddps(); |
| 0x1: vmulps(); |
| 0x2: vcvtps2pd(); |
| 0x3: vcvtdq2ps(); |
| 0x4: vsubps(); |
| 0x5: vminps(); |
| 0x6: vdivps(); |
| 0x7: vmaxps(); |
| default: Inst::UD2(); |
| } |
| |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vaddpd(); |
| 0x1: vmulpd(); |
| 0x2: vcvtpd2ps(); |
| 0x3: vcvtps2dq(); |
| 0x4: vsubpd(); |
| 0x5: vminpd(); |
| 0x6: vdivpd(); |
| 0x7: vmaxpd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x2: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vaddss(); |
| 0x1: vmulss(); |
| 0x2: vcvtss2sd(); |
| 0x3: vcvttps2dq(); |
| 0x4: vsubss(); |
| 0x5: vminss(); |
| 0x6: vdivss(); |
| 0x7: vmaxss(); |
| default: Inst::UD2(); |
| } |
| |
| 0x3: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vaddsd(); |
| 0x1: vmulsd(); |
| 0x2: vcvtsd2ss(); |
| 0x4: vsubsd(); |
| 0x5: vminsd(); |
| 0x6: vdivsd(); |
| 0x7: vmaxsd(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x0D: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vpunpckhbw(); |
| 0x1: vpunpckhbd(); |
| 0x2: vpunpckhdq(); |
| 0x3: decode VEX_L { |
| 0x0: vpackssdw(); |
| default: Inst::UD2(); |
| } |
| 0x4: vpunpcklqdq(); |
| 0x5: vpunpckhqdq(); |
| 0x6: decode VEX_L { |
| 0x0: vmovdvmovq(); |
| default: Inst::UD2(); |
| } |
| 0x7: decode VEX_VVVV { |
| 0x15: vmovdqa(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x2: decode OPCODE_OP_BOTTOM3 { |
| 0x7: vmovdqu(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x0F: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x4: vhaddpd(); |
| 0x5: vhsubpd(); |
| 0x6: decode VEX_L { |
| 0x1: vmovdvmovq(); |
| default: Inst::UD2(); |
| } |
| 0x7: decode VEX_VVVV { |
| 0x15: vmovdqa(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x2: decode OPCODE_OP_BOTTOM3 { |
| 0x6: decode VEX_L { |
| 0x0: vmovq(); |
| default: Inst::UD2(); |
| } |
| 0x7: vmovdqu(); |
| default: Inst::UD2(); |
| } |
| |
| 0x3: decode OPCODE_OP_BOTTOM3 { |
| 0x4: vhaddps(); |
| 0x5: vhsubps(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x15: decode VEX_PP { |
| 0x0: decode OPCODE_OP_BOTTOM3 { |
| 0x6: decode MODRM_REG { |
| 0x2: vldmxcsr(); |
| 0x3: vstmxcsr(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| 0x1B: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vpsubusb(); |
| 0x1: vpsubusw(); |
| 0x2: vpminub(); |
| 0x3: decode VEX_L { |
| 0x0: vpand(); |
| default: Inst::UD2(); |
| } |
| 0x4: vpaddusb(); |
| 0x5: decode VEX_L { |
| 0x0: vpaddusw(); |
| default: Inst::UD2(); |
| } |
| 0x6: vpmaxub(); |
| 0x7: decode VEX_L { |
| 0x0: vpandn(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x1D: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vpsubsb(); |
| 0x1: vpsubsw(); |
| 0x2: vpminsw(); |
| 0x3: vpor(); |
| 0x4: decode VEX_L { |
| 0x0: vpaddsb(); |
| default: Inst::UD2(); |
| } |
| 0x5: decode VEX_L { |
| 0x0: vpaddsw(); |
| default: Inst::UD2(); |
| } |
| 0x6: vpmaxsw(); |
| 0x7: vpxor(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x1F: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vpsubb(); |
| 0x1: vpsubw(); |
| 0x2: vpsubd(); |
| 0x3: vpsubq(); |
| 0x4: vpaddb(); |
| 0x5: decode VEX_L { |
| 0x0: vpaddw(); |
| default: Inst::UD2(); |
| } |
| 0x6: decode VEX_L { |
| 0x0: vpaddd(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x02: decode OPCODE_OP_TOP5 { |
| 0x00: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vpshufb(); |
| 0x1: vphaddw(); |
| 0x2: vphaddd(); |
| 0x3: vphaddsw(); |
| 0x4: vpmaddubsw(); |
| 0x5: vphsubw(); |
| 0x6: vphsubd(); |
| 0x7: vphsubsw(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x02: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x3: vcvtph2ps(); |
| 0x7: vptest(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x04: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vpmovsxbw(); |
| 0x1: vpmovsxbd(); |
| 0x2: vpmovsxbq(); |
| 0x3: vpmovsxwd(); |
| 0x4: vpmovsxwq(); |
| 0x5: vpmovsxdq(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x06: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vpmovzxbw(); |
| 0x1: vpmovzxbd(); |
| 0x2: vpmovzxbq(); |
| 0x3: vpmovzxwd(); |
| 0x4: vpmovzxwq(); |
| 0x5: vpmovzxdq(); |
| 0x7: vpcmpgtq(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x08: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vpmulld(); |
| 0x1: vphminposuw(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x12: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x6: decode VEX_W { |
| 0x0: vfmaddsub132ps(); |
| 0x1: vfmaddsub132pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x7: decode VEX_W { |
| 0x0: vfmsubadd132ps(); |
| 0x1: vfmaddsub132pd(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x14: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x6: decode VEX_W { |
| 0x0: vfmaddsub213ps(); |
| 0x1: vfmaddsub213pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x7: decode VEX_W { |
| 0x0: vfmsubadd213ps(); |
| 0x1: vfmaddsub213pd(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x16: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x6: decode VEX_W { |
| 0x0: vfmaddsub231ps(); |
| 0x1: vfmaddsub231pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x7: decode VEX_W { |
| 0x0: vfmsubadd231ps(); |
| 0x1: vfmaddsub231pd(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x1E: decode VEX_PP { |
| 0x0: decode OPCODE_OP_BOTTOM3 { |
| 0x2: andn(); |
| 0x3: decode MODRM_REG { |
| 0x1: blsr(); |
| 0x2: blsmsk(); |
| 0x3: blsi(); |
| default: Inst::UD2(); |
| } |
| |
| 0x7: bextr(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x01: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vpsignb(); |
| 0x1: vpsignw(); |
| 0x2: vpsignd(); |
| 0x3: vpmulhrsw(); |
| 0x4: vpermilps(); |
| 0x5: vpermilpd(); |
| 0x6: vtestps(); |
| 0x7: vtestpd(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x03: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vbroadcastss(); |
| 0x1: decode VEX_L { |
| 0x1: vbroadcastsd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x2: decode VEX_L { |
| 0x1: vbroadcastF128(); |
| default: Inst::UD2(); |
| } |
| |
| 0x4: decode VEX_L { |
| 0x0: vpabsb(); |
| default: Inst::UD2(); |
| } |
| 0x5: decode VEX_L { |
| 0x0: vpabsw(); |
| default: Inst::UD2(); |
| } |
| 0x6: decode VEX_L { |
| 0x0: vpabsd(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x05: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vpmuldq(); |
| 0x1: vpcmpeqq(); |
| 0x2: decode VEX_VVVV { |
| 0x15: vmovntdqa(); |
| default: Inst::UD2(); |
| } |
| 0x3: decode VEX_L { |
| 0x0: vpackusdw(); |
| default: Inst::UD2(); |
| } |
| 0x4: vmaskmovps(); |
| 0x5: vmaskmovpd(); |
| 0x6: vmaskmovps(); |
| 0x7: vmaskmovpd(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x07: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vpminsb(); |
| 0x1: vpminsd(); |
| 0x2: vpminuw(); |
| 0x3: vpminud(); |
| 0x4: vpmaxsb(); |
| 0x5: vpmaxsd(); |
| 0x6: vpmaxuw(); |
| 0x7: vpmaxud(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x0B: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x2: vbroadcasti128(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x13: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_W { |
| 0x0: vfmadd132ps(); |
| 0x1: vfmadd132pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x1: decode VEX_W { |
| 0x0: vfmadd132ss(); |
| 0x1: vfmadd132sd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x2: decode VEX_W { |
| 0x0: vfmsub132ps(); |
| 0x1: vfmsub132pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x3: decode VEX_W { |
| 0x0: vfmsub132ss(); |
| 0x1: vfmsub132sd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x4: decode VEX_W { |
| 0x0: vfnmadd132ps(); |
| 0x1: vfnmadd132pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x5: decode VEX_W { |
| 0x0: vfnmadd132ss(); |
| 0x1: vfnmadd132sd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x6: decode VEX_W { |
| 0x0: vfnsub132ps(); |
| 0x1: vfnsub132pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x7: decode VEX_W { |
| 0x0: vfnsub132ss(); |
| 0x1: vfnsub132sd(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x15: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_W { |
| 0x0: vfmadd213ps(); |
| 0x1: vfmadd213pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x1: decode VEX_W { |
| 0x0: vfmadd213ss(); |
| 0x1: vfmadd213sd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x2: decode VEX_W { |
| 0x0: vfmsub213ps(); |
| 0x1: vfmsub213pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x3: decode VEX_W { |
| 0x0: vfmsub213ss(); |
| 0x1: vfmsub213sd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x4: decode VEX_W { |
| 0x0: vfnmadd213ps(); |
| 0x1: vfnmadd213pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x5: decode VEX_W { |
| 0x0: vfnmadd213ss(); |
| 0x1: vfnmadd213sd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x6: decode VEX_W { |
| 0x0: vfnsub213ps(); |
| 0x1: vfnsub213pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x7: decode VEX_W { |
| 0x0: vfnsub213ss(); |
| 0x1: vfnsub213sd(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x17: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_W { |
| 0x0: vfmadd231ps(); |
| 0x1: vfmadd231pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x1: decode VEX_W { |
| 0x0: vfmadd231ss(); |
| 0x1: vfmadd231sd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x2: decode VEX_W { |
| 0x0: vfmsub231ps(); |
| 0x1: vfmsub231pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x3: decode VEX_W { |
| 0x0: vfmsub231ss(); |
| 0x1: vfmsub231sd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x4: decode VEX_W { |
| 0x0: vfnmadd231ps(); |
| 0x1: vfnmadd231pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x5: decode VEX_W { |
| 0x0: vfnmadd231ss(); |
| 0x1: vfnmadd231sd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x6: decode VEX_W { |
| 0x0: vfnsub231ps(); |
| 0x1: vfnsub231pd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x7: decode VEX_W { |
| 0x0: vfnsub231ss(); |
| 0x1: vfnsub231sd(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x1B: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x3: vaesimc(); |
| 0x4: vaesenc(); |
| 0x5: vaesenclast(); |
| 0x6: vaesdec(); |
| 0x7: vaesdeclast(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x03: decode OPCODE_OP_TOP5 { |
| 0x00: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x4: vpermilps(); |
| 0x5: vpermilpd(); |
| 0x6: vperm2f128(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x02: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x4: decode MODRM_MOD { |
| 0x03: vpextrb(); |
| default: vpextrb(); |
| } |
| |
| 0x5: decode VEX_VVVV { |
| 0x15: decode VEX_L { |
| 0x0: decode MODRM_MOD { |
| 0x03: vpextrw(); |
| default: vpextrw(); |
| } |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| 0x6: decode VEX_W { |
| 0x0: vpextrd(); |
| 0x1: vpextrq(); |
| default: Inst::UD2(); |
| } |
| 0x7: decode MODRM_MOD { |
| 0x03: vextractps(); |
| default: vextractps(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x04: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode MODRM_MOD { |
| 0x03: vpinsrb(); |
| default: vpinsrb(); |
| } |
| 0x1: decode MODRM_MOD { |
| 0x03: vinsertps(); |
| default: vinsertps(); |
| } |
| 0x2: decode VEX_W { |
| 0x0: vpinsrd(); |
| 0x1: vpinsrq(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x08: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vdpps(); |
| 0x1: vdppd(); |
| 0x2: decode VEX_L { |
| 0x0: vmpsadbw(); |
| default: Inst::UD2(); |
| } |
| 0x4: vpclmulqdq(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x0C: decode VEX_PP { |
| 0x1: decode VEX_L { |
| 0x0: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_VVVV { |
| 0x15: vpcmpestrm(); |
| default: Inst::UD2(); |
| } |
| 0x1: decode VEX_VVVV { |
| 0x15: vpcmpestri(); |
| default: Inst::UD2(); |
| } |
| 0x2: vpcmpistrm(); |
| 0x3: vpcmpistri(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x01: decode VEX_PP { |
| 0x0: decode OPCODE_OP_BOTTOM3 { |
| 0x7: palignr(); |
| default: Inst::UD2(); |
| } |
| |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_VVVV { |
| 0x15: vroundps(); |
| default: Inst::UD2(); |
| } |
| 0x1: decode VEX_VVVV { |
| 0x15: vroundpd(); |
| default: Inst::UD2(); |
| } |
| 0x2: vroundss(); |
| 0x3: vroundsd(); |
| 0x4: vblendps(); |
| 0x5: vblendpd(); |
| 0x6: decode VEX_L { |
| 0x0: vpblendw(); |
| default: Inst::UD2(); |
| } |
| 0x7: decode VEX_L { |
| 0x0: vpalignr(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x03: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vinsertf128(); |
| 0x1: vextractf128(); |
| 0x5: vcvtps2ph(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x09: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: vpermil2ps(); |
| 0x1: vpermil2pd(); |
| 0x2: vblendvps(); |
| 0x3: vblendvpd(); |
| 0x4: decode VEX_L { |
| 0x0: decode VEX_W { |
| 0x0: vpblendvb(); |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x0B: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x4: decode VEX_W { |
| 0x0: vfmaddsubps(); |
| 0x1: vfmaddsubps(); |
| default: Inst::UD2(); |
| } |
| |
| 0x5: decode VEX_W { |
| 0x0: vfmaddsubpd(); |
| 0x1: vfmaddsubpd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x6: decode VEX_W { |
| 0x0: vfmsubaddps(); |
| 0x1: vfmsubaddps(); |
| default: Inst::UD2(); |
| } |
| |
| 0x7: decode VEX_W { |
| 0x0: vfmsubaddpd(); |
| 0x1: vfmsubaddpd(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x0D: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_W { |
| 0x0: vfmaddps(); |
| 0x1: vfmaddps(); |
| default: Inst::UD2(); |
| } |
| |
| 0x1: decode VEX_W { |
| 0x0: vfmaddpd(); |
| 0x1: vfmaddpd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x2: decode VEX_W { |
| 0x0: vfmaddss(); |
| 0x1: vfmaddss(); |
| default: Inst::UD2(); |
| } |
| |
| 0x3: decode VEX_W { |
| 0x0: vfmaddsd(); |
| 0x1: vfmaddsd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x4: decode VEX_W { |
| 0x0: vfmsubps(); |
| 0x1: vfmsubps(); |
| default: Inst::UD2(); |
| } |
| |
| 0x5: decode VEX_W { |
| 0x0: vfmsubpd(); |
| 0x1: vfmsubpd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x6: decode VEX_W { |
| 0x0: vfmsubss(); |
| 0x1: vfmsubss(); |
| default: Inst::UD2(); |
| } |
| |
| 0x7: decode VEX_W { |
| 0x0: vfmsubsd(); |
| 0x1: vfmsubsd(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x0F: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x0: decode VEX_W { |
| 0x0: vfnmaddps(); |
| 0x1: vfnmaddps(); |
| default: Inst::UD2(); |
| } |
| |
| 0x1: decode VEX_W { |
| 0x0: vfnmaddpd(); |
| 0x1: vfnmaddpd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x2: decode VEX_W { |
| 0x0: vfnmaddss(); |
| 0x1: vfnmaddss(); |
| default: Inst::UD2(); |
| } |
| |
| 0x3: decode VEX_W { |
| 0x0: vfnmaddsd(); |
| 0x1: vfnmaddsd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x4: decode VEX_W { |
| 0x0: vfnmsubps(); |
| 0x1: vfnmsubps(); |
| default: Inst::UD2(); |
| } |
| |
| 0x5: decode VEX_W { |
| 0x0: vfnmsubpd(); |
| 0x1: vfnmsubpd(); |
| default: Inst::UD2(); |
| } |
| |
| 0x6: decode VEX_W { |
| 0x0: vfnmsubss(); |
| 0x1: vfnmsubss(); |
| default: Inst::UD2(); |
| } |
| |
| 0x7: decode VEX_W { |
| 0x0: vfnmsubsd(); |
| 0x1: vfnmsubsd(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| 0x1B: decode VEX_PP { |
| 0x1: decode OPCODE_OP_BOTTOM3 { |
| 0x7: vaeskeygenassist(); |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| |
| default: Inst::UD2(); |
| } |
| } |