汇编 intel SSSE3 指令简介

汇编 intel SSSE3 指令简介根据 xmm2 m128 寄存器或内存位置中的内容对 xmm1 寄存器中的数据进行按位重新排列

大家好,欢迎来到IT知识分享网。

简介: 它是SSE3(Streaming SIMD Extensions 3)的补充,引入了一些额外的指令,用于加速多媒体和向量化计算。SSSE3指令集提供了一些新的指令,例如平行比较、平行加减运算、逐位平行操作等,可以帮助优化处理多媒体数据和执行向量化计算任务。这些指令能够提高程序的性能和效率,特别是在涉及大量数据并行处理的情况下。

水平加法/减法
PHADDW

PHADDW mm1, mm2/m64

        Add 16-bit integers horizontally, pack to mm1.

        将两个操作数相加,并将结果存储在mm1寄存器中。

        这里的mm1和mm2/m64表示寄存器或内存位置,分别存储着16位的数据。

PHADDW xmm1, xmm2/m128

        Add 16-bit integers horizontally, pack to xmm1.

        将两个操作数相加,并将结果存储在xmm1寄存器中。

        这里的xmm1和xmm2/m64表示寄存器或内存位置,分别存储着16位的数据。

PHADDW执行的是带符号的16位整数加法操作。

PHADDSW

        将两个操作数相加,并将结果存储在mm1寄存器中。

        用于将两个操作数相加,并将结果存储在XMM寄存器中。

        这里的xmm1和xmm2/m128表示寄存器或内存位置,分别存储着16位的数据

PHADDSW执行的是带符号的16位整数加法操作。

PHADDD

PHADDD xmm1, xmm2/m128

        Add 32-bit integers horizontally, pack to xmm1.

        将两个操作数相加,并将结果存储在XMM寄存器中。这里的XMM表示128位的寄存器,

        将两个操作数相加,并将结果存储在MM寄存器中。这里的MM表示64位的寄存器,

PHADDD执行的是带符号的32位整数加法操作。

PHSUBW

PHSUBW mm1, mm2/m64

         Subtract 16-bit signed integers horizontally, pack to mm1. 

        指令用于将两个操作数相减,并将结果存储在mm1寄存器中。

        这里的mm1和mm2/m64表示寄存器或内存位置,分别存储着16位的数据。

        将两个操作数相减,并将结果存储在XMM寄存器中。

        这里的xmm1和xmm2/m128表示寄存器或内存位置,分别存储着16位的数据

PHSUBW执行的是带符号的16位整数减法操作

PHSUBSW

PHSUBSW mm1, mm2/m64

        Subtract 16-bit signed integer horizontally, pack saturated integers to mm1.

        用于将两个操作数相减,并将结果存储在mm1寄存器中。

        这里的mm1和mm2/m64表示寄存器或内存位置,分别存储着16位的数据。

PHSUBSW xmm1, xmm2/m128

         Subtract 16-bit signed integer horizontally, pack saturated integers to xmm1.

        用于将两个操作数相减,并将结果存储在XMM寄存器中。

        这里的xmm1和xmm2/m128表示寄存器或内存位置,分别存储着16位的数据

PHSUBSW执行的是带符号的16位整数减法操作。

PHSUBD

        将两个操作数相减,并将结果存储在mm1寄存器中。

        这里的mm1和mm2/m64表示寄存器或内存位置,分别存储着32位的数据。

        用于将两个操作数相减,并将结果存储在XMM寄存器中。

        这里的xmm1和xmm2/m128表示寄存器或内存位置,分别存储着32位的数据

PHSUBD执行的是带符号的32位整数减法操作。

Packed Absolute Values
PABSB

                将mm2/m64寄存器或内存位置中的8位带符号整数取绝对值,

                并将结果存储在mm1寄存器中

                将xmm2/m128寄存器或内存位置中的8位带符号整数取绝对值,

                并将结果存储在xmm1寄存器中

PABSW

               将mm2/m64寄存器或内存位置中的16位带符号整数取绝对值,

                并将结果存储在mm1寄存器中

                将xmm2/m128寄存器或内存位置中的16位带符号整数取绝对值,

                并将结果存储在xmm1寄存器中

PABSSD

                将mm2/m64寄存器或内存位置中的32位带符号整数取绝对值,

                并将结果存储在mm1寄存器中。

                将xmm2/m128寄存器或内存位置中的32位带符号整数取绝对值,

                并将结果存储在xmm1寄存器中

Multiply and Add Packed Signed and Unsigned Bytes
PMADDUBSW

                用于将两个操作数进行乘法和加法运算,

                并将结果存储在mm1寄存器中。

                将两个操作数进行乘法和加法运算,并将结果存储在XMM寄存器中。

                这里的xmm1和xmm2/m128表示寄存器或内存位置,分别存储着8位的数据

PMADDUBSW执行的是带符号的8位整数乘法和加法操作。

Packed Multiply High with Round and Scale:
PMULHRSW

            pack high 16 bits to mm1.

将两个操作数进行带符号16位整数乘法,并将结果存储在mm1寄存器中。
PMULHRSW xmm1, xmm2/m128
            Multiply 16-bit signed words, scale and round signed doublewords,

                 pack high 16 bits to xmm1.

将两个操作数进行带符号16位整数乘法,并将结果存储在XMM寄存器中。

PMULHRSW (With 64-bit Operands) temp0[31:0] = INT32 ((DEST[15:0] * SRC[15:0]) >>14) + 1; temp1[31:0] = INT32 ((DEST[31:16] * SRC[31:16]) >>14) + 1; temp2[31:0] = INT32 ((DEST[47:32] * SRC[47:32]) >> 14) + 1; temp3[31:0] = INT32 ((DEST[63:48] * SRc[63:48]) >> 14) + 1; DEST[15:0] = temp0[16:1]; DEST[31:16] = temp1[16:1]; DEST[47:32] = temp2[16:1]; DEST[63:48] = temp3[16:1]; PMULHRSW (With 128-bit Operands) temp0[31:0] = INT32 ((DEST[15:0] * SRC[15:0]) >>14) + 1; temp1[31:0] = INT32 ((DEST[31:16] * SRC[31:16]) >>14) + 1; temp2[31:0] = INT32 ((DEST[47:32] * SRC[47:32]) >>14) + 1; temp3[31:0] = INT32 ((DEST[63:48] * SRC[63:48]) >>14) + 1; temp4[31:0] = INT32 ((DEST[79:64] * SRC[79:64]) >>14) + 1; temp5[31:0] = INT32 ((DEST[95:80] * SRC[95:80]) >>14) + 1; temp6[31:0] = INT32 ((DEST[111:96] * SRC[111:96]) >>14) + 1; temp7[31:0] = INT32 ((DEST[127:112] * SRC[127:112) >>14) + 1; DEST[15:0] = temp0[16:1]; DEST[31:16] = temp1[16:1]; DEST[47:32] = temp2[16:1]; DEST[63:48] = temp3[16:1]; DEST[79:64] = temp4[16:1]; DEST[95:80] = temp5[16:1]; DEST[111:96] = temp6[16:1]; DEST[127:112] = temp7[16:1];

Packed Shuffle Bytes:
PSHUFB

     根据xmm2/m128寄存器或内存位置中的内容对xmm1寄存器中的数据进行按位重新排列。

Packed Sign:
def byte_sign(control, input_val):      if control<0:      return negate(input_val)      elif control==0:      return 0      return input_val   def word_sign(control, input_val):      if control<0:      return negate(input_val)      elif control==0:      return 0      return input_val   def dword_sign(control, input_val):      if control<0:      return negate(input_val)      elif control==0:      return 0      return input_val

PSIGNB

PSIGNB mm1, mm2/m64

           Negate/zero/preserve packed byte integers in mm1 depending on

        the corresponding  sign in mm2/m64.

将mm1寄存器中的每个字节(8位)根据mm2/m64寄存器或内存位置中的符号位进行取值。如果mm2/m64中对应字节的符号位为0,则结果字节取正值;如果mm2/m64中对应字节的符号位为1,则结果字节取负值。

        the corresponding sign in xmm2/m128.

将xmm1寄存器中的每个字节(8位)根据xmm2/m128寄存器或内存位置中的符号位进行取值。如果xmm2/m128中对应字节的符号位为0,则结果字节取正值;如果xmm2/m128中对应字节的符号位为1,则结果字节取负值。

PSIGNW

      on the corresponding sign in mm2/m128.

将mm1寄存器中的每个字(16位)根据mm2/m64寄存器或内存位置中的符号位进行取值。如果mm2/m64中对应字的符号位为0,则结果字取正值;如果mm2/m64中对应字的符号位为1,则结果字取负值。

        on the corresponding sign in xmm2/m128.

将xmm1寄存器中的每个字(16位)根据xmm2/m128寄存器或内存位置中的符号位进行取值。如果xmm2/m128中对应字的符号位为0,则结果字取正值;如果xmm2/m128中对应字的符号位为1,则结果字取负值。

PSIGND

        on the corresponding sign in mm2/m128.

将mm1寄存器中的每个双字(32位)根据mm2/m64寄存器或内存位置中的符号位进行取值。如果mm2/m64中对应双字的符号位为0,则结果双字取正值;如果mm2/m64中对应双字的符号位为1,则结果双字取负值。

       on the corresponding sign in xmm2/m128.

于将xmm1寄存器中的每个双字(32位)根据xmm2/m128寄存器或内存位置中的符号位进行取值。如果xmm2/m128中对应双字的符号位为0,则结果双字取正值;如果xmm2/m128中对应双字的符号位为1,则结果双字取负值。

Packed Align Right:
PALIGNR

        extract byte-aligned result shifted to the right by constant value in imm8 into mm1.

        将mm1寄存器和mm2/m64寄存器或内存位置中的数据进行对齐和移位操作,

        imm8参数指定了移位的位数。

PALIGNR xmm1, xmm2/m128, imm8

        Concatenate destination and source operands,

        extract byte-aligned result shifted to the right by constant value in imm8 into xmm1.

        将xmm1寄存器和xmm2/m128寄存器或内存位置中的数据进行对齐和移位操作,

        imm8参数指定了移位的位数

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/132379.html

(0)
上一篇 2025-07-31 20:33
下一篇 2025-07-31 20:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信