Skip to content

Commit 5f5330f

Browse files
Update macros.rs to add read_write_csr_as_usize and update dscratch0 and dcsratch1 to use them instead of read_write_csr macro
1 parent 1396750 commit 5f5330f

File tree

3 files changed

+26
-10
lines changed

3 files changed

+26
-10
lines changed

riscv/src/register/dscratch0.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
//! dscratch0
22
3-
read_write_csr! {
4-
/// Debug scratch register 0
5-
Dscratch0: 0x7b2,
6-
mask: usize::MAX,
7-
}
3+
read_write_csr_as_usize!(Dscratch0, 0x7b2);
84

95
#[cfg(test)]
106
mod tests {

riscv/src/register/dscratch1.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
//! dscratch1
22
3-
read_write_csr! {
4-
/// Debug scratch register 1
5-
Dscratch1: 0x7b3,
6-
mask: usize::MAX,
7-
}
3+
read_write_csr_as_usize!(Dscratch1, 0x7b3);
84

95
#[cfg(test)]
106
mod tests {

riscv/src/register/macros.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,30 @@ macro_rules! write_csr_as_usize_rv32 {
301301
};
302302
}
303303

304+
/// Convenience macro to provide combined read/write of a CSR as a `usize`.
305+
///
306+
/// This composes [`read_csr_as_usize`] and [`write_csr_as_usize`]. Use the
307+
/// `safe` form to get safe wrappers instead of unsafe.
308+
#[macro_export]
309+
macro_rules! read_write_csr_as_usize {
310+
($csr_number:literal) => {
311+
$crate::read_csr_as_usize!($csr_number);
312+
$crate::write_csr_as_usize!($csr_number);
313+
};
314+
(safe $csr_number:literal) => {
315+
$crate::read_csr_as_usize!($csr_number);
316+
$crate::write_csr_as_usize!(safe $csr_number);
317+
};
318+
($csr_number:literal, $($cfg:meta),*) => {
319+
$crate::read_csr_as_usize!($csr_number, $($cfg),*);
320+
$crate::write_csr_as_usize!($csr_number, $($cfg),*);
321+
};
322+
(safe $csr_number:literal, $($cfg:meta),*) => {
323+
$crate::read_csr_as_usize!($csr_number, $($cfg),*);
324+
$crate::write_csr_as_usize!(safe $csr_number, $($cfg),*);
325+
};
326+
}
327+
304328
/// Convenience macro around the `csrrs` assembly instruction to set the CSR register.
305329
///
306330
/// This macro is intended for use with the [set_csr](crate::set_csr) or [set_clear_csr](crate::set_clear_csr) macros.

0 commit comments

Comments
 (0)