zoukankan      html  css  js  c++  java
  • 使用SSE指令优化的数学函数(整理)

    好多指令不认识...慢慢研究

    float _SSE_cos( float x)
    {
     float temp;
     __asm
     {
      movss xmm0, x
      movss xmm1, _ps_am_inv_sign_mask
      andps xmm0, xmm1
      addss xmm0, _ps_am_pi_o_2
      mulss xmm0, _ps_am_2_o_pi

      cvttss2si ecx, xmm0
      movss xmm5, _ps_am_1
      mov  edx, ecx
      shl  edx, (31 - 1)
      cvtsi2ss xmm1, ecx
      and  edx, 0x80000000
      and  ecx, 0x1

      subss xmm0, xmm1
      movss xmm6, _sincos_masks[ecx * 4]
      minss xmm0, xmm5

      movss xmm1, _ps_sincos_p3
      subss xmm5, xmm0

      andps xmm5, xmm6
      movss xmm7, _ps_sincos_p2
      andnps xmm6, xmm0
      mov  temp, edx
      orps xmm5, xmm6
      movss xmm0, xmm5

      mulss xmm5, xmm5
      movss xmm4, _ps_sincos_p1
      movss xmm2, xmm5
      mulss xmm5, xmm1
      movss xmm1, _ps_sincos_p0
      addss xmm5, xmm7
      mulss xmm5, xmm2
      movss xmm3, temp
      addss xmm5, xmm4
      mulss xmm5, xmm2
      orps xmm0, xmm3
      addss xmm5, xmm1
      mulss xmm0, xmm5
      
      movss   x,    xmm0

     }

     return x;
    }

    float _SSE2_cos(float x) 
    {
     __asm
     {
      movss xmm0, x
      movss xmm1, _ps_am_inv_sign_mask
      movss xmm2, _ps_am_pi_o_2
      movss xmm3, _ps_am_2_o_pi
      andps xmm0, xmm1
      addss xmm0, xmm2
      mulss xmm0, xmm3

      pxor xmm3, xmm3
      movd xmm5, _epi32_1
      movss xmm4, _ps_am_1
      cvttps2dq xmm2, xmm0
      pand xmm5, xmm2
      movd xmm1, _epi32_2
      pcmpeqd xmm5, xmm3
      cvtdq2ps xmm6, xmm2
      pand xmm2, xmm1
      pslld xmm2, (31 - 1)

      subss xmm0, xmm6
      movss xmm3, _ps_sincos_p3
      minss xmm0, xmm4
      subss xmm4, xmm0
      andps xmm0, xmm5
      andnps xmm5, xmm4
      orps xmm0, xmm5

      movaps xmm1, xmm0
      movss xmm4, _ps_sincos_p2
      mulss xmm0, xmm0
      movss xmm5, _ps_sincos_p1
      orps xmm1, xmm2
      movaps xmm7, xmm0
      mulss xmm0, xmm3
      movss xmm6, _ps_sincos_p0
      addss xmm0, xmm4
      mulss xmm0, xmm7
      addss xmm0, xmm5
      mulss xmm0, xmm7
      addss xmm0, xmm6
      mulss xmm0, xmm1
      movss   x,    xmm0
     }

     return x;
    }

    float _SSE_Sqrt(float x)
    {

     float root = 0.f;
     _asm
     {
      sqrtss  xmm0, x
      movss  root, xmm0
     }

     return root;
    }

  • 相关阅读:
    mit课程ocw-business
    2016中国人工智能企业TOP100, CBinsight2016年100家人工智能公司
    excel2013做数据透视表
    Mac OS X中,有三种方式来实现启动项的配置
    macbook双网卡路由
    怎么比较两个list中相同的值个数!
    创业圈必备英语
    全球最牛的100家AI创企:有多少独角兽?
    Java中字符串为什么不以结尾
    详解PPP模式下的产业投资基金运作【基金管理】
  • 原文地址:https://www.cnblogs.com/waterflier/p/153540.html
Copyright © 2011-2022 走看看