zoukankan      html  css  js  c++  java
  • 【Optimization】常用SSE Intrinsic指令总结

    Date: 2018.6.16


    1、参考:

    https://www.cnblogs.com/dragon2012/p/5200698.html
    https://blog.csdn.net/ww506772362/article/details/41825215

    2、常用SSE指令及其说明
    movaps  把4个对齐的单精度值传送到xmm寄存器或者内存
    movups  把4个不对齐的单精度值传送到xmm寄存器或者内存
    movss   把1个单精度值传送到内存或者寄存器的低位双字
    movlps  把2个单精度值传送到内存或者寄存器的低四字
    movhps  把2个单精度值传送到内存或者寄存器的高四字
    movlhps 把2个单精度值从低四字传送到高四字
    movhlps 把2个单精度值从高四字传送到低四字
    
    addps   将两个打包值相加
    subps   将两个打包值相减
    mulps   将两个打包值相乘
    divps   将两个打包值相除
    rcpps   计算打包值的倒数
    sqrtps  计算打包值的平方根
    rsqrtps 计算打包值的平方根倒数
    maxps   计算两个打包值中的最大值
    minps   计算两个打包值中的最小值
    andps   计算两个打包值的按位逻辑与
    andnps  计算两个打包值的按位逻辑非
    orps    计算两个打包值的按位逻辑或
    xorps   计算两个打包值的按位逻辑异或
    
    cmpps   比较打包值
    cmpss   比较标量值
    comiss  比较标量值并且设置eflags寄存器
    ucomiss 比较标量值(包括非法值)并设置eflags寄存器

    注意:
    1)操作数可以是128位内存或者xmm寄存器,目标操作数必须是xmm寄存器。
    2) movaps指令要求数据在内存中对齐16字节边界,以提高效率,movups不需要对齐边界。

    3 、SSE Intrinsic函数

    (1) load指令函数:读指令,从内存到寄存器中

    __m128 _mm_load_ss (float *p)  
    __m128 _mm_load_ps (float *p)  
    __m128 _mm_load1_ps (float *p)  
    __m128 _mm_loadh_pi (__m128 a, __m64 *p)  
    __m128 _mm_loadl_pi (__m128 a, __m64 *p)  
    __m128 _mm_loadr_ps (float *p)  
    __m128 _mm_loadu_ps (float *p)

    (2) set指令函数:加载数据,类似于load

    __m128 _mm_set_ss (float w)  
    __m128 _mm_set_ps (float z, float y, float x, float w)  
    __m128 _mm_set1_ps (float w)  
    __m128 _mm_setr_ps (float z, float y, float x, float w)  
    __m128 _mm_setzero_ps ()  

    (3) store指令:写指令,从寄存器到内存中

    __m128 _mm_set_ss (float w)  
    __m128 _mm_set_ps (float z, float y, float x, float w)  
    __m128 _mm_set1_ps (float w)  
    __m128 _mm_setr_ps (float z, float y, float x, float w)  
    __m128 _mm_setzero_ps ()  

    (4) 算术指令:
    SSE提供了大量的浮点运算指令,包括加法、减法、乘法、除法、开方、最大值、最小值、近似求倒数、求开方的倒数等等 。

    __m128 _mm_add_ss (__m128 a, __m128 b)  
    __m128 _mm_add_ps (__m128 a, __m128 b)
    __m128 _mm_sub_ss (__m128 a, __m128 b)  
    __m128 _mm_sub_ps (__m128 a, __m128 b)
    __m128 _mm_mul_ss (__m128 a, __m128 b)  
    __m128 _mm_mul_ps (__m128 a, __m128 b)
    __m128 _mm_div_ss (__m128 a, __m128 b)  
    __m128 _mm_div_ps (__m128 a, __m128 b)
    __m128 _mm_min_ss (__m128 a, __m128 b)  
    __m128 _mm_min_ps (__m128 a, __m128 b)
    __m128 _mm_max_ss (__m128 a, __m128 b)  
    __m128 _mm_max_ps (__m128 a, __m128 b)

    Intel在线Intrinsic指令查询网址:
    https://software.intel.com/sites/landingpage/IntrinsicsGuide/

  • 相关阅读:
    href 和src 的区别
    一道返回不重复数组的测试题
    使用Node.js+Socket.IO搭建WebSocket实时应用
    WebSocket 是什么原理?为什么可以实现持久连接?
    图片异步加载
    30分钟新手git教程
    通过ajax异步调用返回值
    [JS] 让人犯晕的JavaScript变量赋值
    javaScript字符串操作
    (String),toString(),String.valueOf()
  • 原文地址:https://www.cnblogs.com/SoaringLee/p/10532447.html
Copyright © 2011-2022 走看看