📄 simd.txt
字号:
andnpd XMM,XMM/m128
目的寄存器128个二进制位先取'非',再'与'源存储器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节.
orpd XMM,XMM/m128
源存储器128个二进制位'或'目的寄存器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节.
xorpd XMM,XMM/m128
源存储器128个二进制位'异或'目的寄存器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节.
───────────────────────────
cvtps2pd XMM,XMM/m64
把源存储器低64位两个单精度浮点数变成两个双精度浮点数,结果送入目的寄存器.
cvtss2sd XMM,XMM/m32
把源存储器低32位1个单精度浮点数变成1个双精度浮点数,结果送入目的寄存器的低64位,高64位不变.
cvtpd2ps XMM,XMM/m128
把源存储器两个双精度浮点数变成两个单精度浮点数,结果送入目的寄存器的低64位,高64位清零,
内存变量必须对齐内存16字节.
例:
当XMM0 = 011112222 33334444 55556666 77778888 h,
XMM1 = 0dd1a5e1f35aec736 41132a4000000000 h,执行cvtpd2ps XMM0,XMM1
则XMM0 = 000000000 00000000 ff800000 48995200 h
^特殊状态 ^3.14E5
因为XMM1 = -3.14E140 3.14E5
而单精浮点最小可表示1.18E-38(规格化),-3.14E140已远超过,所以变成一种特殊状态,
指数位全为1,尾数全为0,符号位不变,3.14E5则变为正常的单精度3.14E5
cvtsd2ss XMM,XMM/m64
把源存储器低64位1个双精度浮点数变成1个单精度浮点数,结果送入目的寄存器的低32位,高96位不变.
cvtpd2pi MM,XMM/m128
把源存储器两个双精度浮点数变成两个双字有符号整数,结果送入目的寄存器,内存变量必须对齐内存16字节.
如果结果大于所能表示的范围,那么转化为80000000h(正数也转为此值).
当XMM1 = 0dd1a5e1f35aec736 41132a4000000000 h,执行cvtpd2pi MM0,XMM1
则 MM0 = 80000000 0004ca90 h
因为0dd1a5e1f35aec736h(双精度浮点数) = -3.14E140 超过 80000000h所以变为80000000h
而41132a4000000000h(双精度浮点数) = 3.14E5,所以转为314000 = 0004ca90h(有符号整数)
cvtpi2pd XMM,MM/m64
把源存储器两个双字有符号整数变成两个双精度浮点数,结果送入目的寄存器.
cvtpd2dq XMM,XMM/m128
把源存储器两个双精度浮点数变成两个双字有符号整数(此运算与cvtpd2pi类似但目的寄存器变为XMM),
结果送入目的寄存器的低64位,高64位清零,内存变量必须对齐内存16字节.
cvtdq2pd XMM,XMM/m128
把源存储器低64位两个双字有符号整数变成两个双精度浮点数,结果送入目的寄存器,内存变量必须对齐内存16字节.
cvtsd2si r32,XMM/m64
把源存储器低64位1个双精度浮点数变成1个双字有符号整数,结果送入目的寄存器.
cvtsi2sd XMM,r32/m32
把源存储器1个双字有符号整数变成1个双精度浮点数,结果送入目的寄存器的低64位,高64位不变.
cvtps2dq XMM,XMM/m128
把源存储器4个单精度浮点数变成4个双字有符号整数,结果送入目的寄存器,内存变量必须对齐内存16字节.
cvtdq2ps XMM,XMM/m128
把源存储器4个双字有符号整数变成4个单精度浮点数,结果送入目的寄存器,内存变量必须对齐内存16字节.
───────────────────────────
movdqa XMM,XMM/m128 movdqa XMM/m128,XMM
把源存储器内容值送入目的寄存器,当有m128时,必须对齐内存16字节.
movdqu XMM,XMM/m128 movdqu XMM/m128,XMM
把源存储器内容值送入目的寄存器,但不必对齐内存16字节.
paddd XMM,XMM/m128
把源存储器与目的寄存器按双字对齐无符号整数普通相加,结果送入目的寄存器,内存变量必须对齐内存16字节.
paddq XMM,XMM/m128
把源存储器与目的寄存器按四字对齐无符号整数普通相加,结果送入目的寄存器,内存变量必须对齐内存16字节.
paddq MM,MM/m64
把源存储器与目的寄存器四字无符号整数普通相加,结果送入目的寄存器.
psubd XMM,XMM/m128
把目的寄存器与源存储器按双字对齐无符号整数普通相减,结果送入目的寄存器,
内存变量必须对齐内存16字节.(目的减去源)
psubq XMM,XMM/m128
把目的寄存器与源存储器按四字对齐无符号整数普通相减,结果送入目的寄存器,
内存变量必须对齐内存16字节.(目的减去源)
psubq MM,MM/m64
把目的寄存器与源存储器四字无符号整数普通相减,结果送入目的寄存器.(目的减去源)
pmuludq XMM,XMM/m128
把源存储器与目的寄存器的低32位无符号整数相乘,结果变为64位,送入目的寄存器低64位,
把源存储器与目的寄存器的高64位的低32位无符号整数相乘,结果变为64位,送入目的寄存器高64位.
内存变量必须对齐内存16字节.
高64位 | 低64位
目的寄存器: a0 | a1 | a2 | a3
源存储器: b0 | b1 | b2 | b3
目的寄存器结果: b1*a1 | b3*a3
pmuludq MM,MM/m64
把源存储器与目的寄存器的低32位无符号整数相乘,结果变为64位,送入目的寄存器.
高32位 | 低32位
目的寄存器: a0 | a1
源存储器: b0 | b1
目的寄存器结果: b1*a1
pslldq XMM,imm8
把目的寄存器128位按imm8(立即数)指定字节数逻辑左移,移出的字节丢失.
imm8 == 1时,代表左移8位,imm8 == 2时,代表左移16位.
psrldq XMM,imm8
把目的寄存器128位按imm8(立即数)指定字节数逻辑右移,移出的字节丢失.
imm8 == 1时,代表右移8位,imm8 == 2时,代表右移16位.
psllw XMM,XMM/m128 psllw XMM,imm8
把目的寄存器按字由源存储器(或imm8 立即数)指定位数逻辑左移,移出的位丢失.
低字移出的位不会移入高字,内存变量必须对齐内存16字节.
psrlw XMM,XMM/m128 psrlw XMM,imm8
把目的寄存器按字由源存储器(或imm8 立即数)指定位数逻辑右移,移出的位丢失.
高字移出的位不会移入低字,内存变量必须对齐内存16字节.
pslld XMM,XMM/m128 pslld XMM,XMM imm8
把目的寄存器按双字由源存储器(或imm8 立即数)指定位数逻辑左移,移出的位丢失.
低双字移出的位不会移入高双字,内存变量必须对齐内存16字节.
psrld XMM,XMM/m128 psrld XMM,imm8
把目的寄存器按双字由源存储器(或imm8 立即数)指定位数逻辑右移,移出的位丢失.
高双字移出的位不会移入低双字,内存变量必须对齐内存16字节.
movq2dq XMM,MM
把源寄存器内容送入目的寄存器的低64位,高64位清零.
movdq2q MM,XMM
把源寄存器低64位内容送入目的寄存器.
pmaddwd XMM,XMM/m128
把源存储器与目的寄存器分4组进行向量点乘(有符号补码操作),内存变量必须对齐内存16字节..
高64位 | 低64位
目的寄存器: a0 | a1 | a2 | a3 | a4 | a5 | a6 | a7
源存储器: b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7
目的寄存器结果: a0*b0+a1*b1 | a2*b2+a3*b3 | a4*b4+a5*b5 | a6*b6+a7*b7
paddsb XMM,XMM/m128
源存储器与目的寄存器按字节对齐有符号补码饱和相加,内存变量必须对齐内存16字节.
paddsw XMM,XMM/m128
源存储器与目的寄存器按字对齐有符号补码饱和相加,内存变量必须对齐内存16字节.
psubsb XMM,XMM/m128
源存储器与目的寄存器按字节对齐有符号补码饱和相减(目的减去源),内存变量必须对齐内存16字节.
psubsw XMM,XMM/m128
源存储器与目的寄存器按字对齐有符号补码饱和相减(目的减去源),内存变量必须对齐内存16字节.
paddusb XMM,XMM/m128
源存储器与目的寄存器按字节对齐无符号饱和相加,内存变量必须对齐内存16字节.
paddusw XMM,XMM/m128
源存储器与目的寄存器按字对齐无符号饱和相加,内存变量必须对齐内存16字节.
psubusb XMM,XMM/m128
源存储器与目的寄存器按字节对齐无符号饱和相减(目的减去源),内存变量必须对齐内存16字节.
psubusw XMM,XMM/m128
源存储器与目的寄存器按字对齐无符号饱和相减(目的减去源),内存变量必须对齐内存16字节.
paddb XMM,XMM/m128
源存储器与目的寄存器按字节对齐无符号普通相加,内存变量必须对齐内存16字节.
paddw XMM,XMM/m128
源存储器与目的寄存器按字对齐无符号普通相加,内存变量必须对齐内存16字节.
paddd XMM,XMM/m128
源存储器与目的寄存器按双字对齐无符号普通相加,内存变量必须对齐内存16字节.
paddq XMM,XMM/m128
源存储器与目的寄存器按四字对齐无符号普通相加,内存变量必须对齐内存16字节.
psubb XMM,XMM/m128
源存储器与目的寄存器按字节对齐无符号普通相减(目的减去源),内存变量必须对齐内存16字节.
psubw XMM,XMM/m128
源存储器与目的寄存器按字对齐无符号普通相减(目的减去源),内存变量必须对齐内存16字节.
psubd XMM,XMM/m128
源存储器与目的寄存器按双字对齐无符号普通相减(目的减去源),内存变量必须对齐内存16字节.
psubq XMM,XMM/m128
源存储器与目的寄存器按四字对齐无符号普通相减(目的减去源),内存变量必须对齐内存16字节.
pmulhw XMM,XMM/m128
源存储器与目的寄存器按字对齐有符号补码饱和相乘,取结果的高16位放入目的寄存器对应字中.
内存变量必须对齐内存16字节.
pmullw XMM,XMM/m128
源存储器与目的寄存器按字对齐有符号补码饱和相乘,取结果的低16位放入目的寄存器对应字中.
内存变量必须对齐内存16字节.
pcmpeqb XMM,XMM/m128
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -