Reading the manual more carefully, I see that the B bits are extended with the X bit when there is no memory operand.
The X bits are extended with one of the V bits when there is a VSIB memory operand, but it is not clear which of the V bits. Page 42 and 43 say VX, should that be V'X?
Page 42 says that the vector mask register is coded in the MVEX.aaa bits. Should that be MVEX.kkk?
The assembly syntax on p. 45 does not explain clearly how to indicate swizzle, etc. It says:
mnemonic vreg{masking modifier}, source1, transform_modifier(vreg/mem)
Perhaps that should be:
mnemonic vreg{masking modifier}, source1, vreg/mem{transform_modifier} ?
How are the JKZD and JKNZD instructions coded? No 0F escape code is indicated for the short jump version. Does that mean mmmmm=0? This is contradicted on page 44 saying mmmmm=0 will cause an exception. Is the mask register coded in the vvvv bits or is there a mod/reg/rm byte?



Instruction format question
Reading
the "Knights Corner Instruction Set Reference Manual" I see that there
are 32 vector registers where the x64 instruction set has only 16. The V
register field and the R register field in the MVEX prefix are extended
with an extra bit (V', R') to code the extra registers. But the B and X
fields are not extended. How do you code register zmm16 - zmm31 in an
instruction with three or more register operands? Is this impossible, or
are you using some other bits, like the pp bits which are mostly unused
anyway or the unused bit to the left of the pp bits? Maybe you are using the X bit, which is not needed anyway if there is no memory operand, to extend the B bits. Then the only limitation would be that registers zmm16 - zmm31 cannot be used with VSIB addressing. Are the extra bits inverted?
I would like to update my disassembler (named "objconv") to cover this instruction set so I need this info.