SSE Logical Instructions

SSE的逻辑指令执行与,或,非,以及与非操作。操作数是组合的单精度浮点数。

指令

描述

ANDPS

格式:xmm1, xmm2/m128

对操作数执行按位“与”操作

指令操作:

DEST[31:0] <-- DEST[31:0] BITWISE AND SRC[31:0]

DEST[63:32] <-- DEST[63:32] BITWISE AND SRC[63:32]

DEST[95:64] <-- DEST[95:64] BITWISE AND SRC[95:64]

DEST[127:96] <-- DEST[127:96] BITWISE AND SRC[127:96]

ANDNPS

格式:xmm1, xmm2/m128

对操作数执行按位“与非”操作

ORPS

格式:xmm1, xmm2/m128

对操作数执行按位“或”操作

XORPS

格式:xmm1, xmm2/m128

对操作数执行按位“异或”操作

SSE Comparison Instruction

SSE的比较指令比较组合的/标量的单精度浮点数,比较结果保存在目标寄存器中或者EFLAGS标志寄存器中。

指令

描述

CMPPS

格式:CMPPS xmm1, xmm2/m128, imm8

比较组合的单精度浮点数,imm8指定比较类型,结果保存在xmm1中。

指令操作:(OP3的值参考下表)

CMP0 <-- SRC1[31:0] OP3 SRC2[31:0];
CMP1 <-- SRC1[63:32] OP3 SRC2[63:32];
CMP2 <-- SRC1[95:64] OP3 SRC2[95:64];
CMP3 <-- SRC1[127:96] OP3 SRC2[127:96];
IF CMP0 = TRUE
    THEN DEST[31:0] <-- FFFFFFFFH;
    ELSE DEST[31:0] <-- 000000000H; FI;
IF CMP1 = TRUE
    THEN DEST[63:32] <-- FFFFFFFFH;
    ELSE DEST[63:32] <-- 000000000H; FI;
IF CMP2 = TRUE
    THEN DEST[95:64] <-- FFFFFFFFH;
    ELSE DEST[95:64] <-- 000000000H; FI;
IF CMP3 = TRUE
    THEN DEST[127:96] <-- FFFFFFFFH;
    ELSE DEST[127:96] <-- 000000000H; FI;

CMPSS

格式:CMPSS xmm1, xmm2/m32, imm8

比较标量的单精度浮点数,imm8指定比较类型,结果保存在xmm1中。

在CMPPS指令,imm8指定的比较类型列表如下(也同样适用于CMPSS指令):

类型

伪指令

备注

0

相等EQ

CMPEQPS xmm1, xmm2

xmm1中的数据元素 == xmm2中的数据元素,则为真

1

小于LT

CMPLTPS xmm1, xmm2

xmm1中的数据元素< xmm2中的数据元素,则为真

2

小于等于LE

CMPLEPS xmm1, xmm2

xmm1中的数据元素<= xmm2中的数据元素,则为真

3

无序UNORD

CMPUNORDPS xmm1, xmm2

两个操作数中至少有一个是NaN,则为真

4

不相等NEQ

CMPNEQPS xmm1, xmm2

xmm1中的数据元素!= xmm2中的数据元素,则为真

5

不小于NLT

CMPNLTPS xmm1, xmm2

xmm1中的数据元素>= xmm2中的数据元素,则为真

6

不小于等于NLE

CMPNLEPS xmm1, xmm2

xmm1中的数据元素> xmm2中的数据元素,则为真

7

有序ORD

CMPORDPS xmm1, xmm2

两个操作数中都不是NaN,则为真

指令

描述

COMISS

格式:COMISS xmm1, xmm2/m32

比较标量的单精度浮点数,结果保存在EFLAGS中。

以下是对标志寄存器的标志位的解释

UNORDERED: ZF,PF,CF <-- 111; (任一操作数是NaN(QNaN或SNaN))

GREATER_THAN: ZF,PF,CF <-- 000; (xmm1 > xmm2/m32)

LESS_THAN: ZF,PF,CF <-- 001; (xmm1 < xmm2/m32)

EQUAL: ZF,PF,CF <-- 100; (xmm1 == xmm2/m32)

本条指令与下面一条UCOMISS指令的区别在于:当某个操作数是QNaN或者SNaN的时候,COMISS指令会产生一个SIMD浮点数无效操作异常(#I)。而UCOMISS指令,只有在某个操作数是SNaN的时候,产生无效操作异常(#I)。

Intel C/C++ Compiler Intrinsic Equivalent

COMISS int _mm_comieq_ss (__m128 a, __m128 b)
COMISS int _mm_comilt_ss (__m128 a, __m128 b)
COMISS int _mm_comile_ss (__m128 a, __m128 b)
COMISS int _mm_comigt_ss (__m128 a, __m128 b)
COMISS int _mm_comige_ss (__m128 a, __m128 b)
COMISS int _mm_comineq_ss (__m128 a, __m128 b)

UCOMISS

格式:COMISS xmm1, xmm2/m32

比较标量的单精度浮点数,结果保存在EFLAGS中。

以下是对标志寄存器的标志位的解释

UNORDERED: ZF,PF,CF <-- 111; (任一操作数是NaN(QNaN或SNaN))

GREATER_THAN: ZF,PF,CF <-- 000; (xmm1 > xmm2/m32)

LESS_THAN: ZF,PF,CF <-- 001; (xmm1 < xmm2/m32)

EQUAL: ZF,PF,CF <-- 100; (xmm1 == xmm2/m32)

Intel C/C++ Compiler Intrinsic Equivalent

UCOMISS
UCOMISS
UCOMISS
UCOMISS
UCOMISS
UCOMISS

int _mm_ucomieq_ss(__m128 a, __m128 b);
int _mm_ucomilt_ss(__m128 a, __m128 b);
int _mm_ucomile_ss(__m128 a, __m128 b);
int _mm_ucomigt_ss(__m128 a, __m128 b);
int _mm_ucomige_ss(__m128 a, __m128 b);
int _mm_ucomineq_ss(__m128 a, __m128 b);

Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(6) - 逻辑指令 比较指令相关推荐

  1. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(8) - 数据类型转换指令

    SSE Conversion Instructions SSE的转换指令支持组合的/标量的单精度浮点数与双字整型数(32字节)之间的数据类型转换. 以下两条指令将整型数转换为浮点数. 指令 描述 CV ...

  2. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(9) - 64位整型指令(MMX指令集扩展)

    SSE 64-Bit SIMD Integer Instructions SSE扩展增加了几条64位组合的整型指令,这些指令操作MMX寄存器和64位的存储器操作数,这些指令可以看作是对MMX指令集的扩 ...

  3. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(1) - 概述/历史/新数据类型/XMM寄存器组

    SSE Instructions SSE Overview & History Intel SSE技术的全称是Streaming SIMD Extension,中文译作流式单指令多数据指令扩展 ...

  4. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(4) - 数据传输指令

    SSE Instruction Set SSE指令集大致可以分为4个功能组: 组合的与标量的单精度浮点指令 数据传输指令 算术指令 逻辑指令 比较指令 混洗shuffle指令 转换指令 64位SIMD ...

  5. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(2) - SSE程序设计环境概述

    SSE Programming Environment 下图是IA-32处理器上的SSE程序设计环境,所有的SSE指令操作XMM寄存器,MMX寄存器,和/或存储器. XMM寄存器,8个,128位宽,存 ...

  6. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(13/E) - FXSAVE/FXRSTOR指令

    FXSAVE and FXRSTOR instructions FXSAVE与FXRSTOR指令是从Pentium II处理器引入到IA-32架构上的,早于SSE指令集的引入.这两条指令的最初版本是用 ...

  7. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(7) - 混洗指令 解组合指令

    SSE Shuffle and Unpack Instructions SSE的混洗指令与解组合指令混洗shuffle或交错interleave单精度浮点操作数,并将结果保存到目标操作数. 指令 描述 ...

  8. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(3) - MXCSR寄存器详解

    MXCSR Control and Status Register 32位宽的MXCSR寄存器(参看下图)包含了控制与状态标志位,适用于SSE,SSE2和SSE3 SIMD浮点操作.这些标志位包括: ...

  9. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(12) - 预取指令与SFENCE指令

    PREFETCHn Instructions PREFETCHn指令使得程序可以提前让处理器预先即将访问的数据读入到指定的某级缓存中,这样当程序真正需要这些数据时,可以直接命中缓存.这些指令按照制定了 ...

最新文章

  1. Deep Residual Learning for Image Recognition(ResNet)论文翻译及学习笔记
  2. 在线机器学习FTRL(Follow-the-regularized-Leader)算法介绍
  3. 为什么ABAP里有些场景必须加上COMMIT WORK才生效
  4. 前端学习(2625):vs安装
  5. Java核心类库篇4——集合
  6. myeclipse每次保存编译全部_Fuchsia编译运行指南
  7. java swing container_Java Swing GUI学习(一)
  8. 【3】基于深度神经网络的脑电睡眠分期方法研究(数据集分类)
  9. 设置linux开机自动运行某条命令或程序和安装jdk(jar)
  10. MySQL数据库(15):高级数据操作-新增数据
  11. 关于手机上的卫星定位
  12. 今天看到一篇文章,收藏了很多大牛的博客
  13. jadbc oracle clob,XML blob issue with External table
  14. 德鲁克《卓有成效的管理者》学习读书-总结
  15. mMTC面临挑战与研究现状
  16. 实战案例 | Scrapy 集成Selenium爬取智联招聘数据
  17. MathType如何导入word
  18. CPLD和FPGA的区别
  19. 电压跟随器跟随器前后的电压不一致(笔记)
  20. 对于大量工控软件,IFIX 组态王等的深层解密分析,曲线

热门文章

  1. conda报错Collecting package metadata
  2. WORD如何一键转PPT
  3. 图书馆的uml概念类图怎么画_设计模式:UML?设计原则?
  4. origin如何绘制双y轴曲线_Origin对曲线进行多峰拟合
  5. 2_数据分析—认识pandas
  6. c++ 二维数组_二维数组的声明2019_04_18
  7. Xcode中c语言读键盘,使用Objective-C自定义键盘-Xcode8
  8. python 列表 元祖 字典,Python 列表、元组、字典
  9. sap 客户独立需求作用_SAP 动态安全库存其中动态时间应用
  10. python常用的库_这几个常用的python库你需要知道