Skip to content

Commit

Permalink
Use embedded broadcast to replicate constants for AVX512.
Browse files Browse the repository at this point in the history
Signed-off-by: Nicola Torracca <[email protected]>
  • Loading branch information
Nicola Torracca committed May 23, 2024
1 parent e4a8493 commit f884233
Show file tree
Hide file tree
Showing 7 changed files with 318 additions and 1,002 deletions.
60 changes: 13 additions & 47 deletions mh_sha1/mh_sha1_block_avx512.asm
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ func(_mh_sha1_block_avx512)
; save rsp
mov RSP_SAVE, rsp

cmp loops, 0
test loops, loops
jle .return

; align rsp to 64 Bytes needed by avx512
Expand All @@ -271,7 +271,7 @@ func(_mh_sha1_block_avx512)
VMOVPS HH3, [mh_digests_p + 64*3]
VMOVPS HH4, [mh_digests_p + 64*4]
;a mask used to transform to big-endian data
vmovdqa64 SHUF_MASK, [PSHUFFLE_BYTE_FLIP_MASK]
vbroadcasti32x4 SHUF_MASK, [PSHUFFLE_BYTE_FLIP_MASK]

.block_loop:
;transform to big-endian data and store on aligned_frame
Expand All @@ -293,7 +293,7 @@ func(_mh_sha1_block_avx512)
vmovdqa64 D, HH3
vmovdqa64 E, HH4

vmovdqa32 KT, [K00_19]
vpbroadcastd KT, [K00_19]
%assign I 0xCA
%assign J 0
%assign K 2
Expand All @@ -306,13 +306,13 @@ func(_mh_sha1_block_avx512)
MSG_SCHED_ROUND_16_79 APPEND(W,J), APPEND(W,K), APPEND(W,L), APPEND(W,M)
%endif
%if N = 19
vmovdqa32 KT, [K20_39]
vpbroadcastd KT, [K20_39]
%assign I 0x96
%elif N = 39
vmovdqa32 KT, [K40_59]
vpbroadcastd KT, [K40_59]
%assign I 0xE8
%elif N = 59
vmovdqa32 KT, [K60_79]
vpbroadcastd KT, [K60_79]
%assign I 0x96
%endif
%if N % 10 = 9
Expand Down Expand Up @@ -355,46 +355,12 @@ section .data align=64
align 64
PSHUFFLE_BYTE_FLIP_MASK: dq 0x0405060700010203
dq 0x0c0d0e0f08090a0b
dq 0x0405060700010203
dq 0x0c0d0e0f08090a0b
dq 0x0405060700010203
dq 0x0c0d0e0f08090a0b
dq 0x0405060700010203
dq 0x0c0d0e0f08090a0b

K00_19: dq 0x5A8279995A827999
dq 0x5A8279995A827999
dq 0x5A8279995A827999
dq 0x5A8279995A827999
dq 0x5A8279995A827999
dq 0x5A8279995A827999
dq 0x5A8279995A827999
dq 0x5A8279995A827999

K20_39: dq 0x6ED9EBA16ED9EBA1
dq 0x6ED9EBA16ED9EBA1
dq 0x6ED9EBA16ED9EBA1
dq 0x6ED9EBA16ED9EBA1
dq 0x6ED9EBA16ED9EBA1
dq 0x6ED9EBA16ED9EBA1
dq 0x6ED9EBA16ED9EBA1
dq 0x6ED9EBA16ED9EBA1

K40_59: dq 0x8F1BBCDC8F1BBCDC
dq 0x8F1BBCDC8F1BBCDC
dq 0x8F1BBCDC8F1BBCDC
dq 0x8F1BBCDC8F1BBCDC
dq 0x8F1BBCDC8F1BBCDC
dq 0x8F1BBCDC8F1BBCDC
dq 0x8F1BBCDC8F1BBCDC
dq 0x8F1BBCDC8F1BBCDC

K60_79: dq 0xCA62C1D6CA62C1D6
dq 0xCA62C1D6CA62C1D6
dq 0xCA62C1D6CA62C1D6
dq 0xCA62C1D6CA62C1D6
dq 0xCA62C1D6CA62C1D6
dq 0xCA62C1D6CA62C1D6
dq 0xCA62C1D6CA62C1D6
dq 0xCA62C1D6CA62C1D6
K00_19: dd 0x5A827999

K20_39: dd 0x6ED9EBA1

K40_59: dd 0x8F1BBCDC

K60_79: dd 0xCA62C1D6
%endif ; HAVE_AS_KNOWS_AVX512
60 changes: 13 additions & 47 deletions mh_sha1_murmur3_x64_128/mh_sha1_murmur3_x64_128_block_avx512.asm
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ func(_mh_sha1_murmur3_x64_128_block_avx512)
; save rsp
mov RSP_SAVE, rsp

cmp loops, 0
test loops, loops
jle .return

; align rsp to 64 Bytes needed by avx512
Expand All @@ -354,7 +354,7 @@ func(_mh_sha1_murmur3_x64_128_block_avx512)
VMOVPS HH3, [mh_digests_p + 64*3]
VMOVPS HH4, [mh_digests_p + 64*4]
;a mask used to transform to big-endian data
vmovdqa64 SHUF_MASK, [PSHUFFLE_BYTE_FLIP_MASK]
vbroadcasti32x4 SHUF_MASK, [PSHUFFLE_BYTE_FLIP_MASK]

;init murmur variables
mov mur_in_p, mh_in_p ;different steps between murmur and mh_sha1
Expand Down Expand Up @@ -384,7 +384,7 @@ func(_mh_sha1_murmur3_x64_128_block_avx512)
vmovdqa64 D, HH3
vmovdqa64 E, HH4

vmovdqa32 KT, [K00_19]
vpbroadcastd KT, [K00_19]
%assign I 0xCA
%assign J 0
%assign K 2
Expand All @@ -399,13 +399,13 @@ func(_mh_sha1_murmur3_x64_128_block_avx512)
PROCESS_LOOP APPEND(W,J), I
%endif
%if N = 19
vmovdqa32 KT, [K20_39]
vpbroadcastd KT, [K20_39]
%assign I 0x96
%elif N = 39
vmovdqa32 KT, [K40_59]
vpbroadcastd KT, [K40_59]
%assign I 0xE8
%elif N = 59
vmovdqa32 KT, [K60_79]
vpbroadcastd KT, [K60_79]
%assign I 0x96
%endif
%if N % 20 = 19
Expand Down Expand Up @@ -453,48 +453,14 @@ section .data align=64
align 64
PSHUFFLE_BYTE_FLIP_MASK: dq 0x0405060700010203
dq 0x0c0d0e0f08090a0b
dq 0x0405060700010203
dq 0x0c0d0e0f08090a0b
dq 0x0405060700010203
dq 0x0c0d0e0f08090a0b
dq 0x0405060700010203
dq 0x0c0d0e0f08090a0b

K00_19: dq 0x5A8279995A827999
dq 0x5A8279995A827999
dq 0x5A8279995A827999
dq 0x5A8279995A827999
dq 0x5A8279995A827999
dq 0x5A8279995A827999
dq 0x5A8279995A827999
dq 0x5A8279995A827999

K20_39: dq 0x6ED9EBA16ED9EBA1
dq 0x6ED9EBA16ED9EBA1
dq 0x6ED9EBA16ED9EBA1
dq 0x6ED9EBA16ED9EBA1
dq 0x6ED9EBA16ED9EBA1
dq 0x6ED9EBA16ED9EBA1
dq 0x6ED9EBA16ED9EBA1
dq 0x6ED9EBA16ED9EBA1

K40_59: dq 0x8F1BBCDC8F1BBCDC
dq 0x8F1BBCDC8F1BBCDC
dq 0x8F1BBCDC8F1BBCDC
dq 0x8F1BBCDC8F1BBCDC
dq 0x8F1BBCDC8F1BBCDC
dq 0x8F1BBCDC8F1BBCDC
dq 0x8F1BBCDC8F1BBCDC
dq 0x8F1BBCDC8F1BBCDC

K60_79: dq 0xCA62C1D6CA62C1D6
dq 0xCA62C1D6CA62C1D6
dq 0xCA62C1D6CA62C1D6
dq 0xCA62C1D6CA62C1D6
dq 0xCA62C1D6CA62C1D6
dq 0xCA62C1D6CA62C1D6
dq 0xCA62C1D6CA62C1D6
dq 0xCA62C1D6CA62C1D6
K00_19: dd 0x5A827999

K20_39: dd 0x6ED9EBA1

K40_59: dd 0x8F1BBCDC

K60_79: dd 0xCA62C1D6

%else
%ifidn __OUTPUT_FORMAT__, win64
Expand Down
Loading

0 comments on commit f884233

Please sign in to comment.