cranelift_codegen_meta/isa/
mod.rs1use crate::cdsl::isa::TargetIsa;
3use std::fmt;
4
5mod arm64;
6mod pulley;
7mod riscv64;
8mod s390x;
9pub(crate) mod x86;
10
11#[derive(PartialEq, Copy, Clone)]
13pub enum Isa {
14 X86,
15 Arm64,
16 S390x,
17 Riscv64,
18 Pulley32,
19 Pulley64,
20}
21
22impl Isa {
23 pub fn from_name(name: &str) -> Option<Self> {
25 Isa::all()
26 .iter()
27 .cloned()
28 .find(|isa| isa.to_string() == name)
29 }
30
31 pub fn from_arch(arch: &str) -> Option<Self> {
33 match arch {
34 "aarch64" => Some(Isa::Arm64),
35 "s390x" => Some(Isa::S390x),
36 x if ["x86_64", "i386", "i586", "i686"].contains(&x) => Some(Isa::X86),
37 "riscv64" | "riscv64gc" | "riscv64imac" => Some(Isa::Riscv64),
38 "pulley32" => Some(Isa::Pulley32),
39 "pulley64" => Some(Isa::Pulley64),
40 _ => None,
41 }
42 }
43
44 pub fn all() -> &'static [Isa] {
46 &[
47 Isa::X86,
48 Isa::Arm64,
49 Isa::S390x,
50 Isa::Riscv64,
51 Isa::Pulley32,
52 Isa::Pulley64,
53 ]
54 }
55}
56
57impl fmt::Display for Isa {
58 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
60 match *self {
61 Isa::X86 => write!(f, "x86"),
62 Isa::Arm64 => write!(f, "arm64"),
63 Isa::S390x => write!(f, "s390x"),
64 Isa::Riscv64 => write!(f, "riscv64"),
65 Isa::Pulley32 => write!(f, "pulley32"),
66 Isa::Pulley64 => write!(f, "pulley64"),
67 }
68 }
69}
70
71pub(crate) fn define(isas: &[Isa]) -> Vec<TargetIsa> {
72 isas.iter()
73 .map(|isa| match isa {
74 Isa::X86 => x86::define(),
75 Isa::Arm64 => arm64::define(),
76 Isa::S390x => s390x::define(),
77 Isa::Riscv64 => riscv64::define(),
78 Isa::Pulley32 | Isa::Pulley64 => pulley::define(),
79 })
80 .collect()
81}