В настоящее время я работаю над реализацией Bitslice DES для x64, и я хотел бы знать, как я могу избежать 3-байтовых префиксов VEX, насколько это возможно, с помощью следующих инструкций AVX:
vpor
vpxor
vpand
vpandn
Мне сказали, что я должен как можно больше использовать 2-байтовые префиксы VEX вместо 3-байтовых, чтобы код был меньше и быстрее, но я не знаю, как это сделать. Я где-то читал, что мне следует использовать xmm [0-7] вместо xmm [89] и xmm1 [0-5], но я не знаю, какие комбинации операндов дадут мне 2-байтовые префиксы VEX, а не 3- байтовые. Эти инструкции используются с 2 или 3 операндами, как показано в следующем фрагменте:
%macro sbox1 4
vmovdqa xmm7, xmm4
vpandn xmm4, xmm0
vpor xmm10, xmm5, xmm2
vpxor xmm13, xmm2, xmm0
vpxor xmm11, xmm5, xmm7
vpxor xmm14, xmm4, xmm3
vpandn xmm12, xmm13, xmm11
vpand xmm13, xmm10
vpxor xmm15, xmm11, xmm2
vpxor xmm8, xmm13, xmm3
vpandn xmm9, xmm14, xmm8
vpor xmm13, xmm5
vpor xmm5, xmm0
vpandn xmm8, xmm7
vpandn xmm15, xmm14
vpxor xmm13, xmm15
vpor xmm6, xmm5, xmm13
vpandn xmm5, xmm3
vpandn xmm15, xmm9, xmm13
vmovdqa xmm3, xmm8
vpxor xmm8, xmm6
vpxor xmm5, xmm3
vpand xmm13, xmm10
vpandn xmm4, xmm2
vpxor xmm2, xmm6, xmm14
vpxor xmm6, xmm10
vpandn xmm4, xmm2
vpxor xmm2, xmm4, pnot
vpxor xmm4, xmm11
vpxor xmm13, xmm2
vpor xmm4, xmm3
vpandn xmm2, xmm1, xmm8
vpor xmm14, xmm7
vpxor xmm4, xmm10
vpor xmm9, xmm1
vpxor xmm2, xmm13
vpxor xmm4, xmm0
vpxor xmm13, xmm4
vpxor xmm9, xmm13
vpor xmm5, xmm12
vpxor xmm9, %1
vmovdqa %1, xmm9
vpor xmm6, xmm5
vpor xmm13, xmm11
vpxor xmm6, xmm4
vpor xmm0, xmm1, xmm15
vpxor xmm13, xmm6
vpxor xmm2, %3
vmovdqa %3, xmm2
vpxor xmm13, %2
vpand xmm4, xmm15
vpandn xmm6, xmm14
vpxor xmm13, xmm0
vmovdqa %2, xmm13
vpxor xmm4, xmm6
vpor xmm4, xmm1
vpxor xmm4, xmm5
vpxor xmm4, %4
vmovdqa %4, xmm4
%endmacro
2.3.5 The VEX Prefix
. Если вас интересует, использует ли какая-либо из вставленных инструкций 3-байтовый префикс VEX, просто соберите его и посмотрите. - person Jester   schedule 26.09.2013