From f3f449b45be02ee42997f0afa278068d003df056 Mon Sep 17 00:00:00 2001 From: Benjamin Bouvier Date: Mon, 11 Mar 2019 19:14:07 +0100 Subject: [PATCH] [meta] Tweak generation of settings/registers; --- cranelift/codegen/meta/src/gen_registers.rs | 4 +-- cranelift/codegen/meta/src/gen_settings.rs | 25 ++++++++----------- cranelift/codegen/meta/src/lib.rs | 19 +++++++++++--- cranelift/codegen/meta/src/shared/settings.rs | 2 +- cranelift/codegen/meta/src/shared/types.rs | 2 +- 5 files changed, 29 insertions(+), 23 deletions(-) diff --git a/cranelift/codegen/meta/src/gen_registers.rs b/cranelift/codegen/meta/src/gen_registers.rs index 3a75c7147a..5e0fdac57b 100644 --- a/cranelift/codegen/meta/src/gen_registers.rs +++ b/cranelift/codegen/meta/src/gen_registers.rs @@ -132,9 +132,9 @@ fn gen_isa(isa: &TargetIsa, fmt: &mut Formatter) { 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(); gen_isa(&isa, &mut fmt); - fmt.update_file(format!("{}-{}.rs", base_filename, isa.name), out_dir)?; + fmt.update_file(filename, out_dir)?; Ok(()) } diff --git a/cranelift/codegen/meta/src/gen_settings.rs b/cranelift/codegen/meta/src/gen_settings.rs index a797544534..b57e7a4f51 100644 --- a/cranelift/codegen/meta/src/gen_settings.rs +++ b/cranelift/codegen/meta/src/gen_settings.rs @@ -1,16 +1,14 @@ use crate::cdsl::camel_case; -use crate::cdsl::isa::TargetIsa; use crate::cdsl::settings::{ BoolSetting, Predicate, Preset, Setting, SettingGroup, SpecificSetting, }; use crate::constant_hash::{generate_table, simple_hash}; use crate::error; -use crate::shared; use crate::srcgen::{Formatter, Match}; use crate::unique_table::UniqueSeqTable; use std::collections::HashMap; -enum ParentGroup { +pub enum ParentGroup { None, Shared, } @@ -187,12 +185,12 @@ fn gen_getters(group: &SettingGroup, fmt: &mut Formatter) { fmt.doc_comment("Get a view of the boolean predicates."); fmtln!( fmt, - "pub fn predicate_view(&self) -> ::settings::PredicateView {" + "pub fn predicate_view(&self) -> crate::settings::PredicateView {" ); fmt.indent(|fmt| { fmtln!( fmt, - "::settings::PredicateView::new(&self.bytes[{}..])", + "crate::settings::PredicateView::new(&self.bytes[{}..])", group.bool_start_byte_offset ); }); @@ -441,17 +439,14 @@ fn gen_group(group: &SettingGroup, parent: ParentGroup, fmt: &mut Formatter) { gen_display(group, fmt); } -pub fn generate_common(filename: &str, out_dir: &str) -> Result { - let settings = shared::settings::generate(); +pub fn generate( + settings: &SettingGroup, + parent_group: ParentGroup, + filename: &str, + out_dir: &str, +) -> Result<(), error::Error> { 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)?; - 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(()) } diff --git a/cranelift/codegen/meta/src/lib.rs b/cranelift/codegen/meta/src/lib.rs index fe65e19d2b..1599829dd9 100644 --- a/cranelift/codegen/meta/src/lib.rs +++ b/cranelift/codegen/meta/src/lib.rs @@ -20,16 +20,27 @@ pub fn isa_from_arch(arch: &str) -> Result { /// Generates all the Rust source files used in Cranelift from the meta-language. pub fn generate(isas: &Vec, out_dir: &str) -> Result<(), error::Error> { // 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)?; // Per ISA definitions. - let isas = isa::define(isas, &shared_settings); + let isas = isa::define(isas, &settings); for isa in isas { - gen_registers::generate(&isa, "registers", &out_dir)?; - gen_settings::generate(&isa, "new_settings", &out_dir)?; + gen_registers::generate(&isa, &format!("registers-{}.rs", isa.name), &out_dir)?; + gen_settings::generate( + &isa.settings, + gen_settings::ParentGroup::Shared, + &format!("new_settings-{}", isa.name), + &out_dir, + )?; } Ok(()) diff --git a/cranelift/codegen/meta/src/shared/settings.rs b/cranelift/codegen/meta/src/shared/settings.rs index b792a72283..c89efa6b02 100644 --- a/cranelift/codegen/meta/src/shared/settings.rs +++ b/cranelift/codegen/meta/src/shared/settings.rs @@ -1,6 +1,6 @@ use crate::cdsl::settings::{SettingGroup, SettingGroupBuilder}; -pub fn generate() -> SettingGroup { +pub fn define() -> SettingGroup { let mut settings = SettingGroupBuilder::new("shared"); settings.add_enum( diff --git a/cranelift/codegen/meta/src/shared/types.rs b/cranelift/codegen/meta/src/shared/types.rs index 7ce42b1978..aff837252b 100644 --- a/cranelift/codegen/meta/src/shared/types.rs +++ b/cranelift/codegen/meta/src/shared/types.rs @@ -113,7 +113,7 @@ impl Iterator for FloatIterator { /// A type representing CPU flags. /// /// Flags can't be stored in memory. -#[derive(Debug, Clone, Copy, Eq, PartialEq)] +#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)] pub enum Flag { /// CPU flags from an integer comparison. IFlags,