> ...it's not clear to me that we should define the upper bits of the > byte to be zero. What would rely on that? Is it something that we'd > require for all loads and stores of such modes?
Yes, I meant fewer than BITS_PER_UNIT bits in total. As opposed to SVE's "balanced" mask representation in riscv's case the bits are packed at the beginning. Loads and stores of masks only operate on the bits the mask actually contains so when we e.g. have four vector units/elements only four mask bits are loaded or stored. The mode size of those very small modes is still one byte, i.e. we have padding for them. But this only matters for the internal representation of those modes (and has been the source of several issues already of course, the masked else being one of them I believe). How does encoding work for SVE's small mask modes? I suppose unsigned int elt_bits = vector_element_size (GET_MODE_PRECISION (mode), GET_MODE_NUNITS (mode)); is != 1 but rather adjusted so a byte is filled? For our mask modes anything else but zero padding makes no sense, so how could we clarify this?