diff options
| author | Robert Hrusecky <robert.hrusecky@utexas.edu> | 2020-10-06 14:22:26 -0500 |
|---|---|---|
| committer | Robert Hrusecky <robert.hrusecky@utexas.edu> | 2020-10-06 14:22:26 -0500 |
| commit | dd8e25bc4756b8bd01d283b5d7e7c5daa9a1af3f (patch) | |
| tree | 43a0e92a698d5c622edf406dfdd27037471a5e24 /src/utils.rs | |
| parent | 0c1b210109e6d4816dc54f2a6dc93e8d6beb5089 (diff) | |
| parent | 6b1cd9cd404bd1da6aec94527e58dcd483a50c67 (diff) | |
| download | rapier-dd8e25bc4756b8bd01d283b5d7e7c5daa9a1af3f.tar.gz rapier-dd8e25bc4756b8bd01d283b5d7e7c5daa9a1af3f.tar.bz2 rapier-dd8e25bc4756b8bd01d283b5d7e7c5daa9a1af3f.zip | |
Merge branch 'master' into infinite_fall_memory
Diffstat (limited to 'src/utils.rs')
| -rw-r--r-- | src/utils.rs | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/src/utils.rs b/src/utils.rs index 91ce41c..ecdd4fd 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -5,13 +5,15 @@ use crate::dynamics::RigidBodyHandle; use indexmap::IndexMap as HashMap; use na::{Matrix2, Matrix3, Matrix3x2, Point2, Point3, Scalar, SimdRealField, Vector2, Vector3}; use num::Zero; -#[cfg(feature = "simd-is-enabled")] use simba::simd::SimdValue; #[cfg(all(not(feature = "enhanced-determinism"), feature = "serde-serialize"))] use std::collections::HashMap; use std::ops::{Add, Mul}; -#[cfg(feature = "simd-is-enabled")] -use {crate::simd::SimdFloat, na::SimdPartialOrd, num::One}; +use { + crate::simd::{SimdBool, SimdFloat}, + na::SimdPartialOrd, + num::One, +}; // pub(crate) const SIN_10_DEGREES: f32 = 0.17364817766; // pub(crate) const COS_10_DEGREES: f32 = 0.98480775301; @@ -31,6 +33,16 @@ pub(crate) fn inv(val: f32) -> f32 { } } +/// Conditionally swaps each lanes of `a` with those of `b`. +/// +/// For each `i in [0..SIMD_WIDTH[`, if `do_swap.extract(i)` is `true` then +/// `a.extract(i)` is swapped with `b.extract(i)`. +pub fn simd_swap(do_swap: SimdBool, a: &mut SimdFloat, b: &mut SimdFloat) { + let _a = *a; + *a = b.select(do_swap, *a); + *b = _a.select(do_swap, *b); +} + /// Trait to copy the sign of each component of one scalar/vector/matrix to another. pub trait WSign<Rhs>: Sized { // See SIMD implementations of copy_sign there: https://stackoverflow.com/a/57872652 @@ -77,7 +89,6 @@ impl<N: Scalar + Copy + WSign<N>> WSign<Vector3<N>> for Vector3<N> { } } -#[cfg(feature = "simd-is-enabled")] impl WSign<SimdFloat> for SimdFloat { fn copy_sign_to(self, to: SimdFloat) -> SimdFloat { self.simd_copysign(to) @@ -102,7 +113,6 @@ impl WComponent for f32 { } } -#[cfg(feature = "simd-is-enabled")] impl WComponent for SimdFloat { type Element = f32; @@ -319,7 +329,6 @@ impl WDot<f32> for f32 { } } -#[cfg(feature = "simd-is-enabled")] impl WCrossMatrix for Vector3<SimdFloat> { type CrossMat = Matrix3<SimdFloat>; @@ -334,7 +343,6 @@ impl WCrossMatrix for Vector3<SimdFloat> { } } -#[cfg(feature = "simd-is-enabled")] impl WCrossMatrix for Vector2<SimdFloat> { type CrossMat = Vector2<SimdFloat>; @@ -344,7 +352,6 @@ impl WCrossMatrix for Vector2<SimdFloat> { } } -#[cfg(feature = "simd-is-enabled")] impl WCross<Vector3<SimdFloat>> for Vector3<SimdFloat> { type Result = Vector3<SimdFloat>; @@ -353,7 +360,6 @@ impl WCross<Vector3<SimdFloat>> for Vector3<SimdFloat> { } } -#[cfg(feature = "simd-is-enabled")] impl WCross<Vector2<SimdFloat>> for SimdFloat { type Result = Vector2<SimdFloat>; @@ -362,7 +368,6 @@ impl WCross<Vector2<SimdFloat>> for SimdFloat { } } -#[cfg(feature = "simd-is-enabled")] impl WCross<Vector2<SimdFloat>> for Vector2<SimdFloat> { type Result = SimdFloat; @@ -373,7 +378,6 @@ impl WCross<Vector2<SimdFloat>> for Vector2<SimdFloat> { } } -#[cfg(feature = "simd-is-enabled")] impl WDot<Vector3<SimdFloat>> for Vector3<SimdFloat> { type Result = SimdFloat; @@ -382,7 +386,6 @@ impl WDot<Vector3<SimdFloat>> for Vector3<SimdFloat> { } } -#[cfg(feature = "simd-is-enabled")] impl WDot<Vector2<SimdFloat>> for Vector2<SimdFloat> { type Result = SimdFloat; @@ -391,7 +394,6 @@ impl WDot<Vector2<SimdFloat>> for Vector2<SimdFloat> { } } -#[cfg(feature = "simd-is-enabled")] impl WDot<SimdFloat> for SimdFloat { type Result = SimdFloat; @@ -445,7 +447,6 @@ impl WAngularInertia<f32> for f32 { } } -#[cfg(feature = "simd-is-enabled")] impl WAngularInertia<SimdFloat> for SimdFloat { type AngVector = SimdFloat; type LinVector = Vector2<SimdFloat>; @@ -860,7 +861,6 @@ impl WAngularInertia<f32> for SdpMatrix3<f32> { } } -#[cfg(feature = "simd-is-enabled")] impl WAngularInertia<SimdFloat> for SdpMatrix3<SimdFloat> { type AngVector = Vector3<SimdFloat>; type LinVector = Vector3<SimdFloat>; |
