about summary refs log tree commit diff
path: root/tests/ui/simd/generics.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/simd/generics.rs')
-rw-r--r--tests/ui/simd/generics.rs60
1 files changed, 15 insertions, 45 deletions
diff --git a/tests/ui/simd/generics.rs b/tests/ui/simd/generics.rs
index 1ae08fef7cd..54e76f7bc5d 100644
--- a/tests/ui/simd/generics.rs
+++ b/tests/ui/simd/generics.rs
@@ -2,24 +2,18 @@
 #![allow(non_camel_case_types)]
 #![feature(repr_simd, core_intrinsics)]
 
+#[path = "../../auxiliary/minisimd.rs"]
+mod minisimd;
+use minisimd::*;
+
 use std::intrinsics::simd::simd_add;
 use std::ops;
 
-#[repr(simd)]
-#[derive(Copy, Clone)]
-struct f32x4([f32; 4]);
-
-#[repr(simd)]
-#[derive(Copy, Clone)]
-struct A<const N: usize>([f32; N]);
+type A<const N: usize> = Simd<f32, N>;
 
-#[repr(simd)]
-#[derive(Copy, Clone)]
-struct B<T>([T; 4]);
+type B<T> = Simd<T, 4>;
 
-#[repr(simd)]
-#[derive(Copy, Clone)]
-struct C<T, const N: usize>([T; N]);
+type C<T, const N: usize> = Simd<T, N>;
 
 fn add<T: ops::Add<Output = T>>(lhs: T, rhs: T) -> T {
     lhs + rhs
@@ -33,48 +27,24 @@ impl ops::Add for f32x4 {
     }
 }
 
-impl ops::Add for A<4> {
-    type Output = Self;
-
-    fn add(self, rhs: Self) -> Self {
-        unsafe { simd_add(self, rhs) }
-    }
-}
-
-impl ops::Add for B<f32> {
-    type Output = Self;
-
-    fn add(self, rhs: Self) -> Self {
-        unsafe { simd_add(self, rhs) }
-    }
-}
-
-impl ops::Add for C<f32, 4> {
-    type Output = Self;
-
-    fn add(self, rhs: Self) -> Self {
-        unsafe { simd_add(self, rhs) }
-    }
-}
-
 pub fn main() {
     let x = [1.0f32, 2.0f32, 3.0f32, 4.0f32];
     let y = [2.0f32, 4.0f32, 6.0f32, 8.0f32];
 
     // lame-o
-    let a = f32x4([1.0f32, 2.0f32, 3.0f32, 4.0f32]);
-    let f32x4([a0, a1, a2, a3]) = add(a, a);
+    let a = f32x4::from_array([1.0f32, 2.0f32, 3.0f32, 4.0f32]);
+    let [a0, a1, a2, a3] = add(a, a).into_array();
     assert_eq!(a0, 2.0f32);
     assert_eq!(a1, 4.0f32);
     assert_eq!(a2, 6.0f32);
     assert_eq!(a3, 8.0f32);
 
-    let a = A(x);
-    assert_eq!(add(a, a).0, y);
+    let a = A::from_array(x);
+    assert_eq!(add(a, a).into_array(), y);
 
-    let b = B(x);
-    assert_eq!(add(b, b).0, y);
+    let b = B::from_array(x);
+    assert_eq!(add(b, b).into_array(), y);
 
-    let c = C(x);
-    assert_eq!(add(c, c).0, y);
+    let c = C::from_array(x);
+    assert_eq!(add(c, c).into_array(), y);
 }