Skip to content

Commit 4add5a5

Browse files
stianeklundjonas-schievink
authored andcommitted
Use llmv_asm! macro for inline assembly
\ fixes #204 the `asm!` macro will soon be deprecated. This changes all of the `asm!` calls to `llvm_asm!` To my knowledge doing a direct replacement should be fine.
1 parent 477b9ea commit 4add5a5

15 files changed

+40
-39
lines changed

src/asm.rs

+14-14
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
pub fn bkpt() {
99
match () {
1010
#[cfg(all(cortex_m, feature = "inline-asm"))]
11-
() => unsafe { asm!("bkpt" :::: "volatile") },
11+
() => unsafe { llvm_asm!("bkpt" :::: "volatile") },
1212

1313
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
1414
() => unsafe {
@@ -36,7 +36,7 @@ pub fn delay(_n: u32) {
3636
match () {
3737
#[cfg(all(cortex_m, feature = "inline-asm"))]
3838
() => unsafe {
39-
asm!("1:
39+
llvm_asm!("1:
4040
nop
4141
subs $0, $$1
4242
bne.n 1b"
@@ -65,7 +65,7 @@ pub fn delay(_n: u32) {
6565
pub fn nop() {
6666
match () {
6767
#[cfg(all(cortex_m, feature = "inline-asm"))]
68-
() => unsafe { asm!("nop" :::: "volatile") },
68+
() => unsafe { llvm_asm!("nop" :::: "volatile") },
6969

7070
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
7171
() => unsafe {
@@ -90,7 +90,7 @@ pub fn udf() -> ! {
9090
match () {
9191
#[cfg(all(cortex_m, feature = "inline-asm"))]
9292
() => unsafe {
93-
asm!("udf" :::: "volatile");
93+
llvm_asm!("udf" :::: "volatile");
9494
core::hint::unreachable_unchecked();
9595
},
9696

@@ -115,7 +115,7 @@ pub fn udf() -> ! {
115115
pub fn wfe() {
116116
match () {
117117
#[cfg(all(cortex_m, feature = "inline-asm"))]
118-
() => unsafe { asm!("wfe" :::: "volatile") },
118+
() => unsafe { llvm_asm!("wfe" :::: "volatile") },
119119

120120
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
121121
() => unsafe {
@@ -136,7 +136,7 @@ pub fn wfe() {
136136
pub fn wfi() {
137137
match () {
138138
#[cfg(all(cortex_m, feature = "inline-asm"))]
139-
() => unsafe { asm!("wfi" :::: "volatile") },
139+
() => unsafe { llvm_asm!("wfi" :::: "volatile") },
140140

141141
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
142142
() => unsafe {
@@ -157,7 +157,7 @@ pub fn wfi() {
157157
pub fn sev() {
158158
match () {
159159
#[cfg(all(cortex_m, feature = "inline-asm"))]
160-
() => unsafe { asm!("sev" :::: "volatile") },
160+
() => unsafe { llvm_asm!("sev" :::: "volatile") },
161161

162162
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
163163
() => unsafe {
@@ -181,7 +181,7 @@ pub fn sev() {
181181
pub fn isb() {
182182
match () {
183183
#[cfg(all(cortex_m, feature = "inline-asm"))]
184-
() => unsafe { asm!("isb 0xF" ::: "memory" : "volatile") },
184+
() => unsafe { llvm_asm!("isb 0xF" ::: "memory" : "volatile") },
185185

186186
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
187187
() => unsafe {
@@ -209,7 +209,7 @@ pub fn isb() {
209209
pub fn dsb() {
210210
match () {
211211
#[cfg(all(cortex_m, feature = "inline-asm"))]
212-
() => unsafe { asm!("dsb 0xF" ::: "memory" : "volatile") },
212+
() => unsafe { llvm_asm!("dsb 0xF" ::: "memory" : "volatile") },
213213

214214
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
215215
() => unsafe {
@@ -235,7 +235,7 @@ pub fn dsb() {
235235
pub fn dmb() {
236236
match () {
237237
#[cfg(all(cortex_m, feature = "inline-asm"))]
238-
() => unsafe { asm!("dmb 0xF" ::: "memory" : "volatile") },
238+
() => unsafe { llvm_asm!("dmb 0xF" ::: "memory" : "volatile") },
239239

240240
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
241241
() => unsafe {
@@ -267,7 +267,7 @@ pub fn tt(addr: *mut u32) -> u32 {
267267
() => {
268268
let tt_resp: u32;
269269
unsafe {
270-
asm!("tt $0, $1" : "=r"(tt_resp) : "r"(addr) :: "volatile");
270+
llvm_asm!("tt $0, $1" : "=r"(tt_resp) : "r"(addr) :: "volatile");
271271
}
272272
tt_resp
273273
}
@@ -302,7 +302,7 @@ pub fn ttt(addr: *mut u32) -> u32 {
302302
() => {
303303
let tt_resp: u32;
304304
unsafe {
305-
asm!("ttt $0, $1" : "=r"(tt_resp) : "r"(addr) :: "volatile");
305+
llvm_asm!("ttt $0, $1" : "=r"(tt_resp) : "r"(addr) :: "volatile");
306306
}
307307
tt_resp
308308
}
@@ -338,7 +338,7 @@ pub fn tta(addr: *mut u32) -> u32 {
338338
() => {
339339
let tt_resp: u32;
340340
unsafe {
341-
asm!("tta $0, $1" : "=r"(tt_resp) : "r"(addr) :: "volatile");
341+
llvm_asm!("tta $0, $1" : "=r"(tt_resp) : "r"(addr) :: "volatile");
342342
}
343343
tt_resp
344344
}
@@ -374,7 +374,7 @@ pub fn ttat(addr: *mut u32) -> u32 {
374374
() => {
375375
let tt_resp: u32;
376376
unsafe {
377-
asm!("ttat $0, $1" : "=r"(tt_resp) : "r"(addr) :: "volatile");
377+
llvm_asm!("ttat $0, $1" : "=r"(tt_resp) : "r"(addr) :: "volatile");
378378
}
379379
tt_resp
380380
}

src/interrupt.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ pub fn disable() {
1010
match () {
1111
#[cfg(all(cortex_m, feature = "inline-asm"))]
1212
() => unsafe {
13-
asm!("cpsid i" ::: "memory" : "volatile");
13+
llvm_asm!("cpsid i" ::: "memory" : "volatile");
1414
},
1515

1616
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
@@ -37,7 +37,7 @@ pub fn disable() {
3737
pub unsafe fn enable() {
3838
match () {
3939
#[cfg(all(cortex_m, feature = "inline-asm"))]
40-
() => asm!("cpsie i" ::: "memory" : "volatile"),
40+
() => llvm_asm!("cpsie i" ::: "memory" : "volatile"),
4141

4242
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
4343
() => {

src/lib.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#![feature(llvm_asm)]
12
//! Low level access to Cortex-M processors
23
//!
34
//! This crate provides:
@@ -12,7 +13,7 @@
1213
//! ## `inline-asm`
1314
//!
1415
//! When this feature is enabled the implementation of all the functions inside the `asm` and
15-
//! `register` modules use inline assembly (`asm!`) instead of external assembly (FFI into separate
16+
//! `register` modules use inline assembly (`llvm_asm!`) instead of external assembly (FFI into separate
1617
//! assembly files pre-compiled using `arm-none-eabi-gcc`). The advantages of enabling `inline-asm`
1718
//! are:
1819
//!

src/register/apsr.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ pub fn read() -> Apsr {
5555
() => {
5656
let r: u32;
5757
unsafe {
58-
asm!("mrs $0, APSR" : "=r"(r) ::: "volatile");
58+
llvm_asm!("mrs $0, APSR" : "=r"(r) ::: "volatile");
5959
}
6060
Apsr { bits: r }
6161
}

src/register/basepri.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ pub fn read() -> u8 {
88
() => {
99
let r: u32;
1010
unsafe {
11-
asm!("mrs $0, BASEPRI" : "=r"(r) ::: "volatile");
11+
llvm_asm!("mrs $0, BASEPRI" : "=r"(r) ::: "volatile");
1212
}
1313
r as u8
1414
}
@@ -37,10 +37,10 @@ pub unsafe fn write(_basepri: u8) {
3737
#[cfg(all(cortex_m, feature = "inline-asm"))]
3838
() => match () {
3939
#[cfg(not(feature = "cm7-r0p1"))]
40-
() => asm!("msr BASEPRI, $0" :: "r"(_basepri) : "memory" : "volatile"),
40+
() => llvm_asm!("msr BASEPRI, $0" :: "r"(_basepri) : "memory" : "volatile"),
4141
#[cfg(feature = "cm7-r0p1")]
4242
() => crate::interrupt::free(
43-
|_| asm!("msr BASEPRI, $0" :: "r"(_basepri) : "memory" : "volatile"),
43+
|_| llvm_asm!("msr BASEPRI, $0" :: "r"(_basepri) : "memory" : "volatile"),
4444
),
4545
},
4646

src/register/basepri_max.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ pub fn write(_basepri: u8) {
1414
() => unsafe {
1515
match () {
1616
#[cfg(not(feature = "cm7-r0p1"))]
17-
() => asm!("msr BASEPRI_MAX, $0" :: "r"(_basepri) : "memory" : "volatile"),
17+
() => llvm_asm!("msr BASEPRI_MAX, $0" :: "r"(_basepri) : "memory" : "volatile"),
1818
#[cfg(feature = "cm7-r0p1")]
1919
() => crate::interrupt::free(
20-
|_| asm!("msr BASEPRI_MAX, $0" :: "r"(_basepri) : "memory" : "volatile"),
20+
|_| llvm_asm!("msr BASEPRI_MAX, $0" :: "r"(_basepri) : "memory" : "volatile"),
2121
),
2222
}
2323
},

src/register/control.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ pub fn read() -> Control {
163163
#[cfg(feature = "inline-asm")]
164164
() => {
165165
let r: u32;
166-
unsafe { asm!("mrs $0, CONTROL" : "=r"(r) ::: "volatile") }
166+
unsafe { llvm_asm!("mrs $0, CONTROL" : "=r"(r) ::: "volatile") }
167167
r
168168
}
169169

@@ -194,7 +194,7 @@ pub unsafe fn write(_control: Control) {
194194
#[cfg(feature = "inline-asm")]
195195
() => {
196196
let control = _control.bits();
197-
asm!("msr CONTROL, $0" :: "r"(control) : "memory" : "volatile");
197+
llvm_asm!("msr CONTROL, $0" :: "r"(control) : "memory" : "volatile");
198198
}
199199

200200
#[cfg(not(feature = "inline-asm"))]

src/register/faultmask.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub fn read() -> Faultmask {
3434
#[cfg(feature = "inline-asm")]
3535
() => {
3636
let r: u32;
37-
unsafe { asm!("mrs $0, FAULTMASK" : "=r"(r) ::: "volatile") }
37+
unsafe { llvm_asm!("mrs $0, FAULTMASK" : "=r"(r) ::: "volatile") }
3838
r
3939
}
4040

src/register/lr.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ pub fn read() -> u32 {
99
#[cfg(cortex_m)]
1010
() => {
1111
let r: u32;
12-
unsafe { asm!("mov $0,R14" : "=r"(r) ::: "volatile") }
12+
unsafe { llvm_asm!("mov $0,R14" : "=r"(r) ::: "volatile") }
1313
r
1414
}
1515

@@ -25,7 +25,7 @@ pub fn read() -> u32 {
2525
pub unsafe fn write(_bits: u32) {
2626
match () {
2727
#[cfg(cortex_m)]
28-
() => asm!("mov R14,$0" :: "r"(_bits) :: "volatile"),
28+
() => llvm_asm!("mov R14,$0" :: "r"(_bits) :: "volatile"),
2929

3030
#[cfg(not(cortex_m))]
3131
() => unimplemented!(),

src/register/msp.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ pub fn read() -> u32 {
77
#[cfg(all(cortex_m, feature = "inline-asm"))]
88
() => {
99
let r;
10-
unsafe { asm!("mrs $0,MSP" : "=r"(r) ::: "volatile") }
10+
unsafe { llvm_asm!("mrs $0,MSP" : "=r"(r) ::: "volatile") }
1111
r
1212
}
1313

@@ -30,7 +30,7 @@ pub fn read() -> u32 {
3030
pub unsafe fn write(_bits: u32) {
3131
match () {
3232
#[cfg(all(cortex_m, feature = "inline-asm"))]
33-
() => asm!("msr MSP,$0" :: "r"(_bits) :: "volatile"),
33+
() => llvm_asm!("msr MSP,$0" :: "r"(_bits) :: "volatile"),
3434

3535
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
3636
() => {

src/register/msplim.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ pub fn read() -> u32 {
77
#[cfg(all(cortex_m, feature = "inline-asm"))]
88
() => {
99
let r;
10-
unsafe { asm!("mrs $0,MSPLIM" : "=r"(r) ::: "volatile") }
10+
unsafe { llvm_asm!("mrs $0,MSPLIM" : "=r"(r) ::: "volatile") }
1111
r
1212
}
1313

@@ -30,7 +30,7 @@ pub fn read() -> u32 {
3030
pub unsafe fn write(_bits: u32) {
3131
match () {
3232
#[cfg(all(cortex_m, feature = "inline-asm"))]
33-
() => asm!("msr MSPLIM,$0" :: "r"(_bits) :: "volatile"),
33+
() => llvm_asm!("msr MSPLIM,$0" :: "r"(_bits) :: "volatile"),
3434

3535
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
3636
() => {

src/register/pc.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ pub fn read() -> u32 {
99
#[cfg(cortex_m)]
1010
() => {
1111
let r;
12-
unsafe { asm!("mov $0,R15" : "=r"(r) ::: "volatile") }
12+
unsafe { llvm_asm!("mov $0,R15" : "=r"(r) ::: "volatile") }
1313
r
1414
}
1515

@@ -25,7 +25,7 @@ pub fn read() -> u32 {
2525
pub unsafe fn write(_bits: u32) {
2626
match () {
2727
#[cfg(cortex_m)]
28-
() => asm!("mov R15,$0" :: "r"(_bits) :: "volatile"),
28+
() => llvm_asm!("mov R15,$0" :: "r"(_bits) :: "volatile"),
2929

3030
#[cfg(not(cortex_m))]
3131
() => unimplemented!(),

src/register/primask.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub fn read() -> Primask {
3434
#[cfg(feature = "inline-asm")]
3535
() => {
3636
let r: u32;
37-
unsafe { asm!("mrs $0, PRIMASK" : "=r"(r) ::: "volatile") }
37+
unsafe { llvm_asm!("mrs $0, PRIMASK" : "=r"(r) ::: "volatile") }
3838
r
3939
}
4040

src/register/psp.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ pub fn read() -> u32 {
77
#[cfg(all(cortex_m, feature = "inline-asm"))]
88
() => {
99
let r;
10-
unsafe { asm!("mrs $0,PSP" : "=r"(r) ::: "volatile") }
10+
unsafe { llvm_asm!("mrs $0,PSP" : "=r"(r) ::: "volatile") }
1111
r
1212
}
1313

@@ -30,7 +30,7 @@ pub fn read() -> u32 {
3030
pub unsafe fn write(_bits: u32) {
3131
match () {
3232
#[cfg(all(cortex_m, feature = "inline-asm"))]
33-
() => asm!("msr PSP,$0" :: "r"(_bits) :: "volatile"),
33+
() => llvm_asm!("msr PSP,$0" :: "r"(_bits) :: "volatile"),
3434

3535
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
3636
() => {

src/register/psplim.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ pub fn read() -> u32 {
77
#[cfg(all(cortex_m, feature = "inline-asm"))]
88
() => {
99
let r;
10-
unsafe { asm!("mrs $0,PSPLIM" : "=r"(r) ::: "volatile") }
10+
unsafe { llvm_asm!("mrs $0,PSPLIM" : "=r"(r) ::: "volatile") }
1111
r
1212
}
1313

@@ -30,7 +30,7 @@ pub fn read() -> u32 {
3030
pub unsafe fn write(_bits: u32) {
3131
match () {
3232
#[cfg(all(cortex_m, feature = "inline-asm"))]
33-
() => asm!("msr PSPLIM,$0" :: "r"(_bits) :: "volatile"),
33+
() => llvm_asm!("msr PSPLIM,$0" :: "r"(_bits) :: "volatile"),
3434

3535
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
3636
() => {

0 commit comments

Comments
 (0)