18 #ifdef BT_MANAGED_CODE 29 #define BT_BULLET_VERSION 279 36 #if defined(DEBUG) || defined(_DEBUG) 42 #if defined(__MINGW32__) || defined(__CYGWIN__) || (defined(_MSC_VER) && _MSC_VER < 1300) 44 #define SIMD_FORCE_INLINE inline 45 #define ATTRIBUTE_ALIGNED16(a) a 46 #define ATTRIBUTE_ALIGNED64(a) a 47 #define ATTRIBUTE_ALIGNED128(a) a 50 #pragma warning(disable : 4324) // disable padding warning 55 #define SIMD_FORCE_INLINE __forceinline 56 #define ATTRIBUTE_ALIGNED16(a) __declspec(align(16)) a 57 #define ATTRIBUTE_ALIGNED64(a) __declspec(align(64)) a 58 #define ATTRIBUTE_ALIGNED128(a) __declspec(align(128)) a 62 #include <ppcintrinsics.h> 63 #define BT_HAVE_NATIVE_FSEL 64 #define btFsel(a, b, c) __fsel((a), (b), (c)) 67 #if (defined(_WIN32) && (_MSC_VER) && _MSC_VER >= 1400) && (!defined(BT_USE_DOUBLE_PRECISION)) 69 #include <emmintrin.h> 78 #define btAssert assert 83 #define btFullAssert(x) 85 #define btLikely(_c) _c 86 #define btUnlikely(_c) _c 90 #if defined(__CELLOS_LV2__) 91 #define SIMD_FORCE_INLINE inline __attribute__((always_inline)) 92 #define ATTRIBUTE_ALIGNED16(a) a __attribute__((aligned(16))) 93 #define ATTRIBUTE_ALIGNED64(a) a __attribute__((aligned(64))) 94 #define ATTRIBUTE_ALIGNED128(a) a __attribute__((aligned(128))) 100 #include <spu_printf.h> 101 #define printf spu_printf 102 #define btAssert(x) \ 105 printf("Assert " __FILE__ ":%u (" #x ")\n", __LINE__); \ 110 #define btAssert assert 117 #define btFullAssert(x) 119 #define btLikely(_c) _c 120 #define btUnlikely(_c) _c 126 #define SIMD_FORCE_INLINE __inline 127 #define ATTRIBUTE_ALIGNED16(a) a __attribute__((aligned(16))) 128 #define ATTRIBUTE_ALIGNED64(a) a __attribute__((aligned(64))) 129 #define ATTRIBUTE_ALIGNED128(a) a __attribute__((aligned(128))) 134 #define btAssert assert 139 #define btFullAssert(x) 141 #define btLikely(_c) __builtin_expect((_c), 1) 142 #define btUnlikely(_c) __builtin_expect((_c), 0) 147 #if (defined(__APPLE__) && defined(__i386__) && (!defined(BT_USE_DOUBLE_PRECISION))) 149 #include <emmintrin.h> 151 #define SIMD_FORCE_INLINE inline 152 #define ATTRIBUTE_ALIGNED16(a) a __attribute__((aligned(16))) 154 #define ATTRIBUTE_ALIGNED64(a) a __attribute__((aligned(64))) 155 #define ATTRIBUTE_ALIGNED128(a) a __attribute__((aligned(128))) 160 #if defined(DEBUG) || defined(_DEBUG) 161 #define btAssert assert 167 #define btFullAssert(x) 168 #define btLikely(_c) _c 169 #define btUnlikely(_c) _c 173 #define SIMD_FORCE_INLINE inline 174 #define ATTRIBUTE_ALIGNED16(a) a 179 #define ATTRIBUTE_ALIGNED64(a) a 180 #define ATTRIBUTE_ALIGNED128(a) a 185 #if defined(DEBUG) || defined(_DEBUG) 186 #define btAssert assert 192 #define btFullAssert(x) 193 #define btLikely(_c) _c 194 #define btUnlikely(_c) _c 199 #endif //__CELLOS_LV2__ 203 #if defined(BT_USE_DOUBLE_PRECISION) 206 #define BT_LARGE_FLOAT 1e30 210 #define BT_LARGE_FLOAT 1e18f 213 #define BT_DECLARE_ALIGNED_ALLOCATOR() \ 214 SIMD_FORCE_INLINE void* operator new(size_t sizeInBytes) { return btAlignedAlloc(sizeInBytes, 16); } \ 215 SIMD_FORCE_INLINE void operator delete(void* ptr) { btAlignedFree(ptr); } \ 216 SIMD_FORCE_INLINE void* operator new(size_t, void* ptr) { return ptr; } \ 217 SIMD_FORCE_INLINE void operator delete(void*, void*) {} \ 218 SIMD_FORCE_INLINE void* operator new[](size_t sizeInBytes) { return btAlignedAlloc(sizeInBytes, 16); } \ 219 SIMD_FORCE_INLINE void operator delete[](void* ptr) { btAlignedFree(ptr); } \ 220 SIMD_FORCE_INLINE void* operator new[](size_t, void* ptr) { return ptr; } \ 221 SIMD_FORCE_INLINE void operator delete[](void*, void*) {} 223 #if defined(BT_USE_DOUBLE_PRECISION) || defined(BT_FORCE_DOUBLE_FUNCTIONS) 260 #ifdef USE_APPROXIMATION 262 unsigned long* tfptr = ((
unsigned long*)&tempf) + 1;
265 *tfptr = (0xbfcdd90a - *tfptr) >> 1;
307 #define SIMD_2_PI btScalar(6.283185307179586232) 308 #define SIMD_PI (SIMD_2_PI * btScalar(0.5)) 309 #define SIMD_HALF_PI (SIMD_2_PI * btScalar(0.25)) 310 #define SIMD_RADS_PER_DEG (SIMD_2_PI / btScalar(360.0)) 311 #define SIMD_DEGS_PER_RAD (btScalar(360.0) / SIMD_2_PI) 312 #define SIMDSQRT12 btScalar(0.7071067811865475244008443621048490) 314 #define btRecipSqrt(x) ((btScalar)(btScalar(1.0) / btSqrt(btScalar(x)))) 316 #ifdef BT_USE_DOUBLE_PRECISION 317 #define SIMD_EPSILON DBL_EPSILON 318 #define SIMD_INFINITY DBL_MAX 320 #define SIMD_EPSILON FLT_EPSILON 321 #define SIMD_INFINITY FLT_MAX 331 btScalar r = (x - abs_y) / (x + abs_y);
332 angle = coeff_1 - coeff_1 * r;
335 btScalar r = (x + abs_y) / (abs_y - x);
336 angle = coeff_2 - coeff_1 * r;
345 return (((a) <= eps) && !((a) < -eps));
349 return (!((a) <= eps));
360 #define BT_DECLARE_HANDLE(name) \ 361 typedef struct name##__ { \ 368 return a >= 0 ? b : c;
371 #define btFsels(a, b, c) (btScalar) btFsel(a, b, c) 376 const char* p = (
const char*)&i;
391 unsigned testNz = (unsigned)(((int32_t)condition | -(int32_t)condition) >> 31);
392 unsigned testEqz = ~testNz;
393 return ((valueIfConditionNonZero & testNz) | (valueIfConditionZero & testEqz));
397 unsigned testNz = (unsigned)(((int32_t)condition | -(int32_t)condition) >> 31);
398 unsigned testEqz = ~testNz;
399 return static_cast<int32_t
>((valueIfConditionNonZero & testNz) | (valueIfConditionZero & testEqz));
403 #ifdef BT_HAVE_NATIVE_FSEL 404 return (
float)
btFsel((
btScalar)condition -
btScalar(1.0f), valueIfConditionNonZero, valueIfConditionZero);
406 return (condition != 0) ? valueIfConditionNonZero : valueIfConditionZero;
410 template <
typename T>
421 return (((val & 0xff000000) >> 24) | ((val & 0x00ff0000) >> 8) | ((val & 0x0000ff00) << 8) | ((val & 0x000000ff) << 24));
426 return static_cast<unsigned short>(((val & 0xff00) >> 8) | ((val & 0x00ff) << 8));
448 unsigned char* dst = (
unsigned char*)&a;
449 unsigned char* src = (
unsigned char*)&d;
462 unsigned char* src = (
unsigned char*)&a;
463 unsigned char* dst = (
unsigned char*)&d;
476 unsigned char* src = (
unsigned char*)&d;
492 unsigned char* dst = (
unsigned char*)&d;
510 if (angleInRadians < -
SIMD_PI) {
513 else if (angleInRadians >
SIMD_PI) {
517 return angleInRadians;
SIMD_FORCE_INLINE float btUnswapEndianFloat(uint32_t a)
Definition: btScalar.h:459
SIMD_FORCE_INLINE btScalar btRadians(btScalar x)
Definition: btScalar.h:357
#define BT_BULLET_VERSION
Definition: btScalar.h:29
SIMD_FORCE_INLINE btScalar btExp(btScalar x)
Definition: btScalar.h:300
SIMD_FORCE_INLINE void btSwapEndianDouble(double d, unsigned char *dst)
Definition: btScalar.h:474
#define SIMD_EPSILON
Definition: btScalar.h:320
SIMD_FORCE_INLINE btScalar btAsin(btScalar x)
Definition: btScalar.h:290
SIMD_FORCE_INLINE const btScalar & x() const
Return the x value.
Definition: btVector3.h:275
int32_t getObjectType() const
Definition: btScalar.h:528
SIMD_FORCE_INLINE bool btMachineIsLittleEndian()
Definition: btScalar.h:373
btTypedObject(int32_t objectType)
Definition: btScalar.h:523
SIMD_FORCE_INLINE btScalar btAtan2Fast(btScalar y, btScalar x)
Definition: btScalar.h:324
SIMD_FORCE_INLINE btScalar btAcos(btScalar x)
Definition: btScalar.h:282
SIMD_FORCE_INLINE double btUnswapEndianDouble(const unsigned char *src)
Definition: btScalar.h:489
SIMD_FORCE_INLINE btScalar btAtan(btScalar x)
Definition: btScalar.h:298
SIMD_FORCE_INLINE bool btFuzzyZero(btScalar x)
Definition: btScalar.h:341
SIMD_FORCE_INLINE unsigned btSelect(unsigned condition, unsigned valueIfConditionNonZero, unsigned valueIfConditionZero)
Definition: btScalar.h:385
SIMD_FORCE_INLINE int32_t btIsNegative(btScalar x)
Definition: btScalar.h:352
SIMD_FORCE_INLINE btScalar btFabs(btScalar x)
Definition: btScalar.h:278
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:208
SIMD_FORCE_INLINE btScalar btAtan2(btScalar x, btScalar y)
Definition: btScalar.h:299
rudimentary class to provide type info
Definition: btScalar.h:522
SIMD_FORCE_INLINE btScalar btCos(btScalar x)
Definition: btScalar.h:279
SIMD_FORCE_INLINE const btScalar & y() const
Return the y value.
Definition: btVector3.h:277
int32_t btGetVersion()
Definition: btScalar.h:31
SIMD_FORCE_INLINE btScalar btFmod(btScalar x, btScalar y)
Definition: btScalar.h:303
SIMD_FORCE_INLINE btScalar btNormalizeAngle(btScalar angleInRadians)
Definition: btScalar.h:507
SIMD_FORCE_INLINE btScalar btDegrees(btScalar x)
Definition: btScalar.h:358
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
Definition: btVector3.h:177
SIMD_FORCE_INLINE btScalar btSin(btScalar x)
Definition: btScalar.h:280
int32_t m_objectType
Definition: btScalar.h:527
#define SIMD_FORCE_INLINE
Definition: btScalar.h:173
SIMD_FORCE_INLINE bool btGreaterEqual(btScalar a, btScalar eps)
Definition: btScalar.h:347
SIMD_FORCE_INLINE void btSwap(T &a, T &b)
Definition: btScalar.h:411
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
Definition: btVector3.h:279
#define SIMD_RADS_PER_DEG
Definition: btScalar.h:310
#define SIMD_PI
Definition: btScalar.h:308
SIMD_FORCE_INLINE btScalar btLog(btScalar x)
Definition: btScalar.h:301
SIMD_FORCE_INLINE btScalar btPow(btScalar x, btScalar y)
Definition: btScalar.h:302
SIMD_FORCE_INLINE btScalar btSqrt(btScalar y)
Definition: btScalar.h:258
SIMD_FORCE_INLINE uint32_t btSwapEndianFloat(float d)
btSwapFloat uses using char pointers to swap the endianness
Definition: btScalar.h:445
SIMD_FORCE_INLINE btScalar btFsel(btScalar a, btScalar b, btScalar c)
Definition: btScalar.h:366
#define SIMD_2_PI
Definition: btScalar.h:307
SIMD_FORCE_INLINE bool btEqual(btScalar a, btScalar eps)
Definition: btScalar.h:343
SIMD_FORCE_INLINE unsigned btSwapEndian(unsigned val)
Definition: btScalar.h:419
SIMD_FORCE_INLINE btScalar btTan(btScalar x)
Definition: btScalar.h:281
#define SIMD_DEGS_PER_RAD
Definition: btScalar.h:311