gccint: Bit-Fields
1
1 14.11 Bit-Fields
1 ================
1
1 Special expression codes exist to represent bit-field instructions.
1
1 '(sign_extract:M LOC SIZE POS)'
1 This represents a reference to a sign-extended bit-field contained
1 or starting in LOC (a memory or register reference). The bit-field
1 is SIZE bits wide and starts at bit POS. The compilation option
1 'BITS_BIG_ENDIAN' says which end of the memory unit POS counts
1 from.
1
1 If LOC is in memory, its mode must be a single-byte integer mode.
1 If LOC is in a register, the mode to use is specified by the
1 operand of the 'insv' or 'extv' pattern (⇒Standard Names)
1 and is usually a full-word integer mode, which is the default if
1 none is specified.
1
1 The mode of POS is machine-specific and is also specified in the
1 'insv' or 'extv' pattern.
1
1 The mode M is the same as the mode that would be used for LOC if it
1 were a register.
1
1 A 'sign_extract' can not appear as an lvalue, or part thereof, in
1 RTL.
1
1 '(zero_extract:M LOC SIZE POS)'
1 Like 'sign_extract' but refers to an unsigned or zero-extended
1 bit-field. The same sequence of bits are extracted, but they are
1 filled to an entire word with zeros instead of by sign-extension.
1
1 Unlike 'sign_extract', this type of expressions can be lvalues in
1 RTL; they may appear on the left side of an assignment, indicating
1 insertion of a value into the specified bit-field.
1