文档章节

SSE2指令集系列之一

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

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

 

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

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

SSE2主要是双精度浮点运算指令

 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字节.

 

 

小结:1. SSE1浮点指令一般以后缀ps,ss结尾。

         2. SSE2浮点指令一般以后缀pd,sd结尾。

      

本文转载自:http://www.cnblogs.com/celerychen/archive/2013/03/28/2986264.html

共有 人打赏支持
abcijkxyz
粉丝 60
博文 6196
码字总数 1876
作品 0
深圳
项目经理
微软提前结束部分 Windows 7 电脑的更新功能

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

达尔文
06/25
0
0
cpu指令集包括哪些?

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

音乐&编程
2012/09/14
2.1K
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
1K
10
Intel 45nm制程处理器上的SSE4指令集简介

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

日久不生情
2017/11/07
0
0
Flat Assembler

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

匿名
2008/11/16
2.8K
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
0
/proc/cpuinfo文件分析(查看CPU信息)

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

zhiqiangw
2016/11/18
33
0
(学习心得):进程,线程,超线程,并发,并行 等概念

前言: 此陋文来自最近对阅读《深入理解计算机系统》与《微型计算机体系结构:Intel Core Duo / i 系列微处理器技术应用》两本书的学习体会, 前者从 程序员的视角来探讨计算机系统中各部件的...

shayi
2012/11/26
5.5K
28
嵌入式定制开发选ARM7还是ARM9

ARM公司设计了许多处理器,它们可以根据使用的不同内核划分到各个系列中。系列划分是基于ARM7、ARM9、ARM10、ARM11和Cortex内核。后缀数字7、9、10和11表示不同的内核设计。数字的升序说明性...

gunser
06/01
0
0
单片机、CPU、指令集和操作系统的关系

作者:zhongjin616 1> 首先讨论各种单片机与操作系统的关系 说到单片机,大家第一时间想到的应该是51单片机,对吧。不错,更高级一点的AVR,把他称为单片机,我们也还觉得可以接受。那么再高...

xiaogong1688
06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
0
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
昨天
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
昨天
1
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部