Fixed several bugs: python refcounting related and Bullet related (basic add/remove...
[blender.git] / extern / bullet / LinearMath / SimdScalar.h
1 /*
2
3 Copyright (c) 2005 Gino van den Bergen / Erwin Coumans http://continuousphysics.com
4
5 Permission is hereby granted, free of charge, to any person or organization
6 obtaining a copy of the software and accompanying documentation covered by
7 this license (the "Software") to use, reproduce, display, distribute,
8 execute, and transmit the Software, and to prepare derivative works of the
9 Software, and to permit third-parties to whom the Software is furnished to
10 do so, all subject to the following:
11
12 The copyright notices in the Software and this entire statement, including
13 the above license grant, this restriction and the following disclaimer,
14 must be included in all copies of the Software, in whole or in part, and
15 all derivative works of the Software, unless such copies or derivative
16 works are solely in the form of machine-executable object code generated by
17 a source language processor.
18
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26 */
27
28
29 #ifndef SIMD___SCALAR_H
30 #define SIMD___SCALAR_H
31
32 #include <math.h>
33 #undef max
34
35
36
37 #include <cstdlib>
38 #include <cfloat>
39 #include <float.h>
40
41 #ifdef WIN32
42 #pragma warning(disable:4530)
43 #pragma warning(disable:4996)
44 #ifdef __MINGW32__
45 #define SIMD_FORCE_INLINE inline
46 #else
47 #define SIMD_FORCE_INLINE __forceinline
48 #endif //__MINGW32__
49
50 //#define ATTRIBUTE_ALIGNED16(a) __declspec(align(16)) a
51 #define ATTRIBUTE_ALIGNED16(a) a
52
53 #include <assert.h>
54 #define ASSERT assert
55 #else
56 #define SIMD_FORCE_INLINE inline
57 #define ATTRIBUTE_ALIGNED16(a) a
58 #ifndef assert
59 #include <assert.h>
60 #endif
61
62
63 #define ASSERT assert
64
65 #endif
66
67
68
69 typedef float    SimdScalar;
70
71 #if defined (__sun) || defined (__sun__) || defined (__sparc) || defined (__APPLE__)
72 //use double float precision operation on those platforms for Blender
73                 
74 SIMD_FORCE_INLINE SimdScalar SimdSqrt(SimdScalar x) { return sqrt(x); }
75 SIMD_FORCE_INLINE SimdScalar SimdFabs(SimdScalar x) { return fabs(x); }
76 SIMD_FORCE_INLINE SimdScalar SimdCos(SimdScalar x) { return cos(x); }
77 SIMD_FORCE_INLINE SimdScalar SimdSin(SimdScalar x) { return sin(x); }
78 SIMD_FORCE_INLINE SimdScalar SimdTan(SimdScalar x) { return tan(x); }
79 SIMD_FORCE_INLINE SimdScalar SimdAcos(SimdScalar x) { return acos(x); }
80 SIMD_FORCE_INLINE SimdScalar SimdAsin(SimdScalar x) { return asin(x); }
81 SIMD_FORCE_INLINE SimdScalar SimdAtan(SimdScalar x) { return atan(x); }
82 SIMD_FORCE_INLINE SimdScalar SimdAtan2(SimdScalar x, SimdScalar y) { return atan2(x, y); }
83 SIMD_FORCE_INLINE SimdScalar SimdExp(SimdScalar x) { return exp(x); }
84 SIMD_FORCE_INLINE SimdScalar SimdLog(SimdScalar x) { return log(x); }
85 SIMD_FORCE_INLINE SimdScalar SimdPow(SimdScalar x,SimdScalar y) { return pow(x,y); }
86
87 #else
88                 
89 SIMD_FORCE_INLINE SimdScalar SimdSqrt(SimdScalar x) { return sqrtf(x); }
90 SIMD_FORCE_INLINE SimdScalar SimdFabs(SimdScalar x) { return fabsf(x); }
91 SIMD_FORCE_INLINE SimdScalar SimdCos(SimdScalar x) { return cosf(x); }
92 SIMD_FORCE_INLINE SimdScalar SimdSin(SimdScalar x) { return sinf(x); }
93 SIMD_FORCE_INLINE SimdScalar SimdTan(SimdScalar x) { return tanf(x); }
94 SIMD_FORCE_INLINE SimdScalar SimdAcos(SimdScalar x) { return acosf(x); }
95 SIMD_FORCE_INLINE SimdScalar SimdAsin(SimdScalar x) { return asinf(x); }
96 SIMD_FORCE_INLINE SimdScalar SimdAtan(SimdScalar x) { return atanf(x); }
97 SIMD_FORCE_INLINE SimdScalar SimdAtan2(SimdScalar x, SimdScalar y) { return atan2f(x, y); }
98 SIMD_FORCE_INLINE SimdScalar SimdExp(SimdScalar x) { return expf(x); }
99 SIMD_FORCE_INLINE SimdScalar SimdLog(SimdScalar x) { return logf(x); }
100 SIMD_FORCE_INLINE SimdScalar SimdPow(SimdScalar x,SimdScalar y) { return powf(x,y); }
101         
102 #endif
103
104
105 const SimdScalar  SIMD_2_PI         = 6.283185307179586232f;
106 const SimdScalar  SIMD_PI           = SIMD_2_PI * SimdScalar(0.5f);
107 const SimdScalar  SIMD_HALF_PI           = SIMD_2_PI * SimdScalar(0.25f);
108 const SimdScalar  SIMD_RADS_PER_DEG = SIMD_2_PI / SimdScalar(360.0f);
109 const SimdScalar  SIMD_DEGS_PER_RAD = SimdScalar(360.0f) / SIMD_2_PI;
110 const SimdScalar  SIMD_EPSILON      = FLT_EPSILON;
111 const SimdScalar  SIMD_INFINITY     = FLT_MAX;
112
113 SIMD_FORCE_INLINE bool      SimdFuzzyZero(SimdScalar x) { return SimdFabs(x) < SIMD_EPSILON; }
114
115 SIMD_FORCE_INLINE bool  SimdEqual(SimdScalar a, SimdScalar eps) {
116         return (((a) <= eps) && !((a) < -eps));
117 }
118 SIMD_FORCE_INLINE bool  SimdGreaterEqual (SimdScalar a, SimdScalar eps) {
119         return (!((a) <= eps));
120 }
121
122 /*SIMD_FORCE_INLINE SimdScalar SimdCos(SimdScalar x) { return cosf(x); }
123 SIMD_FORCE_INLINE SimdScalar SimdSin(SimdScalar x) { return sinf(x); }
124 SIMD_FORCE_INLINE SimdScalar SimdTan(SimdScalar x) { return tanf(x); }
125 SIMD_FORCE_INLINE SimdScalar SimdAcos(SimdScalar x) { return acosf(x); }
126 SIMD_FORCE_INLINE SimdScalar SimdAsin(SimdScalar x) { return asinf(x); }
127 SIMD_FORCE_INLINE SimdScalar SimdAtan(SimdScalar x) { return atanf(x); }
128 SIMD_FORCE_INLINE SimdScalar SimdAtan2(SimdScalar x, SimdScalar y) { return atan2f(x, y); }
129 */
130
131 SIMD_FORCE_INLINE int       SimdSign(SimdScalar x) {
132     return x < 0.0f ? -1 : x > 0.0f ? 1 : 0;
133 }
134
135 SIMD_FORCE_INLINE SimdScalar SimdRadians(SimdScalar x) { return x * SIMD_RADS_PER_DEG; }
136 SIMD_FORCE_INLINE SimdScalar SimdDegrees(SimdScalar x) { return x * SIMD_DEGS_PER_RAD; }
137
138
139
140 #endif //SIMD___SCALAR_H