File tree Expand file tree Collapse file tree 2 files changed +31
-15
lines changed Expand file tree Collapse file tree 2 files changed +31
-15
lines changed Original file line number Diff line number Diff line change @@ -25,6 +25,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
25
25
- Use CSR helper macros to define ` misa ` register
26
26
- Use CSR helper macros to define ` mip ` register
27
27
- Use CSR helper macros to define ` mstatus ` register
28
+ - Use CSR helper macros to define ` mstatush ` register
28
29
29
30
## [ v0.12.1] - 2024-10-20
30
31
Original file line number Diff line number Diff line change 2
2
3
3
pub use super :: mstatus:: Endianness ;
4
4
5
- /// mstatus register
6
- # [ derive ( Clone , Copy , Debug ) ]
7
- pub struct Mstatush {
8
- bits : usize ,
5
+ read_write_csr ! {
6
+ /// mstatus register
7
+ Mstatush : 0x310 ,
8
+ mask : 0x30 ,
9
9
}
10
10
11
- impl Mstatush {
11
+ read_write_csr_field ! {
12
+ Mstatush ,
12
13
/// S-mode non-instruction-fetch memory endianness
13
- #[ inline]
14
- pub fn sbe ( & self ) -> Endianness {
15
- Endianness :: from ( self . bits & ( 1 << 4 ) != 0 )
16
- }
14
+ sbe,
15
+ Endianness : [ 4 : 4 ] ,
16
+ }
17
17
18
+ read_write_csr_field ! {
19
+ Mstatush ,
18
20
/// M-mode non-instruction-fetch memory endianness
19
- #[ inline]
20
- pub fn mbe ( & self ) -> Endianness {
21
- Endianness :: from ( self . bits & ( 1 << 5 ) != 0 )
22
- }
21
+ mbe,
22
+ Endianness : [ 5 : 5 ] ,
23
23
}
24
24
25
- read_csr_as_rv32 ! ( Mstatush , 0x310 ) ;
26
- write_csr_rv32 ! ( 0x310 ) ;
27
25
set_rv32 ! ( 0x310 ) ;
28
26
clear_rv32 ! ( 0x310 ) ;
29
27
@@ -44,3 +42,20 @@ pub unsafe fn set_mbe(endianness: Endianness) {
44
42
Endianness :: LittleEndian => _clear ( 1 << 5 ) ,
45
43
}
46
44
}
45
+
46
+ #[ cfg( test) ]
47
+ mod tests {
48
+ use super :: * ;
49
+
50
+ #[ test]
51
+ fn test_mstatush ( ) {
52
+ let mut m = Mstatush :: from_bits ( 0 ) ;
53
+
54
+ [ Endianness :: LittleEndian , Endianness :: BigEndian ]
55
+ . into_iter ( )
56
+ . for_each ( |endianness| {
57
+ test_csr_field ! ( m, sbe: endianness) ;
58
+ test_csr_field ! ( m, mbe: endianness) ;
59
+ } ) ;
60
+ }
61
+ }
You can’t perform that action at this time.
0 commit comments