Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use embedded broadcast to replicate constants for AVX512. #147

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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