Promoted 256-Bit and 128-bit Arithmetic Arithmetic 算术指令 |
VSQRTPS | VSQRTPS xmm1, xmm2/m128 Computes Square Roots of the packed single precision floating-point values in xmm2/m128 and stores the result in xmm1. 计算源操作数(xmm2/m128)中的四个单精度浮点值的平方根,并将结果存储在目标操作数(xmm1)中 VSQRTPS ymm1, ymm2/m256 Computes Square Roots of the packed single precision floating-point values in ymm2/m256 and stores the result in ymm1. 计算源操作数(ymm2/m256)中的八个单精度浮点值的平方根,并将结果存储在目标操作数(ymm1)中 VSQRTPS (VEX.256 Encoded Version) DEST[31:0] := SQRT(SRC[31:0]) DEST[63:32] := SQRT(SRC[63:32]) DEST[95:64] := SQRT(SRC[95:64]) DEST[127:96] := SQRT(SRC[127:96]) DEST[159:128] := SQRT(SRC[159:128]) DEST[191:160] := SQRT(SRC[191:160]) DEST[223:192] := SQRT(SRC[223:192]) DEST[255:224] := SQRT(SRC[255:224]) VSQRTPS (VEX.128 Encoded Version) DEST[31:0] := SQRT(SRC[31:0]) DEST[63:32] := SQRT(SRC[63:32]) DEST[95:64] := SQRT(SRC[95:64]) DEST[127:96] := SQRT(SRC[127:96]) DEST[MAXVL-1:128] := 0 |
VRSQRTPS | VRSQRTPS xmm1, xmm2/m128 Computes the approximate reciprocals of the square roots of packed single precision values in xmm2/mem and stores the results in xmm1. 计算源操作数(xmm2/m128)中的四个单精度浮点值的近似倒数平方根,并将结果存储在目标操作数(xmm1)中。 VRSQRTPS ymm1, ymm2/m256 Computes the approximate reciprocals of the square roots of packed single precision values in ymm2/mem and stores the results in ymm1. 计算源操作数(ymm2/m256)中的八个单精度浮点值的近似倒数平方根,并将结果存储在目标操作数(ymm1)中。 倒数平方根是指一个数的平方根的倒数 VRSQRTPS (VEX.128 Encoded Version) DEST[31:0] := APPROXIMATE(1/SQRT(SRC[31:0])) DEST[63:32] := APPROXIMATE(1/SQRT(SRC1[63:32])) DEST[95:64] := APPROXIMATE(1/SQRT(SRC1[95:64])) DEST[127:96] := APPROXIMATE(1/SQRT(SRC2[127:96])) DEST[MAXVL-1:128] := 0 VRSQRTPS (VEX.256 Encoded Version) DEST[31:0] := APPROXIMATE(1/SQRT(SRC[31:0])) DEST[63:32] := APPROXIMATE(1/SQRT(SRC1[63:32])) DEST[95:64] := APPROXIMATE(1/SQRT(SRC1[95:64])) DEST[127:96] := APPROXIMATE(1/SQRT(SRC2[127:96])) DEST[159:128] := APPROXIMATE(1/SQRT(SRC2[159:128])) DEST[191:160] := APPROXIMATE(1/SQRT(SRC2[191:160])) DEST[223:192] := APPROXIMATE(1/SQRT(SRC2[223:192])) DEST[255:224] := APPROXIMATE(1/SQRT(SRC2[255:224])) |
VSQRTPD | VSQRTPD xmm1, xmm2/m128 Computes Square Roots of the packed double precision floating-point values in xmm2/m128 and stores the result in xmm1. 计算源操作数(xmm2/m128)中的两个双精度浮点值的平方根,并将结果存储在目标操作数(xmm1)中 VSQRTPD ymm1, ymm2/m256 Computes Square Roots of the packed double precision floating-point values in ymm2/m256 and stores the result in ymm1. 计算源操作数(ymm2/m256)中的四个双精度浮点值的平方根,并将结果存储在目标操作数(ymm1)中 VSQRTPD (VEX.256 Encoded Version) DEST[63:0] := SQRT(SRC[63:0]) DEST[127:64] := SQRT(SRC[127:64]) DEST[191:128] := SQRT(SRC[191:128]) DEST[255:192] := SQRT(SRC[255:192]) DEST[MAXVL-1:256] := 0 . VSQRTPD (VEX.128 Encoded Version) DEST[63:0] := SQRT(SRC[63:0]) DEST[127:64] := SQRT(SRC[127:64]) DEST[MAXVL-1:128] := 0 |
VRCPPS | VRCPPS xmm1, xmm2/m128 Computes the approximate reciprocals of packed single precision values in xmm2/mem and stores the results in xmm1. 计算源操作数(xmm2/m128)中的四个单精度浮点值的近似倒数,并将结果存储在目标操作数(xmm1)中 VRCPPS ymm1, ymm2/m256 Computes the approximate reciprocals of packed single precision values in ymm2/mem and stores the results in ymm1. 计算源操作数(ymm2/m256)中的八个单精度浮点值的近似倒数,并将结果存储在目标操作数(ymm1)中。 VRCPPS (VEX.128 Encoded Version) DEST[31:0] := APPROXIMATE(1/SRC[31:0]) DEST[63:32] := APPROXIMATE(1/SRC[63:32]) DEST[95:64] := APPROXIMATE(1/SRC[95:64]) DEST[127:96] := APPROXIMATE(1/SRC[127:96]) DEST[MAXVL-1:128] := 0 VRCPPS (VEX.256 Encoded Version) DEST[31:0] := APPROXIMATE(1/SRC[31:0]) DEST[63:32] := APPROXIMATE(1/SRC[63:32]) DEST[95:64] := APPROXIMATE(1/SRC[95:64]) DEST[127:96] := APPROXIMATE(1/SRC[127:96]) DEST[159:128] := APPROXIMATE(1/SRC[159:128]) DEST[191:160] := APPROXIMATE(1/SRC[191:160]) DEST[223:192] := APPROXIMATE(1/SRC[223:192]) DEST[255:224] := APPROXIMATE(1/SRC[255:224]) |
VADDPS | VADDPS xmm1,xmm2, xmm3/m128 Add packed single precision floating-point values from xmm3/m128 to xmm2 and store result in xmm1. "执行xmm2和xmm3/mem中的四个单精度浮点值的打包单精度浮点加法,并将结果存储在xmm1中 VADDPS ymm1, ymm2, ymm3/m256 Add packed single precision floating-point values from ymm3/m256 to ymm2 and store result in ymm1. 计算源操作数(ymm2/m256)中的八个单精度浮点值的近似倒数,并将结果存储在目标操作数(ymm1)中 VADDPS (VEX.256 Encoded Version) DEST[31:0] := SRC1[31:0] + SRC2[31:0] DEST[63:32] := SRC1[63:32] + SRC2[63:32] DEST[95:64] := SRC1[95:64] + SRC2[95:64] DEST[127:96] := SRC1[127:96] + SRC2[127:96] DEST[159:128] := SRC1[159:128] + SRC2[159:128] DEST[191:160]:= SRC1[191:160] + SRC2[191:160] DEST[223:192] := SRC1[223:192] + SRC2[223:192] DEST[255:224] := SRC1[255:224] + SRC2[255:224]. DEST[MAXVL-1:256] := 0 VADDPS (VEX.128 Encoded Version) DEST[31:0] := SRC1[31:0] + SRC2[31:0] DEST[63:32] := SRC1[63:32] + SRC2[63:32] DEST[95:64] := SRC1[95:64] + SRC2[95:64] DEST[127:96] := SRC1[127:96] + SRC2[127:96] DEST[MAXVL-1:128] := 0 |
VADDPD | VADDPD xmm1,xmm2, xmm3/m128 Add packed double precision floating-point values from xmm3/mem to xmm2 and store result in xmm1. 执行的是将xmm2和xmm3/mem中的两个双精度浮点值进行打包双精度浮点加法,并将结果存储在xmm1中 VADDPD ymm1, ymm2, ymm3/m256 Add packed double precision floating-point values from ymm3/mem to ymm2 and store result in ymm1. 执行的是将ymm2和ymm3/mem中的四个双精度浮点值进行打包双精度浮点加法,并将结果存储在ymm1中 VADDPD (VEX.256 Encoded Version) DEST[63:0] := SRC1[63:0] + SRC2[63:0] DEST[127:64] := SRC1[127:64] + SRC2[127:64] DEST[191:128] := SRC1[191:128] + SRC2[191:128] DEST[255:192] := SRC1[255:192] + SRC2[255:192] DEST[MAXVL-1:256] := 0 VADDPD (VEX.128 Encoded Version) DEST[63:0] := SRC1[63:0] + SRC2[63:0] DEST[127:64] := SRC1[127:64] + SRC2[127:64] DEST[MAXVL-1:128] := 0 |
VSUBPS | VSUBPS xmm1,xmm2, xmm3/m128 Subtract packed single precision floating-point values in xmm3/mem from xmm2 and stores result in xmm1. 执行的是将xmm2和xmm3/mem中的四个单精度浮点值进行打包单精度浮点减法,并将结果存储在xmm1中 VSUBPS ymm1, ymm2, ymm3/m256 Subtract packed single precision floating-point values in ymm3/mem from ymm2 and stores result in ymm1 执行的是将ymm2和ymm3/mem中的八个单精度浮点值进行打包单精度浮点减法,并将结果存储在ymm1中 VSUBPS (VEX.256 Encoded Version) DEST[31:0] := SRC1[31:0] - SRC2[31:0] DEST[63:32] := SRC1[63:32] - SRC2[63:32] DEST[95:64] := SRC1[95:64] - SRC2[95:64] DEST[127:96] := SRC1[127:96] - SRC2[127:96] DEST[159:128] := SRC1[159:128] - SRC2[159:128] DEST[191:160] := SRC1[191:160] - SRC2[191:160] DEST[223:192] := SRC1[223:192] - SRC2[223:192] DEST[255:224] := SRC1[255:224] - SRC2[255:224]. DEST[MAXVL-1:256] := 0 VSUBPS (VEX.128 Encoded Version) DEST[31:0] := SRC1[31:0] - SRC2[31:0] DEST[63:32] := SRC1[63:32] - SRC2[63:32] DEST[95:64] := SRC1[95:64] - SRC2[95:64] DEST[127:96] := SRC1[127:96] - SRC2[127:96] DEST[MAXVL-1:128] := 0 |
VSUBPD | VSUBPD xmm1,xmm2, xmm3/m128 Subtract packed double precision floating-point values in xmm3/mem from xmm2 and store result in xmm1. "执行的是将xmm2和xmm3/mem中的两个双精度浮点值进行打包双精度浮点减法,并将结果存储在xmm1中 VSUBPD ymm1, ymm2, ymm3/m256 Subtract packed double precision floating-point values in ymm3/mem from ymm2 and store result in ymm1. 执行的是将ymm2和ymm3/mem中的四个双精度浮点值进行打包双精度浮点减法,并将结果存储在ymm1中 VSUBPD (VEX.128 Encoded Version) DEST[63:0] := SRC1[63:0] - SRC2[63:0] DEST[127:64] := SRC1[127:64] - SRC2[127:64] DEST[MAXVL-1:128] := 0 VSUBPD (VEX.256 Encoded Version) DEST[63:0] := SRC1[63:0] - SRC2[63:0] DEST[127:64] := SRC1[127:64] - SRC2[127:64] DEST[191:128] := SRC1[191:128] - SRC2[191:128] DEST[255:192] := SRC1[255:192] - SRC2[255:192] DEST[MAXVL-1:256] := 0 |
VMULPS | VMULPS xmm1,xmm2, xmm3/m128 Multiply packed single precision floating-point values in xmm3/m128 with xmm2 and store result in xmm1. 将xmm2和xmm3/mem中的四个单精度浮点值进行打包单精度浮点乘法,并将结果存储在xmm1中 VMULPS ymm1, ymm2, ymm3/m256 Multiply packed single precision floating-point values in ymm3/m256 with ymm2 and store result in ymm1. 将ymm2和ymm3/mem中的八个单精度浮点值进行打包单精度浮点乘法,并将结果存储在ymm1中 VMULPS (VEX.256 Encoded Version) DEST[31:0] := SRC1[31:0] * SRC2[31:0] DEST[63:32] := SRC1[63:32] * SRC2[63:32] DEST[95:64] := SRC1[95:64] * SRC2[95:64] DEST[127:96] := SRC1[127:96] * SRC2[127:96] DEST[159:128] := SRC1[159:128] * SRC2[159:128] DEST[191:160] := SRC1[191:160] * SRC2[191:160] DEST[223:192] := SRC1[223:192] * SRC2[223:192] DEST[255:224] := SRC1[255:224] * SRC2[255:224]. DEST[MAXVL-1:256] := 0; VMULPS (VEX.128 Encoded Version) DEST[31:0] := SRC1[31:0] * SRC2[31:0] DEST[63:32] := SRC1[63:32] * SRC2[63:32] DEST[95:64] := SRC1[95:64] * SRC2[95:64] DEST[127:96] := SRC1[127:96] * SRC2[127:96] DEST[MAXVL-1:128] := 0 |
VMULPD | VMULPD xmm1,xmm2, xmm3/m128 Multiply packed double precision floating-point values in xmm3/m128 with xmm2 and store result in xmm1. 将xmm2和xmm3/mem中的两个双精度浮点值进行打包双精度浮点乘法,并将结果存储在xmm1中 VMULPD ymm1, ymm2, ymm3/m256 Multiply packed double precision floating-point values in ymm3/m256 with ymm2 and store result in ymm1. 将ymm2和ymm3/mem中的四个双精度浮点值进行打包双精度浮点乘法,并将结果存储在ymm1中 VMULPD (VEX.256 Encoded Version) DEST[63:0] := SRC1[63:0] * SRC2[63:0] DEST[127:64] := SRC1[127:64] * SRC2[127:64] DEST[191:128] := SRC1[191:128] * SRC2[191:128] DEST[255:192] := SRC1[255:192] * SRC2[255:192] DEST[MAXVL-1:256] := 0; VMULPD (VEX.128 Encoded Version) DEST[63:0] := SRC1[63:0] * SRC2[63:0] DEST[127:64] := SRC1[127:64] * SRC2[127:64] DEST[MAXVL-1:128] := 0 |
VDIVPS | VDIVPS xmm1, xmm2, xmm3/m128 Divide packed single precision floating-point values in xmm2 by packed single precision floating-point values in xmm3/mem. 将xmm2中的打包单精度浮点值除以xmm3/m128中的值,并将结果存储在xmm1中。 VDIVPS ymm1, ymm2, ymm3/m256 Divide packed single precision floating-point values in ymm2 by packed single precision floating-point values in ymm3/mem. 将ymm2中的打包单精度浮点值除以ymm3/m256中的值,并将结果存储在ymm1中 VDIVPS (VEX.256 Encoded Version) DEST[31:0] := SRC1[31:0] / SRC2[31:0] DEST[63:32] := SRC1[63:32] / SRC2[63:32] DEST[95:64] := SRC1[95:64] / SRC2[95:64] DEST[127:96] := SRC1[127:96] / SRC2[127:96] DEST[159:128] := SRC1[159:128] / SRC2[159:128] DEST[191:160] := SRC1[191:160] / SRC2[191:160] DEST[223:192] := SRC1[223:192] / SRC2[223:192] DEST[255:224] := SRC1[255:224] / SRC2[255:224]. DEST[MAXVL-1:256] := 0; VDIVPS (VEX.128 Encoded Version) DEST[31:0] := SRC1[31:0] / SRC2[31:0] DEST[63:32] := SRC1[63:32] / SRC2[63:32] DEST[95:64] := SRC1[95:64] / SRC2[95:64] DEST[127:96] := SRC1[127:96] / SRC2[127:96] DEST[MAXVL-1:128] := 0 |
VDIVPD | VDIVPD xmm1, xmm2, xmm3/m128 Divide packed double precision floating-point values in xmm2 by packed double precision floating-point values in xmm3/mem. 将xmm2中的打包双精度浮点值除以xmm3/m128中的值,并将结果存储在xmm1中 VDIVPD ymm1, ymm2, ymm3/m256 Divide packed double precision floating-point values in ymm2 by packed double precision floating-point values in ymm3/mem. 将ymm2中的打包双精度浮点值除以ymm3/m256中的值,并将结果存储在ymm1中 VDIVPD (VEX.256 Encoded Version) DEST[63:0] := SRC1[63:0] / SRC2[63:0] DEST[127:64] := SRC1[127:64] / SRC2[127:64] DEST[191:128] := SRC1[191:128] / SRC2[191:128] DEST[255:192] := SRC1[255:192] / SRC2[255:192] DEST[MAXVL-1:256] := 0; VDIVPD (VEX.128 Encoded Version) DEST[63:0] := SRC1[63:0] / SRC2[63:0] DEST[127:64] := SRC1[127:64] / SRC2[127:64] DEST[MAXVL-1:128] := 0; |
VCVTPS2PD | VCVTPS2PD xmm1, xmm2/m64 Convert two packed single precision floating-point values in xmm2/m64 to two packed double precision floating-point values in xmm1. 将打包的单精度浮点值从寄存器xmm2/m64转换为打包的双精度浮点值,并将结果存储在寄存器xmm1中。 VCVTPS2PD ymm1, xmm2/m128 Convert four packed single precision floating-point values in xmm2/m128 to four packed double precision floating-point values in ymm1. 将 xmm2/m128 中的单精度浮点值转换为双精度浮点值,并将结果存储在 ymm1 中 VCVTPS2PD (VEX.256 Encoded Version) DEST[63:0] := Convert_Single_Precision_To_Double_Precision_Floating_Point(SRC[31:0]) DEST[127:64] := Convert_Single_Precision_To_Double_Precision_Floating_Point(SRC[63:32]) DEST[191:128] := Convert_Single_Precision_To_Double_Precision_Floating_Point(SRC[95:64]) DEST[255:192] := Convert_Single_Precision_To_Double_Precision_Floating_Point(SRC[127:96) DEST[MAXVL-1:256] := 0 VCVTPS2PD (VEX.128 Encoded Version) DEST[63:0] := Convert_Single_Precision_To_Double_Precision_Floating_Point(SRC[31:0]) DEST[127:64] := Convert_Single_Precision_To_Double_Precision_Floating_Point(SRC[63:32]) DEST[MAXVL-1:128] := 0 |
VCVTPD2PS | VCVTPD2PS xmm1, xmm2/m128 Convert two packed double precision floating-point values in xmm2/mem to two single precision floatingpoint values in xmm1. 将 xmm2/m128 中的双精度浮点值转换为单精度浮点值,并将结果存储在 xmm1 中 VCVTPD2PS xmm1, ymm2/m256 Convert four packed double precision floating-point values in ymm2/mem to four single precision floatingpoint values in xmm1. 将 ymm2/m256 中的打包双精度浮点值转换为打包单精度浮点值,并将结果存储在 xmm1 中 VCVTPD2PS (VEX.256 Encoded Version) DEST[31:0] := Convert_Double_Precision_To_Single_Precision_Floating_Point(SRC[63:0]) DEST[63:32] := Convert_Double_Precision_To_Single_Precision_Floating_Point(SRC[127:64]) DEST[95:64] := Convert_Double_Precision_To_Single_Precision_Floating_Point(SRC[191:128]) DEST[127:96] := Convert_Double_Precision_To_Single_Precision_Floating_Point(SRC[255:192) DEST[MAXVL-1:128] := 0 VCVTPD2PS (VEX.128 Encoded Version) DEST[31:0] := Convert_Double_Precision_To_Single_Precision_Floating_Point(SRC[63:0]) DEST[63:32] := Convert_Double_Precision_To_Single_Precision_Floating_Point(SRC[127:64]) DEST[MAXVL-1:64] := 0 |
VCVTDQ2PS | VCVTDQ2PS xmm1, xmm2/m128 Convert four packed signed doubleword integers from xmm2/mem to four packed single precision floatingpoint values in xmm1. 将 xmm2/m128 中的打包双字整数转换为打包单精度浮点值,并将结果存储在 xmm1 中 VCVTDQ2PS ymm1, ymm2/m256 Convert eight packed signed doubleword integers from ymm2/mem to eight packed single precision floatingpoint values in ymm1. 将 ymm2/m256 中的打包双字整数转换为打包单精度浮点值,并将结果存储在 ymm1 中 VCVTDQ2PS (VEX.256 Encoded Version) DEST[31:0] := Convert_Integer_To_Single_Precision_Floating_Point(SRC[31:0]) DEST[63:32] := Convert_Integer_To_Single_Precision_Floating_Point(SRC[63:32]) DEST[95:64] := Convert_Integer_To_Single_Precision_Floating_Point(SRC[95:64]) DEST[127:96] := Convert_Integer_To_Single_Precision_Floating_Point(SRC[127:96) DEST[159:128] := Convert_Integer_To_Single_Precision_Floating_Point(SRC[159:128]) DEST[191:160] := Convert_Integer_To_Single_Precision_Floating_Point(SRC[191:160]) DEST[223:192] := Convert_Integer_To_Single_Precision_Floating_Point(SRC[223:192]) DEST[255:224] := Convert_Integer_To_Single_Precision_Floating_Point(SRC[255:224) DEST[MAXVL-1:256] := 0 VCVTDQ2PS (VEX.128 Encoded Version) DEST[31:0] := Convert_Integer_To_Single_Precision_Floating_Point(SRC[31:0]) DEST[63:32] := Convert_Integer_To_Single_Precision_Floating_Point(SRC[63:32]) DEST[95:64] := Convert_Integer_To_Single_Precision_Floating_Point(SRC[95:64]) DEST[127:96] := Convert_Integer_To_Single_Precision_Floating_Point(SRC[127z:96) DEST[MAXVL-1:128] := 0 |
VCVTPS2DQ | VCVTPS2DQ xmm1, xmm2/m128 Convert four packed single precision floating-point values from xmm2/mem to four packed signed doubleword values in xmm1. 将 xmm2/m128 中的打包单精度浮点值转换为打包双字整数,并将结果存储在 xmm1 中 VCVTPS2DQ ymm1, ymm2/m256 Convert eight packed single precision floating-point values from ymm2/mem to eight packed signed doubleword values in ymm1. 将 ymm2/m256 中的打包单精度浮点值转换为打包双字整数,并将结果存储在 ymm1 中 VCVTPS2DQ (VEX.256 Encoded Version) DEST[31:0] := Convert_Single_Precision_Floating_Point_To_Integer(SRC[31:0]) DEST[63:32] := Convert_Single_Precision_Floating_Point_To_Integer(SRC[63:32]) DEST[95:64] := Convert_Single_Precision_Floating_Point_To_Integer(SRC[95:64]) DEST[127:96] := Convert_Single_Precision_Floating_Point_To_Integer(SRC[127:96) DEST[159:128] := Convert_Single_Precision_Floating_Point_To_Integer(SRC[159:128]) DEST[191:160] := Convert_Single_Precision_Floating_Point_To_Integer(SRC[191:160]) DEST[223:192] := Convert_Single_Precision_Floating_Point_To_Integer(SRC[223:192]) DEST[255:224] := Convert_Single_Precision_Floating_Point_To_Integer(SRC[255:224]) VCVTPS2DQ (VEX.128 Encoded Version) DEST[31:0] := Convert_Single_Precision_Floating_Point_To_Integer(SRC[31:0]) DEST[63:32] := Convert_Single_Precision_Floating_Point_To_Integer(SRC[63:32]) DEST[95:64] := Convert_Single_Precision_Floating_Point_To_Integer(SRC[95:64]) DEST[127:96] := Convert_Single_Precision_Floating_Point_To_Integer(SRC[127:96]) DEST[MAXVL-1:128] := 0 |
VCVTTPS2DQ | VCVTTPS2DQ xmm1, xmm2/m128 Convert four packed single precision floating-point values from xmm2/mem to four packed signed doubleword values in xmm1 using truncation. 将 xmm2/m128 中的打包单精度浮点值转换为打包双字整数,并使用截断方式进行转换,然后将结果存储在 xmm1 中 VCVTTPS2DQ ymm1, ymm2/m256 Convert eight packed single precision floating-point values from ymm2/mem to eight packed signed doubleword values in ymm1 using truncation. 将 ymm2/m256 中的打包单精度浮点值转换为打包双字整数,并使用截断方式进行转换,然后将结果存储在 ymm1 中 VCVTTPS2DQ (VEX.256 Encoded Version) DEST[31:0] := Convert_Single_Precision_Floating_Point_To_Integer_Truncate(SRC[31:0]) DEST[63:32] := Convert_Single_Precision_Floating_Point_To_Integer_Truncate(SRC[63:32]) DEST[95:64] := Convert_Single_Precision_Floating_Point_To_Integer_Truncate(SRC[95:64]) DEST[127:96] := Convert_Single_Precision_Floating_Point_To_Integer_Truncate(SRC[127:96) DEST[159:128] := Convert_Single_Precision_Floating_Point_To_Integer_Truncate(SRC[159:128]) DEST[191:160] := Convert_Single_Precision_Floating_Point_To_Integer_Truncate(SRC[191:160]) DEST[223:192] := Convert_Single_Precision_Floating_Point_To_Integer_Truncate(SRC[223:192]) DEST[255:224] := Convert_Single_Precision_Floating_Point_To_Integer_Truncate(SRC[255:224 VCVTTPS2DQ (VEX.128 Encoded Version) DEST[31:0] := Convert_Single_Precision_Floating_Point_To_Integer_Truncate(SRC[31:0]) DEST[63:32] := Convert_Single_Precision_Floating_Point_To_Integer_Truncate(SRC[63:32]) DEST[95:64] := Convert_Single_Precision_Floating_Point_To_Integer_Truncate(SRC[95:64]) DEST[127:96] := Convert_Single_Precision_Floating_Point_To_Integer_Truncate(SRC[127:96]) DEST[MAXVL-1:128] := 0 |
VCVTTPD2DQ | VCVTTPD2DQ xmm1, xmm2/m128 Convert two packed double precision floating-point values in xmm2/mem to two signed doubleword integers in xmm1 using truncation. 将 xmm2/m128 中的打包双精度浮点值转换为带有截断的打包双字整数,并将结果存储在 xmm1 中 VCVTTPD2DQ xmm1, ymm2/m256 Convert four packed double precision floating-point values in ymm2/mem to four signed doubleword integers in xmm1 using truncation. 将 ymm2/m256 中的打包双精度浮点值转换为带有截断的打包双字整数,并将结果存储在 xmm1 中 VCVTTPD2DQ (VEX.256 Encoded Version) DEST[31:0] := Convert_Double_Precision_Floating_Point_To_Integer_Truncate(SRC[63:0]) DEST[63:32] := Convert_Double_Precision_Floating_Point_To_Integer_Truncate(SRC[127:64]) DEST[95:64] := Convert_Double_Precision_Floating_Point_To_Integer_Truncate(SRC[191:128]) DEST[127:96] := Convert_Double_Precision_Floating_Point_To_Integer_Truncate(SRC[255:192) DEST[MAXVL-1:128] := 0 VCVTTPD2DQ (VEX.128 Encoded Version) DEST[31:0] := Convert_Double_Precision_Floating_Point_To_Integer_Truncate(SRC[63:0]) DEST[63:32] := Convert_Double_Precision_Floating_Point_To_Integer_Truncate(SRC[127:64]) DEST[MAXVL-1:64] := 0 |
VCVTPD2DQ | VCVTPD2DQ xmm1, xmm2/m128 Convert two packed double precision floating-point values in xmm2/mem to two signed doubleword integers in xmm1. 将 xmm2/m128 中的打包双精度浮点值转换为打包双字整数,并将结果存储在 xmm1 中 VCVTPD2DQ xmm1, ymm2/m256 Convert four packed double precision floating-point values in ymm2/mem to four signed doubleword integers in xmm1. 将 ymm2/m256 中的打包双精度浮点值转换为打包双字整数,并将结果存储在 xmm1 中 VCVTPD2DQ (VEX.256 Encoded Version) DEST[31:0] := Convert_Double_Precision_Floating_Point_To_Integer(SRC[63:0]) DEST[63:32] := Convert_Double_Precision_Floating_Point_To_Integer(SRC[127:64]) DEST[95:64] := Convert_Double_Precision_Floating_Point_To_Integer(SRC[191:128]) DEST[127:96] := Convert_Double_Precision_Floating_Point_To_Integer(SRC[255:192) DEST[MAXVL-1:128] := 0 VCVTPD2DQ (VEX.128 Encoded Version) DEST[31:0] := Convert_Double_Precision_Floating_Point_To_Integer(SRC[63:0]) DEST[63:32] := Convert_Double_Precision_Floating_Point_To_Integer(SRC[127:64]) DEST[MAXVL-1:64] := 0 |
VCVTDQ2PD | VCVTDQ2PD xmm1, xmm2/m64 Convert two packed signed doubleword integers from xmm2/mem to two packed double precision floating-point values in xmm1. 将 xmm2/m64 中的打包双字整数转换为打包双精度浮点值,并将结果存储在 xmm1 中 VCVTDQ2PD ymm1, xmm2/m128 Convert four packed signed doubleword integers from xmm2/mem to four packed double precision floating-point values in ymm1. 将 xmm2/m128 中的打包双字整数转换为打包双精度浮点值,并将结果存储在 ymm1 中 VCVTDQ2PD (VEX.256 Encoded Version) DEST[63:0] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[31:0]) DEST[127:64] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[63:32]) DEST[191:128] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[95:64]) DEST[255:192] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[127:96) DEST[MAXVL-1:256] := 0 VCVTDQ2PD (VEX.128 Encoded Version) DEST[63:0] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[31:0]) DEST[127:64] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[63:32]) DEST[MAXVL-1:128] := 0 |
VMINPS | VMINPS xmm1, xmm2, xmm3/m128 Return the minimum single precision floating-point values between xmm2 and xmm3/mem. 比较 xmm2 和 xmm3/mem128 中的打包单精度浮点值,并将每对值中的最小值存储在 xmm1 中。 VMINPS ymm1, ymm2, ymm3/m256 Return the minimum single double precision floating-point values between ymm2 and ymm3/mem. 比较 ymm2 和 ymm3/mem256 中的打包单精度浮点值,并将每对值中的最小值存储在 ymm1 中。 VMINPS (VEX.256 Encoded Version) DEST[31:0] := MIN(SRC1[31:0], SRC2[31:0]) DEST[63:32] := MIN(SRC1[63:32], SRC2[63:32]) DEST[95:64] := MIN(SRC1[95:64], SRC2[95:64]) DEST[127:96] := MIN(SRC1[127:96], SRC2[127:96]) DEST[159:128] := MIN(SRC1[159:128], SRC2[159:128]) DEST[191:160] := MIN(SRC1[191:160], SRC2[191:160]) DEST[223:192] := MIN(SRC1[223:192], SRC2[223:192]) DEST[255:224] := MIN(SRC1[255:224], SRC2[255:224]) VMINPS (VEX.128 Encoded Version) DEST[31:0] := MIN(SRC1[31:0], SRC2[31:0]) DEST[63:32] := MIN(SRC1[63:32], SRC2[63:32]) DEST[95:64] := MIN(SRC1[95:64], SRC2[95:64]) DEST[127:96] := MIN(SRC1[127:96], SRC2[127:96]) DEST[MAXVL-1:128] := 0 |
VMINPD | VMINPD xmm1, xmm2, xmm3/m128 Return the minimum double precision floating-point values between xmm2 and xmm3/mem. 比较 xmm2 和 xmm3/mem128 中的打包双精度浮点值,并将每对值中的最小值存储在 xmm1 中。 VMINPD ymm1, ymm2, ymm3/m256 Return the minimum packed double precision floating-point values between ymm2 and ymm3/mem. 比较 ymm2 和 ymm3/mem256 中的打包双精度浮点值,并将每对值中的最小值存储在 ymm1 中。 VMINPD (VEX.256 Encoded Version) DEST[63:0] := MIN(SRC1[63:0], SRC2[63:0]) DEST[127:64] := MIN(SRC1[127:64], SRC2[127:64]) DEST[191:128] := MIN(SRC1[191:128], SRC2[191:128]) DEST[255:192] := MIN(SRC1[255:192], SRC2[255:192]) VMINPD (VEX.128 Encoded Version) DEST[63:0] := MIN(SRC1[63:0], SRC2[63:0]) DEST[127:64] := MIN(SRC1[127:64], SRC2[127:64]) DEST[MAXVL-1:128] := 0 |
VMAXPS | VMAXPS xmm1, xmm2, xmm3/m128 Return the maximum single precision floating-point values between xmm2 and xmm3/mem. 比较 xmm2 和 xmm3/mem128 中的打包单精度浮点值,并将每对值中的最大值存储在 xmm1 中。 VMAXPS ymm1, ymm2, ymm3/m256 Return the maximum single precision floating-point values between ymm2 and ymm3/mem. 比较 ymm2 和 ymm3/mem256 中的打包单精度浮点值,并将每对值中的最大值存储在 ymm1 中 VMAXPS (VEX.256 Encoded Version) DEST[31:0] := MAX(SRC1[31:0], SRC2[31:0]) DEST[63:32] := MAX(SRC1[63:32], SRC2[63:32]) DEST[95:64] := MAX(SRC1[95:64], SRC2[95:64]) DEST[127:96] := MAX(SRC1[127:96], SRC2[127:96]) DEST[159:128] := MAX(SRC1[159:128], SRC2[159:128]) DEST[191:160] := MAX(SRC1[191:160], SRC2[191:160]) DEST[223:192] := MAX(SRC1[223:192], SRC2[223:192]) DEST[255:224] := MAX(SRC1[255:224], SRC2[255:224]) DEST[MAXVL-1:256] := 0 VMAXPS (VEX.128 Encoded Version) DEST[31:0] := MAX(SRC1[31:0], SRC2[31:0]) DEST[63:32] := MAX(SRC1[63:32], SRC2[63:32]) DEST[95:64] := MAX(SRC1[95:64], SRC2[95:64]) DEST[127:96] := MAX(SRC1[127:96], SRC2[127:96]) DEST[MAXVL-1:128] := 0 |
VMAXPD | VMAXPD xmm1, xmm2, xmm3/m128 Return the maximum double precision floating-point values between xmm2 and xmm3/m128. 比较 xmm2 和 xmm3/mem128 中的打包双精度浮点值,并将每对值中的最大值存储在 xmm1 中 VMAXPD ymm1, ymm2, ymm3/m256 Return the maximum packed double precision floatingpoint values between ymm2 and ymm3/m256. 比较 ymm2 和 ymm3/mem256 中的打包双精度浮点值,并将每对值中的最大值存储在 ymm1 中 VMAXPD (VEX.256 Encoded Version) DEST[63:0] := MAX(SRC1[63:0], SRC2[63:0]) DEST[127:64] := MAX(SRC1[127:64], SRC2[127:64]) DEST[191:128] := MAX(SRC1[191:128], SRC2[191:128]) DEST[255:192] := MAX(SRC1[255:192], SRC2[255:192]) DEST[MAXVL-1:256] := 0 VMAXPD (VEX.128 Encoded Version) DEST[63:0] := MAX(SRC1[63:0], SRC2[63:0]) DEST[127:64] := MAX(SRC1[127:64], SRC2[127:64]) DEST[MAXVL-1:128] := 0 |
VHADDPD | VHADDPD xmm1,xmm2, xmm3/m128 Horizontal add packed double precision floating-point values from xmm2 and xmm3/mem. 从xmm2和xmm3/mem128中水平添加双精度浮点值的对,并将结果存储在xmm1中 VHADDPD ymm1, ymm2, ymm3/m256 Horizontal add packed double precision floating-point values from ymm2 and ymm3/mem. 从ymm2和ymm3/mem256中水平添加双精度浮点值的对,并将结果存储在ymm1中 VHADDPD (VEX.128 Encoded Version) DEST[63:0] := SRC1[127:64] + SRC1[63:0] DEST[127:64] := SRC2[127:64] + SRC2[63:0] DEST[MAXVL-1:128] := 0 VHADDPD (VEX.256 Encoded Version) DEST[63:0] := SRC1[127:64] + SRC1[63:0] DEST[127:64] := SRC2[127:64] + SRC2[63:0] DEST[191:128] := SRC1[255:192] + SRC1[191:128] DEST[255:192] := SRC2[255:192] + SRC2[191:128] |
VHADDPS | VHADDPS xmm1, xmm2, xmm3/m128 Horizontal add packed single precision floatingpoint values from xmm2 and xmm3/mem. 从xmm2和xmm3/mem128中水平添加单精度浮点值的对,并将结果存储在xmm1中 VHADDPS ymm1, ymm2, ymm3/m256 Horizontal add packed single precision floatingpoint values from ymm2 and ymm3/mem. 从ymm2和ymm3/mem256中水平添加单精度浮点值的对,并将结果存储在ymm1中 VHADDPS (VEX.128 Encoded Version) DEST[31:0] := SRC1[63:32] + SRC1[31:0] DEST[63:32] := SRC1[127:96] + SRC1[95:64] DEST[95:64] := SRC2[63:32] + SRC2[31:0] DEST[127:96] := SRC2[127:96] + SRC2[95:64] DEST[MAXVL-1:128] := 0 VHADDPS (VEX.256 Encoded Version) DEST[31:0] := SRC1[63:32] + SRC1[31:0] DEST[63:32] := SRC1[127:96] + SRC1[95:64] DEST[95:64] := SRC2[63:32] + SRC2[31:0] DEST[127:96] := SRC2[127:96] + SRC2[95:64] DEST[159:128] := SRC1[191:160] + SRC1[159:128] DEST[191:160] := SRC1[255:224] + SRC1[223:192] DEST[223:192] := SRC2[191:160] + SRC2[159:128] DEST[255:224] := SRC2[255:224] + SRC2[223:192] |
VHSUBPD | VHSUBPD xmm1,xmm2, xmm3/m128 Horizontal subtract packed double precision floating-point values from xmm2 and xmm3/mem. 从xmm2和xmm3/mem128中水平减去双精度浮点值的对,并将结果存储在xmm1中 VHSUBPD ymm1, ymm2, ymm3/m256 Horizontal subtract packed double precision floating-point values from ymm2 and ymm3/mem. 从ymm2和ymm3/mem256中水平减去双精度浮点值的对,并将结果存储在ymm1中 VHSUBPD (VEX.128 Encoded Version) DEST[63:0] := SRC1[63:0] - SRC1[127:64] DEST[127:64] := SRC2[63:0] - SRC2[127:64] DEST[MAXVL-1:128] := 0 VHSUBPD (VEX.256 Encoded Version) DEST[63:0] := SRC1[63:0] - SRC1[127:64] DEST[127:64] := SRC2[63:0] - SRC2[127:64] DEST[191:128] := SRC1[191:128] - SRC1[255:192] DEST[255:192] := SRC2[191:128] - SRC2[255:192] |
VHSUBPS | VHSUBPS xmm1, xmm2, xmm3/m128 Horizontal subtract packed single precision floating-point values from xmm2 and xmm3/mem. 从xmm2和xmm3/mem128中水平减去单精度浮点值的对,并将结果存储在xmm1中 VHSUBPS ymm1, ymm2, ymm3/m256 Horizontal subtract packed single precision floating-point values from ymm2 and ymm3/mem. 从ymm2和ymm3/mem256中水平减去单精度浮点值的对,并将结果存储在ymm1中 VHSUBPS (VEX.128 Encoded Version) DEST[31:0] := SRC1[31:0] - SRC1[63:32] DEST[63:32] := SRC1[95:64] - SRC1[127:96] DEST[95:64] := SRC2[31:0] - SRC2[63:32] DEST[127:96] := SRC2[95:64] - SRC2[127:96] DEST[MAXVL-1:128] := 0 VHSUBPS (VEX.256 Encoded Version) DEST[31:0] := SRC1[31:0] - SRC1[63:32] DEST[63:32] := SRC1[95:64] - SRC1[127:96] DEST[95:64] := SRC2[31:0] - SRC2[63:32] DEST[127:96] := SRC2[95:64] - SRC2[127:96] DEST[159:128] := SRC1[159:128] - SRC1[191:160] DEST[191:160] := SRC1[223:192] - SRC1[255:224] DEST[223:192] := SRC2[159:128] - SRC2[191:160] DEST[255:224] := SRC2[223:192] - SRC2[255:224] |
VCMPPS | VCMPPS xmm1, xmm2, xmm3/m128, imm8 Compare packed single precision floating-point values in xmm3/m128 and xmm2 using bits 4:0 of imm8 as a comparison predicate. imm8" 用于根据imm8中指定的条件,在xmm2和xmm3/mem128中的单精度浮点值进行比较,并将结果存储在xmm1中。 VCMPPS ymm1, ymm2, ymm3/m256, imm8 Compare packed single precision floating-point values in ymm3/m256 and ymm2 using bits 4:0 of imm8 as a comparison predicate. 根据imm8中指定的条件,在ymm2和ymm3/mem256中的单精度浮点值进行比较,并将结果存储在ymm1中 CASE (COMPARISON PREDICATE) OF
0: OP3 := EQ_OQ; OP5 := EQ_OQ;
1: OP3 := LT_OS; OP5 := LT_OS;
2: OP3 := LE_OS; OP5 := LE_OS;
3: OP3 := UNORD_Q; OP5 := UNORD_Q;
4: OP3 := NEQ_UQ; OP5 := NEQ_UQ;
5: OP3 := NLT_US; OP5 := NLT_US;
6: OP3 := NLE_US; OP5 := NLE_US;
7: OP3 := ORD_Q; OP5 := ORD_Q;
8: OP5 := EQ_UQ;
9: OP5 := NGE_US;
10: OP5 := NGT_US;
11: OP5 := FALSE_OQ;
12: OP5 := NEQ_OQ;
13: OP5 := GE_OS;
14: OP5 := GT_OS;
15: OP5 := TRUE_UQ;
16: OP5 := EQ_OS;
17: OP5 := LT_OQ;
18: OP5 := LE_OQ;
19: OP5 := UNORD_S;
20: OP5 := NEQ_US;
21: OP5 := NLT_UQ;
22: OP5 := NLE_UQ;
23: OP5 := ORD_S;
24: OP5 := EQ_US;
25: OP5 := NGE_UQ;
26: OP5 := NGT_UQ;
27: OP5 := FALSE_OS;
28: OP5 := NEQ_OS;
29: OP5 := GE_OQ;
30: OP5 := GT_OQ;
31: OP5 := TRUE_US;
DEFAULT: Reserved
ESAC;
VCMPPS (VEX.256 Encoded Version)
CMP0 := SRC1[31:0] OP5 SRC2[31:0];
CMP1 := SRC1[63:32] OP5 SRC2[63:32];
CMP2 := SRC1[95:64] OP5 SRC2[95:64];
CMP3 := SRC1[127:96] OP5 SRC2[127:96];
CMP4 := SRC1[159:128] OP5 SRC2[159:128];
CMP5 := SRC1[191:160] OP5 SRC2[191:160];
CMP6 := SRC1[223:192] OP5 SRC2[223:192];
CMP7 := SRC1[255:224] OP5 SRC2[255:224];
IF CMP0 = TRUE
THEN DEST[31:0] :=FFFFFFFFH;
ELSE DEST[31:0] := 000000000H; FI;
IF CMP1 = TRUE
THEN DEST[63:32] := FFFFFFFFH;
ELSE DEST[63:32] :=000000000H; FI;
IF CMP2 = TRUE
THEN DEST[95:64] := FFFFFFFFH;
ELSE DEST[95:64] := 000000000H; FI;
IF CMP3 = TRUE
THEN DEST[127:96] := FFFFFFFFH;
ELSE DEST[127:96] := 000000000H; FI;
IF CMP4 = TRUE
THEN DEST[159:128] := FFFFFFFFH;
ELSE DEST[159:128] := 000000000H; FI;
IF CMP5 = TRUE
THEN DEST[191:160] := FFFFFFFFH;
ELSE DEST[191:160] := 000000000H; FI;
IF CMP6 = TRUE
THEN DEST[223:192] := FFFFFFFFH;
ELSE DEST[223:192] :=000000000H; FI;
IF CMP7 = TRUE
THEN DEST[255:224] := FFFFFFFFH;
ELSE DEST[255:224] := 000000000H; FI;
DEST[MAXVL-1:256] := 0
VCMPPS (VEX.128 Encoded Version)
CMP0 := SRC1[31:0] OP5 SRC2[31:0];
CMP1 := SRC1[63:32] OP5 SRC2[63:32];
CMP2 := SRC1[95:64] OP5 SRC2[95:64];
CMP3 := SRC1[127:96] OP5 SRC2[127:96];
IF CMP0 = TRUE
THEN DEST[31:0] :=FFFFFFFFH;
ELSE DEST[31:0] := 000000000H; FI;
IF CMP1 = TRUE
THEN DEST[63:32] := FFFFFFFFH;
ELSE DEST[63:32] := 000000000H; FI;
IF CMP2 = TRUE
THEN DEST[95:64] := FFFFFFFFH;
ELSE DEST[95:64] := 000000000H; FI;
IF CMP3 = TRUE
THEN DEST[127:96] := FFFFFFFFH;
ELSE DEST[127:96] :=000000000H; FI;
DEST[MAXVL-1:128] := 0 |
VCMPPD | VCMPPD xmm1, xmm2, xmm3/m128, imm8 Compare packed double precision floating-point values in xmm3/m128 and xmm2 using bits 4:0 of imm8 as a comparison predicate. 对寄存器XMM2和内存/寄存器XMM3中的双精度浮点数进行比较,比较操作由imm8参数指定。比较的结果将存储在寄存器XMM1中。 VCMPPD ymm1, ymm2, ymm3/m256, imm8 Compare packed double precision floating-point values in ymm3/m256 and ymm2 using bits 4:0 of imm8 as a comparison predicate. 对寄存器YMM2和内存/寄存器YMM3中的双精度浮点数进行比较,比较操作由imm8参数指定 VCMPPD (VEX.256 Encoded Version) CMP0 := SRC1[63:0] OP5 SRC2[63:0]; CMP1 := SRC1[127:64] OP5 SRC2[127:64]; CMP2 := SRC1[191:128] OP5 SRC2[191:128]; CMP3 := SRC1[255:192] OP5 SRC2[255:192]; IF CMP0 = TRUE THEN DEST[63:0] := FFFFFFFFFFFFFFFFH; ELSE DEST[63:0] := 0000000000000000H; FI; IF CMP1 = TRUE THEN DEST[127:64] := FFFFFFFFFFFFFFFFH; ELSE DEST[127:64] := 0000000000000000H; FI; IF CMP2 = TRUE THEN DEST[191:128] := FFFFFFFFFFFFFFFFH; ELSE DEST[191:128] := 0000000000000000H; FI; IF CMP3 = TRUE THEN DEST[255:192] := FFFFFFFFFFFFFFFFH; ELSE DEST[255:192] := 0000000000000000H; FI; DEST[MAXVL-1:256] := 0 VCMPPD (VEX.128 Encoded Version) CMP0 := SRC1[63:0] OP5 SRC2[63:0]; CMP1 := SRC1[127:64] OP5 SRC2[127:64]; IF CMP0 = TRUE THEN DEST[63:0] := FFFFFFFFFFFFFFFFH; ELSE DEST[63:0] := 0000000000000000H; FI; IF CMP1 = TRUE THEN DEST[127:64] := FFFFFFFFFFFFFFFFH; ELSE DEST[127:64] := 0000000000000000H; FI; DEST[MAXVL-1:128] := 0 |
VADDSUBPD | VADDSUBPD xmm1, xmm2, xmm3/m128 Add/subtract packed double precision floating-point values from xmm3/mem to xmm2 and stores result in xmm1. 对寄存器XMM2和内存/寄存器XMM3中的双精度浮点数执行打包的加减操作,并将结果存储在寄存器XMM1中 VADDSUBPD ymm1, ymm2, ymm3/m256 Add / subtract packed double precision floating-point values from ymm3/mem to ymm2 and stores result in ymm1. 对寄存器YMM2和内存/寄存器YMM3中的双精度浮点数执行打包的加减操作,并将结果存储在寄存器YMM1中 VADDSUBPD (VEX.128 Encoded Version) DEST[63:0] := SRC1[63:0] - SRC2[63:0] DEST[127:64] := SRC1[127:64] + SRC2[127:64] DEST[MAXVL-1:128] := 0 VADDSUBPD (VEX.256 Encoded Version) DEST[63:0] := SRC1[63:0] - SRC2[63:0] DEST[127:64] := SRC1[127:64] + SRC2[127:64] DEST[191:128] := SRC1[191:128] - SRC2[191:128] DEST[255:192] := SRC1[255:192] + SRC2[255:192] |
VADDSUBPS | VADDSUBPS xmm1, xmm2, xmm3/m128 Add/subtract single precision floating-point values from xmm3/mem to xmm2 and stores result in xmm1. 对寄存器XMM2和内存/寄存器XMM3中的单精度浮点数执行打包的加减操作,并将结果存储在寄存器XMM1中 VADDSUBPS ymm1, ymm2, ymm3/m256 Add / subtract single precision floating-point values from ymm3/mem to ymm2 and stores result in ymm1. 对寄存器YMM2和内存/寄存器YMM3中的单精度浮点数执行打包的加减操作,并将结果存储在寄存器YMM1中 VADDSUBPS (VEX.128 Encoded Version) DEST[31:0] := SRC1[31:0] - SRC2[31:0] DEST[63:32] := SRC1[63:32] + SRC2[63:32] DEST[95:64] := SRC1[95:64] - SRC2[95:64] DEST[127:96] := SRC1[127:96] + SRC2[127:96] DEST[MAXVL-1:128] := 0 VADDSUBPS (VEX.256 Encoded Version) DEST[31:0] := SRC1[31:0] - SRC2[31:0] DEST[63:32] := SRC1[63:32] + SRC2[63:32] DEST[95:64] := SRC1[95:64] - SRC2[95:64] DEST[127:96] := SRC1[127:96] + SRC2[127:96] DEST[159:128] := SRC1[159:128] - SRC2[159:128] DEST[191:160] := SRC1[191:160] + SRC2[191:160] DEST[223:192] := SRC1[223:192] - SRC2[223:192] DEST[255:224] := SRC1[255:224] + SRC2[255:224] |
VDPPS | VDPPS xmm1,xmm2, xmm3/m128, imm8 Multiply packed single precision floating-point values from xmm1 with packed single precision floating-point values from xmm2/mem selectively add and store to xmm1. 对XMM2和XMM3/m128中的单精度浮点数执行打包的点积运算,并将结果存储在XMM1中。imm8参数指定了点积计算的选项,例如选择要相乘和累加的元素。 VDPPS ymm1, ymm2, ymm3/m256, imm8 Multiply packed single precision floating-point values from ymm2 with packed single precision floating-point values from ymm3/mem, selectively add pairs of elements and store to ymm1. 对YMM2和YMM3/m256中的单精度浮点数执行打包的点积运算,并将结果存储在YMM1中。imm8参数指定了点积计算的选项,例如选择要相乘和累加的元素。 DP_primitive (SRC1, SRC2)
IF (imm8[4] = 1)
THEN Temp1[31:0] := DEST[31:0] * SRC[31:0]; // update SIMD exception flags
ELSE
Temp1[31:0] := +0.0;
FI;
IF (imm8[5] = 1) THEN
Temp1[63:32] := DEST[63:32] * SRC[63:32]; // update SIMD exception flags
ELSE
Temp1[63:32] := +0.0;
FI;
IF (imm8[6] = 1)
THEN Temp1[95:64] := DEST[95:64] * SRC[95:64]; // update SIMD exception flags
ELSE
Temp1[95:64] := +0.0;
FI;
IF (imm8[7] = 1)
THEN Temp1[127:96] := DEST[127:96] * SRC[127:96]; // update SIMD exception flags
ELSE
Temp1[127:96] := +0.0;
FI;
Temp2[31:0] := Temp1[31:0] + Temp1[63:32]; // update SIMD exception flags
/* if unmasked exception reported, execute exception handler*/
Temp3[31:0] := Temp1[95:64] + Temp1[127:96]; // update SIMD exception flags
/* if unmasked exception reported, execute exception handler*/
Temp4[31:0] := Temp2[31:0] + Temp3[31:0]; // update SIMD exception flags
/* if unmasked exception reported, execute exception handler*/
IF (imm8[0] = 1) THEN
DEST[31:0] := Temp4[31:0];
ELSE
DEST[31:0] := +0.0;
FI;
IF (imm8[1] = 1) THEN
DEST[63:32] := Temp4[31:0];
ELSE
DEST[63:32] := +0.0;
FI;
IF (imm8[2] = 1) THEN
DEST[95:64] := Temp4[31:0];
ELSE
DEST[95:64] := +0.0;
FI;
IF (imm8[3] = 1) THEN
DEST[127:96] := Temp4[31:0];
ELSE
DEST[127:96] := +0.0;
FI;
VDPPS (VEX.128 Encoded Version)
DEST[127:0] := DP_Primitive(SRC1[127:0], SRC2[127:0]);
DEST[MAXVL-1:128] := 0
VDPPS (VEX.256 Encoded Version)
DEST[127:0] := DP_Primitive(SRC1[127:0], SRC2[127:0]);
DEST[255:128] := DP_Primitive(SRC1[255:128], SRC2[255:128]);
|
VROUNDPD | VROUNDPD xmm1, xmm2/m128, imm8 Round packed double precision floating-point values in xmm2/m128 and place the result in xmm1. The rounding mode is determined by imm8. 对寄存器XMM2/m128中的双精度浮点数值根据imm8参数指定的舍入模式进行舍入,并将结果存储在寄存器XMM1中。imm8参数确定要使用的舍入模式,例如四舍五入、向下取整、向上取整或朝零截断。 VROUNDPD ymm1, ymm2/m256, imm8 Round packed double precision floating-point values in ymm2/m256 and place the result in ymm1. The rounding mode is determined by imm8. 对寄存器YMM2/m256中的双精度浮点数值根据imm8参数指定的舍入模式进行舍入,并将结果存储在寄存器YMM1中。imm8参数确定要使用的舍入模式,例如四舍五入、向下取整、向上取整或朝零截断。 VROUNDPD (VEX.128 Encoded Version) DEST[63:0] := RoundToInteger(SRC[63:0]], ROUND_CONTROL) DEST[127:64] := RoundToInteger(SRC[127:64]], ROUND_CONTROL) DEST[MAXVL-1:128] := 0 VROUNDPD (VEX.256 Encoded Version) DEST[63:0] := RoundToInteger(SRC[63:0], ROUND_CONTROL) DEST[127:64] := RoundToInteger(SRC[127:64]], ROUND_CONTROL) DEST[191:128] := RoundToInteger(SRC[191:128]], ROUND_CONTROL) DEST[255:192] := RoundToInteger(SRC[255:192] ], ROUND_CONTROL) |
VROUNDPS | VROUNDPS xmm1, xmm2/m128, imm8 Round packed single precision floating-point values in xmm2/m128 and place the result in xmm1. The rounding mode is determined by imm8. 寄存器XMM2/m128中的单精度浮点数值根据imm8参数指定的舍入模式进行舍入,并将结果存储在寄存器XMM1中。imm8参数确定要使用的舍入模式,例如四舍五入、向下取整、向上取整或朝零截断。 VROUNDPS ymm1, ymm2/m256, imm8 Round packed single precision floating-point values in ymm2/m256 and place the result in ymm1. The rounding mode is determined by imm8. 对寄存器YMM2/m256中的单精度浮点数值根据imm8参数指定的舍入模式进行舍入,并将结果存储在寄存器YMM1中。imm8参数确定要使用的舍入模式,例如四舍五入、向下取整、向上取整或朝零截断。 VROUNDPS (VEX.128 Encoded Version) DEST[31:0] := RoundToInteger(SRC[31:0], ROUND_CONTROL) DEST[63:32] := RoundToInteger(SRC[63:32], ROUND_CONTROL) DEST[95:64] := RoundToInteger(SRC[95:64]], ROUND_CONTROL) DEST[127:96] := RoundToInteger(SRC[127:96]], ROUND_CONTROL) DEST[MAXVL-1:128] := 0 VROUNDPS (VEX.256 Encoded Version) DEST[31:0] := RoundToInteger(SRC[31:0], ROUND_CONTROL) DEST[63:32] := RoundToInteger(SRC[63:32], ROUND_CONTROL) DEST[95:64] := RoundToInteger(SRC[95:64]], ROUND_CONTROL) DEST[127:96] := RoundToInteger(SRC[127:96]], ROUND_CONTROL) DEST[159:128] := RoundToInteger(SRC[159:128]], ROUND_CONTROL) DEST[191:160] := RoundToInteger(SRC[191:160]], ROUND_CONTROL) DEST[223:192] := RoundToInteger(SRC[223:192] ], ROUND_CONTROL) DEST[255:224] := RoundToInteger(SRC[255:224] ], ROUND_CONTROL) |