jwasm/H/instravx.h
2014-06-18 19:16:56 +04:00

265 lines
16 KiB
C

/****************************************************************************
*
* Description: AVX instructions with VEX prefix
*
****************************************************************************/
#if AVXSUPP
/* tok cpu */
/* format: xmm|ymm, xmm|ymm|mem */
avxins (ADDPD, vaddpd, P_AVX, VX_L ) /* L, s */
avxins (ADDPS, vaddps, P_AVX, VX_L ) /* L, s */
avxins (ADDSD, vaddsd, P_AVX, 0 ) /* -, s */
avxins (ADDSS, vaddss, P_AVX, 0 ) /* -, s */
avxins (DIVPD, vdivpd, P_AVX, VX_L ) /* L, s */
avxins (DIVPS, vdivps, P_AVX, VX_L ) /* L, s */
avxins (DIVSD, vdivsd, P_AVX, 0 ) /* -, s */
avxins (DIVSS, vdivss, P_AVX, 0 ) /* -, s */
avxins (MAXPD, vmaxpd, P_AVX, VX_L ) /* L, s */
avxins (MAXPS, vmaxps, P_AVX, VX_L ) /* L, s */
avxins (MAXSD, vmaxsd, P_AVX, 0 ) /* -, s */
avxins (MAXSS, vmaxss, P_AVX, 0 ) /* -, s */
avxins (MINPD, vminpd, P_AVX, VX_L ) /* L, s */
avxins (MINPS, vminps, P_AVX, VX_L ) /* L, s */
avxins (MINSD, vminsd, P_AVX, 0 ) /* -, s */
avxins (MINSS, vminss, P_AVX, 0 ) /* -, s */
avxins (MULPD, vmulpd, P_AVX, VX_L ) /* L, s */
avxins (MULPS, vmulps, P_AVX, VX_L ) /* L, s */
avxins (MULSD, vmulsd, P_AVX, 0 ) /* -, s */
avxins (MULSS, vmulss, P_AVX, 0 ) /* -, s */
avxins (SQRTPD, vsqrtpd, P_AVX, VX_L ) /* L, s */
avxins (SQRTPS, vsqrtps, P_AVX, VX_L ) /* L, s */
avxins (SQRTSD, vsqrtsd, P_AVX, 0 ) /* -, s */
avxins (SQRTSS, vsqrtss, P_AVX, 0 ) /* -, s */
avxins (SUBPD, vsubpd, P_AVX, VX_L ) /* L, s */
avxins (SUBPS, vsubps, P_AVX, VX_L ) /* L, s */
avxins (SUBSD, vsubsd, P_AVX, 0 ) /* -, s */
avxins (SUBSS, vsubss, P_AVX, 0 ) /* -, s */
avxins (CMPPD, vcmppd, P_AVX, VX_L ) /* L, s */
avxins (CMPPS, vcmpps, P_AVX, VX_L ) /* L, s */
avxins (CMPSD, vcmpsd, P_AVX, 0 ) /* -, s */
avxins (CMPSS, vcmpss, P_AVX, 0 ) /* -, s */
/* format: xmm|ymm, xmm|ymm|mem */
avxins (ANDPD, vandpd, P_AVX, VX_L ) /* L, s */
avxins (ANDPS, vandps, P_AVX, VX_L ) /* L, s */
avxins (ANDNPD, vandnpd, P_AVX, VX_L ) /* L, s */
avxins (ANDNPS, vandnps, P_AVX, VX_L ) /* L, s */
avxins (ORPD, vorpd, P_AVX, VX_L ) /* L, s */
avxins (ORPS, vorps, P_AVX, VX_L ) /* L, s */
avxins (COMISD, vcomisd, P_AVX, VX_NND ) /* -, ns */
avxins (COMISS, vcomiss, P_AVX, VX_NND ) /* -, ns */
avxins (XORPD, vxorpd, P_AVX, VX_L ) /* L, s */
avxins (XORPS, vxorps, P_AVX, VX_L ) /* L, s */
/* format: xmm|ymm, xmm|ymm|mem */
avxins (CVTDQ2PD, vcvtdq2pd, P_AVX, VX_L|VX_NND|VX_HALF ) /* L, ns, 64->128 */
avxins (CVTDQ2PS, vcvtdq2ps, P_AVX, VX_L|VX_NND ) /* L, ns */
//avxins (CVTPD2DQ, vcvtpd2dq, P_AVX, VX_L|VX_NND ) /* L, ns */
//avxins (CVTTPD2DQ,vcvttpd2dq, P_AVX, VX_L|VX_NND ) /* L, ns */
//avxins (CVTPD2PS, vcvtpd2ps, P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (CVTPS2DQ, vcvtps2dq, P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (CVTTPS2DQ,vcvttps2dq, P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (CVTPS2PD, vcvtps2pd, P_AVX, VX_L|VX_NND|VX_HALF ) /* L, ns, 64->128 */
avxins (CVTSD2SI, vcvtsd2si, P_AVX, VX_NND ) /* -, ns, W */
avxins (CVTTSD2SI,vcvttsd2si, P_AVX, VX_NND ) /* -, ns, W */
avxins (CVTSD2SS, vcvtsd2ss, P_AVX, 0 ) /* -, s */
avxins (CVTSI2SD, vcvtsi2sd, P_AVX, 0 ) /* -, s, W */
avxins (CVTSI2SS, vcvtsi2ss, P_AVX, 0 ) /* -, s, W */
avxins (CVTSS2SD, vcvtss2sd, P_AVX, 0 ) /* -, s */
avxins (CVTSS2SI, vcvtss2si, P_AVX, VX_NND ) /* -, ns, W */
avxins (CVTTSS2SI,vcvttss2si, P_AVX, VX_NND ) /* -, ns, W */
/* format: xmm|ymm, xmm|ymm|mem [, i8] */
avxins (ADDSUBPD, vaddsubpd, P_AVX, VX_L ) /* L, s */
avxins (ADDSUBPS, vaddsubps, P_AVX, VX_L ) /* L, s */
avxins (BLENDPD , vblendpd , P_AVX, VX_L ) /* L, s */
avxins (BLENDPS , vblendps , P_AVX, VX_L ) /* L, s */
avxins (DPPD , vdppd , P_AVX, 0 ) /* -, s */
avxins (DPPS , vdpps , P_AVX, VX_L ) /* L, s */
avxins (EXTRACTPS,vextractps, P_AVX, VX_NND ) /* -, ns! */ /* format: reg|mem32, xmm|ymm, i8 */
avxins (HADDPD , vhaddpd , P_AVX, VX_L ) /* L, s */
avxins (HADDPS , vhaddps , P_AVX, VX_L ) /* L, s */
avxins (HSUBPD , vhsubpd , P_AVX, VX_L ) /* L, s */
avxins (HSUBPS , vhsubps , P_AVX, VX_L ) /* L, s */
avxins (INSERTPS, vinsertps, P_AVX, 0 ) /* -, s */
avxins (LDDQU , vlddqu , P_AVX, VX_L|VX_NND ) /* L, ns */ /* format: xmm|ymm, mem */
avxins (LDMXCSR , vldmxcsr , P_AVX, 0 ) /* -, ns */ /* format: mem32 */
avxins (STMXCSR , vstmxcsr , P_AVX, 0 ) /* -, ns */ /* format: mem32 */
avxins (MASKMOVDQU,vmaskmovdqu, P_AVX, VX_NND ) /* -, ns */
avxins (MOVAPD , vmovapd , P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (MOVAPS , vmovaps , P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (MOVD , vmovd , P_AVX, VX_NND ) /* -, ns */
avxins (MOVQ , vmovq , P_AVX, VX_NND ) /* -, ns */
avxins (MOVDQA , vmovdqa , P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (MOVDQU , vmovdqu , P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (MOVHLPS , vmovhlps , P_AVX, 0 ) /* -, s */
avxins (MOVLHPS , vmovlhps , P_AVX, 0 ) /* -, s */
avxins (MOVHPD , vmovhpd , P_AVX, VX_NMEM ) /* -, s/ns! */
avxins (MOVHPS , vmovhps , P_AVX, VX_NMEM ) /* -, s/ns! */
avxins (MOVLPD , vmovlpd , P_AVX, VX_NMEM ) /* -, s/ns! */
avxins (MOVLPS , vmovlps , P_AVX, VX_NMEM ) /* -, s/ns! */
avxins (MOVSD , vmovsd , P_AVX, VX_NMEM ) /* -, s/ns! */ /* special case, see parser.c */
avxins (MOVSS , vmovss , P_AVX, VX_NMEM ) /* -, s/ns! */ /* special case, see parser.c */
/* v2.11: now handled in instruct.h */
//avxins (MOVMSKPD, vmovmskpd, P_AVX, VX_L|VX_NND ) /* L, ns */
//avxins (MOVMSKPS, vmovmskps, P_AVX, VX_L|VX_NND ) /* L, ns */
/* v2.11: VX_L flag added */
//avxins (MOVNTDQ , vmovntdq , P_AVX, VX_NND ) /* -, ns */
//avxins (MOVNTPD , vmovntpd , P_AVX, VX_NND ) /* -, ns */
//avxins (MOVNTPS , vmovntps , P_AVX, VX_NND ) /* -, ns */
avxins (MOVNTDQ , vmovntdq , P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (MOVNTDQA, vmovntdqa, P_AVX, VX_NND ) /* -, ns */
avxins (MOVNTPD , vmovntpd , P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (MOVNTPS , vmovntps , P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (MOVSHDUP, vmovshdup, P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (MOVSLDUP, vmovsldup, P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (MOVUPD , vmovupd , P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (MOVUPS , vmovups , P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (MPSADBW , vmpsadbw , P_AVX, 0 ) /* -, s */
avxins (PABSB , vpabsb , P_AVX, VX_NND ) /* -, ns */
avxins (PABSW , vpabsw , P_AVX, VX_NND ) /* -, ns */
avxins (PABSD , vpabsd , P_AVX, VX_NND ) /* -, ns */
avxins (PACKSSWB, vpacksswb, P_AVX, 0 ) /* -, s */
avxins (PACKSSDW, vpackssdw, P_AVX, 0 ) /* -, s */
avxins (PACKUSWB, vpackuswb, P_AVX, 0 ) /* -, s */
avxins (PACKUSDW, vpackusdw, P_AVX, 0 ) /* -, s */
avxins (PADDB , vpaddb , P_AVX, 0 ) /* -, s */
avxins (PADDW , vpaddw , P_AVX, 0 ) /* -, s */
avxins (PADDD , vpaddd , P_AVX, 0 ) /* -, s */
avxins (PADDQ , vpaddq , P_AVX, 0 ) /* -, s */
avxins (PADDSB , vpaddsb , P_AVX, 0 ) /* -, s */
avxins (PADDSW , vpaddsw , P_AVX, 0 ) /* -, s */
avxins (PADDUSB , vpaddusb , P_AVX, 0 ) /* -, s */
avxins (PADDUSW , vpaddusw , P_AVX, 0 ) /* -, s */
avxins (PALIGNR , vpalignr , P_AVX, 0 ) /* -, s */
avxins (PAND , vpand , P_AVX, 0 ) /* -, s */
avxins (PANDN , vpandn , P_AVX, 0 ) /* -, s */
avxins (PAVGB , vpavgb , P_AVX, 0 ) /* -, s */
avxins (PAVGW , vpavgw , P_AVX, 0 ) /* -, s */
avxins (PBLENDW , vpblendw , P_AVX, 0 ) /* -, s */
avxins (PCMPESTRI,vpcmpestri, P_AVX, VX_NND ) /* -, ns! */
avxins (PCMPESTRM,vpcmpestrm, P_AVX, VX_NND ) /* -, ns! */
avxins (PCMPISTRI,vpcmpistri, P_AVX, VX_NND ) /* -, ns! */
avxins (PCMPISTRM,vpcmpistrm, P_AVX, VX_NND ) /* -, ns! */
avxins (PCMPEQB ,vpcmpeqb , P_AVX, 0 ) /* -, s */
avxins (PCMPEQW ,vpcmpeqw , P_AVX, 0 ) /* -, s */
avxins (PCMPEQD ,vpcmpeqd , P_AVX, 0 ) /* -, s */
avxins (PCMPEQQ ,vpcmpeqq , P_AVX, 0 ) /* -, s */
avxins (PCMPGTB ,vpcmpgtB , P_AVX, 0 ) /* -, s */
avxins (PCMPGTW ,vpcmpgtw , P_AVX, 0 ) /* -, s */
avxins (PCMPGTD ,vpcmpgtd , P_AVX, 0 ) /* -, s */
avxins (PCMPGTQ ,vpcmpgtq , P_AVX, 0 ) /* -, s */
avxins (PEXTRB ,vpextrb , P_AVX, VX_NND ) /* -, ns! */
avxins (PEXTRW ,vpextrw , P_AVX, VX_NND ) /* -, ns! */
avxins (PEXTRD ,vpextrd , P_AVX, VX_NND ) /* -, ns! */
avxins (PINSRB ,vpinsrb , P_AVX, 0 ) /* -, s */
avxins (PINSRW ,vpinsrw , P_AVX, 0 ) /* -, s */
avxins (PINSRD ,vpinsrd , P_AVX, 0 ) /* -, s */
#if AMD64_SUPPORT
avxins (PEXTRQ ,vpextrq , P_AVX, VX_NND ) /* -, ns! */
avxins (PINSRQ ,vpinsrq , P_AVX, 0 ) /* -, s */
#endif
avxins (PHADDW ,vphaddw , P_AVX, 0 ) /* -, s */
avxins (PHADDD ,vphaddd , P_AVX, 0 ) /* -, s */
avxins (PHADDSW ,vphaddsw , P_AVX, 0 ) /* -, s */
avxins (PHMINPOSUW,vphminposuw, P_AVX, VX_NND ) /* -, ns */
avxins (PHSUBW ,vphsubw , P_AVX, 0 ) /* -, s */
avxins (PHSUBD ,vphsubd , P_AVX, 0 ) /* -, s */
avxins (PHSUBSW ,vphsubsw , P_AVX, 0 ) /* -, s */
avxins (PMADDWD ,vpmaddwd , P_AVX, 0 ) /* -, s */
avxins (PMADDUBSW,vpmaddubsw, P_AVX, 0 ) /* -, s */
avxins (PMAXSB ,vpmaxsb , P_AVX, 0 ) /* -, s */
avxins (PMAXSW ,vpmaxsw , P_AVX, 0 ) /* -, s */
avxins (PMAXSD ,vpmaxsd , P_AVX, 0 ) /* -, s */
avxins (PMAXUB ,vpmaxub , P_AVX, 0 ) /* -, s */
avxins (PMAXUW ,vpmaxuw , P_AVX, 0 ) /* -, s */
avxins (PMAXUD ,vpmaxud , P_AVX, 0 ) /* -, s */
avxins (PMINSB ,vpminsb , P_AVX, 0 ) /* -, s */
avxins (PMINSW ,vpminsw , P_AVX, 0 ) /* -, s */
avxins (PMINSD ,vpminsd , P_AVX, 0 ) /* -, s */
avxins (PMINUB ,vpminub , P_AVX, 0 ) /* -, s */
avxins (PMINUW ,vpminuw , P_AVX, 0 ) /* -, s */
avxins (PMINUD ,vpminud , P_AVX, 0 ) /* -, s */
avxins (PMOVMSKB ,vpmovmskb , P_AVX, VX_NND ) /* -, ns */
avxins (PMOVSXBW ,vpmovsxbw , P_AVX, VX_NND ) /* -, ns */
avxins (PMOVSXBD ,vpmovsxbd , P_AVX, VX_NND ) /* -, ns */
avxins (PMOVSXBQ ,vpmovsxbq , P_AVX, VX_NND ) /* -, ns */
avxins (PMOVSXWD ,vpmovsxwd , P_AVX, VX_NND ) /* -, ns */
avxins (PMOVSXWQ ,vpmovsxwq , P_AVX, VX_NND ) /* -, ns */
avxins (PMOVSXDQ ,vpmovsxdq , P_AVX, VX_NND ) /* -, ns */
avxins (PMOVZXBW ,vpmovzxbw , P_AVX, VX_NND ) /* -, ns */
avxins (PMOVZXBD ,vpmovzxbd , P_AVX, VX_NND ) /* -, ns */
avxins (PMOVZXBQ ,vpmovzxbq , P_AVX, VX_NND ) /* -, ns */
avxins (PMOVZXWD ,vpmovzxwd , P_AVX, VX_NND ) /* -, ns */
avxins (PMOVZXWQ ,vpmovzxwq , P_AVX, VX_NND ) /* -, ns */
avxins (PMOVZXDQ ,vpmovzxdq , P_AVX, VX_NND ) /* -, ns */
avxins (PMULHUW ,vpmulhuw , P_AVX, 0 ) /* -, s */
avxins (PMULHRSW ,vpmulhrsw , P_AVX, 0 ) /* -, s */
avxins (PMULHW ,vpmulhw , P_AVX, 0 ) /* -, s */
avxins (PMULLW ,vpmullw , P_AVX, 0 ) /* -, s */
avxins (PMULLD ,vpmulld , P_AVX, 0 ) /* -, s */
avxins (PMULUDQ ,vpmuludq , P_AVX, 0 ) /* -, s */
avxins (PMULDQ ,vpmuldq , P_AVX, 0 ) /* -, s */
avxins (POR ,vpor , P_AVX, 0 ) /* -, s */
avxins (PSADBW ,vpsadbw , P_AVX, 0 ) /* -, s */
avxins (PSHUFB ,vpshufb , P_AVX, 0 ) /* -, s */
avxins (PSHUFD ,vpshufd , P_AVX, VX_NND ) /* -, ns! */
avxins (PSHUFHW ,vpshufhw , P_AVX, VX_NND ) /* -, ns! */
avxins (PSHUFLW ,vpshuflw , P_AVX, VX_NND ) /* -, ns! */
avxins (PSIGNB ,vpsignb , P_AVX, 0 ) /* -, s */
avxins (PSIGNW ,vpsignw , P_AVX, 0 ) /* -, s */
avxins (PSIGND ,vpsignd , P_AVX, 0 ) /* -, s */
avxins (PSLLDQ ,vpslldq , P_AVX, VX_DST ) /* -, d */
avxins (PSRLDQ ,vpsrldq , P_AVX, VX_DST ) /* -, d */
avxins (PSLLW ,vpsllw , P_AVX, VX_DST ) /* -, d/s */
avxins (PSLLD ,vpslld , P_AVX, VX_DST ) /* -, d/s */
avxins (PSLLQ ,vpsllq , P_AVX, VX_DST ) /* -, d/s */
avxins (PSRAW ,vpsraw , P_AVX, VX_DST ) /* -, d/s */
avxins (PSRAD ,vpsrad , P_AVX, VX_DST ) /* -, d/s */
avxins (PSRLW ,vpsrlw , P_AVX, VX_DST ) /* -, d/s */
avxins (PSRLD ,vpsrld , P_AVX, VX_DST ) /* -, d/s */
avxins (PSRLQ ,vpsrlq , P_AVX, VX_DST ) /* -, d/s */
/* */
avxins (PTEST ,vptest , P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (PSUBB ,vpsubb , P_AVX, 0 ) /* -, s */
avxins (PSUBW ,vpsubw , P_AVX, 0 ) /* -, s */
avxins (PSUBD ,vpsubd , P_AVX, 0 ) /* -, s */
avxins (PSUBQ ,vpsubq , P_AVX, 0 ) /* -, s */
avxins (PSUBSB ,vpsubsb , P_AVX, 0 ) /* -, s */
avxins (PSUBSW ,vpsubsw , P_AVX, 0 ) /* -, s */
avxins (PSUBUSB ,vpsubusb , P_AVX, 0 ) /* -, s */
avxins (PSUBUSW ,vpsubusw , P_AVX, 0 ) /* -, s */
avxins (PUNPCKHBW ,vpunpckhbw, P_AVX, 0 ) /* -, s */
avxins (PUNPCKHWD ,vpunpckhwd, P_AVX, 0 ) /* -, s */
avxins (PUNPCKHDQ ,vpunpckhdq, P_AVX, 0 ) /* -, s */
avxins (PUNPCKHQDQ,vpunpckhqdq, P_AVX, 0 ) /* -, s */
avxins (PUNPCKLBW ,vpunpcklbw, P_AVX, 0 ) /* -, s */
avxins (PUNPCKLWD ,vpunpcklwd, P_AVX, 0 ) /* -, s */
avxins (PUNPCKLDQ ,vpunpckldq, P_AVX, 0 ) /* -, s */
avxins (PUNPCKLQDQ,vpunpcklqdq, P_AVX, 0 ) /* -, s */
avxins (PXOR ,vpxor , P_AVX, 0 ) /* -, s */
avxins (RCPPS ,vrcpps , P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (RCPSS ,vrcpss , P_AVX, 0 ) /* -, s */
avxins (RSQRTPS ,vrsqrtps , P_AVX, VX_L|VX_NND ) /* L, ns */
avxins (RSQRTSS ,vrsqrtss , P_AVX, 0 ) /* -, s */
avxins (ROUNDPD ,vroundpd , P_AVX, VX_L|VX_NND ) /* L, ns! */
avxins (ROUNDPS ,vroundps , P_AVX, VX_L|VX_NND ) /* L, ns! */
avxins (ROUNDSD ,vroundsd , P_AVX, 0 ) /* -, s */
avxins (ROUNDSS ,vroundss , P_AVX, 0 ) /* -, s */
avxins (SHUFPD ,vshufpd , P_AVX, VX_L ) /* L, s */
avxins (SHUFPS ,vshufps , P_AVX, VX_L ) /* L, s */
avxins (UCOMISD ,vucomisd , P_AVX, VX_NND ) /* -, ns */
avxins (UCOMISS ,vucomiss , P_AVX, VX_NND ) /* -, ns */
avxins (UNPCKHPD ,vunpckhpd , P_AVX, VX_L ) /* L, s */
avxins (UNPCKHPS ,vunpckhps , P_AVX, VX_L ) /* L, s */
avxins (UNPCKLPD ,vunpcklpd , P_AVX, VX_L ) /* L, s */
avxins (UNPCKLPS ,vunpcklps , P_AVX, VX_L ) /* L, s */
#endif
//avxins (PCLMULQDQ,vpclmulqdq, P_AVX, 0 )