GCC中SIMD指令的应用方法--X86的SIMD指令
- UID
- 1066743
|
GCC中SIMD指令的应用方法--X86的SIMD指令
IA-32 Intel体系结构的指令主要分为以下几类 :
- 通用
- x87 FPU
- MMX技术
- SSE/SSE2/SSE3扩展
MMX/SSE类扩展引入了SIMD(单指令多数据)的执行模式,可用于加速多媒体应用。 下面简要介绍一下这些指令的执行环境和特征。
- 8个32位通用寄存器可为各个SIMD扩展所使用;
- MMX:8个64位MMX寄存器(mm0 - mm7),也可为各SSE扩展所使用;
- 数据为整数,最多支持两个32位
- 运算中没有寄存器能够进行溢出指示
- SSE:8个128位xmm寄存器,MXSCR寄存器,EFLAGS寄存器
- 支持单精度浮点
- MXSCR含有rounding, overflow标志
- 支持64位SIMD整数
- SSE2:执行环境同sse
- SSE3:与Inte Prescott处理器一同发布不久,共13条指令
MMX技术出现最早,目前几乎所有的X86处理器都提供支持,包括嵌入式X86, 所以下面的讨论主要基于MMX,但方法完全适用于SSEn, 包括像AMD的3D Now等其它SIMD扩展。
MMX指令又分为以下几种:
- 数据传送:movd, movq
- 数据转换:packsswb, packssdw, packuswb, punpckhbw, punpckhwd, punpckhdq, punpcklbw, punpcklwd, punpckldq
- 并行算术:paddb, paddw, paddd, paddsb, paddsw, paddusb, paddusw, psubb, psubw, psubd, psubsb, psubsw, psubusb, psubusb, psubusw, pmulhw, pmullw, pmaddwd
- 并行比较:pcmpeqb, pcmpeqw, pcmpeqd, pcmpgtb, pcmpgtw, pcmpgtd
- 并行逻辑:pand, pandn, por, pxor
- 移位与旋转:psllw, pslld, psllq, psrlw, psrld, psrlq, psraw, psrad
- 状态管理:emms
这些指令除了需要注意功能外,还需要注意处理的数据类型。以上内容为背景介绍,细节请参考手册。 |
|
|
|
|
|