pub struct BitInsts {
pub prefix: &'static str,
pub width: fn(&str, u8) -> Option<u32>,
pub copies_low: fn(&str) -> bool,
}Expand description
What a pass has to know about a machine to work out which bits of a register anything reads.
Both are functions of an opcode’s name rather than tables, because a target already has the table both of them read: the assembly listing names each operand at the width the instruction uses it at, and the encoder is generated from the same description, so the widths here are the ones the machine really has rather than a second opinion about them.
Fields§
§prefix: &'static strWhat a rule file and the machine IR put in front of this target’s opcodes, such as x64..
width: fn(&str, u8) -> Option<u32>How many bits of the operand at that index the instruction of that name uses.
None means all of it, which is the answer for an operand the target’s description does
not name: a register inside an addressing mode, an operand of an opcode that encodes to
nothing, and an opcode this target does not have. Answering “all of it” where nothing is
known is what keeps the analysis from believing bits are dead because a description was
silent about them.
copies_low: fn(&str) -> boolWhether the instruction of that name puts the low bits of its one source into its one destination, and nothing else.
The widenings and the narrowings, and nothing else. It is what makes the instruction one the pass may take out when the bits above the source’s width turn out to be read by nobody, since what is left of it then is a copy.