Bit-Fields#
Special expression codes exist to represent bit-field instructions.
(sign_extract:m loc size pos)
This represents a reference to a sign-extended bit-field contained or starting in
loc
(a memory or register reference). The bit-field issize
bits wide and starts at bitpos
. The compilation optionBITS_BIG_ENDIAN
says which end of the memory unitpos
counts from.If
loc
is in memory, its mode must be a single-byte integer mode. Ifloc
is in a register, the mode to use is specified by the operand of theinsv
orextv
pattern (see Standard Pattern Names For Generation) and is usually a full-word integer mode, which is the default if none is specified.The mode of
pos
is machine-specific and is also specified in theinsv
orextv
pattern.The mode
m
is the same as the mode that would be used forloc
if it were a register.A
sign_extract
cannot appear as an lvalue, or part thereof, in RTL.(zero_extract:m loc size pos)
Like
sign_extract
but refers to an unsigned or zero-extended bit-field. The same sequence of bits are extracted, but they are filled to an entire word with zeros instead of by sign-extension.Unlike
sign_extract
, this type of expressions can be lvalues in RTL; they may appear on the left side of an assignment, indicating insertion of a value into the specified bit-field.