Adds the evex-promoted opcodes vextractps, vinsertps.
Adds the new AVX-512 opcodes vextractf32x4, vextractf64x2, vextractf32x8, vextractf64x4, vextracti32x4, vextracti64x2, vextracti32x8, vextracti64x4, vinsertf32x4, vinsertf64x2, vinsertf32x8, vinsertf64x4, vinserti32x4, vinserti64x2, vinserti32x8, vinserti64x4.
Adds tests for above.
In order to support the new instructions, the following decoder and encoder modifications are part of this patch:
Adds new AVX-512 sizes OPSZ_16_of_32_evex64 and OPSZ_32_of_64 and corresponding operand types in the decode table.
Fixes VEX.L and EVEX.LL assignment in encoder. Instructions in AVX-512 appear to encode the L-bits according to their largest operand size. This affects instructions with different operand sizes, e.g. vextract*, vinsert*.
Adds support to the encoder for encoding extra operands.
Introduces a new letter code 'f' for 256 or 512. Corresponding existing or new codes Vf, Vdq_f, Vqq_oq, Wf, Hf, Hdq_f have been added or fixed.
Fixes a few debug strings e_vex => evex_W in decode table.
Fixes a minor AVX-512 opcodes sort -n order error in opcodes.h.
Opcodes have been checked against llvm-mc, binutils/gas/objdump and capstone. A binutils bug has been filed: https://sourceware.org/bugzilla/show_bug.cgi?id=24633.
Issue: #1312