add sincos fns

This commit is contained in:
georges 2001-02-16 05:20:24 +00:00
parent 032f773b53
commit 432777a74a
2 changed files with 42 additions and 0 deletions

View File

@ -21,6 +21,46 @@ INLINE float ccos(float v) {
return cosf(v);
}
INLINE void
sincosf(float v, float *pSinResult, float *pCosResult) {
// msvc defines _M_IX86 for x86
#ifdef _M_IX86
#define fsincos __asm _emit 0xd9 __asm _emit 0xfb
__asm {
mov eax, pSinResult
mov edx, pCosResult
fld v
fsincos
fstp DWORD ptr [edx]
fstp DWORD ptr [eax]
}
#undef fsincos
#else //!_X86_
*pSinResult = sinf(v);
*pCosResult = cosf(v);
#endif //!_X86_
}
INLINE void
sincos(double v, double *pSinResult, double *pCosResult) {
#ifdef _M_IX86
#define sincos __asm _emit 0xd9 __asm _emit 0xfb
__asm {
mov eax, pSinResult
mov edx, pCosResult
fld v
fsincos
fstp QWORD ptr [edx]
fstp QWORD ptr [eax]
}
#undef sincos
#else //!_X86_
*pSinResult = sin(v);
*pCosResult = cos(v);
#endif //!_X86_
}
INLINE float cabs(float v) {
return fabs(v);
}

View File

@ -17,6 +17,7 @@
INLINE float csqrt(float v);
INLINE float csin(float v);
INLINE float ccos(float v);
INLINE void csincos(float v, float *pSinResult, float *pCosResult); // does both at once (faster on x86)
INLINE float cabs(float v);
INLINE float catan2(float y, float x);
@ -25,6 +26,7 @@ INLINE double csin(double v);
INLINE double ccos(double v);
INLINE double cabs(double v);
INLINE double catan2(double y, double x);
INLINE void csincos(double v, double *pSinResult, double *pCosResult); // does both at once (faster on x86)
// Returns true if the number is nan, false if it's a genuine number
// or infinity.