cranelift_codegen_meta/
lib.rs1#[macro_use]
4mod cdsl;
5mod srcgen;
6
7pub mod error;
8pub mod isa;
9
10mod gen_binemit;
11mod gen_encodings;
12mod gen_inst;
13mod gen_legalizer;
14mod gen_registers;
15mod gen_settings;
16mod gen_types;
17
18mod default_map;
19mod shared;
20mod unique_table;
21
22pub fn isa_from_arch(arch: &str) -> Result<isa::Isa, String> {
24 isa::Isa::from_arch(arch).ok_or_else(|| format!("no supported isa found for arch `{}`", arch))
25}
26
27pub fn generate(isas: &[isa::Isa], out_dir: &str) -> Result<(), error::Error> {
29 let mut shared_defs = shared::define();
32
33 gen_settings::generate(
34 &shared_defs.settings,
35 gen_settings::ParentGroup::None,
36 "settings.rs",
37 &out_dir,
38 )?;
39 gen_types::generate("types.rs", &out_dir)?;
40
41 let isas = isa::define(isas, &mut shared_defs);
43
44 let all_formats = shared_defs.verify_instruction_formats();
46
47 gen_inst::generate(
49 all_formats,
50 &shared_defs.all_instructions,
51 "opcodes.rs",
52 "inst_builder.rs",
53 &out_dir,
54 )?;
55
56 gen_legalizer::generate(&isas, &shared_defs.transform_groups, "legalize", &out_dir)?;
57
58 for isa in isas {
59 gen_registers::generate(&isa, &format!("registers-{}.rs", isa.name), &out_dir)?;
60
61 gen_settings::generate(
62 &isa.settings,
63 gen_settings::ParentGroup::Shared,
64 &format!("settings-{}.rs", isa.name),
65 &out_dir,
66 )?;
67
68 gen_encodings::generate(
69 &shared_defs,
70 &isa,
71 &format!("encoding-{}.rs", isa.name),
72 &out_dir,
73 )?;
74
75 gen_binemit::generate(
76 &isa.name,
77 &isa.recipes,
78 &format!("binemit-{}.rs", isa.name),
79 &out_dir,
80 )?;
81 }
82
83 Ok(())
84}