1- //! Simple assembly routines 
1+ //! Simple assembly routines for ARMv7  
22
33/// Data Memory Barrier 
44/// 
55/// Ensures that all explicit memory accesses that appear in program order before the `DMB` 
66/// instruction are observed before any explicit memory accesses that appear in program order 
77/// after the `DMB` instruction. 
88#[ cfg_attr( not( feature = "check-asm" ) ,  inline) ]  
9- #[ cfg( any(  
10-     arm_architecture = "v7-r" ,  
11-     arm_architecture = "v7-a" ,  
12-     arm_architecture = "v8-r"  
13- ) ) ] 
149pub  fn  dmb ( )  { 
1510    use  core:: sync:: atomic:: { compiler_fence,  Ordering } ; 
1611    compiler_fence ( Ordering :: SeqCst ) ; 
@@ -28,11 +23,6 @@ pub fn dmb() {
2823///  * any explicit memory access made before this instruction is complete 
2924///  * all cache and branch predictor maintenance operations before this instruction complete 
3025#[ cfg_attr( not( feature = "check-asm" ) ,  inline) ]  
31- #[ cfg( any(  
32-     arm_architecture = "v7-r" ,  
33-     arm_architecture = "v7-a" ,  
34-     arm_architecture = "v8-r"  
35- ) ) ] 
3626pub  fn  dsb ( )  { 
3727    use  core:: sync:: atomic:: { compiler_fence,  Ordering } ; 
3828    compiler_fence ( Ordering :: SeqCst ) ; 
@@ -47,11 +37,6 @@ pub fn dsb() {
4737/// Flushes the pipeline in the processor, so that all instructions following the `ISB` are fetched 
4838/// from cache or memory, after the instruction has been completed. 
4939#[ cfg_attr( not( feature = "check-asm" ) ,  inline) ]  
50- #[ cfg( any(  
51-     arm_architecture = "v7-r" ,  
52-     arm_architecture = "v7-a" ,  
53-     arm_architecture = "v8-r"  
54- ) ) ] 
5540pub  fn  isb ( )  { 
5641    use  core:: sync:: atomic:: { compiler_fence,  Ordering } ; 
5742    compiler_fence ( Ordering :: SeqCst ) ; 
@@ -69,39 +54,40 @@ pub fn nop() {
6954
7055/// Emit an WFI instruction 
7156#[ cfg_attr( not( feature = "check-asm" ) ,  inline) ]  
72- #[ cfg( any(  
73-     arm_architecture = "v7-r" ,  
74-     arm_architecture = "v7-a" ,  
75-     arm_architecture = "v8-r"  
76- ) ) ] 
7757pub  fn  wfi ( )  { 
7858    unsafe  {  core:: arch:: asm!( "wfi" ,  options( nomem,  nostack,  preserves_flags) )  } 
7959} 
8060
8161/// Emit an WFE instruction 
8262#[ cfg_attr( not( feature = "check-asm" ) ,  inline) ]  
83- #[ cfg( any(  
84-     arm_architecture = "v7-r" ,  
85-     arm_architecture = "v7-a" ,  
86-     arm_architecture = "v8-r"  
87- ) ) ] 
8863pub  fn  wfe ( )  { 
8964    unsafe  {  core:: arch:: asm!( "wfe" ,  options( nomem,  nostack,  preserves_flags) )  } 
9065} 
9166
9267/// Emit an SEV instruction 
9368#[ cfg_attr( not( feature = "check-asm" ) ,  inline) ]  
94- #[ cfg( any(  
95-     arm_architecture = "v7-r" ,  
96-     arm_architecture = "v7-a" ,  
97-     arm_architecture = "v8-r"  
98- ) ) ] 
9969pub  fn  sev ( )  { 
10070    unsafe  { 
10171        core:: arch:: asm!( "sev" ) ; 
10272    } 
10373} 
10474
75+ /// Mask IRQ 
76+ #[ cfg_attr( not( feature = "check-asm" ) ,  inline) ]  
77+ pub  fn  irq_disable ( )  { 
78+     unsafe  { 
79+         core:: arch:: asm!( "cpsid i" ) ; 
80+     } 
81+ } 
82+ 
83+ /// Unmask IRQ 
84+ #[ cfg_attr( not( feature = "check-asm" ) ,  inline) ]  
85+ pub  fn  irq_enable ( )  { 
86+     unsafe  { 
87+         core:: arch:: asm!( "cpsie i" ) ; 
88+     } 
89+ } 
90+ 
10591/// Which core are we? 
10692/// 
10793/// Return the bottom 24-bits of the MPIDR 
@@ -113,12 +99,3 @@ pub fn core_id() -> u32 {
11399    } 
114100    r &  0x00FF_FFFF 
115101} 
116- 
117- #[ cfg( any( arm_architecture = "v4t" ,  arm_architecture = "v5te" ) ) ]  
118- #[ no_mangle]  
119- pub  extern  "C"  fn  __sync_synchronize ( )  { 
120-     // we don't have a barrier instruction - the linux kernel just uses an empty inline asm block 
121-     unsafe  { 
122-         core:: arch:: asm!( "" ) ; 
123-     } 
124- } 
0 commit comments