Gather instructions do not have any alignment requirements. So it would be too restrictive not to allow byte addressing.
Other reason is consistency. With SIB addressing we obviously have byte address:
MOV eax, [rcx + rdx * 2]
Since VPGATHERDD
is just a vectorized variant of this MOV
instruction, we should not expect anything different with VSIB addressing:
VPGATHERDD ymm0, [rcx + ymm2 * 2], ymm3
As for real life use for byte addressing, we could have a 24-bit color image where each pixel is 3-byte aligned. We could load 8 pixels with single VPGATHERDD instruction but only if “scale” field in VSIB is “1” and VPGATHERDD
uses byte addressing.