汇编 AVX 增强功能指令

VBROADCASTF128

VBROADCASTF128 ymm1, m128

        Broadcast 128 bits of floating-point data in mem to low and high 128-bits in ymm1.

        储在内存中的128位浮点值广播到一个256位YMM寄存器的所有元素。这意味着存储在内存中的相同128位值将被复制到YMM寄存器的所有元素中

VBROADCASTF128 (VEX.256 Encoded Version)
    temp := SRC[127:0]
    DEST[127:0] := temp
    DEST[255:128] := temp
    DEST[MAXVL-1:256] := 0

VBROADCASTSD

VBROADCASTSD ymm1, m64 

        Broadcast double precision floating-point element in mem to four locations in ymm1.

存储在内存中的64位浮点值广播到一个256位YMM寄存器的所有元素。这意味着存储在内存中的相同64位值将被复制到YMM寄存器的所有元素中

VBROADCASTSD (VEX.256 Encoded Version)
    temp := SRC[63:0]
    DEST[63:0] := temp
    DEST[127:64] := temp
    DEST[191:128] := temp
    DEST[255:192] := temp
    DEST[MAXVL-1:256] := 0

VBROADCASTSS

VBROADCASTSS xmm1, m32
     Broadcast single precision floating-point element in mem to four locations in xmm1.

将存储在内存中的32位浮点值广播到一个128位XMM寄存器的所有元素。这意味着存储在内存中的相同32位值将被复制到XMM寄存器的所有元素中

VBROADCASTSS ymm1, m32

         Broadcast single precision floating-point element in mem to eight locations in ymm1.

将存储在内存中的32位浮点值广播到一个256位YMM寄存器的所有元素。这意味着存储在内存中的相同32位值将被复制到YMM寄存器的所有元素中。

VBROADCASTSS (128-bit Version VEX and Legacy) xmm寄存器
    temp := SRC[31:0]
    DEST[31:0] := temp
    DEST[63:32] := temp
    DEST[95:64] := temp
    DEST[127:96] := temp
    DEST[MAXVL-1:128] := 0

VBROADCASTSS (VEX.256 Encoded Version) ymm寄存器
    temp := SRC[31:0]
    DEST[31:0] := temp
    DEST[63:32] := temp
    DEST[95:64] := temp
    DEST[127:96] := temp
    DEST[159:128] := temp
    DEST[191:160] := temp
    DEST[223:192] := temp
    DEST[255:224] := temp
    DEST[MAXVL-1:256] := 0

VEXTRACTF128

VEXTRACTF128 xmm1/m128, ymm2, imm8

 

        Extract 128 bits of packed floating-point values from ymm2 and store results in xmm1/m128.

从256位YMM寄存器ymm2的低半部分或高半部分提取一个128位浮点值,并根据立即数imm8将其存储到目标XMM寄存器xmm1或内存位置m128中。

VEXTRACTF128 (Memory Destination Form)
    CASE (imm8[0]) OF
    0: DEST[127:0] := SRC1[127:0]
    1: DEST[127:0] := SRC1[255:128]
    ESAC.
VEXTRACTF128 (Register Destination Form)
    CASE (imm8[0]) OF
    0: DEST[127:0] := SRC1[127:0]
    1: DEST[127:0] := SRC1[255:128]
    ESAC.
    DEST[MAXVL-1:128] := 0

VINSERTF128 

VINSERTF128 ymm1, ymm2, xmm3/m128, imm8

         Insert 128 bits of packed floating-point values from xmm3/m128 and the remaining values from ymm2 into ymm1.

根据立即数imm8将来自XMM寄存器xmm3或内存位置m128的128位浮点值插入到256位YMM寄存器ymm1的相应半部分。

VINSERTF128 (VEX encoded version)
TEMP[255:0] := SRC1[255:0]
CASE (imm8[0]) OF
    0: TEMP[127:0] := SRC2[127:0]
    1: TEMP[255:128] := SRC2[127:0]
ESAC
DEST := TEMP

VMASKMOVPS


VMASKMOVPS xmm1, xmm2, m128
    Conditionally load packed single-precision values from m128 using mask in xmm2 and store in xmm1.

在xmm2中使用掩码,有条件地从m128加载压缩单精度值,并存储在xmm1中。

VMASKMOVPS ymm1, ymm2, m256
    Conditionally load packed single-precision values from m256 using mask in ymm2 and store in ymm1.

使用ymm2中的掩码有条件地加载m256中的压缩单精度值,并存储在ymm1中。

VMASKMOVPS m128, xmm1, xmm2

    Conditionally store packed single-precision values from xmm2 using mask in xmm1.

使用xmm1中的掩码有条件地存储xmm2中的压缩单精度值。

VMASKMOVPS m256, ymm1, ymm2

    Conditionally store packed single-precision values from ymm2 using mask in ymm1.

使用ymm1中的掩码有条件地存储来自ymm2的压缩单精度值。
 


VMASKMOVPS -128-bit load 
    DEST[31:0] := IF (SRC1[31]) Load_32(mem) ELSE 0 
    DEST[63:32] := IF (SRC1[63]) Load_32(mem + 4) ELSE 0 
    DEST[95:64] := IF (SRC1[95]) Load_32(mem + 8) ELSE 0 
    DEST[127:97] := IF (SRC1[127]) Load_32(mem + 12) ELSE 0 
    DEST[MAXVL-1:128] := 0
VMASKMOVPS - 256-bit load
    DEST[31:0] := IF (SRC1[31]) Load_32(mem) ELSE 0 
    DEST[63:32] := IF (SRC1[63]) Load_32(mem + 4) ELSE 0 
    DEST[95:64] := IF (SRC1[95]) Load_32(mem + 8) ELSE 0 
    DEST[127:96] := IF (SRC1[127]) Load_32(mem + 12) ELSE 0 
    DEST[159:128] := IF (SRC1[159]) Load_32(mem + 16) ELSE 0 
    DEST[191:160] := IF (SRC1[191]) Load_32(mem + 20) ELSE 0 
    DEST[223:192] := IF (SRC1[223]) Load_32(mem + 24) ELSE 0 
    DEST[255:224] := IF (SRC1[255]) Load_32(mem + 28) ELSE 0 
VMASKMOVPS - 128-bit store
    IF (SRC1[31]) DEST[31:0] := SRC2[31:0] 
    IF (SRC1[63]) DEST[63:32] := SRC2[63:32] 
    IF (SRC1[95]) DEST[95:64] := SRC2[95:64] 
    IF (SRC1[127]) DEST[127:96] := SRC2[127:96]

VMASKMOVPS - 256-bit store
    IF (SRC1[31]) DEST[31:0] := SRC2[31:0] 
    IF (SRC1[63]) DEST[63:32] := SRC2[63:32] 
    IF (SRC1[95]) DEST[95:64] := SRC2[95:64] 
    IF (SRC1[127]) DEST[127:96] := SRC2[127:96] 
    IF (SRC1[159]) DEST[159:128] :=SRC2[159:128] 
    IF (SRC1[191]) DEST[191:160] := SRC2[191:160] 
    IF (SRC1[223]) DEST[223:192] := SRC2[223:192] 
    IF (SRC1[255]) DEST[255:224] := SRC2[255:224]

VMASKMOVPD

VMASKMOVPD xmm1, xmm2, m128
    Conditionally load packed double precision values from m128 using mask in xmm2 and store in xmm1.

在xmm2中使用掩码,有条件地从m128加载压缩双精度值,并存储在xmm1中。

VMASKMOVPD ymm1, ymm2, m256
    Conditionally load packed double precision values from m256 using mask in ymm2 and store in ymm1.

使用ymm2中的掩码,有条件地加载m256中的压缩双精度值,并存储在ymm1中。

VMASKMOVPD m128, xmm1, xmm2

    Conditionally store packed double precision values from xmm2 using mask in xmm1.

使用xmm1中的掩码有条件地存储xmm2中的压缩双精度值。

VMASKMOVPD m256, ymm1, ymm2

    Conditionally store packed double precision values from ymm2 using mask in ymm1.

使用ymm1中的掩码有条件地存储来自ymm2的压缩双精度值。

VMASKMOVPD - 128-bit load 
    DEST[63:0] := IF (SRC1[63]) Load_64(mem) ELSE 0 
    DEST[127:64] := IF (SRC1[127]) Load_64(mem + 16) ELSE 0
    DEST[MAXVL-1:128] := 0

VMASKMOVPD - 256-bit load
    DEST[63:0] := IF (SRC1[63]) Load_64(mem) ELSE 0 
    DEST[127:64] := IF (SRC1[127]) Load_64(mem + 8) ELSE 0 
    DEST[195:128] := IF (SRC1[191]) Load_64(mem + 16) ELSE 0 
    DEST[255:196] := IF (SRC1[255]) Load_64(mem + 24) ELSE 0 

VMASKMOVPD - 128-bit store
    IF (SRC1[63]) DEST[63:0] := SRC2[63:0] 
    IF (SRC1[127]) DEST[127:64] := SRC2[127:64] 
VMASKMOVPD - 256-bit store
    IF (SRC1[63]) DEST[63:0] := SRC2[63:0] 
    IF (SRC1[127]) DEST[127:64] := SRC2[127:64] 
    IF (SRC1[191]) DEST[191:128] := SRC2[191:128] 
    IF (SRC1[255]) DEST[255:192] := SRC2[255:192]

VPERMILPD


VPERMILPD xmm1, xmm2, xmm3/m128
    Permute double precision floating-point values in xmm2 using controls from xmm3/m128 and store result in xmm1.

使用xmm3/m128中的控件对xmm2中的双精度浮点值进行Permute处理,并将结果存储在xmm1中。

VPERMILPD ymm1, ymm2, ymm3/m256
    Permute double precision floating-point values in ymm2 using controls from ymm3/m256 and store result in ymm1.

使用ymm3/m256中的控件对ymm2中的双精度浮点值进行静音处理,并将结果存储在ymm1中。


VPERMILPD xmm1, xmm2/m128, imm8
    Permute double precision floating-point values in xmm2/m128 using controls from imm8.

使用imm8中的控件对xmm2/m128中的双精度浮点值进行Permute处理。

VPERMILPD ymm1, ymm2/m256, imm8
    Permute double precision floating-point values in ymm2/m256 using controls from imm8.

使用imm8中的控件对ymm2/m256中的双精度浮点值进行静音处理。

VPERMILPD (256-bit immediate version)
    IF (imm8[0] = 0) THEN DEST[63:0] := SRC1[63:0]
    IF (imm8[0] = 1) THEN DEST[63:0] := SRC1[127:64]
    IF (imm8[1] = 0) THEN DEST[127:64] := SRC1[63:0]
    IF (imm8[1] = 1) THEN DEST[127:64] := SRC1[127:64]
    IF (imm8[2] = 0) THEN DEST[191:128] := SRC1[191:128]
    IF (imm8[2] = 1) THEN DEST[191:128] := SRC1[255:192]
    IF (imm8[3] = 0) THEN DEST[255:192] := SRC1[191:128]
    IF (imm8[3] = 1) THEN DEST[255:192] := SRC1[255:192]
    DEST[MAXVL-1:256] := 0


VPERMILPD (128-bit immediate version)
    IF (imm8[0] = 0) THEN DEST[63:0] := SRC1[63:0]
    IF (imm8[0] = 1) THEN DEST[63:0] := SRC1[127:64]
    IF (imm8[1] = 0) THEN DEST[127:64] := SRC1[63:0]
    IF (imm8[1] = 1) THEN DEST[127:64] := SRC1[127:64]
    DEST[MAXVL-1:128] := 0

VPERMILPD (256-bit variable version)
    IF (SRC2[1] = 0) THEN DEST[63:0] := SRC1[63:0]
    IF (SRC2[1] = 1) THEN DEST[63:0] := SRC1[127:64]
    IF (SRC2[65] = 0) THEN DEST[127:64] := SRC1[63:0]
    IF (SRC2[65] = 1) THEN DEST[127:64] := SRC1[127:64]
    IF (SRC2[129] = 0) THEN DEST[191:128] := SRC1[191:128]
    IF (SRC2[129] = 1) THEN DEST[191:128] := SRC1[255:192]
    IF (SRC2[193] = 0) THEN DEST[255:192] := SRC1[191:128]
    IF (SRC2[193] = 1) THEN DEST[255:192] := SRC1[255:192]
    DEST[MAXVL-1:256] := 0
    
VPERMILPD (128-bit variable version)
    IF (SRC2[1] = 0) THEN DEST[63:0] := SRC1[63:0]
    IF (SRC2[1] = 1) THEN DEST[63:0] := SRC1[127:64]
    IF (SRC2[65] = 0) THEN DEST[127:64] := SRC1[63:0]
    IF (SRC2[65] = 1) THEN DEST[127:64] := SRC1[127:64]
    DEST[MAXVL-1:128] := 0

VPERMILPS


VPERMILPS xmm1, xmm2, xmm3/m128
    Permute single-precision floating-point values in xmm2 using controls from xmm3/m128 and store result in xmm1.

使用xmm3/m128中的控件对xmm2中的单精度浮点值进行Permute处理,并将结果存储在xmm1中。

VPERMILPS xmm1, xmm2/m128, imm8
    Permute single-precision floating-point values in xmm2/m128 using controls from imm8 and store result in xmm1.

使用imm8中的控件对xmm2/m128中的单精度浮点值进行Permute处理,并将结果存储在xmm1中。

VPERMILPS ymm1, ymm2, ymm3/m256
    Permute single-precision floating-point values in ymm2 using controls from ymm3/m256 and store result in ymm1.

使用ymm3/m256和的控件对ymm2中的单精度浮点值进行静音处理

VPERMILPS ymm1, ymm2/m256, imm8
    Permute single-precision floating-point values in ymm2/m256 using controls from imm8 and store result in ymm1.
使用imm8中的控件对ymm2/m256中的单精度浮点值进行静音处理,并将结果存储在ymm1中。

Select4(SRC, control) {
    CASE (control[1:0]) OF
    0: TMP := SRC[31:0];
    1: TMP := SRC[63:32];
    2: TMP := SRC[95:64];
    3: TMP := SRC[127:96];
    ESAC;
    RETURN TMP
}

VPERMILPS (256-bit immediate version)
    DEST[31:0] := Select4(SRC1[127:0], imm8[1:0]);
    DEST[63:32] := Select4(SRC1[127:0], imm8[3:2]);
    DEST[95:64] := Select4(SRC1[127:0], imm8[5:4]);
    DEST[127:96] := Select4(SRC1[127:0], imm8[7:6]);
    DEST[159:128] := Select4(SRC1[255:128], imm8[1:0]);
    DEST[191:160] := Select4(SRC1[255:128], imm8[3:2]);
    DEST[223:192] := Select4(SRC1[255:128], imm8[5:4]);
    DEST[255:224] := Select4(SRC1[255:128], imm8[7:6]);
VPERMILPS (128-bit immediate version)
    DEST[31:0] := Select4(SRC1[127:0], imm8[1:0]);
    DEST[63:32] := Select4(SRC1[127:0], imm8[3:2]);
    DEST[95:64] := Select4(SRC1[127:0], imm8[5:4]);
    DEST[127:96] := Select4(SRC1[127:0], imm8[7:6]);
    DEST[MAXVL-1:128] := 0
VPERMILPS (256-bit variable version)
    DEST[31:0] := Select4(SRC1[127:0], SRC2[1:0]);
    DEST[63:32] := Select4(SRC1[127:0], SRC2[33:32]);
    DEST[95:64] := Select4(SRC1[127:0], SRC2[65:64]);
    DEST[127:96] := Select4(SRC1[127:0], SRC2[97:96]);
    DEST[159:128] := Select4(SRC1[255:128], SRC2[129:128]);
    DEST[191:160] := Select4(SRC1[255:128], SRC2[161:160]);
    DEST[223:192] := Select4(SRC1[255:128], SRC2[193:192]);
    DEST[255:224] := Select4(SRC1[255:128], SRC2[225:224]);
    DEST[MAXVL-1:256] := 0
VPERMILPS (128-bit variable version)
    DEST[31:0] := Select4(SRC1[127:0], SRC2[1:0]);
    DEST[63:32] := Select4(SRC1[127:0], SRC2[33:32]);
    DEST[95:64] :=Select4(SRC1[127:0], SRC2[65:64]);
    DEST[127:96] := Select4(SRC1[127:0], SRC2[97:96]);
    DEST[MAXVL-1:128] := 0

VPERM2F128

VPERM2F128 ymm1, ymm2, ymm3/m256, imm8

        Permute 128-bit floating-point fields in ymm2 and ymm3/mem using controls from imm8 and store result in ymm1.

使用imm8中的控件对ymm2和ymm3/mem中的128位浮点字段进行静音处理,并将结果存储在ymm1中。

VPERM2F128
CASE IMM8[1:0] of 
    0: DEST[127:0] := SRC1[127:0]
    1: DEST[127:0] := SRC1[255:128]
    2: DEST[127:0] := SRC2[127:0]
    3: DEST[127:0] := SRC2[255:128]
ESAC
CASE IMM8[5:4] of 
    0: DEST[255:128] := SRC1[127:0]
    1: DEST[255:128] := SRC1[255:128]
    2: DEST[255:128] := SRC2[127:0]
    3: DEST[255:128] := SRC2[255:128]
ESAC
IF (imm8[3])
    DEST[127:0] := 0
FI

IF (imm8[7])
    DEST[MAXVL-1:128] := 0
    FI
Int

VTESTPS


VTESTPS xmm1, xmm2/m128
     Set ZF and CF depending on sign bit AND and ANDN of packed single-precision floating-point sources.

根据压缩单精度浮点源的符号位and和ANDN设置ZF和CF。

VTESTPS ymm1, ymm2/m256
     Set ZF and CF depending on sign bit AND and ANDN of packed single-precision floating-point sources.

根据压缩单精度浮点源的符号位and和ANDN设置ZF和CF。

VTESTPS (128-bit version)
    TEMP[127:0] := SRC[127:0] AND DEST[127:0]
    IF (TEMP[31] = TEMP[63] = TEMP[95] = TEMP[127] = 0)
        THEN ZF := 1;
        ELSE ZF := 0;
    TEMP[127:0] := SRC[127:0] AND NOT DEST[127:0]
    IF (TEMP[31] = TEMP[63] = TEMP[95] = TEMP[127] = 0)
        THEN CF := 1;
        ELSE CF := 0;
    DEST (unmodified)
    AF := OF := PF := SF := 0;

VTESTPS (VEX.256 encoded version)
    TEMP[255:0] := SRC[255:0] AND DEST[255:0]
    IF (TEMP[31] = TEMP[63] = TEMP[95] = TEMP[127]= TEMP[160] =TEMP[191] = TEMP[224] = TEMP[255] = 0)
        THEN ZF := 1;
        ELSE ZF := 0;
    TEMP[255:0] := SRC[255:0] AND NOT DEST[255:0]
    IF (TEMP[31] = TEMP[63] = TEMP[95] = TEMP[127]= TEMP[160] =TEMP[191] = TEMP[224] = TEMP[255] = 0)
        THEN CF := 1;
        ELSE CF := 0;
    DEST (unmodified)
    AF := OF := PF := SF := 0;

VTESTPD

VTESTPD xmm1, xmm2/m128
     Set ZF and CF depending on sign bit AND and ANDN of packed double precision floating-point sources.

根据压缩双精度浮点源的符号位and和ANDN设置ZF和CF。

VTESTPD ymm1, ymm2/m256
     Set ZF and CF depending on sign bit AND and ANDN of packed double precision floating-point sources.

根据压缩双精度浮点源的符号位and和ANDN设置ZF和CF。

VTESTPD (128-bit version)
    TEMP[127:0] := SRC[127:0] AND DEST[127:0]
    IF ( TEMP[63] = TEMP[127] = 0)
        THEN ZF := 1;
        ELSE ZF := 0;
    TEMP[127:0] := SRC[127:0] AND NOT DEST[127:0]
    IF ( TEMP[63] = TEMP[127] = 0)
        THEN CF := 1;
        ELSE CF := 0;
    DEST (unmodified)
    AF := OF := PF := SF := 0;
VTESTPD (VEX.256 encoded version)
    TEMP[255:0] := SRC[255:0] AND DEST[255:0]
    IF (TEMP[63] = TEMP[127] = TEMP[191] = TEMP[255] = 0)
        THEN ZF := 1;
        ELSE ZF := 0;
    TEMP[255:0] := SRC[255:0] AND NOT DEST[255:0]
    IF (TEMP[63] = TEMP[127] = TEMP[191] = TEMP[255] = 0)
        THEN CF := 1;
        ELSE CF := 0;
    DEST (unmodified)
    AF := OF := PF := SF := 0;

VZEROALL

 Zero some of the XMM, YMM, and ZMM registers.

Zero all YMM registers.

VZEROUPPER

Zero bits in positions 128 and higher of some YMM and ZMM registers.

 Zero upper 128 bits of all YMM registers

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值