4 ms·
This is ~9.6x faster than "scalar". ASM_TestDiv proc ;rcx out, rdx A, r8 B mov rax,05555555555555555H kmovq k1,rax vmovdqu8 zmm0,zmmword ptr [rdx] vmovdqu8
by Cold_Miserable 2y ago
This is ~9.6x faster than "scalar".
ASM_TestDiv proc ;rcx out, rdx A, r8 B
mov rax,05555555555555555H
kmovq k1,rax
vmovdqu8 zmm0,zmmword ptr [rdx]
vmovdqu8 zmm4,zmmword ptr [r8]
vpbroadcastw zmm3,word ptr [FLOAT16_F8]
vmovdqu8 zmm2{k1},zmm0 ;lower 8-bit
vmovdqu8 zmm16{k1},zmm4 ;lower 8-bit
vpsrlw zmm1,zmm0,8 ;higher 8-bit
vpsrlw zmm5,zmm4,8 ;higher 8-bit
vpord zmm1,zmm1,zmm3
vpord zmm2,zmm2,zmm3
vpord zmm5,zmm5,zmm3
vpord zmm16,zmm16,zmm3
vsubph zmm1,zmm1,zmm3{rd-sae} ;fast conv 16FP
vsubph zmm2,zmm2,zmm3{rd-sae}
vsubph zmm5,zmm5,zmm3{ru-sae}
vsubph zmm16,zmm16,zmm3{ru-sae}
vrcpph zmm5,zmm5
vrcpph zmm16,zmm16
vfmadd213ph zmm1,zmm5,zmm3{rd-sae}
vfmadd213ph zmm2,zmm16,zmm3{rd-sae}
vxorpd zmm1,zmm1,zmm3
vxorpd zmm2,zmm2,zmm3
vpsllw zmm1,zmm1,8
vpord zmm1,zmm1,zmm2
vmovdqu8 zmmword ptr [rcx],zmm1 ;16 8-bit unsigned int
ret