@@ -232,4 +232,73 @@ const fn svprfop_from_i32(value: i32) -> svprfop {
232232 _ => unreachable!(),
233233 }
234234}
235+
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+ )*
256+ }
257+ }
258+
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)
270+ }
271+
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+ )*
295+ }
296+ }
297+
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)
303+ }
235304"# ;
0 commit comments