A “writable register”. This is a zero-cost wrapper that can be used to
create a distinction, at the Rust type level, between a plain “register”
and a “writable register”.
Writable<..> can be used by the client to ensure that, internally, it only
generates instructions that write to registers that should be written. The
InstRegUses below, which must be implemented for every instruction,
requires a Writable<Reg> (not just Reg) in its defined and
modified sets. While we cannot hide the constructor for Writable<..>
from certain parts of the client while exposing it to others, the client
can adopt conventions to e.g. only ever call the Writable<..>
constructor from its central vreg-management logic, and decide that any
invocation of this constructor in a machine backend (for example) is an
error.
Create a Writable from an R. The client should carefully audit where
it calls this constructor to ensure correctness (see Writable<..>
struct documentation).
The same as |show_rru|, but with an optional hint giving a size in bytes. Its
interpretation is object-dependent, and it is intended to pass around enough information to
facilitate printing sub-parts of real registers correctly. Objects may ignore size hints
that are irrelevant to them. Read more