简介:是一组指令集扩展,用于增强处理器的浮点运算和向量操作能力,可以同时对多个数据元素执行相同的操作,采用8个128位寄存器(XMM0~XMM7),适用于需要高性能并行计算的应用场景,能够通过同时处理多个数据元素来提高计算效率,从而加速各种计算密集型任务的执行
应用场景 | |
图像和视频处理 | 加速图像处理算法,如滤波、边缘检测、颜色转换等。在视频编解码中也能提高性能 |
数值计算 | 对于科学计算、金融建模、工程仿真等需要大量浮点运算的任务,提升计算速度。 |
数据压缩 | 在压缩算法中,如JPEG、MPEG等,SSE指令集可用于加速离散余弦变换(DCT)和其他复杂运算。 |
游戏开发 | 游戏引擎和图形渲染中经常需要进行大量的向量运算,提高游戏性能和图形质量。 |
信号处理 | 在音频处理、语音识别等领域,SSE指令集可用于加速数字信号处理算法 |
数据传输 | |
MOVAPS | MOVAPS xmm(n), xmm2/m128 MOVAPS xmm2/m128, xmm(n) 移动对齐打包单精度,32位; 4个32位数值打包复制到目标地址之中参与运算 |
MOVUPS | MOVUPS xmm(n), xmm2/m128 MOVUPS xmm2/m128, xmm(n) 移动未对齐的打包单精度,当无法保证打包数据位于16字节的地址边界时 16字节的地址边界:数据将从地址为16的倍数开始存储,而不是任意地址,对齐方式有助于提高内存访问效率和系统性能。 |
MOVHPS | MOVHPS xmm(n), m64 将m64 数据复制到一个XMM寄存器(xmm1)的高64位中。 |
MOVLPS | MOVLPS xmm(dest), mem64/xmm(src) 将mem64/xmm(src) 中 两个单精度的低字节数据从源操作数复制到xmm(dest)的低64位 |
MOVHLPS | MOVHLPS xmm(n), xmm2/mem64 将xmm2/mem64 的低64位(2个32位单精度浮点数)移动到XMM 寄存器的低64位中,高64位不变, |
MOVLHPS | MOVLHPS xmm1, xmm2 将xmm2/mem64 的低64位(2个32位单精度浮点数)移动到XMM 寄存器的高64位中,低64位不变, |
MOVMSKPS | MOVMSKPS reg, xmm 源操作数中的四个单精度浮点值的最高位(即符号位)移动到目标操作数的四个最低有效位中 |
MOVSS | MOVSS xmm1, xmm2/m32: xmm2/m32 数据复制到xmm1中 MOVSS xmm2/m32, xmm1 |
算术 | |
ADDPS | ADDPS xmm1, xmm2/m128 将源操作数中的四个单精度浮点值与目标操作数中的四个单精度浮点值逐元素相加 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] |
ADDSS | ADDSS xmm1, xmm2/m32 将源操作数中的单精度浮点数与目标操作数中的单精度浮点数相加,并将结果存储在目标操作数中 DEST[31:0] := DEST[31:0] + SRC[31:0] |
SUBPS | SUBPS xmm1, xmm2/m128 将源操作数中的四个单精度浮点值与目标操作数中的四个单精度浮点值逐元素相减的操作 指令通常用于在SIMD(单指令,多数据)操作中对打包的单精度浮点数据执行并行减法 |
SUBSS | SUBSS xmm1, xmm2/m32 将源操作数中的单精度浮点数值从目标操作数中的单精度浮点数值逐元素相减的操作。这个指令通常用于处理单个浮点数值的减法运算。 |
MULPS | MULPS xmm1, xmm2/m128 将源操作数中的四个单精度浮点值与目标操作数中的四个单精度浮点值逐元素相乘的操作。这个指令通常用于在SIMD(单指令,多数据)操作中对打包的单精度浮点数据执行并行乘法 |
MULSS | MULSS xmm1,xmm2/m32 将源操作数中的单精度浮点数值与目标操作数中的单精度浮点数值相乘的操作,并将结果存储在目标操作数中。这个指令通常用于处理单个浮点数值的乘法运算 |
DIVPS | DIVPS xmm1, xmm2/m128 将源操作数中的四个单精度浮点值除以目标操作数中的四个单精度浮点值,逐元素进行除法运算。这个指令通常用于在SIMD(单指令,多数据)操作中对打包的单精度浮点数据执行并行除法。 |
DIVSS | DIVSS xmm1,xmm2/m32 将目标操作数中的单精度浮点数值除以源操作数中的单精度浮点数值,并将结果存储在目标操作数中。这个指令执行单精度浮点数的除法运算,适用于处理单个浮点数值。 |
RCPPS | RCPPS xmm1, xmm2/m128 将目标操作数中的四个单精度浮点值分别取倒数,并将结果存储在目标操作数中。这个指令通常用于在SIMD(单指令,多数据)操作中对打包的单精度浮点数据执行逐元素的倒数运算 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]) |
RCPSS | RCPSS xmm1,xmm2/m32 将源操作数中的单精度浮点数值取倒数,并将结果存储在目标操作数中。这个指令通常用于处理单个浮点数值的倒数运算。 |
SQRTPS | SQRTPS xmm1, xmm2/m128 将目标操作数中的四个单精度浮点值分别进行平方根运算,并将结果存储在目标操作数中。这个指令通常用于在SIMD(单指令,多数据)操作中对打包的单精度浮点数据执行逐元素的平方根运算 |
SQRTSS | SQRTSS xmm1,xmm2/m32 将源操作数中的单精度浮点数值进行平方根运算,并将结果存储在目标操作数中。这个指令通常用于处理单个浮点数值的平方根运算。 |
RSQRTPS | RSQRTPS xmm1, xmm2/m128 行将目标操作数中的四个单精度浮点值分别取倒数的平方根,并将结果存储在目标操作数中。这个指令通常用于在SIMD(单指令,多数据)操作中对打包的单精度浮点数据执行逐元素的倒数平方根运算 |
RSQRTSS | RSQRTSS xmm1, xmm2/m32 将源操作数中的单精度浮点数值取倒数的平方根,并将结果存储在目标操作数中。这个指令通常用于处理单个浮点数值的倒数平方根运算 |
MAXPS | MAXPS xmm1, xmm2/m128 将源操作数中的四个单精度浮点值与目标操作数中的四个单精度浮点值逐元素比较,然后将每个位置上的最大值存储在目标操作数中 |
MAXSS | MAXSS xmm1, xmm2/m32 行将源操作数中的单精度浮点数值与目标操作数中的单精度浮点数值进行比较,然后将较大的值存储在目标操作数中。这个指令通常用于处理单个浮点数值的最大值比较。 |
MINPS | MINPS xmm1, xmm2/m128 将源操作数中的四个单精度浮点值与目标操作数中的四个单精度浮点值逐元素比较,然后将每个位置上的最小值存储在目标操作数中。这个指令通常用于在SIMD(单指令,多数据)操作中对打包的单精度浮点数据执行最小值比较。 |
MINSS | MINSS xmm1, xmm2/m32 将源操作数中的单精度浮点数值与目标操作数中的单精度浮点数值进行比较,然后将较小的值存储在目标操作数中。这个指令通常用于处理单个浮点数值的最小值比较。 |
比较 | |
CMPPS | CMPPS xmm1, xmm2/m128, imm8 ; imm8是立即数范围是0~7 它执行将源操作数中的四个单精度浮点值与目标操作数中的四个单精度浮点值逐元素进行比较,并根据条件码选择性地将结果存储在目标操作数中。这个指令通常用于在SIMD(单指令,多数据)操作中对打包的单精度浮点数据执行比较操作。 根据imm8的值进行4对单精度浮点数的比较,符合imm8的就置目的寄存器对应的32位全1,否则全0 当imm8 = 0时,目的寄存器等于原寄存器数时,置目的寄存器对应的32位全1,否则全0 imm8 = 1 时,目的寄存器小于原寄存器数时,置目的寄存器对应的32位全1,否则全0 imm8 = 2 时,目的寄存器小于等于原寄存器数时,置目的寄存器对应的32位全1,否则全0 imm8 = 4 时,目的寄存器不等于原寄存器数时,置目的寄存器对应的32位全1,否则全0 imm8 = 5 时,目的寄存器大于等于原寄存器数时,置目的寄存器对应的32位全1,否则全0 imm8 = 6 时,目的寄存器大于原寄存器数时,置目的寄存器对应的32位全1,否则全0 |
CMPSS | CMPSS xmm1, xmm2/m32, imm8 同上(CMPPS),单精度处理 |
COMISS | COMISS xmm1, xmm2/m32 执行比较两个单精度浮点数值,并根据比较结果设置处理器状态寄存器中的条件码 |
逻辑 | |
ANDPS | ANDPS xmm1, xmm2/m128 将源操作数中的四个单精度浮点值与目标操作数中的四个单精度浮点值逐元素进行按位与运算,并将结果存储在目标操作数中。这个指令通常用于在SIMD(单指令,多数据)操作中对打包的单精度浮点数据执行按位与操作。 |
ANDNPS | ANDNPS xmm1, xmm2/m128 执行将源操作数中的四个单精度浮点值与目标操作数中的四个单精度浮点值逐元素进行按位非与运算,并将结果存储在目标操作数中 |
ORPS | ORPS xmm1, xmm2/m128 四个单精度 或操作 |
XORPS | XORPS xmm1, xmm2/m128 四个单精度 异或操作 |
Shuffle(混排) and Unpack Instructions | |
SHUFPS | SHUFPS xmm1, xmm3/m128, imm8; imm8参数是一个立即数决定了如何对数据进行重新排列 用于对寄存器中的单精度浮点数进行重新排列。这个指令可以根据imm8参数指定的模式 xmm1[0:31] 的值从 xmm1 根据imm8 [0:1] 选择哪个单精度的值 mm1[32:63] 的值从 xmm1 根据imm8 [2:3] 选择哪个单精度的值 xmm1[64:95] 的值从 xmm3/m128 根据imm8 [4:5] 选择哪个单精度的值 mm1[96:127] 的值从 xmm3/m128 根据imm8 [6:7] 选择哪个单精度的值 |
UNPCKHPS | UNPCKHPS xmm1, xmm2/m128 源存储器与目的寄存器高64位按双字交错排列,结果送入目的寄存器 高64位 | 低64位 目的寄存器: a0 | a1 | a2 | a3 源存储器: b0 | b1 | b2 | b3 目的寄存器结果: b0 | a0 | b1 | a1 |
UNPCKLPS | UNPCKLPS xmm1, xmm2/m128 源存储器与目的寄存器低64位按双字交错排列,结果送入目的寄存器 高64位 | 低64位 目的寄存器: a0 | a1 | a2 | a3 源存储器: b0 | b1 | b2 | b3 目的寄存器结果: b2 | a2 | b3 | a3 |
转换 | |
CVTPI2PS | cvtpi2ps XMM,MM/m64 将MM/m64中2个有符号双字节整数转化为成2个单精度浮点数,存入XMM |
CVTSI2SS | CVTSI2SS xmm1, r/m32 将 r/m32中1个双字节(32位)整数转化为成1个单精度浮点数; 一个字节16位 |
CVTPS2PI | CVTPS2PI mm, xmm/m64 将xmm/64中2个单精度浮点数打包转换为2个压缩的双精度整数存入mm中 |
CVTTPS2PI | CVTTPS2PI mm, xmm/m64 将 xmm/m64 中2个单精度浮点数转换为2个双字有符号整数存入mm中 Convert two single precision floating-point values from xmm/m64 to two signed doubleword signed integers in mm using truncation. |
CVTSS2SI | CVTSS2SI r32, xmm1/m32 把xmm1/m32 单精度的浮点数转换为1个有符号双字整数存入r32中 Convert one single precision floating-point value from xmm1/m32 to one signed doubleword integer in r32. |
CVTTSS2SI | CVTTSS2SI r32, xmm1/m32 Convert one single precision floating-point value from xmm1/m32 to one signed doubleword integer in r32 using truncation. 把 xmm1/m32 一个 单精度浮点数转换为一个有符号双字整数到r32中,使用截断方式 |
MXCSR状态管理 | |
LDMXCSR | LDMXCSR m32 Load MXCSR register from m32. 从m32 中读取数值加载MXCSR 寄存器 |
STMXCSR | STMXCSR m32 store contents of MXCSR register to m32 将MXCSR 寄存器内容保存到m32中 |
64位SIMD整数指令 | |
PAVGB | PAVGB mm1, mm2/m64 Average packed unsigned byte integers from mm2/m64 and mm1 with rounding. 把源存储器与目的寄存器按字节无符号整数相加,再除以2,结果四舍五入为整数放入目的寄存器, |
PAVGW | PAVGW mm1, mm2/m64 Average packed unsigned word integers from mm2/m64 and mm1 with rounding. 把源存储器与目的寄存器按字无符号整数相加,再除以2,结果四舍五入为整数放入目的寄存器, |
PEXTRW | PEXTRW reg, mm, imm8 Extract the word specified by imm8 from mm and move it to reg, bits 15-0. The upper bits of r32 or r64 is zeroed. 从mm 中提取指定 imm8个字数据存入reg 的15-0 位,高位清零. |
PINSRW | PINSRW mm, r32/m16, imm8 Insert the low word from r32 or from m16 into mm at the word position specified by imm8. 通过imm8 从r32 或 从m16 低字节存储到由指定字节位置, PINSRW dest, src, imm8 (SSE) SEL := imm8[2:0] DEST.word[SEL] := src.word[0] |
PMAXUB | PMAXUB mm1, mm2/m64 Compare unsigned byte integers in mm2/m64 and mm1 and returns maximum values. 使用无符号字整数 对比 mm2/m64 和 mm1 的值,返回最大值(保存到mm1中) |
PMAXSW | PMAXSW mm1, mm2/m64 Compare signed word integers in mm2/m64 and mm1 and return maximum values. 使用无符号字节整数 对比 mm2/m64 和 mm1 的值,返回最大值(保存到mm1中) |
PMINUB | |
PMINSW | |
PMOVMSKB | PMOVMSKB reg, mm Move a byte mask of mm to reg. The upper bits of r32 or r64 are zeroed 将mm 的一个字节掩码移动到reg,高位设置0 |
PMULHUW | PMULHUW mm1, mm2/m64 Multiply the packed unsigned word integers in mm1 register and mm2/m64, and store the high 16 bits of the results in mm1. 源操作数mm2/m64和目标操作数mm1中对应元素进行乘法运算,并将结果的高16位存储在mm1中 |
PSADBW | PSADBW mm1, mm2/m64 Computes the absolute differences of the packed unsigned byte integers from mm2/m64 and mm1; differences are then summed to produce an unsigned word integer result. 计算源操作数mm2/m64和目标操作数mm1中对应字节的绝对差值之和,并将结果存储在mm1中 |
PSHUFW | PSHUFW mm1, mm2/m64, imm8 Shuffle the words in mm2/m64 based on the encoding in imm8 and store the result in mm1 根据洗牌控制立即数imm8,在源操作数mm2/m64内对字(16位值)进行洗牌,并将结果存储在目标操作数mm1中 |
SSE可缓存性控制、预取和指令排序指令 | |
MASKMOVQ | MASKMOVQ mm1, mm2 Selectively write bytes from mm1 to memory location using the byte mask in mm2. The default memory location is specified by DS:DI/EDI/RDI. 使用以mm2为单位的字节掩码,有选择地将mm1中的字节写入内存位置。默认内存位置由DS:DI/EDI/RDI指定。 |
MOVNTQ | MOVNTQ m64, mm Move quadword from mm to m64 using nontemporal hint. 将MMX寄存器mm的内容进行非临时写入,写入到由目标操作数m64指定的内存地址中 |
MOVNTPS | MOVNTPS m128, xmm1 Move packed single precision values xmm1 to mem using non-temporal hint. XMM中四个压缩单精度浮点值的非临时存储注册到内存中。 |
PREFETCHh{0,1,2}, PREFETCHNTA | 将32个或更多字节从内存加载到处理器缓存层次结构的选定级别SFENCE序列化存储操作 |
还没有评论,来说两句吧...