2011-09-01 138 views
2

我目前正在对MSVC下的一些C代码进行优化,其中进行了一些sin()和cos()计算。是否有任何接口可以在MSVC下调用__libm_sse2_sincos?

我使用SSE实现比如:

a = _mm_set_pd(cos(w),sin(w)); 

然而,当我后来查拆卸代码,我发现,微软编译器解释COS(W)和sin(W)如下:

call  __libm_sse2_cos 
... 
call  __libm_sse2_sin 

单独调用cos和sin。但我希望编译器调用__libm_sse2_sincos来同时计算相同弧度的sin和cos。

那么我可以告诉编译器这样做吗?或者任何接口在MSVC下调用它们?在Linux下如何?

非常感谢您的帮助。

回答

0

为什么不只是这样做:

double s, c; 

sincos(w, &s, &c); 
a = _mm_set_pd(c, s); 

+0

我猜sincos()是GNU的一个函数,我目前正在使用MSVC,这就是为什么我会问这个问题。不过谢谢你的帮助。 – Kailai

+0

好的 - 你问的问题也是Linux,'sincos'在Linux(以及大多数其他非Microsoft操作系统)中是标准的。 –

+0

OK - thx for Linux part :)现在让我们继续讨论MSVC,我实际上尝试了在MSVC下将'call __libm_sse2_sincos'作为ASM的代码,只有错误“Undefined label:__libm_sse2_sincos” – Kailai

0

如果你想MSVC下正余弦,您可以使用从XNA数学库的实现(一个或多个),即XMVectorSinCosXMScalarSinCos,其吸身份,他们只是float或者你需要使用像AMD的LibM外部库(用于x64)或更短的时间,如this

相关问题