georges 25 years ago
parent
commit
afe5c76ebd
1 changed files with 13 additions and 7 deletions
  1. 13 7
      panda/src/linmath/cmath.I

+ 13 - 7
panda/src/linmath/cmath.I

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