У меня вопрос по инструкции AVX512F - kmovw. у меня есть 8-байтная маска в регистре K0, которую можно использовать с помощью kmovq и переместить ее в 8-байтный регистр или зарезервированную память (8-байт). но kmovq работает только в AVX512BW, а для AVX512F нам нужно использовать kmovw. но эта инструкция перемещает только 16 бит, поэтому нам нужно переместить маску 4 раза, какая из них правильная?
sub esp, 8
kmovw ax, k0
... (do the job with AX)
kmovw ax, k0 + 2
... (do the job with AX)
kmovw ax, k0 + 4
... (do the job with AX)
kmovw ax, k0 + 6
... (do the job with AX)
add esp, 8
или
sub esp, 8
kmovw ax, [k0]
... (do the job with AX)
kmovw ax, [k0 + 2]
... (do the job with AX)
kmovw ax, [k0 + 4]
... (do the job with AX)
kmovw ax, [k0 + 6]
... (do the job with AX)
add esp, 8
на самом деле мой вопрос о том, как использовать k0слово за словом ... используя [] или просто добавив его к N
, например,
, этот код работает в AVX512BW (из-за 'kmovq')
vmovdqu64 zmm0, [rax] ; rax = string
vpcmpeqb k0, zmm0, zmm1 ; zmm1 = 0
kortestq k0, k0
...
...
kmovq rbx, k0
tzcnt rbx, rbx
add rax, rbx
но если я хочу использовать только AVX512F, что мне делать с kmovq?