[meta] Tweak generation of settings/registers;
This commit is contained in:
@@ -132,9 +132,9 @@ fn gen_isa(isa: &TargetIsa, fmt: &mut Formatter) {
|
|||||||
fmtln!(fmt, "}");
|
fmtln!(fmt, "}");
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate(isa: &TargetIsa, base_filename: &str, out_dir: &str) -> Result<(), error::Error> {
|
pub fn generate(isa: &TargetIsa, filename: &str, out_dir: &str) -> Result<(), error::Error> {
|
||||||
let mut fmt = Formatter::new();
|
let mut fmt = Formatter::new();
|
||||||
gen_isa(&isa, &mut fmt);
|
gen_isa(&isa, &mut fmt);
|
||||||
fmt.update_file(format!("{}-{}.rs", base_filename, isa.name), out_dir)?;
|
fmt.update_file(filename, out_dir)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,14 @@
|
|||||||
use crate::cdsl::camel_case;
|
use crate::cdsl::camel_case;
|
||||||
use crate::cdsl::isa::TargetIsa;
|
|
||||||
use crate::cdsl::settings::{
|
use crate::cdsl::settings::{
|
||||||
BoolSetting, Predicate, Preset, Setting, SettingGroup, SpecificSetting,
|
BoolSetting, Predicate, Preset, Setting, SettingGroup, SpecificSetting,
|
||||||
};
|
};
|
||||||
use crate::constant_hash::{generate_table, simple_hash};
|
use crate::constant_hash::{generate_table, simple_hash};
|
||||||
use crate::error;
|
use crate::error;
|
||||||
use crate::shared;
|
|
||||||
use crate::srcgen::{Formatter, Match};
|
use crate::srcgen::{Formatter, Match};
|
||||||
use crate::unique_table::UniqueSeqTable;
|
use crate::unique_table::UniqueSeqTable;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
enum ParentGroup {
|
pub enum ParentGroup {
|
||||||
None,
|
None,
|
||||||
Shared,
|
Shared,
|
||||||
}
|
}
|
||||||
@@ -187,12 +185,12 @@ fn gen_getters(group: &SettingGroup, fmt: &mut Formatter) {
|
|||||||
fmt.doc_comment("Get a view of the boolean predicates.");
|
fmt.doc_comment("Get a view of the boolean predicates.");
|
||||||
fmtln!(
|
fmtln!(
|
||||||
fmt,
|
fmt,
|
||||||
"pub fn predicate_view(&self) -> ::settings::PredicateView {"
|
"pub fn predicate_view(&self) -> crate::settings::PredicateView {"
|
||||||
);
|
);
|
||||||
fmt.indent(|fmt| {
|
fmt.indent(|fmt| {
|
||||||
fmtln!(
|
fmtln!(
|
||||||
fmt,
|
fmt,
|
||||||
"::settings::PredicateView::new(&self.bytes[{}..])",
|
"crate::settings::PredicateView::new(&self.bytes[{}..])",
|
||||||
group.bool_start_byte_offset
|
group.bool_start_byte_offset
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -441,17 +439,14 @@ fn gen_group(group: &SettingGroup, parent: ParentGroup, fmt: &mut Formatter) {
|
|||||||
gen_display(group, fmt);
|
gen_display(group, fmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_common(filename: &str, out_dir: &str) -> Result<SettingGroup, error::Error> {
|
pub fn generate(
|
||||||
let settings = shared::settings::generate();
|
settings: &SettingGroup,
|
||||||
|
parent_group: ParentGroup,
|
||||||
|
filename: &str,
|
||||||
|
out_dir: &str,
|
||||||
|
) -> Result<(), error::Error> {
|
||||||
let mut fmt = Formatter::new();
|
let mut fmt = Formatter::new();
|
||||||
gen_group(&settings, ParentGroup::None, &mut fmt);
|
gen_group(&settings, parent_group, &mut fmt);
|
||||||
fmt.update_file(filename, out_dir)?;
|
fmt.update_file(filename, out_dir)?;
|
||||||
Ok(settings)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn generate(isa: &TargetIsa, prefix: &str, out_dir: &str) -> Result<(), error::Error> {
|
|
||||||
let mut fmt = Formatter::new();
|
|
||||||
gen_group(&isa.settings, ParentGroup::Shared, &mut fmt);
|
|
||||||
fmt.update_file(format!("{}-{}.rs", prefix, isa.name), out_dir)?;
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,16 +20,27 @@ pub fn isa_from_arch(arch: &str) -> Result<isa::Isa, String> {
|
|||||||
/// Generates all the Rust source files used in Cranelift from the meta-language.
|
/// Generates all the Rust source files used in Cranelift from the meta-language.
|
||||||
pub fn generate(isas: &Vec<isa::Isa>, out_dir: &str) -> Result<(), error::Error> {
|
pub fn generate(isas: &Vec<isa::Isa>, out_dir: &str) -> Result<(), error::Error> {
|
||||||
// Common definitions.
|
// Common definitions.
|
||||||
let shared_settings = gen_settings::generate_common("new_settings.rs", &out_dir)?;
|
let settings = shared::settings::define();
|
||||||
|
|
||||||
|
gen_settings::generate(
|
||||||
|
&settings,
|
||||||
|
gen_settings::ParentGroup::None,
|
||||||
|
"new_settings.rs",
|
||||||
|
&out_dir,
|
||||||
|
)?;
|
||||||
gen_types::generate("types.rs", &out_dir)?;
|
gen_types::generate("types.rs", &out_dir)?;
|
||||||
|
|
||||||
// Per ISA definitions.
|
// Per ISA definitions.
|
||||||
let isas = isa::define(isas, &shared_settings);
|
let isas = isa::define(isas, &settings);
|
||||||
|
|
||||||
for isa in isas {
|
for isa in isas {
|
||||||
gen_registers::generate(&isa, "registers", &out_dir)?;
|
gen_registers::generate(&isa, &format!("registers-{}.rs", isa.name), &out_dir)?;
|
||||||
gen_settings::generate(&isa, "new_settings", &out_dir)?;
|
gen_settings::generate(
|
||||||
|
&isa.settings,
|
||||||
|
gen_settings::ParentGroup::Shared,
|
||||||
|
&format!("new_settings-{}", isa.name),
|
||||||
|
&out_dir,
|
||||||
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use crate::cdsl::settings::{SettingGroup, SettingGroupBuilder};
|
use crate::cdsl::settings::{SettingGroup, SettingGroupBuilder};
|
||||||
|
|
||||||
pub fn generate() -> SettingGroup {
|
pub fn define() -> SettingGroup {
|
||||||
let mut settings = SettingGroupBuilder::new("shared");
|
let mut settings = SettingGroupBuilder::new("shared");
|
||||||
|
|
||||||
settings.add_enum(
|
settings.add_enum(
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ impl Iterator for FloatIterator {
|
|||||||
/// A type representing CPU flags.
|
/// A type representing CPU flags.
|
||||||
///
|
///
|
||||||
/// Flags can't be stored in memory.
|
/// Flags can't be stored in memory.
|
||||||
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
|
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
|
||||||
pub enum Flag {
|
pub enum Flag {
|
||||||
/// CPU flags from an integer comparison.
|
/// CPU flags from an integer comparison.
|
||||||
IFlags,
|
IFlags,
|
||||||
|
|||||||
Reference in New Issue
Block a user