Skip to content

Commit b3a42fd

Browse files
Merge pull request #245 from rmsyn/riscv/mstatus-csr-macro
riscv: define mstatus using CSR macro
2 parents 3cd758b + 906b027 commit b3a42fd

File tree

4 files changed

+246
-370
lines changed

4 files changed

+246
-370
lines changed

riscv/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
2323
- Use CSR helper macros to define `mimpid` register
2424
- Use CSR helper macros to define `misa` register
2525
- Use CSR helper macros to define `mip` register
26+
- Use CSR helper macros to define `mstatus` register
2627

2728
## [v0.12.1] - 2024-10-20
2829

riscv/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
3535
#![no_std]
3636
#![allow(clippy::missing_safety_doc)]
37+
#![allow(clippy::eq_op)]
3738

3839
pub use paste::paste;
3940

riscv/src/register/macros.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -669,14 +669,20 @@ macro_rules! csr_field_enum {
669669
($(#[$field_ty_doc:meta])*
670670
$field_ty:ident {
671671
default: $default_variant:ident,
672-
$($variant:ident = $value:expr$(,)?)+
672+
$(
673+
$(#[$field_doc:meta])*
674+
$variant:ident = $value:expr$(,)?
675+
)+
673676
}$(,)?
674677
) => {
675678
$(#[$field_ty_doc])*
676679
#[repr(usize)]
677680
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
678681
pub enum $field_ty {
679-
$($variant = $value),+
682+
$(
683+
$(#[$field_doc])*
684+
$variant = $value
685+
),+
680686
}
681687

682688
impl $field_ty {
@@ -1098,4 +1104,13 @@ macro_rules! test_csr_field {
10981104
assert_eq!($reg.[<try_set_ $field>]($index, false), Err($err));
10991105
}
11001106
}};
1107+
1108+
// test an enum bit field
1109+
($reg:ident, $field:ident: $var:expr) => {{
1110+
$crate::paste! {
1111+
$reg.[<set_ $field>]($var);
1112+
assert_eq!($reg.$field(), $var);
1113+
assert_eq!($reg.[<try_ $field>](), Ok($var));
1114+
}
1115+
}};
11011116
}

0 commit comments

Comments
 (0)