@@ -44,28 +44,32 @@ pub(crate) fn detect_features() -> cache::Initializer {
44
44
& [ Feature :: f, Feature :: zicsr] ,
45
45
bit:: test ( auxv. hwcap , ( b'f' - b'a' ) . into ( ) ) ,
46
46
) ;
47
+ enable_feature (
48
+ & mut value,
49
+ Feature :: h,
50
+ bit:: test ( auxv. hwcap , ( b'h' - b'a' ) . into ( ) ) ,
51
+ ) ;
52
+ enable_feature (
53
+ & mut value,
54
+ Feature :: m,
55
+ bit:: test ( auxv. hwcap , ( b'm' - b'a' ) . into ( ) ) ,
56
+ ) ;
57
+
58
+ // Handle base ISA.
47
59
let has_i = bit:: test ( auxv. hwcap , ( b'i' - b'a' ) . into ( ) ) ;
48
60
// If future RV128I is supported, implement with `enable_feature` here
49
61
#[ cfg( target_pointer_width = "64" ) ]
50
62
enable_feature ( & mut value, Feature :: rv64i, has_i) ;
51
63
#[ cfg( target_pointer_width = "32" ) ]
52
64
enable_feature ( & mut value, Feature :: rv32i, has_i) ;
65
+ // FIXME: e is not exposed in any of asm/hwcap.h, uapi/asm/hwcap.h, uapi/asm/hwprobe.h
53
66
#[ cfg( target_pointer_width = "32" ) ]
54
67
enable_feature (
55
68
& mut value,
56
69
Feature :: rv32e,
57
70
bit:: test ( auxv. hwcap , ( b'e' - b'a' ) . into ( ) ) ,
58
71
) ;
59
- enable_feature (
60
- & mut value,
61
- Feature :: h,
62
- bit:: test ( auxv. hwcap , ( b'h' - b'a' ) . into ( ) ) ,
63
- ) ;
64
- enable_feature (
65
- & mut value,
66
- Feature :: m,
67
- bit:: test ( auxv. hwcap , ( b'm' - b'a' ) . into ( ) ) ,
68
- ) ;
72
+
69
73
// FIXME: Auxvec does not show supervisor feature support, but this mode may be useful
70
74
// to detect when Rust is used to write Linux kernel modules.
71
75
// These should be more than Auxvec way to detect supervisor features.
0 commit comments