[meta] Use named predicates for x86 settings in the Rust crate too;
And generate them using the same deterministic order that the Python code uses.
This commit is contained in:
@@ -11,7 +11,7 @@ use crate::shared::Definitions as SharedDefinitions;
|
||||
mod instructions;
|
||||
mod legalize;
|
||||
|
||||
fn define_settings(_shared: &SettingGroup) -> SettingGroup {
|
||||
fn define_settings(shared: &SettingGroup) -> SettingGroup {
|
||||
let mut settings = SettingGroupBuilder::new("x86");
|
||||
|
||||
// CPUID.01H:ECX
|
||||
@@ -47,6 +47,24 @@ fn define_settings(_shared: &SettingGroup) -> SettingGroup {
|
||||
settings.add_predicate("use_bmi1", predicate!(has_bmi1));
|
||||
settings.add_predicate("use_lznct", predicate!(has_lzcnt));
|
||||
|
||||
// Some shared boolean values are used in x86 instruction predicates, so we need to group them
|
||||
// in the same TargetIsa, for compabitibity with code generated by meta-python.
|
||||
// TODO Once all the meta generation code has been migrated from Python to Rust, we can put it
|
||||
// back in the shared SettingGroup, and use it in x86 instruction predicates.
|
||||
|
||||
let is_pic = shared.get_bool("is_pic");
|
||||
let allones_funcaddrs = shared.get_bool("allones_funcaddrs");
|
||||
settings.add_predicate("is_pic", predicate!(is_pic));
|
||||
settings.add_predicate("not_is_pic", predicate!(!is_pic));
|
||||
settings.add_predicate(
|
||||
"all_ones_funcaddrs_and_not_is_pic",
|
||||
predicate!(allones_funcaddrs && !is_pic),
|
||||
);
|
||||
settings.add_predicate(
|
||||
"not_all_ones_funcaddrs_and_not_is_pic",
|
||||
predicate!(!allones_funcaddrs && !is_pic),
|
||||
);
|
||||
|
||||
settings.add_preset("baseline", preset!());
|
||||
let nehalem = settings.add_preset(
|
||||
"nehalem",
|
||||
|
||||
Reference in New Issue
Block a user