Added some useful shuffle ops to Float4.
This commit is contained in:
parent
c6a8f93097
commit
cd50e0dd11
|
@ -224,6 +224,46 @@ mod x86_64_sse {
|
||||||
self.get_n(3)
|
self.get_n(3)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns a Float4 with all elements set to the value
|
||||||
|
/// of element 0.
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn all_0(&self) -> Float4 {
|
||||||
|
use std::arch::x86_64::_mm_shuffle_ps;
|
||||||
|
Float4 {
|
||||||
|
data: unsafe { _mm_shuffle_ps(self.data, self.data, 0b00_00_00_00) },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a Float4 with all elements set to the value
|
||||||
|
/// of element 1.
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn all_1(&self) -> Float4 {
|
||||||
|
use std::arch::x86_64::_mm_shuffle_ps;
|
||||||
|
Float4 {
|
||||||
|
data: unsafe { _mm_shuffle_ps(self.data, self.data, 0b01_01_01_01) },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a Float4 with all elements set to the value
|
||||||
|
/// of element 2.
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn all_2(&self) -> Float4 {
|
||||||
|
use std::arch::x86_64::_mm_shuffle_ps;
|
||||||
|
Float4 {
|
||||||
|
data: unsafe { _mm_shuffle_ps(self.data, self.data, 0b10_10_10_10) },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a Float4 with all elements set to the value
|
||||||
|
/// of element 3.
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn all_3(&self) -> Float4 {
|
||||||
|
use std::arch::x86_64::_mm_shuffle_ps;
|
||||||
|
Float4 {
|
||||||
|
data: unsafe { _mm_shuffle_ps(self.data, self.data, 0b11_11_11_11) },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the square roots of all elements.
|
/// Returns the square roots of all elements.
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn sqrt(&self) -> Float4 {
|
pub fn sqrt(&self) -> Float4 {
|
||||||
|
@ -894,6 +934,42 @@ mod fallback {
|
||||||
self.get_n(3)
|
self.get_n(3)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns a Float4 with all elements set to the value
|
||||||
|
/// of element 0.
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn all_0(&self) -> Float4 {
|
||||||
|
Float4 {
|
||||||
|
data: [self.data[0], self.data[0], self.data[0], self.data[0]],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a Float4 with all elements set to the value
|
||||||
|
/// of element 1.
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn all_1(&self) -> Float4 {
|
||||||
|
Float4 {
|
||||||
|
data: [self.data[1], self.data[1], self.data[1], self.data[1]],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a Float4 with all elements set to the value
|
||||||
|
/// of element 2.
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn all_2(&self) -> Float4 {
|
||||||
|
Float4 {
|
||||||
|
data: [self.data[2], self.data[2], self.data[2], self.data[2]],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a Float4 with all elements set to the value
|
||||||
|
/// of element 3.
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn all_3(&self) -> Float4 {
|
||||||
|
Float4 {
|
||||||
|
data: [self.data[3], self.data[3], self.data[3], self.data[3]],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the square roots of all elements.
|
/// Returns the square roots of all elements.
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn sqrt(&self) -> Float4 {
|
pub fn sqrt(&self) -> Float4 {
|
||||||
|
@ -1313,6 +1389,16 @@ mod tests {
|
||||||
assert_eq!(f.get_3(), 8.0);
|
assert_eq!(f.get_3(), 8.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn all() {
|
||||||
|
let f = Float4::new(1.0, 2.0, 3.0, 4.0);
|
||||||
|
|
||||||
|
assert_eq!(f.all_0(), Float4::splat(1.0));
|
||||||
|
assert_eq!(f.all_1(), Float4::splat(2.0));
|
||||||
|
assert_eq!(f.all_2(), Float4::splat(3.0));
|
||||||
|
assert_eq!(f.all_3(), Float4::splat(4.0));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn partial_eq_1() {
|
fn partial_eq_1() {
|
||||||
let f1 = Float4::new(1.0, 2.0, 3.0, 4.0);
|
let f1 = Float4::new(1.0, 2.0, 3.0, 4.0);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user