|
@@ -24,9 +24,9 @@ INLINE float ccos(float v) {
|
|
|
INLINE void
|
|
INLINE void
|
|
|
sincosf(float v, float *pSinResult, float *pCosResult) {
|
|
sincosf(float v, float *pSinResult, float *pCosResult) {
|
|
|
|
|
|
|
|
-// msvc defines _M_IX86 for x86
|
|
|
|
|
-#ifdef _M_IX86
|
|
|
|
|
-#define fsincos __asm _emit 0xd9 __asm _emit 0xfb
|
|
|
|
|
|
|
+// MS VC defines _M_IX86 for x86. gcc should define _X86_
|
|
|
|
|
+#if defined(_M_IX86) || defined(_X86_)
|
|
|
|
|
+//#define fsincos_opcode __asm _emit 0xd9 __asm _emit 0xfb
|
|
|
__asm {
|
|
__asm {
|
|
|
mov eax, pSinResult
|
|
mov eax, pSinResult
|
|
|
mov edx, pCosResult
|
|
mov edx, pCosResult
|
|
@@ -35,7 +35,6 @@ sincosf(float v, float *pSinResult, float *pCosResult) {
|
|
|
fstp DWORD ptr [edx]
|
|
fstp DWORD ptr [edx]
|
|
|
fstp DWORD ptr [eax]
|
|
fstp DWORD ptr [eax]
|
|
|
}
|
|
}
|
|
|
-#undef fsincos
|
|
|
|
|
#else //!_X86_
|
|
#else //!_X86_
|
|
|
*pSinResult = sinf(v);
|
|
*pSinResult = sinf(v);
|
|
|
*pCosResult = cosf(v);
|
|
*pCosResult = cosf(v);
|
|
@@ -44,8 +43,8 @@ sincosf(float v, float *pSinResult, float *pCosResult) {
|
|
|
|
|
|
|
|
INLINE void
|
|
INLINE void
|
|
|
sincos(double v, double *pSinResult, double *pCosResult) {
|
|
sincos(double v, double *pSinResult, double *pCosResult) {
|
|
|
-#ifdef _M_IX86
|
|
|
|
|
-#define sincos __asm _emit 0xd9 __asm _emit 0xfb
|
|
|
|
|
|
|
+#if defined(_M_IX86) || defined(_X86_)
|
|
|
|
|
+//#define fsincos_opcode __asm _emit 0xd9 __asm _emit 0xfb
|
|
|
__asm {
|
|
__asm {
|
|
|
mov eax, pSinResult
|
|
mov eax, pSinResult
|
|
|
mov edx, pCosResult
|
|
mov edx, pCosResult
|
|
@@ -54,13 +53,20 @@ sincos(double v, double *pSinResult, double *pCosResult) {
|
|
|
fstp QWORD ptr [edx]
|
|
fstp QWORD ptr [edx]
|
|
|
fstp QWORD ptr [eax]
|
|
fstp QWORD ptr [eax]
|
|
|
}
|
|
}
|
|
|
-#undef sincos
|
|
|
|
|
#else //!_X86_
|
|
#else //!_X86_
|
|
|
*pSinResult = sin(v);
|
|
*pSinResult = sin(v);
|
|
|
*pCosResult = cos(v);
|
|
*pCosResult = cos(v);
|
|
|
#endif //!_X86_
|
|
#endif //!_X86_
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+INLINE void csincos(float v,float *pSinResult, float *pCosResult) {
|
|
|
|
|
+ sincosf(v,pSinResult,pCosResult);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+INLINE void csincos(double v,double *pSinResult, double *pCosResult) {
|
|
|
|
|
+ sincos(v,pSinResult,pCosResult);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
INLINE float cabs(float v) {
|
|
INLINE float cabs(float v) {
|
|
|
return fabs(v);
|
|
return fabs(v);
|
|
|
}
|
|
}
|