Skip to content

Commit 8e3bfb0

Browse files
Merge pull request #530 from Kmeakin/km/aarch64-tuple-from-impls
Provide `From` impls for AArch64 ACLE tuple types.
2 parents a27ae1d + b16ee62 commit 8e3bfb0

1 file changed

Lines changed: 47 additions & 3 deletions

File tree

  • crates/core_simd/src/vendor

crates/core_simd/src/vendor/arm.rs

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,16 @@ use core::arch::arm::*;
77
#[cfg(any(target_arch = "aarch64", target_arch = "arm64ec"))]
88
use core::arch::aarch64::*;
99

10+
/// Transmute between `Simd` and ACLE tuple types.
11+
macro_rules! tuple {
12+
($scalar:ty,$tuple:ty) => {
13+
from_transmute! { unsafe Simd<$scalar, { size_of::<$tuple>() / size_of::<$scalar>() }> => $tuple }
14+
};
15+
($scalar:ty,$($tuples:ty),*) => {
16+
$(tuple! { $scalar, $tuples })*
17+
};
18+
}
19+
1020
#[cfg(all(
1121
any(
1222
target_arch = "aarch64",
@@ -18,9 +28,6 @@ use core::arch::aarch64::*;
1828
mod neon {
1929
use super::*;
2030

21-
from_transmute! { unsafe f32x2 => float32x2_t }
22-
from_transmute! { unsafe f32x4 => float32x4_t }
23-
2431
from_transmute! { unsafe u8x8 => uint8x8_t }
2532
from_transmute! { unsafe u8x16 => uint8x16_t }
2633
from_transmute! { unsafe i8x8 => int8x8_t }
@@ -34,18 +41,52 @@ mod neon {
3441
from_transmute! { unsafe i16x8 => int16x8_t }
3542
from_transmute! { unsafe u16x4 => poly16x4_t }
3643
from_transmute! { unsafe u16x8 => poly16x8_t }
44+
from_transmute! { unsafe f16x4 => float16x4_t }
45+
from_transmute! { unsafe f16x8 => float16x8_t }
3746

3847
from_transmute! { unsafe u32x2 => uint32x2_t }
3948
from_transmute! { unsafe u32x4 => uint32x4_t }
4049
from_transmute! { unsafe i32x2 => int32x2_t }
4150
from_transmute! { unsafe i32x4 => int32x4_t }
51+
from_transmute! { unsafe f32x2 => float32x2_t }
52+
from_transmute! { unsafe f32x4 => float32x4_t }
4253

4354
from_transmute! { unsafe Simd<u64, 1> => uint64x1_t }
4455
from_transmute! { unsafe u64x2 => uint64x2_t }
4556
from_transmute! { unsafe Simd<i64, 1> => int64x1_t }
4657
from_transmute! { unsafe i64x2 => int64x2_t }
4758
from_transmute! { unsafe Simd<u64, 1> => poly64x1_t }
4859
from_transmute! { unsafe u64x2 => poly64x2_t }
60+
61+
tuple!(i8, int8x8x2_t, int8x8x3_t, int8x8x4_t);
62+
tuple!(i8, int8x16x2_t, int8x16x3_t, int8x16x4_t);
63+
tuple!(u8, uint8x8x2_t, uint8x8x3_t, uint8x8x4_t);
64+
tuple!(u8, uint8x16x2_t, uint8x16x3_t, uint8x16x4_t);
65+
tuple!(u8, poly8x8x2_t, poly8x8x3_t, poly8x8x4_t);
66+
tuple!(u8, poly8x16x2_t, poly8x16x3_t, poly8x16x4_t);
67+
68+
tuple!(i16, int16x4x2_t, int16x4x3_t, int16x4x4_t);
69+
tuple!(i16, int16x8x2_t, int16x8x3_t, int16x8x4_t);
70+
tuple!(u16, uint16x4x2_t, uint16x4x3_t, uint16x4x4_t);
71+
tuple!(u16, uint16x8x2_t, uint16x8x3_t, uint16x8x4_t);
72+
tuple!(u16, poly16x4x2_t, poly16x4x3_t, poly16x4x4_t);
73+
tuple!(u16, poly16x8x2_t, poly16x8x3_t, poly16x8x4_t);
74+
tuple!(f16, float16x4x2_t, float16x4x3_t, float16x4x4_t);
75+
tuple!(f16, float16x8x2_t, float16x8x3_t, float16x8x4_t);
76+
77+
tuple!(i32, int32x2x2_t, int32x2x3_t, int32x2x4_t);
78+
tuple!(i32, int32x4x2_t, int32x4x3_t, int32x4x4_t);
79+
tuple!(u32, uint32x2x2_t, uint32x2x3_t, uint32x2x4_t);
80+
tuple!(u32, uint32x4x2_t, uint32x4x3_t, uint32x4x4_t);
81+
tuple!(f32, float32x2x2_t, float32x2x3_t, float32x2x4_t);
82+
tuple!(f32, float32x4x2_t, float32x4x3_t, float32x4x4_t);
83+
84+
tuple!(i64, int64x1x2_t, int64x1x3_t, int64x1x4_t);
85+
tuple!(i64, int64x2x2_t, int64x2x3_t, int64x2x4_t);
86+
tuple!(u64, uint64x1x2_t, uint64x1x3_t, uint64x1x4_t);
87+
tuple!(u64, uint64x2x2_t, uint64x2x3_t, uint64x2x4_t);
88+
tuple!(u64, poly64x1x2_t, poly64x1x3_t, poly64x1x4_t);
89+
tuple!(u64, poly64x2x2_t, poly64x2x3_t, poly64x2x4_t);
4990
}
5091

5192
#[cfg(any(
@@ -71,4 +112,7 @@ mod aarch64 {
71112

72113
from_transmute! { unsafe Simd<f64, 1> => float64x1_t }
73114
from_transmute! { unsafe f64x2 => float64x2_t }
115+
116+
tuple!(f64, float64x1x2_t, float64x1x3_t, float64x1x4_t);
117+
tuple!(f64, float64x2x2_t, float64x2x3_t, float64x2x4_t);
74118
}

0 commit comments

Comments
 (0)