文档章节

SSSE3指令集

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:46
字数 714
阅读 6
收藏 0

这里简要描述几个重要的算数运算指令。

1.  水平相加指令

      SSSE3指令集增加的主要是针对整数进行水平方向上相加的指令,与SSE3的浮点指令类似。

  phaddd

  寄存器水平方向上按照无符号32位整数进行加法

 

  phaddw

    寄存器水平方向上按照无符号16位整数进行加法

 

  phaddsw

  寄存器水平方向上按照16位整数进行饱和加法

 

   phsubd

  寄存器水平方向上按照无符号32位整数进行减法

 

  phsubw

  寄存器水平方向上按照无符号16位整数进行减法

 

 phsubsw

 寄存器水平方向上按照16位整数进行饱和减法

     示例:

     phaddw  Dest, SRC

  源数据和目的数据水平相加并打包,适用于MMX和SSE寄存器:
  DEST[15:0] ← DEST[31:16] + DEST[15:0];
  DEST[31:16] ← DEST[63:48] + DEST[47:32];
  DEST[47:32] ← SRC[31:16] + SRC[15:0];
  DEST[63:48] ← SRC[63:48] + SRC[47:32];
  XMM寄存器类似。

 2. 饱和字节乘加指令

  PMADDUBSW

   按照字节对应位置做乘法,在把相邻两数相加,饱和在16位有符号数。

   示例:PMADDUBSW  DEST, SRC

 

  取源数据和目的数据的乘加的有符号饱和值,适用于MMX和SSE寄存器:
  DEST[15:0] ←saturatetoSWord(SRC[15:8]*DST[15:8] + SRC[7:0]*DST[7:0]);
  DEST[31:16]←saturatetoSWord(SRC[31:24]*DST[31:24] + SRC[23:16]*DST[23:16]);
  DEST[47:32]←saturatetoSWord(SRC[47:40]*DST[47:40] + SRC[39:32]*DST[39:32]);
  DEST[63:48]←saturatetoSWord(SRC[63:56]*DST[63:56] + SRC[55:48]*DST[55:48]);
  XMM寄存器类似。

 

3.  16位乘法取高位

    PMULHRSW

    这条指令专门为定点运算设计

 

    用伪代码描述更为方便:

 

  signed short a[8]; // input a
  signed short b[8]; // input b
  signed short r[8]; // output r
 
  for (i=0; i < 8; i++)
     r[i] = INT16((a[i]*b[i] + 0x4000) >> 15);

 

     这是一种Q15定点格式的舍入移位运算,在语音信号处理中颇为常见。

 

4. 取绝对值操作

    PABSB/PABSW/PABSD

 

  示例:PABSW

 

  取源数据的绝对值,适用于MMX和SSE寄存器:
  DEST[15:0] ← ABS(SRC[15:0]);
  DEST[31:16] ← ABS(SRC[31:16]);
  DEST[47:32] ← ABS(SRC[47:32]);
  DEST[63:48] ← ABS(SRC[63:48]);
  XMM寄存器类似。

 5. 字节混选指令

      PSHUFB

      这条指令非常的灵活,用于选取源寄存器的任意字节重新排布到目的寄存器。

 

       用伪代码描述如下:

  char a[16]; // input a
  char b[16]; // input b
  char r[16]; // output r
 
  for (i=0; i < 16; i++)
     r[i] = (b[i] < 0) ? 0 : a[b[i] % 16];


如果源操作数的该字节高位符号位为1,即源字节操作数小于零的时候,把目的寄存器赋值为零。
否则,根据源操作数的低4位选择目的操作数,将其拷贝到目的操作数的相应位。

 

 

 

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

共有 人打赏支持
abcijkxyz
粉丝 60
博文 6196
码字总数 1876
作品 0
深圳
项目经理
Firefox的64位修改版 - Waterfox 10

64位系统下的64位应用毫无疑问会带来更好的性能,Mozilla的Firefox虽然版本更新极快,但64位版本却始终步履蹒跚,而且它非常早期和不稳定,对于64位系统的朋友们来说用什么来提升浏览器性能呢...

红薯
2012/02/08
543
2
Intel 45nm制程处理器上的SSE4指令集简介

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

日久不生情
2017/11/07
0
0
如何查看Linux和Mac机器的系统状态

本文主要介绍命令和参数搭配使用查询和设定Unix系统的。比如CPU型号、支持的指令集、内核最大进程数等等。 sysctl 工具可以直接在Unix系统的terminal中使用,用来检索,并配合相应权限设置。...

Aspirinrin
2017/09/20
0
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
99
0
单片机、CPU、指令集和操作系统的关系

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

xiaogong1688
06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea新建springCloud项目(5)- 订单服务

1.创建订单api,如下: 2.创建订单实现逻辑 3.新建订单、订单商品表 -- 订单 create table `order_master` ( `order_id` varchar(32) not null, `buyer_name` varchar(32) not null comment......

monroeCode
4分钟前
0
0
游戏开发经验谈(二):对战类全球服游戏的设计与实现

上篇文章《游戏开发经验谈(一):游戏架构里隐藏的五个坑及其应对方案》,我们主要讲解了游戏架构设计当中隐藏的一些坑及其应对方案,错过的小伙伴可以回溯之前的内容。本期内容,将会重点介...

UCloudTech
14分钟前
0
0
Mysql基本语法

一.联合主键 drop table CONTENT_AND_CATALOG;CREATE TABLE `tobebetter`.`CONTENT_AND_CATALOG` ( `ID` VARCHAR(120) NOT NULL , `CONTENT_ID` VARCHAR(120) , `CA......

我是菜鸟我骄傲
15分钟前
0
0
179. centos7 安装mariadb

1. centos7 中安装mariadb 1.1 执行安装 centos7 自带了mariadb yum -y install mariadb mariadb-server 1.2 启动mariadb systemctl start mariadb 1.3 设置开机启动 systemctl enable maria......

Lucky_Me
23分钟前
0
0
【AI实战】动手训练自己的目标检测模型(YOLO篇)

在前面的文章中,已经介绍了基于SSD使用自己的数据训练目标检测模型(见文章:手把手教你训练自己的目标检测模型),本文将基于另一个目标检测模型YOLO,介绍如何使用自己的数据进行训练。 ...

雪饼
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部