第40部分-Linux x86 64位汇编 Intel向量指令历史

第40部分-Linux x86 64位汇编 Intel向量指令历史

SIMD主要是四种技术:

多媒体扩展(MMX, Multimedia Extension)

流化SIMD扩展(SSE,Streaming SIMD Extension)

流化SIMD扩展第二实现(SSE2, Streaming SIMD Extension Second Implementation)

流化SIMD扩展第三年实现(SSE3,Streaming SIMD Extension Third Implement)

SIMD的主要好处是使用单一指令执行并行数据操作的能力。

MMX和SSE架构可以保存打包数据的附加寄存器。

 

发展历史如下:

 

 

MMX

MMX提供3种整数值类型:

  • 64位打包字节整数(8个单字节整数值)/64位打包整数(4个字整数值)/64位打包双字整数(2个双字整数值)

MMX整数数据类型需要使用FPU寄存器来保存执行数学操作。MMX寄存器被命名为MM0到MM7。

MMX寄存器直接映射到FPU寄存器。但是不能当做堆栈使用。直接映射到FPU的R0到R7寄存器。

所以,FPU寄存器既用于保存MMX数据,也保存FPU数据,两者容易混乱。

MMX模式下使用这些寄存器处理MMX数据,在FPU模式下使用这些寄存器处理一般的FPU扩展双精度浮点数据。

     在MMX模式下使用FPU寄存器时,FPU的标记寄存器会被破坏。最后的办法是将FPU寄存器的指令和MMX寄存器的指令分开。

 

SSE

SSE主要是对浮点数据执行SIMD操作。新的数据类型:128位打包的单精度浮点数据类型。

SSE2

SSE2扩展了SSE核心架构。

128位打包的双精度浮点值(2个双精度值)

128位打包字节整数值(16个单字节整数值)

128位打包字整数值(8个字整数值)

128位打包双字整数值(4个双字整数值)

128位打包四字整数值(2个四字整数值)

SSE3没有添加新的数据类型,增加了数据高级处理指令。

 

向量指令支持检测

通过调用cpuid值,将eax寄存器赋值为1.

可以获取处理器签名信息。

使用test指令进行比较判断。

.section .data
gotmmx:
   .asciz "Supports MMX"
gotsse:
   .asciz "Supports SSE"
gotsse2:
   .asciz "Supports SSE2"
gotsse3:
   .asciz "Supports SSE3"
output:
   .asciz "%s\n"
.section .bss
   .lcomm ecxdata, 4
   .lcomm edxdata, 4
.section .text
.globl _start
_start:
   nop
   movl $1, %eax;//CPUID的1号功能
   cpuid
   movl %ecx, ecxdata
   movl %edx, edxdata

   test $0x00800000, %edx
   jz done
   
   movq $output,%rdi
   movq  $gotmmx,%rsi
   
   call printf

   movl edxdata, %edx
   test $0x02000000, %edx
   jz done
   movq $output,%rdi
   movq  $gotsse,%rsi 
   call printf

   movl edxdata, %edx
   test $0x04000000, %edx
   jz done
   movq  $output,%rdi 
   movq $gotsse2,%rsi
   call printf

   movl ecxdata, %ecx
   test $0x00000001, %ecx
   jz done
   movq  $output,%rdi 
   movq $gotsse3,%rsi

   call printf

done:
   movq $60,%rax
   call exit

as -g -o features.o features.s

ld -o features features.o -lc -I /lib64/ld-linux-x86-64.so.2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值