TargetIsa implies a Display of shared and isa-specific flags

This commit is contained in:
Pat Hickey
2018-01-29 13:38:26 -08:00
committed by Jakob Stoklund Olesen
parent 21f0fc39ad
commit 099b959d57
5 changed files with 32 additions and 2 deletions

View File

@@ -13,6 +13,7 @@ use isa::Builder as IsaBuilder;
use isa::{TargetIsa, RegInfo, RegClass, EncInfo};
use ir;
use regalloc;
use std::fmt;
#[allow(dead_code)]
struct Isa {
@@ -108,3 +109,9 @@ impl TargetIsa for Isa {
emit_function(func, binemit::emit_inst, sink)
}
}
impl fmt::Display for Isa {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}\n{}", self.shared_flags, self.isa_flags)
}
}

View File

@@ -13,6 +13,7 @@ use isa::Builder as IsaBuilder;
use isa::{TargetIsa, RegInfo, RegClass, EncInfo};
use ir;
use regalloc;
use std::fmt;
#[allow(dead_code)]
struct Isa {
@@ -101,3 +102,9 @@ impl TargetIsa for Isa {
emit_function(func, binemit::emit_inst, sink)
}
}
impl fmt::Display for Isa {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}\n{}", self.shared_flags, self.isa_flags)
}
}

View File

@@ -15,6 +15,7 @@ use ir;
use regalloc;
use result;
use timing;
use std::fmt;
#[allow(dead_code)]
@@ -116,3 +117,9 @@ impl TargetIsa for Isa {
abi::prologue_epilogue(func, self)
}
}
impl fmt::Display for Isa {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}\n{}", self.shared_flags, self.isa_flags)
}
}

View File

@@ -53,6 +53,7 @@ use regalloc;
use result;
use timing;
use isa::enc_tables::Encodings;
use std::fmt;
#[cfg(build_riscv)]
pub mod riscv;
@@ -146,8 +147,9 @@ pub type Legalize = fn(ir::Inst,
&mut flowgraph::ControlFlowGraph)
-> bool;
/// Methods that are specialized to a target ISA.
pub trait TargetIsa {
/// Methods that are specialized to a target ISA. Implies a Display trait that shows the
/// shared flags, as well as any isa-specific flags.
pub trait TargetIsa: fmt::Display {
/// Get the name of this ISA.
fn name(&self) -> &'static str;

View File

@@ -13,6 +13,7 @@ use isa::Builder as IsaBuilder;
use isa::{TargetIsa, RegInfo, RegClass, EncInfo};
use ir;
use regalloc;
use std::fmt;
#[allow(dead_code)]
struct Isa {
@@ -252,3 +253,9 @@ mod tests {
assert_eq!(encstr(&*isa, isa.encode(&dfg, &mul32, types::I32)), "R#10c");
}
}
impl fmt::Display for Isa {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}\n{}", self.shared_flags, self.isa_flags)
}
}