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