Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(4) - 数据传输指令

SSE Instruction Set

SSE指令集大致可以分为4个功能组:

  • 组合的与标量的单精度浮点指令
    • 数据传输指令
    • 算术指令
    • 逻辑指令
    • 比较指令
    • 混洗shuffle指令
    • 转换指令
  • 64位SIMD整型指令
  • 状态管理指令
  • 可缓存性控制指令,数据预取指令,以及访存排序指令

SSE Data Movement Instructions

SSE数据传输指令将单精度浮点数据在XMM寄存器与XMM寄存器/存储器之间互相传输。

指令

描述

MOVAPS

格式:MOVAPS xmm1, xmm2/m128

将xmm2/m128中的128位组合的单精度浮点数传输到xmm1;m128的地址必须是16字节对齐的,否则产生#GP异常。

MOVUPS

格式:MOVAPS xmm1, xmm2/m128

将xmm2/m128中的128位组合的单精度浮点数传输到xmm1;m128的地址无需是16字节对齐的

MOVSS

格式:MOVSS xmm1, xmm2

将xmm2中的最低32位单精度浮点数据元素传输到xmm1的最低32位。目标寄存器xmm1中的其他比特位(第32~最高比特位)保持不变。

 

格式:MOVSS xmm1, m32

将m32中的32位单精度浮点数据元素传输到xmm1的最低32位。目标寄存器xmm1中的其他比特位(第32~最高比特位)全部置为0

Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(4) - 数据传输指令

 

Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(4) - 数据传输指令

 

指令

描述

MOVLPS

格式:MOVLPS xmm1, m64

将m64中的两个单精度浮点数据元素传输到xmm1的低位两个数据元素中。目标寄存器xmm1的高位两个数据元素保持不变。

MOVHPS

格式:MOVHPS xmm1, m64

将m64中的两个单精度浮点数据元素传输到xmm1的高位两个数据元素中。目标寄存器xmm1的低位两个数据元素保持不变。

Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(4) - 数据传输指令

Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(4) - 数据传输指令

 

指令

描述

MOVLHPS

格式:MOVLHPS xmm1, xmm2

将xmm2中的最低两个数据元素传输到xmm1的最高两个数据元素中

MOVHLPS

格式:MOVHLPS xmm1, xmm2

将xmm2中的最高两个数据元素传输到xmm1的最低两个数据元素中

Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(4) - 数据传输指令

 

Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(4) - 数据传输指令

指令

描述

MOVMSKPS

格式:MOVLHPS reg, xmm

将xmm中的四个数据元素的符号比特位传输到reg寄存器中的最低四个比特位中。目标寄存器reg的其它比特位都置0。这些符号位可以作为分支跳转的条件。

 

指令操作

DEST[0] <-- SRC[31];
DEST[1] <-- SRC[63];
DEST[2] <-- SRC[95];
DEST[3] <-- SRC[127];

 

Intel C/C++ Compiler Intrinsic Equivalent
int _mm_movemask_ps(__m128 a)

 

Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(4) - 数据传输指令