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

 

 

 

 

 

C++ Builder 6 BizSnap/SOAP/WebService(2) -- 通过 SOAP 传递自定义类型数据(改)

    说明:本文经过一些改动,纠正了一些问题,因为原文无法修改,只好重发。不久前我收到几位朋友发来Mail说明他们在按照本文所述进行WebService应用开发时碰到的一个问题:在用ISAPI方式编...
  • Raptor
  • Raptor
  • 2002-08-19 16:31:00
  • 5063

ELF64文件逆向分析知识—[1]64位逆向基础知识

第一次用IDA打开ELF64可执行文件进行分析,有种刚学逆向的错觉,各种之前不认识的寄存器,函数调用完全找不到函数参数是怎么传递的。看来有必要恶补一下x64位CPU的和逆向分析相关的知识。...
  • txx_683
  • txx_683
  • 2016-12-04 14:57:33
  • 1603

SSE指令集学习:Compiler Intrinsic

大多数的函数是在库中,Intrinsic Function却内嵌在编译器中(built in to the compiler)。1. Intrinsic FunctionIntrinsic Funct...
  • BrookIcv
  • BrookIcv
  • 2016-08-23 22:17:49
  • 2413

在C/C++代码中使用SSE等指令集的指令(3)SSE指令集基础

相关参考: http://edu.gamfe.com/tutor/d/11820.html http://blog.163.com/chenqneu@126/blog/static/4573848...
  • gengshenghong
  • gengshenghong
  • 2011-11-24 22:34:27
  • 19090

AVX官方入门介绍

Intel® Advanced Vector Extensions (Intel® AVX) is a set of instructions for doing Single Instruction...
  • vbskj
  • vbskj
  • 2014-08-06 23:22:37
  • 4931

IE安全系列之:中流砥柱(II)—Jscript 9处理浅析

本文将简要介绍Jscript 9 (Charka)引擎处理数字、对象、函数操作的一些内容。 0x00 Jscript9 的安全机制 IE9开始,微软使用了全新的JavaScript引擎—工...
  • moonhillcity
  • moonhillcity
  • 2016-11-16 15:03:13
  • 373

SIMD指令初学

参考自:http://blog.csdn.net/gengshenghong/article/details/7008704(。。。。) SIMD 即 single instruction m...
  • woxiaohahaa
  • woxiaohahaa
  • 2016-04-05 21:42:48
  • 2942

ZFXEngine开发笔记-SSE版本的ZFXVector

开发一个SSE版本的向量,供游戏开发使用,提供向量计算的速度
  • i_dovelemon
  • i_dovelemon
  • 2014-08-27 15:29:36
  • 1480

SSE指令集

sse提供了xmm寄存器,xmm一组8个128位的寄存器,分别名为xmm0-xmm7,sse构架提供对打包单精度浮点数的SIMD支持。 sse提供了两个版本的指令,其一以后缀ps结尾,这组指令对打包...
  • ww506772362
  • ww506772362
  • 2014-12-09 16:09:55
  • 2008

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

float _SSE_cos( float x){ float temp; __asm {  movss xmm0, x  movss xmm1, _ps_am_inv_sign_mask  andp...
  • dbgnu
  • dbgnu
  • 2006-04-06 13:43:00
  • 968
收藏助手
不良信息举报
您举报文章:使用SSE指令优化的数学函数(整理)
举报原因:
原因补充:

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