x86-SSE指令集

SSE 指令集
(1)SSE 标量浮点数据传输指令
movss movsd 在俩个xmm指令金阊区之间或者内存位置和xmm寄存器之间复制标量浮点数
(2)SSE 标量浮点算术运算指令
addss addsd 对指定操作数做标量加法
subss subsd 对指定操作数做标量的减法,源操作数指定减数,目标操作数指定被减数
mulss mulsd 对指定操作数做标量乘法
divss divsd 对指定操作数做标量除法,源操作数指定除数,目标操作数指定被除数
sqrtss sqrtsd 计算指定源操作数的平方根
maxss maxsd 比较源操作数和目标操作数,并把较大的值保存到目标操作数
minss minsd 比较源操作数和目标操作数,并把较小的值保存到目标操作数
roundss roundsd 使用立即操作数指定舍入方法对标量浮点数做舍入
rcpss 计算指定操作数的近似倒数
rsqrtss 计算指定操作数的近似倒数的平方根
(3)SSE 标量浮点比较
cmpss smpsd 比较俩个标量浮点值,使用立即数指定操作数指定比较操作符。比较的结果被保存到目标操作数(所有1表示真,所有0表示假)
comiss comisd 对俩个标量浮点数有序比较,使用EFLAGS.ZF,EFLAGS.PE,EFLAGS.CF 报告结果
ucomiss ucomisd 对俩个标量浮点数无序比较,使用EFLAGS.ZF,EFLAGS.PE,EFLAGS.CF 报告结果
(3)SSE 标量浮点转换
cvtsi2ss cvtsi2sd 把带符号双字整数转换为浮点型,源操作数可以是内存位置或者通用寄存器,目标操作数必须是XMM寄存器
cvtss2si cvtsd2si 把浮点数转换为双字整数,源操作数可以是内存位置或者XMM寄存器目标操作数必须是通用寄存器
cvttss2si cvttsd2si 使用截断方法把浮点数转为双字整数,源操作数可以是内存位置或者XMM寄存器,目标操作数必须是通用寄存器
cvtss2sd 把SPFP值转换为DPFP值,源操作数可以是内存位置或者XMM寄存器,目标操作数必须是XMM寄存器
cvtsd2ss 把DPFP值转换为SPFP值,源操作数可以是内存位置或者XMM寄存器,目标操作数必须是XMM寄存器
(4)SSE 组合浮点型数据传输指令
movaps movapd 在俩个XMM寄存器之间或者内存单元和XMM寄存器之间复制组合SPFP/DPFP值
movups movupd 在俩个XMM寄存器之间或者非对齐内存单元和XMM寄存器之间复制组合SPFP/DPFP值
movlps movlpd 把一个组合SPFP/DPFP值的低位四字从内存复制到XMM寄存器,反之亦可。如果目标是XMM寄存器,那么高位的四字不受影响
movhps movhpd 把一个组合SPFP/DPFP值的高位四字从内存复制到XMM寄存器,反之亦可。如果目标是XMM寄存器,那么低位的四字不受影响
movlhps 把组合SPFP源操作数的低位四字复制到目标操作数的高位四字,源和目标操作数必须是XMM寄存器
movhlps 把组合SPFP源操作数的高位四字复制到目标操作数的低位四字,源和目标操作数必须是XMM寄存器
mosldup 把源操作数中每个四字的低位SPFP值复制到目标操作数的相同位置,再把目标操作数中每个四字的低位SPFP值复制到高32位
movshdup 把源操作数中每个四字的高位SPFP值复制到目标操作数的相同位置,每个目标操作数四字高位SPFP值再被复制到低32位
movddup 把源操作数的低位DPFP值复制到目标操作数的低位四字和高位四字
movmskps movmskpd 提取操作数中每个组合SPFP/DPFP数据元素的符号位,并将其保存到通用寄存器的低二进制位,高位被置0
(5)SSE 组合浮点算术运算指令
addps addpd 对源和目标操作数中的数据元素组合浮点加法
subps subpd 对源和目标操作数的数据元素做组合浮点减法,源操作数包含减数,目标操作数包含被减数
mulps mulpd 对源和目标操作数的数据元素做组合浮点乘法
divps divpd 对源和目标操作数中的数据元素做组合浮点除法,源操作数包含除数,目标操作数包含被除数
sqrtps sqrtpd 计算源操作数的组合浮点数据源的平方根
maxps maxpd 比较源和目标操作数中的数据元素,把较大的值保存到目标操作数
minps minpd 比较源和目标操作数中的数据元素,把较小的值保存到目标操作数
rcpps 计算每个浮点元素的近似倒数
rsqrtps 计算每个浮点元素的近似倒数平方根
addsubps addsubpd 对奇数编号的浮点元素做加法,对偶数编号的浮点元素做减法
dpps dppd 对组合浮点元素做条件乘法,再做加法,这条指令用来计算点积
roundps roundpd 使用立即数指定的舍入模式对组合浮点数据元素做舍入操作
haddps haddpd 对源和目标操作数中包含的相邻浮点数据元素做加法
hsubpd hsubpd 对源和目标操作数中包含的相邻浮点数据元素做减法
(6)SSE 组合浮点比较指令
cmpps cmppd 使用指定的立即数比较运算符比较源和目标操作数中的浮点数据元素,比较的结果被保存到目标操作数(所以1便是真,所以0表示假)
(7)SSE 组合浮点转换指令
cvtpi2ps cvtpi2pd 把俩个组合带符号双字整数转换为两个组合浮点数,源操作数可以是内存位置或者MMX寄存器,目标操作数必须是XMM寄存器
cvtps2pi cvtpd2pi 把两个组合浮点数转换为俩个组合带符号双字整数,源操作数可以是内存位置或者XMM寄存器,目标操作数必须是MMX寄存器
cvttps2pi cvttpd2pi 使用截断方法两个组合浮点数转换为两个带符号双字整数源操作数可以是内存位置或者XMM寄存器,目标操作数必须是MMX寄存器
cvtdq2ps 把四个组合带符号双字整数转换为四个组合单精度浮点数
cvtdq2pd 把两个组合带符号双字整数转换为两个组合双精度浮点数
cvtps2dq 把四个组合单精度浮点数转换为四个带符号双字整数
cvttps2dq 使用截断作为舍入模式把四个组合单精度浮点数转换为四个组合带符号双字整数
cvtpd2dq 把两个组合双精度浮点数转换为两个组合带符号双字整数
cvttpd2pq 使用截断作为舍入模式把两个组合双精度浮点数转换为两个带符号双字整数
cvtps2pd 把两个组合单精度浮点数转换为两个组合双精度浮点数
cvtpd2ps 把两个组合双精度浮点数转换为两个组合单精度浮点数
(8)SSE 组合浮点重排和解组
shufps shufpd 把源和目标操作数中的指定元素移动到目标操作数,使用8位的立即数操作数和指定要移动的元素
unpcklps unpcklpd 解组(unpack)并交错源和目标操作数的低位元素,结果放到目标操作数
unpckhps unpckhpd 解组(unpack)并交错源和目标操作数的高位元素,结果放到目标操作数
(9)SSE 组合浮点插入和提取指令
insertps 从源操作数复制出一个SPFP值,并插入到目标操作数。源操作数可以是内存位置或者XMM寄存器,目标操作数必须是XMM寄存器。目标操作数元素是通过立即数操作数指定的
extractps 从源操作数中提取出一个SPFP元素,并把复制到目标操作数,源操作数必须是XMM寄存器,目标操作数可以是内存位置或者通用寄存器,要提取元素的位置是通过立即的操作数指定的
(10)SSE 组合浮点混合指令
blendps blendpd 从源和目标操作数中按条件复制浮点元素到目标操作数,使用立即数操作数来指定要复制的特定元素
blendvpd blendvpd 从源和目标操作数中按条件复制浮点元素目标操作数,使用XMM0中的掩码值指定要复制的特定元素
(11)SSE 组合浮点逻辑指令
andps andpd 对指定组合浮点操作数中的数据元素做按位逻辑与(and)
andnps andnpd 对目标操作数做按位逻辑取反(not),然后把源和目标操作数做逻辑与(and)
orps orpd 对指定组合浮点操作数中的数据元素做按位逻辑或(OR)
xorps xorpd 对指定组合浮点操作数中的数据元素做按位逻辑异或 (xor)
(12)SSE 组合整数数据传输指令
movdqa 把符合内存对齐规则的两个四字从内存复制到XMM寄存器,反之亦可。这条指令可以执行XMM寄存器之间的传输
movdqu 把不符合内存对齐规则的两个四字从内存复制到XMM寄存器,反之亦可
movq2dq 把MMX寄存器的内容复制到XMM寄存器的低位四字,这条指令到导致从FPU到MMX模块切换
movdq2q 把XMM寄存器的低位四字复制到MMX寄存器。这条指令会导致FPU到MMX模式切换
(13)SSE 组合整数算术运算指令
pmulld 在源和目标操作数数自己做组合带符号乘法,每个乘积的低位双字被保存到目标操作数
pmuldq 把源目标操作数的第一个和第三个带符号双字做乘法,四字乘积被保存到目标操作数
pminub pminuw pminud 比较两个组合无符号整数,并把较小的数据元素保存到目标操作数。源操作数可以到内存位置或者寄存器,目标操作数必须是寄存器
pminsb pminsw pminsd 比较两个组合带符号整数,并把较小的数据元素保存到目标操作数。源操作数可以是内存位置或者寄存器,目标操作数必须是寄存器
pmaxub pmaxuw pmaxud 比较两个组合无符号整数,并把较大的数据元素保存到目标操作数。源操作数可以是内存位置或者寄存器,目标操作数必须是寄存器
pmaxsb pmaxsw pmaxsd 比较两个组合无符号整数,并把较大的数据元素保存到目标操作数。源操作数可以是内存位置或者寄存器,目标操作数必须是寄存器
(14)SSE 组合整数比较
pcmpeqb pcmpeqw pcmpeqd pcmpeqq 一个元素一个元素的比较两个组合整数是否相等,如果源和目标数据元素相等,那么就把目标操作数的对应元素设置为全 1 否则设置为全 0
pcmpgtb pcmpgtw pcmpgtd pcmpgtq 一个元素一个元素地比较两个组合带符号整数,寻址较大的,如果目标元素较大,那么就把目标操作数的对应元素设置为 1 否则设置为全0
(15)SSE 组合整数转换指令
packuswb packusdw 使用无符号饱和算法把源操作数和目标操作数中的n个组合无符号整数转换为 2* n个组合无符号整数
pmovsxbw pmovsxbq pmovsxbq 对源操作数的低位带符号字节(signed_byte)整数做符号扩展,并把这些值复制到目标操作数
pmovsxwd pmovsxwq 对源操作数的低位带符号字节(signed_word)整数做符号扩展,并把这些值复制到目标操作数
pmovsxdq 对源操作数的低位带符号双字(signed doubleword)整数做符号扩展,并把得到的四字值复制到目标操作数
pmovzxbw pmovzxbd pmovzxbq 对源操作数的低位无符号字(unsigned-byte)整数做0扩展,并把这些值复制到目标操作数
pmovzxwd pmovzxwq 对源操作数的低位无符号字(unsigned-word)整数做0扩展,并把这些值复制到目标操作数
pmovzxdq 对源操作数的两个低位无符号双字(unsigned doubleword)整数做0扩展并把得到的四字值复制到目标操作数
(16)SSE 组合整数重排和解组指令
pshufd 使用立即数操作数指定的排序模式把源操作数的双字复制到目标操作数
pshuflw 使用立即数操作数指定的排序模式把源操作数的低位字复制到目标操作数的低位字
pshufhw 使用立即数操作数指定的排序模块把操作数的高位字复制到目标操作数的高位字
punpcklqdq 把操作数的低位四字复制到目标操作数高位四字,目标操作数低位四字保存不变
punpckhqdq 把源操作数的高位四字复制到目标操作数高位四字,它还把目标的操作数的高位四字复制到目标操作数的低位四字
(17)SSE 组合整数插入和提取指令
pinsrb pinsrw pinsrd 把一个整数从源操作数复制到目标操作数,这个整数在目标操作数中的位置由立即数操作数指定,源操作数可以是内存位置或者通用寄存器,目标操作数必须是XMM寄存器
pextrb pextrw pextrd 把一个整数从源操作数复制到目标操作数,这个整数在源操作数中的位置是由立即数操作数指定,源操作数必须XMM寄存器,目标操作数可以是内存位置或者通用寄存器
(18)SSE 组合整数混合指令
pblendw 从源和目标操作数中按条件复制字(word)值到目标操作数,使用立即数掩码值来指定要复制的特定字值
pblendvb 从源和目标操作数中按条件复制字节值到目标操作数,使用寄存器XMM0中掩码值指定要复制的特定字节值
(19)SSE 组合整数移位指令
pslldq 对XMM寄存器中的组合整数值做面向字节左移,用0填充低位字节移动的位数是由立即数操作数来指定的
psrldq 对XMM寄存器中的组合整数值做面向字节右移,用0填充高位字节移动的位数是由立即数操作数来指定的
(20)SSE 文本字符串处理指令
pcmpestri 对两个显式长度文本字符串做组合比较,在ECX中返回索引结果
pcmpestrm 对两个显式长度文本字符串做组合比较,在XMM0中返回掩码结果
pcmpistri 对两个隐式长度文本字符串做组合比较,在ECX中返回索引结果
pcmpistrm 对两个隐式长度文本字符串做组合比较,在XMM0中返回掩码结果
(21)SSE 非临时数据传输和缓存控制指令
movnti 使用非临时暗示把通用寄存器的内容复制到内存
movntdq 使用非临时暗示把XMM寄存器的内容复制到内存
maskmovdqu 使用非临时暗示把XMM寄存器的字节有条件低复制到内存。包含在第二个XMM寄存器中的掩码值指定要复制的字节。EDI寄存器指向目标内存的位置
movntdqa 使用非临时暗示把基于内存的双四字加载到XMM寄存器
sfence 序列化以前发出的所有内存存储操作
lfence 序列化以前发出的所有内存加载操作
prefetchH 给处理器发出暗示,可以从主内存加载数据到高速缓存。源操作数指定内存的位置。其中的H是占位符,用来指定高速缓存暗示的类型,有效的选项有T0(临时数据,所有级别的高速缓存),T1 (临时数据,L1高速缓存),T2(临时数据,L2 高速缓存)或者NTA(对齐的非临时数据,所有级别的高速缓存)
clflush 冲刷一个高速缓存线,使其无效,源操作数指定高速缓存的内存位置
(22)SSE 其他指令
ldmxcsr 从内存加载x86-SSE控制-状态寄存器MXCSR
stmxcsr 把x86-SSE控制-状态寄存器MXCSR保存到内存
fxsave 把当前的 x87 FPU,MMX技术,XMM和MXCSR的状态保存到内存。设计者条指令的目的是支持操作系统的人物切换,但应用程序也可以使用它
fxrstor 从内存加载 x87 FPU,MMX技术,XMM和MXCSR的状态。设计者条指令的目标是支持操作系统的任务切换模但应该程序也课堂使用它
crc32 加速计算32位循环冗余检查(CRC)。源操作数可以是内存位置或者通用寄存器。目标操作数必须是32位通用寄存器,并包含前一个中间结果。用于计算CRC的多项式(polynomial)是0x11EDC6F41
popcnt 计算(count)源操作数中设置为1的二进制位数。源操作数可以是内存位置或者通用寄存器,目标操作数必须是通用寄存器

你可能感兴趣的:(x86-SSE指令集)