summaryrefslogtreecommitdiffstats
path: root/library/stdarch/crates/core_arch/src/v64.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /library/stdarch/crates/core_arch/src/v64.rs
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'library/stdarch/crates/core_arch/src/v64.rs')
-rw-r--r--library/stdarch/crates/core_arch/src/v64.rs85
1 files changed, 85 insertions, 0 deletions
diff --git a/library/stdarch/crates/core_arch/src/v64.rs b/library/stdarch/crates/core_arch/src/v64.rs
new file mode 100644
index 000000000..631b76a85
--- /dev/null
+++ b/library/stdarch/crates/core_arch/src/v64.rs
@@ -0,0 +1,85 @@
+//! 64-bit wide vector types
+
+use crate::prelude::v1::*;
+
+use crate::core_arch::simd_llvm::*;
+
+define_ty_doc! {
+ f32x2, f32, f32 |
+ /// A 64-bit vector with 2 `f32` lanes.
+}
+define_impl! { f32x2, f32, 2, i32x2, x0, x1 }
+
+define_ty_doc! {
+ u32x2, u32, u32 |
+ /// A 64-bit vector with 2 `u32` lanes.
+}
+define_impl! { u32x2, u32, 2, i32x2, x0, x1 }
+
+define_ty! { i32x2, i32, i32 }
+define_impl! { i32x2, i32, 2, i32x2, x0, x1 }
+
+define_ty! { u16x4, u16, u16, u16, u16 }
+define_impl! { u16x4, u16, 4, i16x4, x0, x1, x2, x3 }
+
+define_ty! { i16x4, i16, i16, i16, i16 }
+define_impl! { i16x4, i16, 4, i16x4, x0, x1, x2, x3 }
+
+define_ty! { u8x8, u8, u8, u8, u8, u8, u8, u8, u8 }
+define_impl! { u8x8, u8, 8, i8x8, x0, x1, x2, x3, x4, x5, x6, x7 }
+
+define_ty! { i8x8, i8, i8, i8, i8, i8, i8, i8, i8 }
+define_impl! { i8x8, i8, 8, i8x8, x0, x1, x2, x3, x4, x5, x6, x7 }
+
+define_from!(u32x2, i32x2, u16x4, i16x4, u8x8, i8x8);
+define_from!(i32x2, u32x2, u16x4, i16x4, u8x8, i8x8);
+define_from!(u16x4, u32x2, i32x2, i16x4, u8x8, i8x8);
+define_from!(i16x4, u32x2, i32x2, u16x4, u8x8, i8x8);
+define_from!(u8x8, u32x2, i32x2, u16x4, i16x4, i8x8);
+define_from!(i8x8, u32x2, i32x2, u16x4, i16x4, u8x8);
+
+define_common_ops!(f32x2, u32x2, i32x2, u16x4, i16x4, u8x8, i8x8);
+define_float_ops!(f32x2);
+define_integer_ops!(
+ (u32x2, u32),
+ (i32x2, i32),
+ (u16x4, u16),
+ (i16x4, i16),
+ (u8x8, u8),
+ (i8x8, i8)
+);
+define_signed_integer_ops!(i32x2, i16x4, i8x8);
+define_casts!(
+ (f32x2, f64x2, as_f64x2),
+ (f32x2, u32x2, as_u32x2),
+ (f32x2, i32x2, as_i32x2),
+ (u32x2, f32x2, as_f32x2),
+ (u32x2, i32x2, as_i32x2),
+ (i32x2, f32x2, as_f32x2),
+ (i32x2, u32x2, as_u32x2),
+ (u16x4, i16x4, as_i16x4),
+ (i16x4, u16x4, as_u16x4),
+ (u8x8, i8x8, as_i8x8),
+ (i8x8, u8x8, as_u8x8),
+ (i8x8, i16x8, as_i16x8),
+ (u8x8, i16x8, as_i16x8),
+ (i16x4, i32x4, as_i32x4),
+ (i32x2, i64x2, as_i64x2),
+ (u8x8, u16x8, as_u16x8),
+ (u16x4, u32x4, as_u32x4),
+ (u16x4, i32x4, as_i32x4),
+ (u32x2, u64x2, as_u64x2),
+ (u32x2, i64x2, as_i64x2)
+);
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn operators() {
+ test_ops_si!(i8x8, i16x4, i32x2);
+ test_ops_ui!(u8x8, u16x4, u32x2);
+ test_ops_f!(f32x2);
+ }
+}