4. 数据重排指令集
unpckhps XMM,XMM/m128
源存储器与目的寄存器高64位按双字交错排列,结果送入目的寄存器,内存变量必须对齐内存16字节.
高64位 | 低64位
目的寄存器: a0 | a1 | a2 | a3
源存储器: b0 | b1 | b2 | b3
目的寄存器结果: b0 | a0 | b1 | a1
例:
当 XMM0 = 0x 0c517e000 44290000 46b6d000 3c4985f0
XMM1 = 0x 045e51000 4240cccd 4a59e540 3a77b9e0,
当执行 unpckhps XMM0,XMM1
则 XMM0 = 0x 045e51000 c517e000 4240cccd 44290000
unpcklps XMM,XMM/m128
源存储器与目的寄存器低64位按双字交错排列,结果送入目的寄存器,内存变量必须对齐内存16字节.
高64位 | 低64位
目的寄存器: a0 | a1 | a2 | a3
源存储器: b0 | b1 | b2 | b3
目的寄存器结果: b2 | a2 | b3 | a3
例:
当XMM0 = 0x 0c517e000 44290000 46b6d000 3c4985f0
XMM1 = 0x 045e51000 4240cccd 4a59e540 3a77b9e0,
执行 unpcklps XMM0,XMM1
则 XMM0 = 0x 04a59e540 46b6d000 3a77b9e0 3c4985f0
5. 单精度浮点数与整数相互转换指令
cvtpi2ps XMM,MM/m64
源存储器64位两个32位有符号(补码)整数转为两个单精度浮点数,放入目的寄存器低64中,高64位不变.
源寄存器是'MM',不是'XMM'
cvtsi2ss XMM,r32/m32
源存储器1个32位有符号(补码)整数转为1个单精度浮点数,放入目的寄存器低32中,高96位不变.
cvtps2pi MM,XMM/m64
把源存储器低64位两个32位单精度浮点数转为两个32位有符号整数,放入目的寄存器.
cvtss2si r32,XMM/m32
把源存储器低32位1个单精度浮点数转为1个32位有符号整数,放入目的寄存器.