]> git.proxmox.com Git - rustc.git/blame - library/stdarch/crates/core_arch/src/macros.rs
New upstream version 1.70.0+dfsg1
[rustc.git] / library / stdarch / crates / core_arch / src / macros.rs
CommitLineData
83c7162d
XL
1//! Utility macros.
2
353b0b11
FG
3#[allow(unused)]
4macro_rules! static_assert {
5 ($e:expr) => {
6 const {
7 assert!($e);
8 }
17df50a5 9 };
353b0b11
FG
10 ($e:expr, $msg:expr) => {
11 const {
12 assert!($e, $msg);
13 }
17df50a5
XL
14 };
15}
16
17#[allow(unused_macros)]
353b0b11
FG
18macro_rules! static_assert_uimm_bits {
19 ($imm:ident, $bits:expr) => {
20 // `0 <= $imm` produces a warning if the immediate has an unsigned type
21 #[allow(unused_comparisons)]
22 {
23 static_assert!(
24 0 <= $imm && $imm <= (1 << $bits) - 1,
25 concat!(
26 stringify!($imm),
27 " doesn't fit in ",
28 stringify!($bits),
29 " bits",
30 )
31 )
32 }
17df50a5
XL
33 };
34}
35
36#[allow(unused_macros)]
353b0b11
FG
37macro_rules! static_assert_simm_bits {
38 ($imm:ident, $bits:expr) => {
39 static_assert!(
40 (-1 << ($bits - 1)) - 1 <= $imm && $imm <= (1 << ($bits - 1)) - 1,
41 concat!(
42 stringify!($imm),
43 " doesn't fit in ",
44 stringify!($bits),
45 " bits",
46 )
47 )
ba9703b0
XL
48 };
49}
50
83c7162d
XL
51#[allow(unused)]
52macro_rules! types {
53 ($(
54 $(#[$doc:meta])*
55 pub struct $name:ident($($fields:tt)*);
56 )*) => ($(
57 $(#[$doc])*
58 #[derive(Copy, Clone, Debug)]
59 #[allow(non_camel_case_types)]
60 #[repr(simd)]
48663c56 61 #[allow(clippy::missing_inline_in_public_items)]
83c7162d
XL
62 pub struct $name($($fields)*);
63 )*)
64}
17df50a5 65
04454e1e 66#[allow(unused)]
353b0b11 67macro_rules! simd_shuffle {
17df50a5 68 ($x:expr, $y:expr, $idx:expr $(,)?) => {{
353b0b11
FG
69 simd_shuffle(
70 $x,
71 $y,
72 const {
73 let v: [u32; _] = $idx;
74 v
75 },
76 )
17df50a5
XL
77 }};
78}