1 //! Shared definitions for the Cranelift intermediate language. 2 3 mod entities; 4 pub mod formats; 5 pub mod immediates; 6 pub mod instructions; 7 pub mod legalize; 8 pub mod settings; 9 pub mod types; 10 11 use crate::cdsl::formats::FormatRegistry; 12 use crate::cdsl::instructions::{AllInstructions, InstructionGroup}; 13 use crate::cdsl::settings::SettingGroup; 14 use crate::cdsl::xform::TransformGroups; 15 16 use crate::shared::entities::EntityRefs; 17 use crate::shared::immediates::Immediates; 18 19 pub struct Definitions { 20 pub settings: SettingGroup, 21 pub all_instructions: AllInstructions, 22 pub instructions: InstructionGroup, 23 pub imm: Immediates, 24 pub format_registry: FormatRegistry, 25 pub transform_groups: TransformGroups, 26 } 27 28 pub fn define() -> Definitions { 29 let mut all_instructions = AllInstructions::new(); 30 31 let immediates = Immediates::new(); 32 let entities = EntityRefs::new();; 33 let format_registry = formats::define(&immediates, &entities); 34 let instructions = instructions::define( 35 &mut all_instructions, 36 &format_registry, 37 &immediates, 38 &entities, 39 ); 40 let transform_groups = legalize::define(&instructions, &immediates); 41 42 Definitions { 43 settings: settings::define(), 44 all_instructions, 45 instructions, 46 imm: immediates, 47 format_registry, 48 transform_groups, 49 } 50 } 51