汇编指令与Intrinsics指令的对应关系汇总
汇编指令与Intrinsics指令的对应关系汇总
参考网址:https://software.intel.com/sites/landingpage/IntrinsicsGuide/
1、赋值指令:movq
使用方法:movq xmm, m64
功能:把源存储器低64位内容送入目的寄存器的低64位,高64位清零
对应的Intrinsics:
__m128i _mm_loadl_epi64 (__m128i const* mem_addr)
介绍:
__m128i _mm_loadl_epi64 (__m128i const* mem_addr)
#include "emmintrin.h" //SSE2
Instruction: movq xmm, m64
CPUID Flags: SSE2
功能:
Load 64-bit integer from memory into the first element of dst.
方法:
dst[63:0] := MEM[mem_addr+63:mem_addr] dst[MAX:64] := 0
2、加法指令:paddw
使用方法:paddw xmm, xmm
功能:源存储器与目的寄存器按字对齐无符号普通相加,内存变量必须对齐内存16字节
对应的Intrinsics:
<pre name="code" class="html">__m128i _mm_add_epi16 (__m128i a, __m128i b)
介绍:
__m128i _mm_add_epi16 (__m128i a, __m128i b)
#include "emmintrin.h"
Instruction: paddw xmm, xmm
CPUID Flags: SSE2
功能:
Add packed 16-bit integers in a and b, and store the results in dst.
方法:
<pre name="code" class="html">FOR j := 0 to 7 i := j*16 dst[i+15:i] := a[i+15:i] + b[i+15:i] ENDFOR
3、减法指令:psubw
使用方法:psubw xmm, xmm
功能:源存储器与目的寄存器按字对齐无符号普通相减(目的减去源),内存变量必须对齐内存16字节
对应的Intrinsics:
<pre name="code" class="html">__m128i _mm_sub_epi16 (__m128i a, __m128i b)
介绍:
__m128i _mm_sub_epi16 (__m128i a, __m128i b)
#include "emmintrin.h"
Instruction: psubw xmm, xmm
CPUID Flags: SSE2
功能:
Subtract packed 16-bit integers in b from packed 16-bit integers in a, and store the results in dst.
方法:
<pre name="code" class="html">FOR j := 0 to 7 i := j*16 dst[i+15:i] := a[i+15:i] - b[i+15:i] ENDFOR
4、低64位按字交错排列指令:punpcklwd
使用方法:punpcklwd xmm, xmm
功能:源存储器与目的寄存器低64位按字交错排列,内存变量必须对齐内存16字节
高64位 | 低64位
目的寄存器: a7 a6 a5 a4 a3 a2 a1 a0
源寄存器: b7 b6 b5 b4 b3 b2 b1 b0
目的寄存器结果:b3 a3 b2 a2 b1 a1 b0 a0
对应的Intrinsics:
<pre name="code" class="html">__m128i _mm_unpacklo_epi16 (__m128i a, __m128i b)
介绍:
__m128i _mm_unpacklo_epi16 (__m128i a, __m128i b)
#include "emmintrin.h"
Instruction: punpcklwd xmm, xmm
CPUID Flags: SSE2
功能:
Unpack and interleave 16-bit integers from the low half of a and b, and store the results in dst.
方法:
<pre name="code" class="html">INTERLEAVE_WORDS(src1[127:0], src2[127:0]){ dst[15:0] := src1[15:0] dst[31:16] := src2[15:0] dst[47:32] := src1[31:16] dst[63:48] := src2[31:16] dst[79:64] := src1[47:32] dst[95:80] := src2[47:32] dst[111:96] := src1[63:48] dst[127:112] := src2[63:48] RETURN dst[127:0] } dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
5、高64位按字交错排列指令:punpckhwd
使用方法:punpckhwd xmm, xmm
功能:源存储器与目的寄存器高64位按字交错排列,内存变量必须对齐内存16字节
高64位 | 低64位
目的寄存器: a7 a6 a5 a4 a3 a2 a1 a0
源寄存器: b7 b6 b5 b4 b3 b2 b1 b0
目的寄存器结果:b7 a7 b6 a6 b5 a5 b4 a4
对应的Intrinsics:
<pre name="code" class="html">__m128i _mm_unpackhi_epi16 (__m128i a, __m128i b)
介绍:
__m128i _mm_unpackhi_epi16 (__m128i a, __m128i b)
#include "emmintrin.h"
Instruction: punpckhwd xmm, xmm
CPUID Flags: SSE2
功能:
Unpack and interleave 16-bit integers from the high half of a and b, and store the results in dst.
方法:
<pre name="code" class="html">INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]){ dst[15:0] := src1[79:64] dst[31:16] := src2[79:64] dst[47:32] := src1[95:80] dst[63:48] := src2[95:80] dst[79:64] := src1[111:96] dst[95:80] := src2[111:96] dst[111:96] := src1[127:112] dst[127:112] := src2[127:112] RETURN dst[127:0] } dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
6、低64位按双字交错排列指令:punpckldq
使用方法:punpckldq xmm, xmm
功能:源存储器与目的寄存器低64位按双字交错排列,内存变量必须对齐内存16字节
高64位 | 低64位
目的寄存器: a3 a2 a1 a0
源寄存器: b3 b2 b1 b0
目的寄存器结果:b1 a1 b0 a0
对应的Intrinsics:
<pre name="code" class="html">__m128i _mm_unpacklo_epi32 (__m128i a, __m128i b)
介绍:
__m128i _mm_unpacklo_epi32 (__m128i a, __m128i b)
#include "emmintrin.h"
Instruction: punpckldq xmm, xmm
CPUID Flags: SSE2
功能:
Unpack and interleave 32-bit integers from the low half of a and b, and store the results in dst.
方法:
<pre name="code" class="html">INTERLEAVE_DWORDS(src1[127:0], src2[127:0]){ dst[31:0] := src1[31:0] dst[63:32] := src2[31:0] dst[95:64] := src1[63:32] dst[127:96] := src2[63:32] RETURN dst[127:0] } dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
7、高64位按双字交错排列指令:punpckhdq
使用方法:punpckhdq xmm, xmm
功能:源存储器与目的寄存器高64位按双字交错排列,内存变量必须对齐内存16字节
高64位 | 低64位
目的寄存器: a3 a2 a1 a0
源寄存器: b3 b2 b1 b0
目的寄存器结果:b3 a3 b2 a2
对应的Intrinsics:
<pre name="code" class="html">__m128i _mm_unpackhi_epi32 (__m128i a, __m128i b)
介绍:
__m128i _mm_unpackhi_epi32 (__m128i a, __m128i b)
#include "emmintrin.h"
Instruction: punpckhdq xmm, xmm
CPUID Flags: SSE2
功能:
Unpack and interleave 32-bit integers from the high half of a and b, and store the results in dst.
方法:
<pre name="code" class="html">INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]){ dst[31:0] := src1[95:64] dst[63:32] := src2[95:64] dst[95:64] := src1[127:96] dst[127:96] := src2[127:96] RETURN dst[127:0] } dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
汇编指令与Intrinsics指令的对应关系汇总的更多相关文章
- 五、案例-指令参考-freemarker指令、表达式
案例-指令参考描述:本人自己测试写了一遍,如有错的地方,懂freemarker的朋友望指点指点! 案例-指令参考 表达式 一. Assign 1.<#assign name1="北京& ...
- emms指令在MMX指令中的作用
emms指令在MMX指令中的作用 转自:http://blog.csdn.net/psusong/archive/2009/01/08/3737047.aspx MMX和SSE都是INTEL开发的基于 ...
- ARM指令协处理器处理指令
ARM支持16个协处理器,在程序执行过程中,每个协处理器忽略属于ARM处理器和其他协处理器指令,当一个协处理器硬件不能执行属于她的协处理器指令时,就会产生一个未定义的异常中断,在异常中断处理程序中,可 ...
- ARM指令和Thumb指令区别
Thumb指令集 ]的问题而提出的,它具有16为的代码密度.Thumb不是一个完整的体系结构,不能指望处理程序只执行Thumb指令而不支持ARM指令集.因此,Thumb指令只需要支持通用功能,必要时, ...
- int指令(软件中断指令)
INT(软件中断指令)是CALL指令的一种特殊形式.call指令调用调用的子程序是用户程序的一部分,而INT指令调用的操作系统提供的子程序或者其他特殊的子程序. 中断服务子程序和标准过程的最大区别是 ...
- AngularJS -- 指令(创建自定义指令)
点击查看AngularJS系列目录 转载请注明出处:http://www.cnblogs.com/leosx/ 什么是指令 注:本指南是针对已经熟悉AngularJS基础知识的开发人员.如果你才刚 ...
- JSP中的编译指令和动作指令的区别
JSP中的编译指令和动作指令的区别 1.编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的脚本动作 2.编译指令是在将JSP编译成Servlet时起作用,而动作指令可替换成JSP脚本, ...
- Javaweb学习笔记——(十二)——————JSP指令:page指令、include指令、taglib指令,JavaBean,内省,EL表达式
JSP指令JSP指令分类 JSP有三大指令: *page指令 *include指令 *taglib指令 在JSP中没有任何指令是必须的. 但基本上每个JSP都是使用page指令============ ...
- vue 基础-->进阶 教程(2): 指令、自定义指令、组件
第二章 建议学习时间4小时 课程共3章 前面的nodejs教程并没有停止更新,因为node项目需要用vue来实现界面部分,所以先插入一个vue教程,以免不会的同学不能很好的完成项目. 本教程,将从零 ...
随机推荐
- 第七篇:两个经典的文件IO程序示例
前言 本文分析两个经典的C++文件IO程序,提炼出其中文件IO的基本套路,留待日后查阅. 程序功能 程序一打印用户指定的所有文本文件,程序二向用户指定的所有文本文件中写入数据. 程序一代码及其注释 # ...
- Centos 虚拟机网络问题,网卡起不来,重启network服务失败
拷贝了个虚拟机,有两个网卡,1个可以起来,另一个起不来.运行命令:$>systemctl restart network 输出如下:Job for network.service failed ...
- HDU 5892 Resident Evil
题目链接:传送门 题目大意:有50种动物,给你n*n的矩阵,m次操作,P代表加入操作,在左上角 x1,y1 到右下角 x2,y2,的矩形范围内加入 种类为x,数量为y的动物. Q代表询问操作,在左上角 ...
- servlet ; basepath ; sendredirected ;
Eclipse 新建 jsp页面里自动生成以下代码: <%String path = request.getContextPath();String basePath = request.get ...
- 【BZOJ4560】[JLoi2016]字符串覆盖 KMP+状压DP
[BZOJ4560][JLoi2016]字符串覆盖 Description 字符串A有N个子串B1,B2,…,Bn.如果将这n个子串分别放在恰好一个它在A中出现的位置上(子串之间可以重叠)这样A中的若 ...
- 爬虫入门【9】Python链接Excel操作详解-openpyxl库
Openpyx是一个用于读写Excel2010各种xlsx/xlsm/xltx/xltm文件的python库. 现在大多数用的都是office2010了,如果之前之前版本的可以使用xlrd读,xlwt ...
- 教程less
http://lesscss.cn/features/ Overview As an extension to CSS, Less is not only backwards compatible w ...
- Linux ssh其他服务器
- TADOConnection和TADQuery组件连接访问数据库总结
首先先来简单了解一下TADOConnection控件和TADOQuery控件作用,如下图: 好了简单对这两个控件有了一个初步的认识了,下面我们就通过两种形式来进行访问数据库:第一种是通过手动配置不需要 ...
- 巨蟒python全栈开发flask8 MongoDB回顾 前后端分离之H5&pycharm&夜神
1.MongoDB回顾 .启动 mongod - 改变data/db位置: --dbpath D:\data\db mongod --install 安装windows系统服务 mongod --re ...