A class for iterating through possible bitfield modes.
Construct an iterator for a bitfield that spans BITSIZE bits, starting at BITPOS.
BITREGION_START is the bit position of the first bit in this sequence of bit fields. BITREGION_END is the last bit in this sequence. If these two fields are non-zero, we should restrict the memory access to that range. Otherwise, we are allowed to touch any adjacent non bit-fields.
ALIGN is the alignment of the underlying object in bits. VOLATILEP says whether the bitfield is volatile.
We can assume that any aligned chunk of ALIGN bits that overlaps the bitfield is mapped and won't trap, provided that ALIGN isn't too large. The cap is the biggest required alignment for data, or at least the word size. And force one such chunk at least.
bool bit_field_mode_iterator::next_mode |
( |
enum machine_mode * |
out_mode | ) |
|
Calls to this function return successively larger modes that can be used to represent the bitfield. Return true if another bitfield mode is available, storing it in *OUT_MODE if so.
Skip modes that don't have full precision.
Stop if the mode is too wide to handle efficiently.
Don't deliver more than one multiword mode; the smallest one
should be used.
Skip modes that are too small.
Stop if the mode goes outside the bitregion.
Stop if the mode requires too much alignment.
Referenced by set_min_and_max_values_for_integral_type().