Move 'Encoding' into its own module.
This commit is contained in:
33
src/libcretonne/isa/encoding.rs
Normal file
33
src/libcretonne/isa/encoding.rs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
//! The `Encoding` struct.
|
||||||
|
|
||||||
|
/// Bits needed to encode an instruction as binary machine code.
|
||||||
|
///
|
||||||
|
/// The encoding consists of two parts, both specific to the target ISA: An encoding *recipe*, and
|
||||||
|
/// encoding *bits*. The recipe determines the native instruction format and the mapping of
|
||||||
|
/// operands to encoded bits. The encoding bits provide additional information to the recipe,
|
||||||
|
/// typically parts of the opcode.
|
||||||
|
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||||
|
pub struct Encoding {
|
||||||
|
recipe: u16,
|
||||||
|
bits: u16,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Encoding {
|
||||||
|
/// Create a new `Encoding` containing `(recipe, bits)`.
|
||||||
|
pub fn new(recipe: u16, bits: u16) -> Encoding {
|
||||||
|
Encoding {
|
||||||
|
recipe: recipe,
|
||||||
|
bits: bits,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the recipe number in this encoding.
|
||||||
|
pub fn recipe(self) -> usize {
|
||||||
|
self.recipe as usize
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the recipe-specific encoding bits.
|
||||||
|
pub fn bits(self) -> u16 {
|
||||||
|
self.bits
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,12 +40,14 @@
|
|||||||
//! The configured target ISA trait object is a `Box<TargetIsa>` which can be used for multiple
|
//! The configured target ISA trait object is a `Box<TargetIsa>` which can be used for multiple
|
||||||
//! concurrent function compilations.
|
//! concurrent function compilations.
|
||||||
|
|
||||||
pub mod riscv;
|
pub use isa::encoding::Encoding;
|
||||||
mod enc_tables;
|
|
||||||
|
|
||||||
use settings;
|
use settings;
|
||||||
use ir::{InstructionData, DataFlowGraph};
|
use ir::{InstructionData, DataFlowGraph};
|
||||||
|
|
||||||
|
pub mod riscv;
|
||||||
|
mod encoding;
|
||||||
|
mod enc_tables;
|
||||||
|
|
||||||
/// Look for a supported ISA with the given `name`.
|
/// Look for a supported ISA with the given `name`.
|
||||||
/// Return a builder that can create a corresponding `TargetIsa`.
|
/// Return a builder that can create a corresponding `TargetIsa`.
|
||||||
pub fn lookup(name: &str) -> Option<Builder> {
|
pub fn lookup(name: &str) -> Option<Builder> {
|
||||||
@@ -100,35 +102,3 @@ pub trait TargetIsa {
|
|||||||
/// This is just used for printing and parsing encodings in the textual IL format.
|
/// This is just used for printing and parsing encodings in the textual IL format.
|
||||||
fn recipe_names(&self) -> &'static [&'static str];
|
fn recipe_names(&self) -> &'static [&'static str];
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Bits needed to encode an instruction as binary machine code.
|
|
||||||
///
|
|
||||||
/// The encoding consists of two parts, both specific to the target ISA: An encoding *recipe*, and
|
|
||||||
/// encoding *bits*. The recipe determines the native instruction format and the mapping of
|
|
||||||
/// operands to encoded bits. The encoding bits provide additional information to the recipe,
|
|
||||||
/// typically parts of the opcode.
|
|
||||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
|
||||||
pub struct Encoding {
|
|
||||||
recipe: u16,
|
|
||||||
bits: u16,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Encoding {
|
|
||||||
/// Create a new `Encoding` containing `(recipe, bits)`.
|
|
||||||
pub fn new(recipe: u16, bits: u16) -> Encoding {
|
|
||||||
Encoding {
|
|
||||||
recipe: recipe,
|
|
||||||
bits: bits,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Get the recipe number in this encoding.
|
|
||||||
pub fn recipe(self) -> usize {
|
|
||||||
self.recipe as usize
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Get the recipe-specific encoding bits.
|
|
||||||
pub fn bits(self) -> u16 {
|
|
||||||
self.bits
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user