AVX512 ZMM изменить на vpcmpeqb или нет - PullRequest
0 голосов
/ 25 октября 2019

ФУНКЦИЯ СТРЛЕНА:

vxorps          zmm0, zmm0, zmm0
vpcmpeqb        k0, zmm0, [ebx+ eax] ; ebx = string (aligned at 64-byte boundary) | eax = length
kortestq        k0, k0               ; 0x00 ?
jnz             .search_for_0x00
.loop:
   add             eax, 64                 ; len += 64
   vxorps          zmm0, zmm0, zmm0 
   vpcmpeqb        k0, zmm0, [ebx+ eax]
   kortestq        k0, k0

здесь наша строка хранится в ebx, а eax - это наша длина ... ebx выровнен по границе 64 байт, поэтому мы можем использовать ее напрямую

Теперь мой вопрос: должен ли я использовать vxorps каждый раз в разделе 'loop'?

Поскольку я думаю, что * vpcmpeqb 'просто изменяет k0, а не zmm0.

Так что я думаю, что второй vxorps (в цикле) является дополнительным и должен быть удален, но я удалил его, и моя программа упала !!

Я не прав? 'vpcmpeqb' тоже меняет zmm0?

...