Add a RegClassMask typedef and a MAX_TOPRCS constant.

Avoid spreading u32 as a bitmask of register classes throughout the
code.

Enforce the limit of 32 register classes total. This could easily be
raised if needed.

The MAX_TOPRCS constant is the highest possible number of top-level
register classes in an ISA. The RegClassData.toprc field is always
smaller than this limit.
This commit is contained in:
Jakob Stoklund Olesen
2017-05-15 16:01:24 -07:00
parent 09ac27a797
commit 66d2c0a95a
2 changed files with 23 additions and 1 deletions

View File

@@ -20,6 +20,18 @@ pub type RegUnit = u16;
/// This type should be coordinated with meta/cdsl/registers.py.
pub type RegUnitMask = [u32; 3];
/// A bit mask indexed by register classes.
///
/// The size of this type is determined by the ISA with the most register classes.
///
/// This type should be coordinated with meta/cdsl/isa.py.
pub type RegClassMask = u32;
/// Guaranteed maximum number of top-level register classes in any ISA.
///
/// This can be increased, but should be coordinated with meta/cdsl/isa.py.
pub const MAX_TOPRCS: usize = 4;
/// The register units in a target ISA are divided into disjoint register banks. Each bank covers a
/// contiguous range of register units.
///
@@ -129,7 +141,7 @@ pub struct RegClassData {
/// Bit-mask of sub-classes of this register class, including itself.
///
/// Bits correspond to RC indexes.
pub subclasses: u32,
pub subclasses: RegClassMask,
/// Mask of register units in the class. If `width > 1`, the mask only has a bit set for the
/// first register unit in each allocatable register.