SSE指令集系列之二----浮点与整数转换指令

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位有符号整数,放入目的寄存器.

 

 

 

 

 

 

你可能感兴趣的:(转换)