//! Utility macros. #[allow(unused)] macro_rules! static_assert { ($e:expr) => { const { assert!($e); } }; ($e:expr, $msg:expr) => { const { assert!($e, $msg); } }; } #[allow(unused_macros)] macro_rules! static_assert_uimm_bits { ($imm:ident, $bits:expr) => { // `0 <= $imm` produces a warning if the immediate has an unsigned type #[allow(unused_comparisons)] { static_assert!( 0 <= $imm && $imm <= (1 << $bits) - 1, concat!( stringify!($imm), " doesn't fit in ", stringify!($bits), " bits", ) ) } }; } #[allow(unused_macros)] macro_rules! static_assert_simm_bits { ($imm:ident, $bits:expr) => { static_assert!( (-1 << ($bits - 1)) - 1 <= $imm && $imm <= (1 << ($bits - 1)) - 1, concat!( stringify!($imm), " doesn't fit in ", stringify!($bits), " bits", ) ) }; } #[allow(unused)] macro_rules! types { ($( $(#[$doc:meta])* pub struct $name:ident($($fields:tt)*); )*) => ($( $(#[$doc])* #[derive(Copy, Clone, Debug)] #[allow(non_camel_case_types)] #[repr(simd)] #[allow(clippy::missing_inline_in_public_items)] pub struct $name($($fields)*); )*) } #[allow(unused)] macro_rules! simd_shuffle { ($x:expr, $y:expr, $idx:expr $(,)?) => {{ simd_shuffle( $x, $y, const { let v: [u32; _] = $idx; v }, ) }}; }