Add controls for enabling M, F, and D RISC-V extensions.
Three predicates affect each extension: - supports_m determines whether the target CPU supports the instruction set. - enable_m determines if the instructions should be used, assuming they're available. - use_m is the predicate used to actually use the instructions.
This commit is contained in:
@@ -22,7 +22,8 @@ mod tests {
|
|||||||
supports_m = false\n\
|
supports_m = false\n\
|
||||||
supports_a = false\n\
|
supports_a = false\n\
|
||||||
supports_f = false\n\
|
supports_f = false\n\
|
||||||
supports_d = false\n");
|
supports_d = false\n\
|
||||||
|
enable_m = true\n");
|
||||||
// Predicates are not part of the Display output.
|
// Predicates are not part of the Display output.
|
||||||
assert_eq!(f.full_float(), false);
|
assert_eq!(f.full_float(), false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -261,7 +261,9 @@ mod tests {
|
|||||||
"[shared]\n\
|
"[shared]\n\
|
||||||
opt_level = \"default\"\n\
|
opt_level = \"default\"\n\
|
||||||
is_64bit = false\n\
|
is_64bit = false\n\
|
||||||
enable_simd = true\n");
|
enable_float = true\n\
|
||||||
|
enable_simd = true\n\
|
||||||
|
enable_atomics = true\n");
|
||||||
assert_eq!(f.opt_level(), super::OptLevel::Default);
|
assert_eq!(f.opt_level(), super::OptLevel::Default);
|
||||||
assert_eq!(f.enable_simd(), true);
|
assert_eq!(f.enable_simd(), true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,8 +20,16 @@ opt_level = EnumSetting(
|
|||||||
|
|
||||||
is_64bit = BoolSetting("Enable 64-bit code generation")
|
is_64bit = BoolSetting("Enable 64-bit code generation")
|
||||||
|
|
||||||
|
enable_float = BoolSetting(
|
||||||
|
"""Enable the use of floating-point instructions""",
|
||||||
|
default=True)
|
||||||
|
|
||||||
enable_simd = BoolSetting(
|
enable_simd = BoolSetting(
|
||||||
"""Enable the use of SIMD instructions.""",
|
"""Enable the use of SIMD instructions.""",
|
||||||
default=True)
|
default=True)
|
||||||
|
|
||||||
|
enable_atomics = BoolSetting(
|
||||||
|
"""Enable the use of atomic instructions""",
|
||||||
|
default=True)
|
||||||
|
|
||||||
group.close(globals())
|
group.close(globals())
|
||||||
|
|||||||
@@ -14,6 +14,15 @@ supports_a = BoolSetting("CPU supports the 'A' extension (atomics)")
|
|||||||
supports_f = BoolSetting("CPU supports the 'F' extension (float)")
|
supports_f = BoolSetting("CPU supports the 'F' extension (float)")
|
||||||
supports_d = BoolSetting("CPU supports the 'D' extension (double)")
|
supports_d = BoolSetting("CPU supports the 'D' extension (double)")
|
||||||
|
|
||||||
|
enable_m = BoolSetting(
|
||||||
|
"Enable the use of 'M' instructions if available",
|
||||||
|
default=True)
|
||||||
|
|
||||||
|
use_m = And(supports_m, enable_m)
|
||||||
|
use_a = And(supports_a, shared.enable_atomics)
|
||||||
|
use_f = And(supports_f, shared.enable_float)
|
||||||
|
use_d = And(supports_d, shared.enable_float)
|
||||||
|
|
||||||
full_float = And(shared.enable_simd, supports_f, supports_d)
|
full_float = And(shared.enable_simd, supports_f, supports_d)
|
||||||
|
|
||||||
isa.settings.close(globals())
|
isa.settings.close(globals())
|
||||||
|
|||||||
Reference in New Issue
Block a user