文档章节

SSE2指令集系列之一----浮点运算指令

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:45
字数 1356
阅读 6
收藏 0
点赞 0
评论 0

SSE2与SSE1使用相同寄存器,指令描述约定:

 

MM指64位MMX寄存器
XMM指128XMM寄存器

m32 指32位内存变量
m128指128位内存变量


本小结主要描述双精度浮点运算指令


1.  数据搬移指令

        movapd XMM,XMM/m128

        movapd XMM/m128,XMM
        

        把源存储器内容值送入目的寄存器,当有m128时,内存变量地址必须16字节对齐.
        
        
movupd XMM,XMM/m128 

        movupd XMM/m128,XMM


        
把源存储器内容值送入目的寄存器,内存变量地址不必对齐16字节.
        
两条指令同SSE1的浮点搬移指令movaps 和 movups 指令类似

        
        
movlpd XMM,m64 

        movlpd m64,XMM
    

       把源存储器64位内容送入目的寄存器低64位,高64位不变,内存变量地址不必对齐16字节.
        
        
movhpd XMM,m64 

        movhpd m64,XMM


       
 把源存储器64位内容送入目的寄存器高64位,低64位不变,内存变量地址不必对齐16字节.

 

2.    浮点常用算数运算指令

 

        addpd XMM,XMM/m128        

        addsd XMM,XMM/m128

          

        subpd XMM,XMM/m128     

        subsd XMM,XMM/m128
 

         

        mulpd XMM,XMM/m128          

        mulsd XMM,XMM/m128    

 

        divpd XMM,XMM/m128        
        divsd XMM,XMM/m128
 
        
        sqrtpd XMM,XMM/m128       
        sqrtsd XMM,XMM/m128
 
        
        maxpd XMM,XMM/m128     

        maxsd XMM,XMM/m128
   
        
        minpd XMM,XMM/m128

        minsd XMM,XMM/m128

 小结: 

     1. 以pd结尾的指令对两个双精度浮点数执行相同的运算

      2. 以sd结尾的指令只对低64位双精度执行运算,高64位保持不变。

      3. 当有m128存储器是要求内存地址必须为16字节对齐。

 

 3. 位运算指令

   

  andpd XMM,XMM/m128
  源存储器128个二进制位'与'目的寄存器128个二进制位,结果送入目的寄存器,内存变量地址必须对齐16字节边界.

  andnpd XMM,XMM/m128
  目的寄存器128个二进制位先取'非',再'与'源存储器128个二进制位,结果送入目的寄存器,内存变量地址必须对齐16字节边界

  orpd XMM,XMM/m128
  源存储器128个二进制位'或'目的寄存器128个二进制位,结果送入目的寄存器,内存变量地址必须对齐16字节边界

  xorpd XMM,XMM/m128
  源存储器128个二进制位'异或'目的寄存器128个二进制位,结果送入目的寄存器,内存变量地址必须对齐16字节边界

 

4. 数据类型转换指令

     4.1 32位浮点与64位浮点之间的转换

        cvtps2pd XMM,XMM/m64

        把源存储器低64位两个单精度浮点数变成两个双精度浮点数,结果送入目的寄存器.

        

        cvtss2sd XMM,XMM/m32

        把源存储器低32位1个单精度浮点数变成1个双精度浮点数,结果送入目的寄存器的低64位,高64位不变.

        

        cvtpd2ps XMM,XMM/m128

        把源存储器两个双精度浮点数变成两个单精度浮点数,结果送入目的寄存器的低64位,高64位清零,

 

        cvtsd2ss XMM,XMM/m64

        把源存储器低64位1个双精度浮点数变成1个单精度浮点数,结果送入目的寄存器的低32位,高96位不变.

     4.2  浮点数与32位整数之间的转换

      4.2.1 双精度与整数之间转换

        cvtpd2pi MM,XMM/m128

        把源存储器两个双精度浮点数变成两个双字有符号整数,结果送入目的寄存器,内存变量必须对齐内存16字节.

        如果结果大于所能表示的范围,那么转化为80000000h(正数也转为此值).

        当XMM1 = 0x 0dd1a5e1f35aec736   41132a4000000000,执行cvtpd2pi MM0,XMM1

        则 MM0 = 0x 80000000 0004ca90

        因为0dd1a5e1f35aec736h(双精度浮点数) = -3.14E140 超过 80000000h所以变为80000000h

        而41132a4000000000h(双精度浮点数) = 3.14E5,所以转为314000 = 0004ca90h(有符号整数)

       

    cvtpi2pd XMM,MM/m64

        把源存储器两个双字有符号整数变成两个双精度浮点数,结果送入目的寄存器.

 

        cvtpd2dq XMM,XMM/m128

        把源存储器两个双精度浮点数变成两个双字有符号整数

        结果送入目的寄存器的低64位,高64位清零,内存变量必须对齐内存16字节.

        此运算与cvtpd2pi类似但目的寄存器变为XMM.

        

        cvtdq2pd XMM,XMM/m128

        把源存储器低64位两个双字有符号整数变成两个双精度浮点数,结果送入目的寄存器,内存变量必须对齐内存16字节.

 

     cvtsd2si r32,XMM/m64

         把源存储器低64位1个双精度浮点数变成1个双字有符号整数,结果送入目的寄存器.

         此指令目的寄存器是32位通用寄存器

 

   cvtsi2sd XMM,r32/m32

        把源存储器1个双字有符号整数变成1个双精度浮点数,结果送入目的寄存器的低64位,高64位不变.

 

 4.2.2 单精度浮点与整数之间转换

 

        cvtps2dq XMM,XMM/m128

        把源存储器4个单精度浮点数变成4个双字有符号整数,结果送入目的寄存器,内存变量必须对齐内存16字节.

        

        cvtdq2ps XMM,XMM/m128

        把源存储器4个双字有符号整数变成4个单精度浮点数,结果送入目的寄存器,内存变量必须对齐内存16字节.


本文转载自:http://www.cnblogs.com/celerychen/archive/2013/05/16/3588205.html

共有 人打赏支持
abcijkxyz
粉丝 60
博文 6195
码字总数 1876
作品 0
深圳
项目经理
i386和i686的具体定义

转自:http://apps.hi.baidu.com/share/detail/34988581 i386和i686 现在所有的intel 32位体系(包括AMD等兼容CPU)都叫i386体系,包括P4。、i686仍然属于i386体系,不过对CPU(相对于386)的特...

ChenQi ⋅ 2012/08/04 ⋅ 0

微软提前结束部分 Windows 7 电脑的更新功能

前不久,微软悄然关掉了官方论坛Windows 7分版的支持,也就是不再有工作人员上线收集和回应坛友的反馈。在距离2020年1月结束Windows 7外延支持越来越近、Windows 10升级推广压力很大的情况下...

达尔文 ⋅ 今天 ⋅ 0

armeabi和armeabi-v7a 以及x86

原文:http://blog.csdn.net/dxpqxb/article/details/7721156 armeabi和armeabi-v7a 在我们android APK的根目录有一个 libs文件夹,此文件夹下包含了armeabi 和armeabi-v7a两个文件夹,我们的...

QGlaunch ⋅ 2015/12/23 ⋅ 0

【JZ2440】自我学习记录【知识点0】【ARM指令集体系结构和ARM系列】

本文会介绍:1、ARM指令集体系结构及特点; 2、基于ARM指令集体系结构设计的不同CPU家族及特点; 3、ARM指令集体系结构和ARM处理器家族的区别。 ARM系列微处理器的核心及体系结构 序号 ARM微...

huayangshiboqi ⋅ 2017/12/13 ⋅ 0

linux /proc/cpuinfo文件分析

基于不同指令集(ISA)的CPU产生的/proc/cpuinfo文件不一样,基于X86指令集CPU的/proc/cpuinfo文件包含如下内容: processor  : 0 vendorid  :GenuineIntel cpu family  :6 model ...

wulei163 ⋅ 2014/01/03 ⋅ 0

/proc/cpuinfo文件分析(查看CPU信息)

  在Linux系统中,提供了proc文件系统显示系统的软硬件信息。如果想了解系统中CPU的提供商和相关配置信息,则可以通过/proc/cpuinfo文件得到。本文章针对该文件进行简单的总结。   基于不...

zhiqiangw ⋅ 2016/11/18 ⋅ 0

cpu指令集包括哪些?

如题!我知道有mmx,sse等等.可是mmx指令集是在96年才有的, 而之前386,486,586等那些呢,包含哪些指令,相关资料在哪下载? 是不是sse1包含mmx,,,,,,,sse2包含sse1,,,,,,,sse3包含sse2 我知道去英...

音乐&编程 ⋅ 2012/09/14 ⋅ 3

Flat Assembler 1.70 发布,汇编工具

Flat Assembler 是一个快速高效的80x86的汇编工具,支持DOS、Windows、Linux操作系统,支持包括 8086-80486/Pentium instructions with MMX, SSE, SSE2, SSE3, and 3DNow! extensions and x......

红薯 ⋅ 2012/04/19 ⋅ 10

Intel 45nm制程处理器上的SSE4指令集简介

Intel 45nm制程处理器上的SSE4指令集简介 Intel的SSE(Streaming SIMD Extensions, 流式单指令多数据扩展)技术有效增强了CPU的向量运算能力。支持该指令集的处理器有8个128位xmm寄存器,每一...

日久不生情 ⋅ 2017/11/07 ⋅ 0

Android so文件是32位时,如何在64位手机上运行。

今天遇到一个很蛋疼的问题,使用了网上的开源二维码扫描,所用的so文件是32位的,在64位手机上报错,解决的办法是在项目目录下的build.gradle文件中添加如下字段 然后在项目文件夹下的gradl...

星雨gg ⋅ 2016/10/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

20.zip压缩 tar打包 打包并压缩

6月25日任务 6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩 6.5 zip压缩工具: zip支持压缩目录 zip压缩完之后原来的文件不删除 不同的文件内容其实压缩的效果不一样 文件内有很多重复的用xz压...

王鑫linux ⋅ 9分钟前 ⋅ 0

double类型数据保留四位小数的另一种思路

来源:透析公式处理,有时候数据有很长的小数位,有的时候由在四位以内,如果用一般的处理方法,那么不足四位的小树会补充0到第四位,这样子有点画蛇添足的感觉,不太好看。所以要根据小数的...

young_chen ⋅ 15分钟前 ⋅ 0

Python 优化 回溯下降算法

使用sympy构造表达式,实现回溯下降算法 画出函数图像,先使用暴力搜索,找到最小值约为2.5左右 然后选定初始点,开始进行回溯搜索,下降方向为负梯度方向 下降的误差与步数大致呈现下面的状...

阿豪boy ⋅ 20分钟前 ⋅ 0

Django配置163邮箱出现 authentication failed(535)错误解决方法

最近用Django写某网站,当配置163邮箱设置完成后,出现535错误即:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') Django初始配置邮箱设置 EMAIL_HOST = "smtp.1...

陈墨轩_CJX ⋅ 21分钟前 ⋅ 0

用接口模拟可伸缩枚举(34)

1、枚举的可伸缩性最后证明都不是什么好点子 扩展类型的元素是基本类型实例,基本类型的实例却不是扩展类型的元素,很混乱 目前还没有很好的方法来枚举基本类型的所有元素,及其扩展 可伸缩性...

职业搬砖20年 ⋅ 25分钟前 ⋅ 0

Ubuntu18.04 IDEA快捷键无法使用

IDEA默认的回退到上一视图的快捷键是Ctrl + Alt + Left,在ubuntu中这个快捷键被占用了,在16.04中可以在界面中取消这个快捷键,但是18.04就看不到了,可以使用以下命令解决 gsettings set ...

Iceberg_XTY ⋅ 29分钟前 ⋅ 0

如何解决s权限位引发postfix及crontab异常

一、问题现象 业务反馈某台应用服务器,普通用户使用mutt程序发送邮件时,提示“postdrop warning: mail_queue_enter: create file maildrop/713410.6065: Permission denied”,而且普通用法...

问题终结者 ⋅ 41分钟前 ⋅ 0

Unable to load database on disk

由于磁盘空间满了以后,导致zookeeper异常退出,清理磁盘空间后,zk启动报错,信息如下: 2018-06-25 17:18:46,904 INFO org.apache.zookeeper.server.quorum.QuorumPeerConfig: Reading co...

刀锋 ⋅ 今天 ⋅ 0

css3 box-sizing:border-box 实现div一行多列

<!DOCTYPE html><html><head><style> div.container{ background:green; padding:10px 10px;}div.box{box-sizing:border-box;-moz-box-sizing:border-box; /* Fir......

qimh ⋅ 今天 ⋅ 0

Homebrew简介和基本使用

一、Homebrew是什么 Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径...

说回答 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部