about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCaleb Zulawski <caleb.zulawski@gmail.com>2020-09-23 10:42:12 -0400
committerCaleb Zulawski <caleb.zulawski@gmail.com>2020-09-23 10:42:12 -0400
commit872e8f62d6e776436cb830f3178beb4a853e7df8 (patch)
tree23ea531f7a6f32f695c8abadb16106e35fae283a
parent543bcd37e91afc1271befde3a33d6a73abc204d4 (diff)
downloadrust-872e8f62d6e776436cb830f3178beb4a853e7df8.tar.gz
rust-872e8f62d6e776436cb830f3178beb4a853e7df8.zip
Simplify transmutes
-rw-r--r--crates/core_simd/src/macros.rs37
-rw-r--r--crates/core_simd/src/vectors_f32.rs22
-rw-r--r--crates/core_simd/src/vectors_f64.rs22
-rw-r--r--crates/core_simd/src/vectors_i128.rs15
-rw-r--r--crates/core_simd/src/vectors_i16.rs22
-rw-r--r--crates/core_simd/src/vectors_i32.rs22
-rw-r--r--crates/core_simd/src/vectors_i64.rs22
-rw-r--r--crates/core_simd/src/vectors_i8.rs22
-rw-r--r--crates/core_simd/src/vectors_isize.rs42
-rw-r--r--crates/core_simd/src/vectors_u128.rs15
-rw-r--r--crates/core_simd/src/vectors_u16.rs22
-rw-r--r--crates/core_simd/src/vectors_u32.rs22
-rw-r--r--crates/core_simd/src/vectors_u64.rs22
-rw-r--r--crates/core_simd/src/vectors_u8.rs22
-rw-r--r--crates/core_simd/src/vectors_usize.rs42
15 files changed, 71 insertions, 300 deletions
diff --git a/crates/core_simd/src/macros.rs b/crates/core_simd/src/macros.rs
index 91c1071a2ee..5a50b1a48ec 100644
--- a/crates/core_simd/src/macros.rs
+++ b/crates/core_simd/src/macros.rs
@@ -1,29 +1,25 @@
-macro_rules! from_aligned {
-    { unsafe $from:ty => $to:ty } => {
+macro_rules! from_transmute {
+    { unsafe $a:ty => $b:ty } => {
+        from_transmute!{ @impl $a => $b }
+        from_transmute!{ @impl $b => $a }
+    };
+    { @impl $from:ty => $to:ty } => {
         impl core::convert::From<$from> for $to {
             #[inline]
             fn from(value: $from) -> $to {
-                assert_eq!(core::mem::size_of::<$from>(), core::mem::size_of::<$to>());
-                assert!(core::mem::align_of::<$from>() >= core::mem::align_of::<$to>());
                 unsafe { core::mem::transmute(value) }
             }
         }
     };
-    { unsafe $a:ty |bidirectional| $b:ty } => {
-        from_aligned!{ unsafe $a => $b }
-        from_aligned!{ unsafe $b => $a }
-    }
 }
 
-macro_rules! from_unaligned {
-    { unsafe $from:ty => $to:ty } => {
-        impl core::convert::From<$from> for $to {
-            #[inline]
-            fn from(value: $from) -> $to {
-                assert_eq!(core::mem::size_of::<$from>(), core::mem::size_of::<$to>());
-                unsafe { (&value as *const $from as *const $to).read_unaligned() }
-            }
-        }
+macro_rules! from_transmute_x86 {
+    { unsafe $generic:ty => $intel:ident } => {
+        #[cfg(target_arch = "x86")]
+        from_transmute! { unsafe $generic => core::arch::x86::$intel }
+
+        #[cfg(target_arch = "x86_64")]
+        from_transmute! { unsafe $generic => core::arch::x86_64::$intel }
     }
 }
 
@@ -61,11 +57,8 @@ macro_rules! define_type {
             }
         }
 
-        // vector to array
-        from_aligned! { unsafe $name => [$type; $lanes] }
-
-        // array to vector
-        from_unaligned! { unsafe [$type; $lanes] => $name }
+        // vector/array conversion
+        from_transmute! { unsafe $name => [$type; $lanes] }
 
         // splat
         impl From<$type> for $name {
diff --git a/crates/core_simd/src/vectors_f32.rs b/crates/core_simd/src/vectors_f32.rs
index fe24ec6b727..3b38b26d631 100644
--- a/crates/core_simd/src/vectors_f32.rs
+++ b/crates/core_simd/src/vectors_f32.rs
@@ -18,22 +18,6 @@ define_type! {
     struct f32x16([f32; 16]);
 }
 
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe f32x4 |bidirectional| core::arch::x86::__m128 }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe f32x4 |bidirectional| core::arch::x86_64::__m128 }
-
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe f32x8 |bidirectional| core::arch::x86::__m256 }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe f32x8 |bidirectional| core::arch::x86_64::__m256 }
-
-/*
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe f32x16 |bidirectional| core::arch::x86::__m512 }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe f32x16 |bidirectional| core::arch::x86_64::__m512 }
-*/
+from_transmute_x86! { unsafe f32x4 => __m128 }
+from_transmute_x86! { unsafe f32x8 => __m256 }
+//from_transmute_x86! { unsafe f32x16 => __m512 }
diff --git a/crates/core_simd/src/vectors_f64.rs b/crates/core_simd/src/vectors_f64.rs
index 8934cec0517..f627fffd46b 100644
--- a/crates/core_simd/src/vectors_f64.rs
+++ b/crates/core_simd/src/vectors_f64.rs
@@ -13,22 +13,6 @@ define_type! {
     struct f64x8([f64; 8]);
 }
 
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe f64x2 |bidirectional| core::arch::x86::__m128d }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe f64x2 |bidirectional| core::arch::x86_64::__m128d }
-
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe f64x4 |bidirectional| core::arch::x86::__m256d }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe f64x4 |bidirectional| core::arch::x86_64::__m256d }
-
-/*
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe f64x8 |bidirectional| core::arch::x86::__m512d }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe f64x8 |bidirectional| core::arch::x86_64::__m512d }
-*/
+from_transmute_x86! { unsafe f64x2 => __m128d }
+from_transmute_x86! { unsafe f64x4 => __m256d }
+//from_transmute_x86! { unsafe f64x8 => __m512d }
diff --git a/crates/core_simd/src/vectors_i128.rs b/crates/core_simd/src/vectors_i128.rs
index 1cdd3c91211..b4f30f845fd 100644
--- a/crates/core_simd/src/vectors_i128.rs
+++ b/crates/core_simd/src/vectors_i128.rs
@@ -8,16 +8,5 @@ define_type! {
     struct i128x4([i128; 4]);
 }
 
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe i128x2 |bidirectional| core::arch::x86::__m256i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe i128x2 |bidirectional| core::arch::x86_64::__m256i }
-
-/*
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe i128x4 |bidirectional| core::arch::x86::__m512i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe i128x4 |bidirectional| core::arch::x86_64::__m512i }
-*/
+from_transmute_x86! { unsafe i128x2 => __m256i }
+//from_transmute_x86! { unsafe i128x4 => __m512i }
diff --git a/crates/core_simd/src/vectors_i16.rs b/crates/core_simd/src/vectors_i16.rs
index 724fe7efd1a..a87fa8c41cd 100644
--- a/crates/core_simd/src/vectors_i16.rs
+++ b/crates/core_simd/src/vectors_i16.rs
@@ -23,22 +23,6 @@ define_type! {
     struct i16x32([i16; 32]);
 }
 
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe i16x8 |bidirectional| core::arch::x86::__m128i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe i16x8 |bidirectional| core::arch::x86_64::__m128i }
-
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe i16x16 |bidirectional| core::arch::x86::__m256i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe i16x16 |bidirectional| core::arch::x86_64::__m256i }
-
-/*
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u8x32 |bidirectional| core::arch::x86::__m512i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u8x32 |bidirectional| core::arch::x86_64::__m512i }
-*/
+from_transmute_x86! { unsafe i16x8 => __m128i }
+from_transmute_x86! { unsafe i16x16 => __m256i }
+//from_transmute_x86! { unsafe i16x32 => __m512i }
diff --git a/crates/core_simd/src/vectors_i32.rs b/crates/core_simd/src/vectors_i32.rs
index c3af621ae8a..13c9299b7c6 100644
--- a/crates/core_simd/src/vectors_i32.rs
+++ b/crates/core_simd/src/vectors_i32.rs
@@ -18,22 +18,6 @@ define_type! {
     struct i32x16([i32; 16]);
 }
 
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe i32x4 |bidirectional| core::arch::x86::__m128i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe i32x4 |bidirectional| core::arch::x86_64::__m128i }
-
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe i32x8 |bidirectional| core::arch::x86::__m256i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe i32x8 |bidirectional| core::arch::x86_64::__m256i }
-
-/*
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u32x16 |bidirectional| core::arch::x86::__m512i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u32x16 |bidirectional| core::arch::x86_64::__m512i }
-*/
+from_transmute_x86! { unsafe i32x4 => __m128i }
+from_transmute_x86! { unsafe i32x8 => __m256i }
+//from_transmute_x86! { unsafe i32x16 => __m512i }
diff --git a/crates/core_simd/src/vectors_i64.rs b/crates/core_simd/src/vectors_i64.rs
index 8c6c9d940b1..8d86501a496 100644
--- a/crates/core_simd/src/vectors_i64.rs
+++ b/crates/core_simd/src/vectors_i64.rs
@@ -13,22 +13,6 @@ define_type! {
     struct i64x8([i64; 8]);
 }
 
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe i64x2 |bidirectional| core::arch::x86::__m128i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe i64x2 |bidirectional| core::arch::x86_64::__m128i }
-
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe i64x4 |bidirectional| core::arch::x86::__m256i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe i64x4 |bidirectional| core::arch::x86_64::__m256i }
-
-/*
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe i64x8 |bidirectional| core::arch::x86::__m512i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe i64x8 |bidirectional| core::arch::x86_64::__m512i }
-*/
+from_transmute_x86! { unsafe i64x2 => __m128i }
+from_transmute_x86! { unsafe i64x4 => __m256i }
+//from_transmute_x86! { unsafe i64x8 => __m512i }
diff --git a/crates/core_simd/src/vectors_i8.rs b/crates/core_simd/src/vectors_i8.rs
index 340025972d7..f0d5ad55212 100644
--- a/crates/core_simd/src/vectors_i8.rs
+++ b/crates/core_simd/src/vectors_i8.rs
@@ -28,22 +28,6 @@ define_type! {
     struct i8x64([i8; 64]);
 }
 
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe i8x16 |bidirectional| core::arch::x86::__m128i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe i8x16 |bidirectional| core::arch::x86_64::__m128i }
-
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe i8x32 |bidirectional| core::arch::x86::__m256i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe i8x32 |bidirectional| core::arch::x86_64::__m256i }
-
-/*
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u8x64 |bidirectional| core::arch::x86::__m512i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u8x64 |bidirectional| core::arch::x86_64::__m512i }
-*/
+from_transmute_x86! { unsafe i8x16 => __m128i }
+from_transmute_x86! { unsafe i8x32 => __m256i }
+//from_transmute_x86! { unsafe i8x64 => __m512i }
diff --git a/crates/core_simd/src/vectors_isize.rs b/crates/core_simd/src/vectors_isize.rs
index 60f4aad2066..2028d1ecc71 100644
--- a/crates/core_simd/src/vectors_isize.rs
+++ b/crates/core_simd/src/vectors_isize.rs
@@ -13,34 +13,14 @@ define_type! {
     struct isizex8([isize; 8]);
 }
 
-#[cfg(all(target_arch = "x86", target_pointer_width = "32"))]
-from_aligned! { unsafe isizex4 |bidirectional| core::arch::x86::__m128i }
-
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
-from_aligned! { unsafe isizex4 |bidirectional| core::arch::x86_64::__m128i }
-
-#[cfg(all(target_arch = "x86", target_pointer_width = "32"))]
-from_aligned! { unsafe isizex8 |bidirectional| core::arch::x86::__m256i }
-
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
-from_aligned! { unsafe isizex8 |bidirectional| core::arch::x86_64::__m256i }
-
-#[cfg(all(target_arch = "x86", target_pointer_width = "64"))]
-from_aligned! { unsafe isizex2 |bidirectional| core::arch::x86::__m128i }
-
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
-from_aligned! { unsafe isizex2 |bidirectional| core::arch::x86_64::__m128i }
-
-#[cfg(all(target_arch = "x86", target_pointer_width = "64"))]
-from_aligned! { unsafe isizex4 |bidirectional| core::arch::x86::__m256i }
-
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
-from_aligned! { unsafe isizex4 |bidirectional| core::arch::x86_64::__m256i }
-
-/*
-#[cfg(all(target_arch = "x86", target_pointer_width = "64"))]
-from_aligned! { unsafe isizex8 |bidirectional| core::arch::x86::__m512i }
-
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
-from_aligned! { unsafe isizex8 |bidirectional| core::arch::x86_64::__m512i }
-*/
+#[cfg(target_pointer_width = "32")]
+from_transmute_x86! { unsafe isizex4 => __m128i }
+#[cfg(target_pointer_width = "32")]
+from_transmute_x86! { unsafe isizex8 => __m256i }
+
+#[cfg(target_pointer_width = "64")]
+from_transmute_x86! { unsafe isizex2 => __m128i }
+#[cfg(target_pointer_width = "64")]
+from_transmute_x86! { unsafe isizex4 => __m256i }
+//#[cfg(target_pointer_width = "64")]
+//from_transmute_x86! { unsafe isizex8 => __m512i }
diff --git a/crates/core_simd/src/vectors_u128.rs b/crates/core_simd/src/vectors_u128.rs
index 01a1a309ffa..4b47fb2fa2e 100644
--- a/crates/core_simd/src/vectors_u128.rs
+++ b/crates/core_simd/src/vectors_u128.rs
@@ -8,16 +8,5 @@ define_type! {
     struct u128x4([u128; 4]);
 }
 
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u128x2 |bidirectional| core::arch::x86::__m256i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u128x2 |bidirectional| core::arch::x86_64::__m256i }
-
-/*
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u128x4 |bidirectional| core::arch::x86::__m512i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u128x4 |bidirectional| core::arch::x86_64::__m512i }
-*/
+from_transmute_x86! { unsafe u128x2 => __m256i }
+//from_transmute_x86! { unsafe u128x4 => __m512i }
diff --git a/crates/core_simd/src/vectors_u16.rs b/crates/core_simd/src/vectors_u16.rs
index 00ae479c6db..f637d2fe9f2 100644
--- a/crates/core_simd/src/vectors_u16.rs
+++ b/crates/core_simd/src/vectors_u16.rs
@@ -23,22 +23,6 @@ define_type! {
     struct u16x32([u16; 32]);
 }
 
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u16x8 |bidirectional| core::arch::x86::__m128i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u16x8 |bidirectional| core::arch::x86_64::__m128i }
-
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u16x16 |bidirectional| core::arch::x86::__m256i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u16x16 |bidirectional| core::arch::x86_64::__m256i }
-
-/*
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u16x32 |bidirectional| core::arch::x86::__m512i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u16x32 |bidirectional| core::arch::x86_64::__m512i }
-*/
+from_transmute_x86! { unsafe u16x8 => __m128i }
+from_transmute_x86! { unsafe u16x16 => __m256i }
+//from_transmute_x86! { unsafe u16x32 => __m512i }
diff --git a/crates/core_simd/src/vectors_u32.rs b/crates/core_simd/src/vectors_u32.rs
index c45db3634c4..d2f5d7d241c 100644
--- a/crates/core_simd/src/vectors_u32.rs
+++ b/crates/core_simd/src/vectors_u32.rs
@@ -18,22 +18,6 @@ define_type! {
     struct u32x16([u32; 16]);
 }
 
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u32x4 |bidirectional| core::arch::x86::__m128i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u32x4 |bidirectional| core::arch::x86_64::__m128i }
-
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u32x8 |bidirectional| core::arch::x86::__m256i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u32x8 |bidirectional| core::arch::x86_64::__m256i }
-
-/*
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u32x16 |bidirectional| core::arch::x86::__m512i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u32x16 |bidirectional| core::arch::x86_64::__m512i }
-*/
+from_transmute_x86! { unsafe u32x4 => __m128i }
+from_transmute_x86! { unsafe u32x8 => __m256i }
+//from_transmute_x86! { unsafe u32x16 => __m512i }
diff --git a/crates/core_simd/src/vectors_u64.rs b/crates/core_simd/src/vectors_u64.rs
index 4c8b95177f5..e6e21e62da1 100644
--- a/crates/core_simd/src/vectors_u64.rs
+++ b/crates/core_simd/src/vectors_u64.rs
@@ -13,22 +13,6 @@ define_type! {
     struct u64x8([u64; 8]);
 }
 
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u64x2 |bidirectional| core::arch::x86::__m128i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u64x2 |bidirectional| core::arch::x86_64::__m128i }
-
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u64x4 |bidirectional| core::arch::x86::__m256i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u64x4 |bidirectional| core::arch::x86_64::__m256i }
-
-/*
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u64x8 |bidirectional| core::arch::x86::__m512i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u64x8 |bidirectional| core::arch::x86_64::__m512i }
-*/
+from_transmute_x86! { unsafe u64x2 => __m128i }
+from_transmute_x86! { unsafe u64x4 => __m256i }
+//from_transmute_x86! { unsafe u64x8 => __m512i }
diff --git a/crates/core_simd/src/vectors_u8.rs b/crates/core_simd/src/vectors_u8.rs
index d3f0893154b..f6246f87ece 100644
--- a/crates/core_simd/src/vectors_u8.rs
+++ b/crates/core_simd/src/vectors_u8.rs
@@ -28,22 +28,6 @@ define_type! {
     struct u8x64([u8; 64]);
 }
 
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u8x16 |bidirectional| core::arch::x86::__m128i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u8x16 |bidirectional| core::arch::x86_64::__m128i }
-
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u8x32 |bidirectional| core::arch::x86::__m256i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u8x32 |bidirectional| core::arch::x86_64::__m256i }
-
-/*
-#[cfg(target_arch = "x86")]
-from_aligned! { unsafe u8x64 |bidirectional| core::arch::x86::__m512i }
-
-#[cfg(target_arch = "x86_64")]
-from_aligned! { unsafe u8x64 |bidirectional| core::arch::x86_64::__m512i }
-*/
+from_transmute_x86! { unsafe u8x16 => __m128i }
+from_transmute_x86! { unsafe u8x32 => __m256i }
+//from_transmute_x86! { unsafe u8x64 => __m512i }
diff --git a/crates/core_simd/src/vectors_usize.rs b/crates/core_simd/src/vectors_usize.rs
index c997e7cd4e3..45da00562f6 100644
--- a/crates/core_simd/src/vectors_usize.rs
+++ b/crates/core_simd/src/vectors_usize.rs
@@ -13,34 +13,14 @@ define_type! {
     struct usizex8([usize; 8]);
 }
 
-#[cfg(all(target_arch = "x86", target_pointer_width = "32"))]
-from_aligned! { unsafe usizex4 |bidirectional| core::arch::x86::__m128i }
-
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
-from_aligned! { unsafe usizex4 |bidirectional| core::arch::x86_64::__m128i }
-
-#[cfg(all(target_arch = "x86", target_pointer_width = "32"))]
-from_aligned! { unsafe usizex8 |bidirectional| core::arch::x86::__m256i }
-
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
-from_aligned! { unsafe usizex8 |bidirectional| core::arch::x86_64::__m256i }
-
-#[cfg(all(target_arch = "x86", target_pointer_width = "64"))]
-from_aligned! { unsafe usizex2 |bidirectional| core::arch::x86::__m128i }
-
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
-from_aligned! { unsafe usizex2 |bidirectional| core::arch::x86_64::__m128i }
-
-#[cfg(all(target_arch = "x86", target_pointer_width = "64"))]
-from_aligned! { unsafe usizex4 |bidirectional| core::arch::x86::__m256i }
-
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
-from_aligned! { unsafe usizex4 |bidirectional| core::arch::x86_64::__m256i }
-
-/*
-#[cfg(all(target_arch = "x86", target_pointer_width = "64"))]
-from_aligned! { unsafe usizex8 |bidirectional| core::arch::x86::__m512i }
-
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
-from_aligned! { unsafe usizex8 |bidirectional| core::arch::x86_64::__m512i }
-*/
+#[cfg(target_pointer_width = "32")]
+from_transmute_x86! { unsafe usizex4 => __m128i }
+#[cfg(target_pointer_width = "32")]
+from_transmute_x86! { unsafe usizex8 => __m256i }
+
+#[cfg(target_pointer_width = "64")]
+from_transmute_x86! { unsafe usizex2 => __m128i }
+#[cfg(target_pointer_width = "64")]
+from_transmute_x86! { unsafe usizex4 => __m256i }
+//#[cfg(target_pointer_width = "64")]
+//from_transmute_x86! { unsafe usizex8 => __m512i }