1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 引用: ARM11 MPCore 处理器技术引用手册 (ARM DDI 0360E) 3.5 "Summary of CP15 instructions" 节
//

use crate::arch::asm;

/// 完整的系统是必需的可共享性域,读写是必需的访问类型
///
pub struct SY;

impl super::super::sealed::Dmb for SY {
    #[inline(always)]
    unsafe fn __dmb(&self) {
        asm!(
            "mcr p15, 0, r0, c7, c10, 5",
            options(preserves_flags, nostack)
        )
    }
}

impl super::super::sealed::Dsb for SY {
    #[inline(always)]
    unsafe fn __dsb(&self) {
        asm!(
            "mcr p15, 0, r0, c7, c10, 4",
            options(preserves_flags, nostack)
        )
    }
}

impl super::super::sealed::Isb for SY {
    #[inline(always)]
    unsafe fn __isb(&self) {
        asm!(
            "mcr p15, 0, r0, c7, c5, 4",
            options(preserves_flags, nostack)
        )
    }
}