diff options
Diffstat (limited to 'src/arch/x86/isa/decoder/vex_opcodes.isa')
-rw-r--r-- | src/arch/x86/isa/decoder/vex_opcodes.isa | 1431 |
1 files changed, 0 insertions, 1431 deletions
diff --git a/src/arch/x86/isa/decoder/vex_opcodes.isa b/src/arch/x86/isa/decoder/vex_opcodes.isa deleted file mode 100644 index 0f412feee..000000000 --- a/src/arch/x86/isa/decoder/vex_opcodes.isa +++ /dev/null @@ -1,1431 +0,0 @@ -// 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(); - } -} |