mirror of
https://github.com/intel/isa-l.git
synced 2024-12-12 09:23:50 +01:00
crc: Use ternlog in by16 avx512 loop
Ternlog has additional benefit in by16 crc main loop in both reflected and non-reflected polynomial crcs. Some arch see 4-7% improvement. Revisited on suggestion by Nicola Torracca. Change-Id: I806266a7080168cf33409634983e254a291a0795 Signed-off-by: Greg Tucker <greg.b.tucker@intel.com>
This commit is contained in:
parent
fec429e1b9
commit
c2bec3ea65
@ -144,30 +144,26 @@ FUNCTION_NAME:
|
||||
vmovdqu8 zmm3, [arg2+16*0]
|
||||
vpshufb zmm3, zmm3, zmm18
|
||||
vpclmulqdq zmm1, zmm0, zmm16, 0x00
|
||||
vpclmulqdq zmm2, zmm0, zmm16, 0x11
|
||||
vpxorq zmm0, zmm1, zmm2
|
||||
vpxorq zmm0, zmm0, zmm3
|
||||
vpclmulqdq zmm0, zmm0, zmm16, 0x11
|
||||
vpternlogq zmm0, zmm1, zmm3, 0x96
|
||||
|
||||
vmovdqu8 zmm9, [arg2+16*4]
|
||||
vpshufb zmm9, zmm9, zmm18
|
||||
vpclmulqdq zmm5, zmm4, zmm16, 0x00
|
||||
vpclmulqdq zmm6, zmm4, zmm16, 0x11
|
||||
vpxorq zmm4, zmm5, zmm6
|
||||
vpxorq zmm4, zmm4, zmm9
|
||||
vpclmulqdq zmm4, zmm4, zmm16, 0x11
|
||||
vpternlogq zmm4, zmm5, zmm9, 0x96
|
||||
|
||||
vmovdqu8 zmm11, [arg2+16*8]
|
||||
vpshufb zmm11, zmm11, zmm18
|
||||
vpclmulqdq zmm12, zmm7, zmm16, 0x00
|
||||
vpclmulqdq zmm13, zmm7, zmm16, 0x11
|
||||
vpxorq zmm7, zmm12, zmm13
|
||||
vpxorq zmm7, zmm7, zmm11
|
||||
vpclmulqdq zmm7, zmm7, zmm16, 0x11
|
||||
vpternlogq zmm7, zmm12, zmm11, 0x96
|
||||
|
||||
vmovdqu8 zmm17, [arg2+16*12]
|
||||
vpshufb zmm17, zmm17, zmm18
|
||||
vpclmulqdq zmm14, zmm8, zmm16, 0x00
|
||||
vpclmulqdq zmm15, zmm8, zmm16, 0x11
|
||||
vpxorq zmm8, zmm14, zmm15
|
||||
vpxorq zmm8, zmm8, zmm17
|
||||
vpclmulqdq zmm8, zmm8, zmm16, 0x11
|
||||
vpternlogq zmm8, zmm14, zmm17, 0x96
|
||||
|
||||
sub arg3, 256
|
||||
jge .fold_256_B_loop
|
||||
@ -199,16 +195,14 @@ FUNCTION_NAME:
|
||||
vmovdqu8 zmm8, [arg2+16*0]
|
||||
vpshufb zmm8, zmm8, zmm18
|
||||
vpclmulqdq zmm2, zmm0, zmm10, 0x00
|
||||
vpclmulqdq zmm1, zmm0, zmm10, 0x11
|
||||
vpxorq zmm0, zmm2, zmm1
|
||||
vpxorq zmm0, zmm0, zmm8
|
||||
vpclmulqdq zmm0, zmm0, zmm10, 0x11
|
||||
vpternlogq zmm0, zmm2, zmm8, 0x96
|
||||
|
||||
vmovdqu8 zmm9, [arg2+16*4]
|
||||
vpshufb zmm9, zmm9, zmm18
|
||||
vpclmulqdq zmm5, zmm4, zmm10, 0x00
|
||||
vpclmulqdq zmm6, zmm4, zmm10, 0x11
|
||||
vpxorq zmm4, zmm5, zmm6
|
||||
vpxorq zmm4, zmm4, zmm9
|
||||
vpclmulqdq zmm4, zmm4, zmm10, 0x11
|
||||
vpternlogq zmm4, zmm5, zmm9, 0x96
|
||||
|
||||
sub arg3, 128
|
||||
jge .fold_128_B_loop
|
||||
|
@ -138,29 +138,21 @@ FUNCTION_NAME:
|
||||
|
||||
.fold_256_B_loop:
|
||||
add arg2, 256
|
||||
vmovdqu8 zmm3, [arg2+16*0]
|
||||
vpclmulqdq zmm1, zmm0, zmm16, 0x10
|
||||
vpclmulqdq zmm2, zmm0, zmm16, 0x01
|
||||
vpxorq zmm0, zmm1, zmm2
|
||||
vpxorq zmm0, zmm0, zmm3
|
||||
vpclmulqdq zmm0, zmm0, zmm16, 0x01
|
||||
vpternlogq zmm0, zmm1, [arg2+16*0], 0x96
|
||||
|
||||
vmovdqu8 zmm9, [arg2+16*4]
|
||||
vpclmulqdq zmm5, zmm4, zmm16, 0x10
|
||||
vpclmulqdq zmm6, zmm4, zmm16, 0x01
|
||||
vpxorq zmm4, zmm5, zmm6
|
||||
vpxorq zmm4, zmm4, zmm9
|
||||
vpclmulqdq zmm2, zmm4, zmm16, 0x10
|
||||
vpclmulqdq zmm4, zmm4, zmm16, 0x01
|
||||
vpternlogq zmm4, zmm2, [arg2+16*4], 0x96
|
||||
|
||||
vmovdqu8 zmm11, [arg2+16*8]
|
||||
vpclmulqdq zmm12, zmm7, zmm16, 0x10
|
||||
vpclmulqdq zmm13, zmm7, zmm16, 0x01
|
||||
vpxorq zmm7, zmm12, zmm13
|
||||
vpxorq zmm7, zmm7, zmm11
|
||||
vpclmulqdq zmm3, zmm7, zmm16, 0x10
|
||||
vpclmulqdq zmm7, zmm7, zmm16, 0x01
|
||||
vpternlogq zmm7, zmm3, [arg2+16*8], 0x96
|
||||
|
||||
vmovdqu8 zmm17, [arg2+16*12]
|
||||
vpclmulqdq zmm14, zmm8, zmm16, 0x10
|
||||
vpclmulqdq zmm15, zmm8, zmm16, 0x01
|
||||
vpxorq zmm8, zmm14, zmm15
|
||||
vpxorq zmm8, zmm8, zmm17
|
||||
vpclmulqdq zmm5, zmm8, zmm16, 0x10
|
||||
vpclmulqdq zmm8, zmm8, zmm16, 0x01
|
||||
vpternlogq zmm8, zmm5, [arg2+16*12], 0x96
|
||||
|
||||
sub arg3, 256
|
||||
jge .fold_256_B_loop
|
||||
@ -189,17 +181,13 @@ FUNCTION_NAME:
|
||||
; fold 128B at a time. This section of the code folds 8 xmm registers in parallel
|
||||
.fold_128_B_loop:
|
||||
add arg2, 128
|
||||
vmovdqu8 zmm8, [arg2+16*0]
|
||||
vpclmulqdq zmm2, zmm0, zmm10, 0x10
|
||||
vpclmulqdq zmm1, zmm0, zmm10, 0x01
|
||||
vpxorq zmm0, zmm2, zmm1
|
||||
vpxorq zmm0, zmm0, zmm8
|
||||
vpclmulqdq zmm0, zmm0, zmm10, 0x01
|
||||
vpternlogq zmm0, zmm2, [arg2+16*0], 0x96
|
||||
|
||||
vmovdqu8 zmm9, [arg2+16*4]
|
||||
vpclmulqdq zmm5, zmm4, zmm10, 0x10
|
||||
vpclmulqdq zmm6, zmm4, zmm10, 0x01
|
||||
vpxorq zmm4, zmm5, zmm6
|
||||
vpxorq zmm4, zmm4, zmm9
|
||||
vpclmulqdq zmm4, zmm4, zmm10, 0x01
|
||||
vpternlogq zmm4, zmm5, [arg2+16*4], 0x96
|
||||
|
||||
sub arg3, 128
|
||||
jge .fold_128_B_loop
|
||||
|
@ -139,30 +139,26 @@ FUNCTION_NAME:
|
||||
vmovdqu8 zmm3, [arg2+16*0]
|
||||
vpshufb zmm3, zmm3, zmm18
|
||||
vpclmulqdq zmm1, zmm0, zmm16, 0x00
|
||||
vpclmulqdq zmm2, zmm0, zmm16, 0x11
|
||||
vpxorq zmm0, zmm1, zmm2
|
||||
vpxorq zmm0, zmm0, zmm3
|
||||
vpclmulqdq zmm0, zmm0, zmm16, 0x11
|
||||
vpternlogq zmm0, zmm1, zmm3, 0x96
|
||||
|
||||
vmovdqu8 zmm9, [arg2+16*4]
|
||||
vpshufb zmm9, zmm9, zmm18
|
||||
vpclmulqdq zmm5, zmm4, zmm16, 0x00
|
||||
vpclmulqdq zmm6, zmm4, zmm16, 0x11
|
||||
vpxorq zmm4, zmm5, zmm6
|
||||
vpxorq zmm4, zmm4, zmm9
|
||||
vpclmulqdq zmm4, zmm4, zmm16, 0x11
|
||||
vpternlogq zmm4, zmm5, zmm9, 0x96
|
||||
|
||||
vmovdqu8 zmm11, [arg2+16*8]
|
||||
vpshufb zmm11, zmm11, zmm18
|
||||
vpclmulqdq zmm12, zmm7, zmm16, 0x00
|
||||
vpclmulqdq zmm13, zmm7, zmm16, 0x11
|
||||
vpxorq zmm7, zmm12, zmm13
|
||||
vpxorq zmm7, zmm7, zmm11
|
||||
vpclmulqdq zmm7, zmm7, zmm16, 0x11
|
||||
vpternlogq zmm7, zmm12, zmm11, 0x96
|
||||
|
||||
vmovdqu8 zmm17, [arg2+16*12]
|
||||
vpshufb zmm17, zmm17, zmm18
|
||||
vpclmulqdq zmm14, zmm8, zmm16, 0x00
|
||||
vpclmulqdq zmm15, zmm8, zmm16, 0x11
|
||||
vpxorq zmm8, zmm14, zmm15
|
||||
vpxorq zmm8, zmm8, zmm17
|
||||
vpclmulqdq zmm8, zmm8, zmm16, 0x11
|
||||
vpternlogq zmm8, zmm14, zmm17, 0x96
|
||||
|
||||
sub arg3, 256
|
||||
jge .fold_256_B_loop
|
||||
@ -194,16 +190,14 @@ FUNCTION_NAME:
|
||||
vmovdqu8 zmm8, [arg2+16*0]
|
||||
vpshufb zmm8, zmm8, zmm18
|
||||
vpclmulqdq zmm2, zmm0, zmm10, 0x00
|
||||
vpclmulqdq zmm1, zmm0, zmm10, 0x11
|
||||
vpxorq zmm0, zmm2, zmm1
|
||||
vpxorq zmm0, zmm0, zmm8
|
||||
vpclmulqdq zmm0, zmm0, zmm10, 0x11
|
||||
vpternlogq zmm0, zmm2, zmm8, 0x96
|
||||
|
||||
vmovdqu8 zmm9, [arg2+16*4]
|
||||
vpshufb zmm9, zmm9, zmm18
|
||||
vpclmulqdq zmm5, zmm4, zmm10, 0x00
|
||||
vpclmulqdq zmm6, zmm4, zmm10, 0x11
|
||||
vpxorq zmm4, zmm5, zmm6
|
||||
vpxorq zmm4, zmm4, zmm9
|
||||
vpclmulqdq zmm4, zmm4, zmm10, 0x11
|
||||
vpternlogq zmm4, zmm5, zmm9, 0x96
|
||||
|
||||
sub arg3, 128
|
||||
jge .fold_128_B_loop
|
||||
|
@ -126,29 +126,21 @@ FUNCTION_NAME:
|
||||
|
||||
.fold_256_B_loop:
|
||||
add arg2, 256
|
||||
vmovdqu8 zmm3, [arg2+16*0]
|
||||
vpclmulqdq zmm1, zmm0, zmm16, 0x10
|
||||
vpclmulqdq zmm2, zmm0, zmm16, 0x01
|
||||
vpxorq zmm0, zmm1, zmm2
|
||||
vpxorq zmm0, zmm0, zmm3
|
||||
vpclmulqdq zmm0, zmm0, zmm16, 0x01
|
||||
vpternlogq zmm0, zmm1, [arg2+16*0], 0x96
|
||||
|
||||
vmovdqu8 zmm9, [arg2+16*4]
|
||||
vpclmulqdq zmm5, zmm4, zmm16, 0x10
|
||||
vpclmulqdq zmm6, zmm4, zmm16, 0x01
|
||||
vpxorq zmm4, zmm5, zmm6
|
||||
vpxorq zmm4, zmm4, zmm9
|
||||
vpclmulqdq zmm2, zmm4, zmm16, 0x10
|
||||
vpclmulqdq zmm4, zmm4, zmm16, 0x01
|
||||
vpternlogq zmm4, zmm2, [arg2+16*4], 0x96
|
||||
|
||||
vmovdqu8 zmm11, [arg2+16*8]
|
||||
vpclmulqdq zmm12, zmm7, zmm16, 0x10
|
||||
vpclmulqdq zmm13, zmm7, zmm16, 0x01
|
||||
vpxorq zmm7, zmm12, zmm13
|
||||
vpxorq zmm7, zmm7, zmm11
|
||||
vpclmulqdq zmm3, zmm7, zmm16, 0x10
|
||||
vpclmulqdq zmm7, zmm7, zmm16, 0x01
|
||||
vpternlogq zmm7, zmm3, [arg2+16*8], 0x96
|
||||
|
||||
vmovdqu8 zmm17, [arg2+16*12]
|
||||
vpclmulqdq zmm14, zmm8, zmm16, 0x10
|
||||
vpclmulqdq zmm15, zmm8, zmm16, 0x01
|
||||
vpxorq zmm8, zmm14, zmm15
|
||||
vpxorq zmm8, zmm8, zmm17
|
||||
vpclmulqdq zmm5, zmm8, zmm16, 0x10
|
||||
vpclmulqdq zmm8, zmm8, zmm16, 0x01
|
||||
vpternlogq zmm8, zmm5, [arg2+16*12], 0x96
|
||||
|
||||
sub arg3, 256
|
||||
jge .fold_256_B_loop
|
||||
@ -177,17 +169,13 @@ FUNCTION_NAME:
|
||||
; fold 128B at a time. This section of the code folds 8 xmm registers in parallel
|
||||
.fold_128_B_loop:
|
||||
add arg2, 128
|
||||
vmovdqu8 zmm8, [arg2+16*0]
|
||||
vpclmulqdq zmm2, zmm0, zmm10, 0x10
|
||||
vpclmulqdq zmm1, zmm0, zmm10, 0x01
|
||||
vpxorq zmm0, zmm2, zmm1
|
||||
vpxorq zmm0, zmm0, zmm8
|
||||
vpclmulqdq zmm0, zmm0, zmm10, 0x01
|
||||
vpternlogq zmm0, zmm2, [arg2+16*0], 0x96
|
||||
|
||||
vmovdqu8 zmm9, [arg2+16*4]
|
||||
vpclmulqdq zmm5, zmm4, zmm10, 0x10
|
||||
vpclmulqdq zmm6, zmm4, zmm10, 0x01
|
||||
vpxorq zmm4, zmm5, zmm6
|
||||
vpxorq zmm4, zmm4, zmm9
|
||||
vpclmulqdq zmm4, zmm4, zmm10, 0x01
|
||||
vpternlogq zmm4, zmm5, [arg2+16*4], 0x96
|
||||
|
||||
sub arg3, 128
|
||||
jge .fold_128_B_loop
|
||||
|
@ -123,30 +123,26 @@ _fold_256_B_loop:
|
||||
vmovdqu8 zmm3, [arg2+16*0]
|
||||
vpshufb zmm3, zmm3, zmm18
|
||||
vpclmulqdq zmm1, zmm0, zmm16, 0x00
|
||||
vpclmulqdq zmm2, zmm0, zmm16, 0x11
|
||||
vpxorq zmm0, zmm1, zmm2
|
||||
vpxorq zmm0, zmm0, zmm3
|
||||
vpclmulqdq zmm0, zmm0, zmm16, 0x11
|
||||
vpternlogq zmm0, zmm1, zmm3, 0x96
|
||||
|
||||
vmovdqu8 zmm9, [arg2+16*4]
|
||||
vpshufb zmm9, zmm9, zmm18
|
||||
vpclmulqdq zmm5, zmm4, zmm16, 0x00
|
||||
vpclmulqdq zmm6, zmm4, zmm16, 0x11
|
||||
vpxorq zmm4, zmm5, zmm6
|
||||
vpxorq zmm4, zmm4, zmm9
|
||||
vpclmulqdq zmm4, zmm4, zmm16, 0x11
|
||||
vpternlogq zmm4, zmm5, zmm9, 0x96
|
||||
|
||||
vmovdqu8 zmm11, [arg2+16*8]
|
||||
vpshufb zmm11, zmm11, zmm18
|
||||
vpclmulqdq zmm12, zmm7, zmm16, 0x00
|
||||
vpclmulqdq zmm13, zmm7, zmm16, 0x11
|
||||
vpxorq zmm7, zmm12, zmm13
|
||||
vpxorq zmm7, zmm7, zmm11
|
||||
vpclmulqdq zmm7, zmm7, zmm16, 0x11
|
||||
vpternlogq zmm7, zmm12, zmm11, 0x96
|
||||
|
||||
vmovdqu8 zmm17, [arg2+16*12]
|
||||
vpshufb zmm17, zmm17, zmm18
|
||||
vpclmulqdq zmm14, zmm8, zmm16, 0x00
|
||||
vpclmulqdq zmm15, zmm8, zmm16, 0x11
|
||||
vpxorq zmm8, zmm14, zmm15
|
||||
vpxorq zmm8, zmm8, zmm17
|
||||
vpclmulqdq zmm8, zmm8, zmm16, 0x11
|
||||
vpternlogq zmm8, zmm14, zmm17, 0x96
|
||||
|
||||
sub arg3, 256
|
||||
jge _fold_256_B_loop
|
||||
@ -173,16 +169,14 @@ _fold_128_B_loop:
|
||||
vmovdqu8 zmm8, [arg2+16*0]
|
||||
vpshufb zmm8, zmm8, zmm18
|
||||
vpclmulqdq zmm1, zmm0, zmm10, 0x00
|
||||
vpclmulqdq zmm2, zmm0, zmm10, 0x11
|
||||
vpxorq zmm0, zmm1, zmm2
|
||||
vpxorq zmm0, zmm0, zmm8
|
||||
vpclmulqdq zmm0, zmm0, zmm10, 0x11
|
||||
vpternlogq zmm0, zmm1, zmm8, 0x96
|
||||
|
||||
vmovdqu8 zmm9, [arg2+16*4]
|
||||
vpshufb zmm9, zmm9, zmm18
|
||||
vpclmulqdq zmm5, zmm4, zmm10, 0x00
|
||||
vpclmulqdq zmm6, zmm4, zmm10, 0x11
|
||||
vpxorq zmm4, zmm5, zmm6
|
||||
vpxorq zmm4, zmm4, zmm9
|
||||
vpclmulqdq zmm4, zmm4, zmm10, 0x11
|
||||
vpternlogq zmm4, zmm5, zmm9, 0x96
|
||||
sub arg3, 128
|
||||
jge _fold_128_B_loop
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
@ -114,29 +114,21 @@ FUNCTION_NAME:
|
||||
|
||||
_fold_256_B_loop:
|
||||
add arg2, 256
|
||||
vmovdqu8 zmm3, [arg2+16*0]
|
||||
vpclmulqdq zmm1, zmm0, zmm16, 0x10
|
||||
vpclmulqdq zmm2, zmm0, zmm16, 0x01
|
||||
vpxorq zmm0, zmm1, zmm2
|
||||
vpxorq zmm0, zmm0, zmm3
|
||||
vpclmulqdq zmm0, zmm0, zmm16, 0x01
|
||||
vpternlogq zmm0, zmm1, [arg2+16*0], 0x96
|
||||
|
||||
vmovdqu8 zmm9, [arg2+16*4]
|
||||
vpclmulqdq zmm5, zmm4, zmm16, 0x10
|
||||
vpclmulqdq zmm6, zmm4, zmm16, 0x01
|
||||
vpxorq zmm4, zmm5, zmm6
|
||||
vpxorq zmm4, zmm4, zmm9
|
||||
vpclmulqdq zmm2, zmm4, zmm16, 0x10
|
||||
vpclmulqdq zmm4, zmm4, zmm16, 0x01
|
||||
vpternlogq zmm4, zmm2, [arg2+16*4], 0x96
|
||||
|
||||
vmovdqu8 zmm11, [arg2+16*8]
|
||||
vpclmulqdq zmm12, zmm7, zmm16, 0x10
|
||||
vpclmulqdq zmm13, zmm7, zmm16, 0x01
|
||||
vpxorq zmm7, zmm12, zmm13
|
||||
vpxorq zmm7, zmm7, zmm11
|
||||
vpclmulqdq zmm3, zmm7, zmm16, 0x10
|
||||
vpclmulqdq zmm7, zmm7, zmm16, 0x01
|
||||
vpternlogq zmm7, zmm3, [arg2+16*8], 0x96
|
||||
|
||||
vmovdqu8 zmm17, [arg2+16*12]
|
||||
vpclmulqdq zmm14, zmm8, zmm16, 0x10
|
||||
vpclmulqdq zmm15, zmm8, zmm16, 0x01
|
||||
vpxorq zmm8, zmm14, zmm15
|
||||
vpxorq zmm8, zmm8, zmm17
|
||||
vpclmulqdq zmm5, zmm8, zmm16, 0x10
|
||||
vpclmulqdq zmm8, zmm8, zmm16, 0x01
|
||||
vpternlogq zmm8, zmm5, [arg2+16*12], 0x96
|
||||
|
||||
sub arg3, 256
|
||||
jge _fold_256_B_loop
|
||||
@ -160,17 +152,13 @@ _fold_256_B_loop:
|
||||
; fold 128B at a time. This section of the code folds 2 zmm registers in parallel
|
||||
_fold_128_B_loop:
|
||||
add arg2, 128 ; update the buffer pointer
|
||||
vmovdqu8 zmm8, [arg2+16*0]
|
||||
vpclmulqdq zmm1, zmm0, zmm10, 0x10
|
||||
vpclmulqdq zmm2, zmm0, zmm10, 0x01
|
||||
vpxorq zmm0, zmm1, zmm2
|
||||
vpxorq zmm0, zmm0, zmm8
|
||||
vpclmulqdq zmm0, zmm0, zmm10, 0x01
|
||||
vpternlogq zmm0, zmm1, [arg2+16*0], 0x96
|
||||
|
||||
vmovdqu8 zmm9, [arg2+16*4]
|
||||
vpclmulqdq zmm5, zmm4, zmm10, 0x10
|
||||
vpclmulqdq zmm6, zmm4, zmm10, 0x01
|
||||
vpxorq zmm4, zmm5, zmm6
|
||||
vpxorq zmm4, zmm4, zmm9
|
||||
vpclmulqdq zmm4, zmm4, zmm10, 0x01
|
||||
vpternlogq zmm4, zmm5, [arg2+16*4], 0x96
|
||||
|
||||
sub arg3, 128
|
||||
jge _fold_128_B_loop
|
||||
|
Loading…
Reference in New Issue
Block a user