Generate an enum with all the register units in a target.

It is sometimes useful to create constant lists of register units by
name. The generated RU enum can be used for that.
This commit is contained in:
Jakob Stoklund Olesen
2017-06-30 09:32:42 -07:00
parent aa3bf4467e
commit 983048cdd1

View File

@@ -30,6 +30,19 @@ def gen_regbank(regbank, fmt):
fmt.format('num_toprcs: {},', len(regbank.toprcs))
def gen_regbank_units(regbank, fmt):
# type: (RegBank, srcgen.Formatter) -> None
"""
Emit constants for all the register units in `regbank`.
"""
for unit in range(regbank.units):
v = unit + regbank.first_unit
if unit < len(regbank.names):
fmt.format("{} = {},", regbank.names[unit], v)
else:
fmt.format("{}{} = {},", regbank.prefix, unit, v)
def gen_regclass(rc, fmt):
# type: (RegClass, srcgen.Formatter) -> None
"""
@@ -77,6 +90,13 @@ def gen_isa(isa, fmt):
'pub const {}: RegClass = &CLASSES[{}];'
.format(rc.name, rc.index))
# Emit constants for all the register units.
fmt.line('#[allow(dead_code, non_camel_case_types)]')
fmt.line('#[derive(Clone, Copy)]')
with fmt.indented('pub enum RU {', '}'):
for regbank in isa.regbanks:
gen_regbank_units(regbank, fmt)
def generate(isas, out_dir):
# type: (Sequence[TargetISA], str) -> None