Skip to main content

LIBCALLS

Static LIBCALLS 

Source
pub static LIBCALLS: &[(Opcode, &str, &str)]
Expand description

The runtime function an operation becomes, by opcode and by mode.

The third answer, and the one GCC’s fallback ladder ends at. An operation with no instruction and no way of being built out of instructions is a call to the compiler runtime, and which call it is is a fact about the operation and the mode and nothing else. It used to be three sets of match arms, in crate::quad, in crate::wide and in crate::expand, and it is one list they read.

The mode is spelled the way the rule language spells one, which is the width for an operation on one type and the two widths for a conversion. Every mode here is a mode the rule language cannot spell, since an operation the machine has does not become a call, which is why these names are not in rucc_ir::term::heads and are rows of their own.

The bulk operations are the exception that proves it. A copy becomes a run of moves at a size the lowering will take on and a call to the C library above it, so the mode is the size rather than a width, and both answers are true of the same row.