Simplify isa_builder macro

This commit is contained in:
Nicolas B. Pierron
2019-09-06 16:14:55 +02:00
committed by Nicolas B. Pierron
parent d2443a75f3
commit 90b0b86f5c

View File

@@ -88,18 +88,17 @@ pub mod registers;
mod stack; mod stack;
/// Returns a builder that can create a corresponding `TargetIsa` /// Returns a builder that can create a corresponding `TargetIsa`
/// or `Err(LookupError::Unsupported)` if not enabled. /// or `Err(LookupError::SupportDisabled)` if not enabled.
macro_rules! isa_builder { macro_rules! isa_builder {
($name:ident, $feature:tt) => {{ ($name: ident, $feature: tt, $triple: ident) => {{
#[cfg(feature = $feature)] #[cfg(feature = $feature)]
fn $name(triple: Triple) -> Result<Builder, LookupError> { {
Ok($name::isa_builder(triple)) Ok($name::isa_builder($triple))
}; }
#[cfg(not(feature = $feature))] #[cfg(not(feature = $feature))]
fn $name(_triple: Triple) -> Result<Builder, LookupError> { {
Err(LookupError::SupportDisabled) Err(LookupError::SupportDisabled)
} }
$name
}}; }};
} }
@@ -107,12 +106,12 @@ macro_rules! isa_builder {
/// Return a builder that can create a corresponding `TargetIsa`. /// Return a builder that can create a corresponding `TargetIsa`.
pub fn lookup(triple: Triple) -> Result<Builder, LookupError> { pub fn lookup(triple: Triple) -> Result<Builder, LookupError> {
match triple.architecture { match triple.architecture {
Architecture::Riscv32 | Architecture::Riscv64 => isa_builder!(riscv, "riscv")(triple), Architecture::Riscv32 | Architecture::Riscv64 => isa_builder!(riscv, "riscv", triple),
Architecture::I386 | Architecture::I586 | Architecture::I686 | Architecture::X86_64 => { Architecture::I386 | Architecture::I586 | Architecture::I686 | Architecture::X86_64 => {
isa_builder!(x86, "x86")(triple) isa_builder!(x86, "x86", triple)
} }
Architecture::Arm { .. } => isa_builder!(arm32, "arm32")(triple), Architecture::Arm { .. } => isa_builder!(arm32, "arm32", triple),
Architecture::Aarch64 { .. } => isa_builder!(arm64, "arm64")(triple), Architecture::Aarch64 { .. } => isa_builder!(arm64, "arm64", triple),
_ => Err(LookupError::Unsupported), _ => Err(LookupError::Unsupported),
} }
} }