From 698f8c2f01ea549d77d7dc3338a12e04c11057b9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:02:58 +0200 Subject: Adding upstream version 1.64.0+dfsg1. Signed-off-by: Daniel Baumann --- library/stdarch/crates/core_arch/src/v64.rs | 85 +++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 library/stdarch/crates/core_arch/src/v64.rs (limited to 'library/stdarch/crates/core_arch/src/v64.rs') 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); + } +} -- cgit v1.2.3