2
2
#![ crate_type = "lib" ]
3
3
#![ no_std]
4
4
5
+ use core:: arch:: asm;
6
+
5
7
unsafe fn nomem_bad ( p : & i32 ) {
6
- core :: arch :: asm!(
8
+ asm ! (
7
9
"asdf {p1}, {p2}, {p3}" ,
8
10
p1 = in( reg) p,
9
11
p2 = in( reg) p as * const _ as usize ,
@@ -12,23 +14,16 @@ unsafe fn nomem_bad(p: &i32) {
12
14
) ;
13
15
}
14
16
15
- unsafe fn readonly_bad ( p : & mut i32 ) {
16
- core:: arch:: asm!( "asdf {p}" , p = in( reg) p, options( readonly, nostack, preserves_flags) ) ;
17
- }
18
-
19
17
unsafe fn nomem_good ( p : & i32 ) {
20
- core :: arch :: asm!( "asdf {p}" , p = in( reg) p, options( readonly, nostack, preserves_flags) ) ;
18
+ asm ! ( "asdf {p}" , p = in( reg) p, options( readonly, nostack, preserves_flags) ) ;
21
19
let p = p as * const i32 as usize ;
22
- core :: arch :: asm!( "asdf {p}" , p = in( reg) p, options( nomem, nostack, preserves_flags) ) ;
20
+ asm ! ( "asdf {p}" , p = in( reg) p, options( nomem, nostack, preserves_flags) ) ;
23
21
}
24
22
25
- unsafe fn readonly_good ( p : & mut i32 ) {
26
- core:: arch:: asm!( "asdf {p}" , p = in( reg) p, options( nostack, preserves_flags) ) ;
27
- core:: arch:: asm!( "asdf {p}" , p = in( reg) & * p, options( readonly, nostack, preserves_flags) ) ;
28
- let p = p as * const i32 ;
29
- core:: arch:: asm!( "asdf {p}" , p = in( reg) p, options( readonly, nostack, preserves_flags) ) ;
23
+ unsafe fn nomem_bad2 ( p : & mut i32 ) {
24
+ asm ! ( "asdf {p}" , p = in( reg) p, options( nomem, nostack, preserves_flags) ) ;
30
25
}
31
26
32
- unsafe fn nomem_bad2 ( p : & mut i32 ) {
33
- core :: arch :: asm!( "asdf {p}" , p = in( reg) p, options( nomem, nostack , preserves_flags ) ) ;
27
+ unsafe fn nomem_fn ( p : extern "C" fn ( ) ) {
28
+ asm ! ( "call {p}" , p = in( reg) p, options( nomem) ) ;
34
29
}
0 commit comments