使用SSE指令优化的数学函数(整理)

原创 2004年08月15日 15:56:00

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

 

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;
}

 

 

 

 

 

SSE指令指令集进行程序加速、DCT的优化处理

1. 什么是SSE 说到SSE,首先要弄清楚的一个概念是SIMD(单指令多数据流,Single Instruction Multiple Data),是一种数据并行技术,能够在一条指令中同时对多个...
  • yangdashi888
  • yangdashi888
  • 2016年11月28日 13:43
  • 1518

OpenCV学习之五: 如何用指令启动或关闭OpenCV的CPU指令集CV_SSE2,CV_SSSE4等优化

在这篇博客中,我将会给大家分享关于OpenCV源码中的CPU指令集CV_SSE2等的相关知识 一、    CV_SSE系列指令集的预编译符号定义在opencv2/core/internal.hpp这个...
  • zhjm07054115
  • zhjm07054115
  • 2014年05月25日 12:12
  • 4030

使用MMX/SSE汇编指令集优化视频开发

1、汇编指令集 目前大部分的PC机采用的都是Intel或者AMD的CPU,其支持的多媒体汇编指令有: MMX:多媒体扩展指令(MultiMedia eXtention),该指令由Intel在1996年...
  • shaqoneal
  • shaqoneal
  • 2015年05月26日 17:16
  • 2361

[C] 跨平台使用Intrinsic函数范例2——使用SSE2、AVX指令集 处理 双精度浮点数组求和

作者:zyl910。   本文面对对SSE等SIMD指令集有一定基础的读者,以双精度浮点数组求和为例演示了如何跨平台使用SSE2、AVX指令集。支持vc、gcc编译器,在Windows、Linux、...
  • zyl910
  • zyl910
  • 2012年10月26日 18:06
  • 4019

[C] 跨平台使用Intrinsic函数范例1——使用SSE、AVX指令集 处理 单精度浮点数组求和(支持vc、gcc,兼容Windows、Linux、Mac)

作者:zyl910。   本文面对对SSE等SIMD指令集有一定基础的读者,以单精度浮点数组求和为例演示了如何跨平台使用SSE、AVX指令集。因使用了stdint、zintrin、ccpuid这三个...
  • sujunzy666
  • sujunzy666
  • 2014年03月13日 14:49
  • 877

跨平台使用Intrinsic函数范例1——使用SSE、AVX指令集 处理 单精度浮点数组求和(支持vc、gcc,兼容Windows、Linux、Mac)

作者:zyl910。   本文面对对SSE等SIMD指令集有一定基础的读者,以单精度浮点数组求和为例演示了如何跨平台使用SSE、AVX指令集。因使用了stdint、zintrin、ccpuid这三个...
  • ceasar11
  • ceasar11
  • 2014年01月09日 10:17
  • 1047

[C] 跨平台使用Intrinsic函数范例1——使用SSE、AVX指令集 处理 单精度浮点数组求和(支持vc、gcc,兼容Windows、Linux、Mac)

作者:zyl910。   本文面对对SSE等SIMD指令集有一定基础的读者,以单精度浮点数组求和为例演示了如何跨平台使用SSE、AVX指令集。因使用了stdint、zintrin、ccpuid这三个...
  • zyl910
  • zyl910
  • 2012年10月22日 22:28
  • 3034

[C] 跨平台使用Intrinsic函数范例3——使用MMX、SSE2指令集 处理 32位整数数组求和

作者:zyl910。   本文面对对SSE等SIMD指令集有一定基础的读者,以32位整数数组求和为例演示了如何跨平台使用MMX、SSE2指令集。支持vc、gcc编译器,在Windows、Linux、...
  • zyl910
  • zyl910
  • 2012年10月26日 21:23
  • 5349

使用MMX/SSE汇编指令集优化视频开发

1、汇编指令集 目前大部分的PC机采用的都是Intel或者AMD的CPU,其支持的多媒体汇编指令有: MMX:多媒体扩展指令(MultiMedia eXtention),该指令由Intel在1996年...
  • shaqoneal
  • shaqoneal
  • 2015年05月26日 17:16
  • 2361

使用SSE4指令集优化双线性插值图像缩放

原理:p = p(0) *(1-t) + p(1) * t = p(0) + (p(1) - p(0)) * t水平方向和垂直方向均进行线性插值,缩放系数分别计算,由于水平和垂直成正交关系,因而与计算...
  • lifesider
  • lifesider
  • 2011年06月05日 21:19
  • 4497
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用SSE指令优化的数学函数(整理)
举报原因:
原因补充:

(最多只允许输入30个字)