tartan_arch/
arm.rs

1//! Architecture-specific primitives for 32-bit Arm.
2
3pub mod interrupt;
4
5
6#[macro_export]
7#[doc(hidden)]
8macro_rules! cp15_register_get {
9    [$op_1:literal, $cr_n:literal, $cr_m:literal, $op_2:literal] => {
10        {
11            let mut value: usize;
12            unsafe {
13                core::arch::asm!(
14                    concat!(
15                        "mrc p15, ",
16                        $op_1,
17                        ", {}, ",
18                        $cr_n,
19                        ", ",
20                        $cr_m,
21                        ", ",
22                        $op_2,
23                    ),
24                    out(reg) value,
25                );
26            }
27            value
28        }
29    }
30}
31
32#[macro_export]
33#[doc(hidden)]
34macro_rules! cp15_register_set {
35    [$op_1:literal, $cr_n:literal, $cr_m:literal, $op_2:literal, $value:expr] => {
36        {
37            let value: usize = $value;
38            core::arch::asm!(
39                concat!(
40                    "mcr p15, ",
41                    $op_1,
42                    ", {}, ",
43                    $cr_n,
44                    ", ",
45                    $cr_m,
46                    ", ",
47                    $op_2,
48                ),
49                in(reg) value,
50            );
51        }
52    }
53}