Legend:
Library
Module
Module type
Parameter
Class
Class type

The description of the origin of an aliased register.

When a register is defined in terms of other registers, Origin.t describes the relationship between an aliased register and its origin register or registers.

The ('s,'k) Origin.t data type is parameterized with two type variables. The 's type variable denotes the width of the origin register(s) and 'k denotes the kind of relationship between the alias and its origin.

Currently, we recognize two kinds of relationships. The sub kind defines the alias as a subset of the origin register, i.e., a contiguous sequnce of bits that are fully enclosed in the origin register. The sup kind defines an alias as a superset of a number of origin registers, i.e., it is a contiguous sequence of bits formed as a concatenation of the origin registers.

regs origin returns an ordered list of constituent registers.

The registers are sorted in the big endian order, i.e., the first element of the list corresponds to the most significant part of the base register. This is the same order, in which the aliasing was specified, e.g., if the aliasing was defined as, def x [reg hix; reg lox], then [regs] will
return [hix; lox].