@@ -233,72 +233,74 @@ const fn svprfop_from_i32(value: i32) -> svprfop {
233233 }
234234}
235235
236- macro_rules! debug_print_integral {
237- ($($name:ident => ($ty:ty, $svptrue_fn:ident, $svcnt_fn:ident, $svst_fn:ident)),*) => {
238- $(
239- #[inline]
240- #[target_feature(enable = "sve")]
241- #[cfg(all(any(target_arch = "aarch64", target_arch = "arm64ec"), target_endian = "little"))]
242- pub fn $name(v: $ty) -> String {
243- unsafe {
244- let __pred = $svptrue_fn();
245- let __num_elems = $svcnt_fn() as usize;
246- let mut __buf = std::vec::Vec::with_capacity(__num_elems);
247- $svst_fn(__pred, __buf.as_mut_ptr(), v);
248- __buf.set_len(__num_elems);
249- format!(
250- "[{}]",
251- __buf.iter().map(|el| el.to_string()).collect::<Vec<_>>().join(", ")
252- )
253- }
254- }
255- )*
236+ #[cfg(all(any(target_arch = "aarch64", target_arch = "arm64ec"), target_endian = "little"))]
237+ fn svint8_to_slice(a: &svint8_t) -> &[i8] {
238+ unsafe {
239+ core::slice::from_raw_parts(core::ptr::from_ref(a).cast(), svcntb() as usize)
256240 }
257241}
258242
259- debug_print_integral! {
260- debug_print_f32 => (svfloat32_t, svptrue_b32, svcntw, svst1_f32),
261- debug_print_f64 => (svfloat64_t, svptrue_b64, svcntd, svst1_f64),
262- debug_print_s8 => (svint8_t, svptrue_b8, svcntb, svst1_s8),
263- debug_print_s16 => (svint16_t, svptrue_b16, svcnth, svst1_s16),
264- debug_print_s32 => (svint32_t, svptrue_b32, svcntw, svst1_s32),
265- debug_print_s64 => (svint64_t, svptrue_b64, svcntd, svst1_s64),
266- debug_print_u8 => (svuint8_t, svptrue_b8, svcntb, svst1_u8),
267- debug_print_u16 => (svuint16_t, svptrue_b16, svcnth, svst1_u16),
268- debug_print_u32 => (svuint32_t, svptrue_b32, svcntw, svst1_u32),
269- debug_print_u64 => (svuint64_t, svptrue_b64, svcntd, svst1_u64)
243+ #[cfg(all(any(target_arch = "aarch64", target_arch = "arm64ec"), target_endian = "little"))]
244+ fn svuint8_to_slice(a: &svuint8_t) -> &[u8] {
245+ unsafe {
246+ core::slice::from_raw_parts(core::ptr::from_ref(a).cast(), svcntb() as usize)
247+ }
270248}
271249
272- macro_rules! debug_print_bool {
273- ($($name:ident => ($ty:ty, $svst_fn:ident, $svdup_fn:ident)),*) => {
274- $(
275- #[inline]
276- #[target_feature(enable = "sve")]
277- #[cfg(all(any(target_arch = "aarch64", target_arch = "arm64ec"), target_endian = "little"))]
278- pub fn $name(v: $ty) -> String {
279- unsafe {
280- let __num_elems = svcntb() as usize;
281- let mut __buf = std::vec::Vec::with_capacity(__num_elems);
282- $svst_fn(v, __buf.as_mut_ptr(), $svdup_fn(1));
283- __buf.set_len(__num_elems);
284- format!(
285- "[{}]",
286- __buf.iter()
287- .map(|el| *el == 1)
288- .map(|el| el.to_string())
289- .collect::<Vec<_>>()
290- .join(", ")
291- )
292- }
293- }
294- )*
250+ #[cfg(all(any(target_arch = "aarch64", target_arch = "arm64ec"), target_endian = "little"))]
251+ fn svint16_to_slice(a: &svint16_t) -> &[i16] {
252+ unsafe {
253+ core::slice::from_raw_parts(core::ptr::from_ref(a).cast(), svcnth() as usize)
295254 }
296255}
297256
298- debug_print_bool! {
299- debug_print_b8 => (svbool_t, svst1_u8, svdup_n_u8),
300- debug_print_b16 => (svbool_t, svst1_u16, svdup_n_u16),
301- debug_print_b32 => (svbool_t, svst1_u32, svdup_n_u32),
302- debug_print_b64 => (svbool_t, svst1_u64, svdup_n_u64)
257+ #[cfg(all(any(target_arch = "aarch64", target_arch = "arm64ec"), target_endian = "little"))]
258+ fn svuint16_to_slice(a: &svuint16_t) -> &[u16] {
259+ unsafe {
260+ core::slice::from_raw_parts(core::ptr::from_ref(a).cast(), svcnth() as usize)
261+ }
303262}
263+
264+ #[cfg(all(any(target_arch = "aarch64", target_arch = "arm64ec"), target_endian = "little"))]
265+ fn svint32_to_slice(a: &svint32_t) -> &[i32] {
266+ unsafe {
267+ core::slice::from_raw_parts(core::ptr::from_ref(a).cast(), svcntw() as usize)
268+ }
269+ }
270+
271+ #[cfg(all(any(target_arch = "aarch64", target_arch = "arm64ec"), target_endian = "little"))]
272+ fn svuint32_to_slice(a: &svuint32_t) -> &[u32] {
273+ unsafe {
274+ core::slice::from_raw_parts(core::ptr::from_ref(a).cast(), svcntw() as usize)
275+ }
276+ }
277+
278+ #[cfg(all(any(target_arch = "aarch64", target_arch = "arm64ec"), target_endian = "little"))]
279+ fn svint64_to_slice(a: &svint64_t) -> &[i64] {
280+ unsafe {
281+ core::slice::from_raw_parts(core::ptr::from_ref(a).cast(), svcntd() as usize)
282+ }
283+ }
284+
285+ #[cfg(all(any(target_arch = "aarch64", target_arch = "arm64ec"), target_endian = "little"))]
286+ fn svuint64_to_slice(a: &svuint64_t) -> &[u64] {
287+ unsafe {
288+ core::slice::from_raw_parts(core::ptr::from_ref(a).cast(), svcntd() as usize)
289+ }
290+ }
291+
292+ #[cfg(all(any(target_arch = "aarch64", target_arch = "arm64ec"), target_endian = "little"))]
293+ fn svfloat32_to_slice(a: &svfloat32_t) -> &[NanEqF32] {
294+ unsafe {
295+ core::slice::from_raw_parts(core::ptr::from_ref(a).cast(), svcntw() as usize)
296+ }
297+ }
298+
299+ #[cfg(all(any(target_arch = "aarch64", target_arch = "arm64ec"), target_endian = "little"))]
300+ fn svfloat64_to_slice(a: &svfloat64_t) -> &[NanEqF64] {
301+ unsafe {
302+ core::slice::from_raw_parts(core::ptr::from_ref(a).cast(), svcntd() as usize)
303+ }
304+ }
305+
304306"# ;
0 commit comments