RavEngine
Loading...
Searching...
No Matches
PxFPU.h
1// Redistribution and use in source and binary forms, with or without
2// modification, are permitted provided that the following conditions
3// are met:
4// * Redistributions of source code must retain the above copyright
5// notice, this list of conditions and the following disclaimer.
6// * Redistributions in binary form must reproduce the above copyright
7// notice, this list of conditions and the following disclaimer in the
8// documentation and/or other materials provided with the distribution.
9// * Neither the name of NVIDIA CORPORATION nor the names of its
10// contributors may be used to endorse or promote products derived
11// from this software without specific prior written permission.
12//
13// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24//
25// Copyright (c) 2008-2022 NVIDIA Corporation. All rights reserved.
26// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
27// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
28
29#ifndef PX_FPU_H
30#define PX_FPU_H
31
32#include "foundation/PxIntrinsics.h"
33#include "foundation/PxAssert.h"
34#include "foundation/PxFoundationConfig.h"
35
36#define PX_IR(x) ((PxU32&)(x)) // integer representation of a floating-point value.
37#define PX_SIR(x) ((PxI32&)(x)) // signed integer representation of a floating-point value.
38#define PX_FR(x) ((PxReal&)(x)) // floating-point representation of a integer value.
39
40#define PX_FPU_GUARD PxFPUGuard scopedFpGuard;
41#define PX_SIMD_GUARD PxSIMDGuard scopedFpGuard;
42#define PX_SIMD_GUARD_CNDT(x) PxSIMDGuard scopedFpGuard(x);
43
44#if !PX_DOXYGEN
45namespace physx
46{
47#endif
48// sets the default SDK state for scalar and SIMD units
49class PX_FOUNDATION_API PxFPUGuard
50{
51 public:
52 PxFPUGuard(); // set fpu control word for PhysX
53 ~PxFPUGuard(); // restore fpu control word
54 private:
55 PxU32 mControlWords[8];
56};
57
58// sets default SDK state for simd unit only, lighter weight than FPUGuard
60{
61 public:
62 PX_INLINE PxSIMDGuard(bool enable = true); // set simd control word for PhysX
63 PX_INLINE ~PxSIMDGuard(); // restore simd control word
64 private:
65#if !(PX_LINUX || PX_OSX) || (!PX_EMSCRIPTEN && PX_INTEL_FAMILY)
66 PxU32 mControlWord;
67 bool mEnabled;
68#endif
69};
70
74PX_FOUNDATION_API void PxEnableFPExceptions();
75
79PX_FOUNDATION_API void PxDisableFPExceptions();
80
81#if !PX_DOXYGEN
82} // namespace physx
83#endif
84
85#if PX_WINDOWS_FAMILY
86#include "foundation/windows/PxWindowsFPU.h"
87#elif (PX_LINUX && PX_SSE2) || PX_OSX
88#include "foundation/unix/PxUnixFPU.h"
89#else
90PX_INLINE physx::PxSIMDGuard::PxSIMDGuard(bool)
91{
92}
93PX_INLINE physx::PxSIMDGuard::~PxSIMDGuard()
94{
95}
96#endif
97
98#endif
99
Definition PxFPU.h:50
Definition PxFPU.h:60
#define PX_INLINE
Definition PxPreprocessor.h:320
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
PX_FOUNDATION_API void PxEnableFPExceptions()
Enables floating point exceptions for the scalar and SIMD unit.
Definition FdUnixFPU.cpp:82
PX_FOUNDATION_API void PxDisableFPExceptions()
Disables floating point exceptions for the scalar and SIMD unit.
Definition FdUnixFPU.cpp:99