Skip to content

Commit 8409013

Browse files
rmsynromancardenas
andcommitted
fixup: riscv: remove CSR macro enum creation branch
Removes CSR helper macro branches that include field enum type creation. Leaves the creation of the field enum to the separate `csr_field_enum` macro, or manual definition of the field enum. Authored-by: rmsyn <[email protected]> Co-authored-by: romancardenas <[email protected]>
1 parent 3aef767 commit 8409013

File tree

4 files changed

+54
-104
lines changed

4 files changed

+54
-104
lines changed

riscv/src/register/macros.rs

Lines changed: 10 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,14 @@ macro_rules! csr_field_enum {
690690
val.into_usize()
691691
}
692692
}
693+
694+
impl TryFrom<usize> for $field_ty {
695+
type Error = $crate::result::Error;
696+
697+
fn try_from(val: usize) -> $crate::result::Result<Self> {
698+
Self::from_usize(val)
699+
}
700+
}
693701
};
694702
}
695703

@@ -821,22 +829,9 @@ macro_rules! read_write_csr_field {
821829
$try_field:ident,
822830
$(#[$set_field_doc:meta])+
823831
$set_field:ident,
824-
$(#[$field_ty_doc:meta])+
825-
$field_ty:ident {
826-
range: [$field_start:literal : $field_end:literal],
827-
default: $default_variant:ident,
828-
$($variant:ident = $value:expr$(,)?)+
829-
}$(,)?
832+
$field_ty:ident,
833+
range: [$field_start:literal : $field_end:literal],
830834
) => {
831-
$crate::csr_field_enum!(
832-
$(#[$field_ty_doc])+
833-
$field_ty {
834-
range: [$field_start : $field_end],
835-
default: $default_variant,
836-
$($variant = $value,)+
837-
},
838-
);
839-
840835
$crate::read_only_csr_field!(
841836
$ty,
842837
$(#[$field_doc])+
@@ -921,38 +916,6 @@ macro_rules! read_only_csr_field {
921916
}
922917
};
923918

924-
($ty:ident,
925-
$(#[$field_doc:meta])+
926-
$field:ident,
927-
$(#[$try_field_doc:meta])+
928-
$try_field:ident,
929-
$(#[$field_ty_doc:meta])+
930-
$field_ty:ident {
931-
range: [$field_start:literal : $field_end:literal],
932-
default: $default_variant:ident,
933-
$($variant:ident = $value:expr$(,)?)+
934-
}$(,)?
935-
) => {
936-
$crate::csr_field_enum!(
937-
$(#[$field_ty_doc])+
938-
$field_ty {
939-
range: [$field_start : $field_end],
940-
default: $default_variant,
941-
$($variant = $value,)+
942-
},
943-
);
944-
945-
$crate::read_only_csr_field!(
946-
$ty,
947-
$(#[$field_doc])*
948-
$field,
949-
$(#[$try_field_doc])*
950-
$try_field,
951-
$field_ty,
952-
range: [$field_start : $field_end],
953-
);
954-
};
955-
956919
($ty:ident,
957920
$(#[$field_doc:meta])+
958921
$field:ident,
@@ -1056,34 +1019,6 @@ macro_rules! write_only_csr_field {
10561019
}
10571020
};
10581021

1059-
($ty:ident,
1060-
$(#[$field_doc:meta])+
1061-
$field:ident,
1062-
$(#[$field_ty_doc:meta])+
1063-
$field_ty:ident {
1064-
range: [$field_start:literal : $field_end:literal],
1065-
default: $default_variant:ident,
1066-
$($variant:ident = $value:expr$(,)?)+
1067-
}$(,)?
1068-
) => {
1069-
$crate::csr_field_enum!(
1070-
$(#[$field_ty_doc])+
1071-
$field_ty {
1072-
range: [$field_start : $field_end],
1073-
default: $default_variant,
1074-
$($variant = $value,)+
1075-
},
1076-
);
1077-
1078-
$crate::write_only_csr_field!(
1079-
$ty,
1080-
$(#[$field_doc])+
1081-
$field,
1082-
$field_ty,
1083-
range: [$field_start : $field_end],
1084-
);
1085-
};
1086-
10871022
($ty:ident,
10881023
$(#[$field_doc:meta])+
10891024
$field:ident,

riscv/src/register/tests/read_only_csr.rs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,13 @@ read_only_csr_field! {
2121
range: 1..=3,
2222
}
2323

24-
read_only_csr_field!(
24+
read_only_csr_field! {
2525
Mtest,
2626
/// multi-bit field
2727
multi_field: [4:7],
28-
);
28+
}
2929

30-
read_only_csr_field!(
31-
Mtest,
32-
/// multi-bit field
33-
field_enum,
34-
/// try-getter multi-bit field
35-
try_field_enum,
30+
csr_field_enum! {
3631
/// field enum type with valid field variants
3732
MtestFieldEnum {
3833
range: [8:11],
@@ -41,8 +36,18 @@ read_only_csr_field!(
4136
Field2 = 2,
4237
Field3 = 3,
4338
Field4 = 15,
44-
},
45-
);
39+
}
40+
}
41+
42+
read_only_csr_field! {
43+
Mtest,
44+
/// multi-bit field
45+
field_enum,
46+
/// try-getter multi-bit field
47+
try_field_enum,
48+
MtestFieldEnum,
49+
range: [8:11],
50+
}
4651

4752
// we don't test the `read` function, we are only testing in-memory functions.
4853
#[allow(unused)]

riscv/src/register/tests/read_write_csr.rs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,23 +28,16 @@ read_write_csr_field! {
2828
range: 1..=3,
2929
}
3030

31-
read_write_csr_field!(
31+
read_write_csr_field! {
3232
Mtest,
3333
/// multi-bit field
3434
multi_field,
3535
/// setter multi-bit field
3636
set_multi_field,
3737
range: [4:7],
38-
);
38+
}
3939

40-
read_write_csr_field!(
41-
Mtest,
42-
/// multi-bit field
43-
field_enum,
44-
/// try-get multi-bit field
45-
try_field_enum,
46-
/// setter multi-bit field
47-
set_field_enum,
40+
csr_field_enum! {
4841
/// field enum type with valid field variants
4942
MtestFieldEnum {
5043
range: [8:11],
@@ -54,7 +47,19 @@ read_write_csr_field!(
5447
Field3 = 3,
5548
Field4 = 15,
5649
}
57-
);
50+
}
51+
52+
read_write_csr_field! {
53+
Mtest,
54+
/// multi-bit field
55+
field_enum,
56+
/// try-get multi-bit field
57+
try_field_enum,
58+
/// setter multi-bit field
59+
set_field_enum,
60+
MtestFieldEnum,
61+
range: [8:11],
62+
}
5863

5964
// we don't test the `read` and `write` functions, we are only testing in-memory functions.
6065
#[allow(unused)]

riscv/src/register/tests/write_only_csr.rs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,13 @@ write_only_csr_field! {
2121
range: 1..=3,
2222
}
2323

24-
write_only_csr_field!(
24+
write_only_csr_field! {
2525
Mtest,
2626
/// setter multi-bit field
2727
set_multi_field: [4:7],
28-
);
28+
}
2929

30-
write_only_csr_field!(
31-
Mtest,
32-
/// setter multi-bit field
33-
set_field_enum,
30+
csr_field_enum! {
3431
/// field enum type with valid field variants
3532
MtestFieldEnum {
3633
range: [8:11],
@@ -39,8 +36,16 @@ write_only_csr_field!(
3936
Field2 = 2,
4037
Field3 = 3,
4138
Field4 = 15,
42-
},
43-
);
39+
}
40+
}
41+
42+
write_only_csr_field! {
43+
Mtest,
44+
/// setter multi-bit field
45+
set_field_enum,
46+
MtestFieldEnum,
47+
range: [8:11],
48+
}
4449

4550
// we don't test the `write` function, we are only testing in-memory functions.
4651
#[allow(unused)]

0 commit comments

Comments
 (0)