Generate a table of encoding recipe names for each ISA.

This will be used to pretty-print encodings in the textual IR.
This commit is contained in:
Jakob Stoklund Olesen
2016-08-30 13:50:56 -07:00
parent ba26ce2e98
commit 1c51285845
3 changed files with 25 additions and 0 deletions

View File

@@ -364,6 +364,19 @@ def offset_type(length):
return 'u32' return 'u32'
def emit_recipe_names(isa, fmt):
"""
Emit a table of encoding recipe names keyed by recipe number.
This is used for pretty-printing encodings.
"""
with fmt.indented(
'pub static RECIPE_NAMES: [&\'static str; {}] = ['
.format(len(isa.all_recipes)), '];'):
for r in isa.all_recipes:
fmt.line('"{}",'.format(r.name))
def gen_isa(isa, fmt): def gen_isa(isa, fmt):
# First assign numbers to relevant instruction predicates and generate the # First assign numbers to relevant instruction predicates and generate the
# check_instp() function.. # check_instp() function..
@@ -398,6 +411,8 @@ def gen_isa(isa, fmt):
emit_level1_hashtable( emit_level1_hashtable(
cpumode, level1_tables[cpumode], level1_offt, fmt) cpumode, level1_tables[cpumode], level1_offt, fmt)
emit_recipe_names(isa, fmt)
def generate(isas, out_dir): def generate(isas, out_dir):
for isa in isas: for isa in isas:

View File

@@ -93,6 +93,12 @@ pub trait TargetIsa {
/// ///
/// This is also the main entry point for determining if an instruction is legal. /// This is also the main entry point for determining if an instruction is legal.
fn encode(&self, dfg: &DataFlowGraph, inst: &InstructionData) -> Option<Encoding>; fn encode(&self, dfg: &DataFlowGraph, inst: &InstructionData) -> Option<Encoding>;
/// Get a static array of names associated with encoding recipes in this ISA. Encoding recipes
/// are numbered starting from 0, corresponding to indexes into th name array.
///
/// This is just used for printing and parsing encodings in the textual IL format.
fn recipe_names(&self) -> &'static [&'static str];
} }
/// Bits needed to encode an instruction as binary machine code. /// Bits needed to encode an instruction as binary machine code.

View File

@@ -52,4 +52,8 @@ impl TargetIsa for Isa {
|isap| isap != 17) |isap| isap != 17)
}) })
} }
fn recipe_names(&self) -> &'static [&'static str] {
&encoding::RECIPE_NAMES[..]
}
} }