Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
12 changes: 2 additions & 10 deletions HashLib/src/Include/Simd/Adler32/Adler32BlocksSse2_x86_64.inc
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,7 @@
// weight bytes via pmaddwd (SSE2), producing the same 4 x i32 weighted
// sums per 16-byte half that pmaddubsw + pmaddwd would yield.

sub rsp, 64
movdqu oword [rsp], xmm6
movdqu oword [rsp + $10], xmm7
movdqu oword [rsp + $20], xmm8
movdqu oword [rsp + $30], xmm9
{$I ..\Include\Simd\Common\SimdNonVolatileSave_x86_64.inc}

// Zero constant
pxor xmm3, xmm3
Expand Down Expand Up @@ -102,8 +98,4 @@
mov dword [r8], eax
mov dword [r8 + 4], r10d

movdqu xmm6, oword [rsp]
movdqu xmm7, oword [rsp + $10]
movdqu xmm8, oword [rsp + $20]
movdqu xmm9, oword [rsp + $30]
add rsp, 64
{$I ..\Include\Simd\Common\SimdNonVolatileRestore_x86_64.inc}
10 changes: 2 additions & 8 deletions HashLib/src/Include/Simd/Adler32/Adler32BlocksSsse3_x86_64.inc
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@
// Processes num_blocks x 32-byte blocks. Does NOT apply mod 65521 (caller does it).
// Uses xmm0-xmm8; xmm6-xmm8 are MS x64 non-volatile (saved/restored).

sub rsp, 48
movdqu oword [rsp], xmm6
movdqu oword [rsp + $10], xmm7
movdqu oword [rsp + $20], xmm8
{$I ..\Include\Simd\Common\SimdNonVolatileSave_x86_64.inc}

// Load constants
movdqu xmm4, oword [r9]
Expand Down Expand Up @@ -79,7 +76,4 @@
mov dword [r8], eax
mov dword [r8 + 4], r10d

movdqu xmm6, oword [rsp]
movdqu xmm7, oword [rsp + $10]
movdqu xmm8, oword [rsp + $20]
add rsp, 48
{$I ..\Include\Simd\Common\SimdNonVolatileRestore_x86_64.inc}
20 changes: 7 additions & 13 deletions HashLib/src/Include/Simd/Argon2/Argon2FillBlockAvx2_x86_64.inc
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,14 @@
// Diagonalize/Undiagonalize via vpermq (cross-lane 64-bit permute).
// vzeroupper required before return.

sub rsp, 2184
{$I ..\Include\Simd\Common\SimdNonVolatileSave_x86_64.inc}

db $C5, $FE, $7F, $34, $24 // vmovdqu yword [rsp], ymm6
db $C5, $FE, $7F, $7C, $24, $20 // vmovdqu yword [rsp + $20], ymm7
db $C5, $7E, $7F, $44, $24, $40 // vmovdqu yword [rsp + $40], ymm8
db $C5, $7E, $7F, $4C, $24, $60 // vmovdqu yword [rsp + $60], ymm9
sub rsp, 2056

// =========================================================================
// Step 1: Compute R_buf = Left XOR Right, store at [rsp+128]
// =========================================================================
lea rax, [rsp + 128]
lea rax, [rsp]
xor r10, r10
@xor_loop:
db $C4, $A1, $7E, $6F, $04, $11 // vmovdqu ymm0, yword [rcx + r10]
Expand All @@ -38,7 +35,7 @@
// =========================================================================
// Step 2: Copy R_buf to Z_buf at [rsp+1152]
// =========================================================================
lea r11, [rsp + 1152]
lea r11, [rsp + 1024]
xor r10, r10
@copy_loop:
db $C4, $A1, $7E, $6F, $04, $10 // vmovdqu ymm0, yword [rax + r10]
Expand Down Expand Up @@ -326,10 +323,7 @@
jb @final_xor_loop

@epilogue:
db $C5, $FE, $6F, $34, $24 // vmovdqu ymm6, yword [rsp]
db $C5, $FE, $6F, $7C, $24, $20 // vmovdqu ymm7, yword [rsp + $20]
db $C5, $7E, $6F, $44, $24, $40 // vmovdqu ymm8, yword [rsp + $40]
db $C5, $7E, $6F, $4C, $24, $60 // vmovdqu ymm9, yword [rsp + $60]

add rsp, 2184
add rsp, 2056
db $C5, $F8, $77 // vzeroupper

{$I ..\Include\Simd\Common\SimdNonVolatileRestore_x86_64.inc}
18 changes: 6 additions & 12 deletions HashLib/src/Include/Simd/Argon2/Argon2FillBlockSse2_x86_64.inc
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,14 @@
// register pairs. Right-rotates require a 3-movdqa swap since shufpd
// naturally places results in the opposite register for that direction.

sub rsp, 2120
{$I ..\Include\Simd\Common\SimdNonVolatileSave_x86_64.inc}

movdqu oword [rsp], xmm6
movdqu oword [rsp + $10], xmm7
movdqu oword [rsp + $20], xmm8
movdqu oword [rsp + $30], xmm9
sub rsp, 2056

// =========================================================================
// Step 1: Compute R_buf = Left XOR Right, store at [rsp+64]
// =========================================================================
lea rax, [rsp + 64]
lea rax, [rsp]
xor r10, r10
@xor_loop:
movdqu xmm0, oword [rcx + r10]
Expand All @@ -40,7 +37,7 @@
// =========================================================================
// Step 2: Copy R_buf to Z_buf at [rsp+1088]
// =========================================================================
lea r11, [rsp + 1088]
lea r11, [rsp + 1024]
xor r10, r10
@copy_loop:
movdqu xmm0, oword [rax + r10]
Expand Down Expand Up @@ -556,9 +553,6 @@
jb @final_xor_loop

@epilogue:
movdqu xmm6, oword [rsp]
movdqu xmm7, oword [rsp + $10]
movdqu xmm8, oword [rsp + $20]
movdqu xmm9, oword [rsp + $30]
add rsp, 2056

add rsp, 2120
{$I ..\Include\Simd\Common\SimdNonVolatileRestore_x86_64.inc}
12 changes: 2 additions & 10 deletions HashLib/src/Include/Simd/Blake2B/Blake2BCompressSse2_x86_64.inc
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,7 @@
// xmm4-5 = row3 (v8-11), xmm6-7 = row4 (v12-15), xmm8-9 = temps.
// Reference: BLAKE2/BLAKE2 sse/ by Samuel Neves.

sub rsp, 64
movdqu oword [rsp], xmm6
movdqu oword [rsp + $10], xmm7
movdqu oword [rsp + $20], xmm8
movdqu oword [rsp + $30], xmm9
{$I ..\Include\Simd\Common\SimdNonVolatileSave_x86_64.inc}

// Initialize working vector
movdqu xmm0, oword [rcx]
Expand Down Expand Up @@ -1993,8 +1989,4 @@
movdqu oword [rcx + $20], xmm2
movdqu oword [rcx + $30], xmm3

movdqu xmm6, oword [rsp]
movdqu xmm7, oword [rsp + $10]
movdqu xmm8, oword [rsp + $20]
movdqu xmm9, oword [rsp + $30]
add rsp, 64
{$I ..\Include\Simd\Common\SimdNonVolatileRestore_x86_64.inc}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@
// AVX/AVX2 instructions are db-encoded for broad assembler compatibility.
// Reference: BLAKE2/BLAKE2 sse/ by Samuel Neves.

sub rsp, 16
db $C5, $FA, $7F, $34, $24 // vmovdqu oword [rsp], xmm6
{$I ..\Include\Simd\Common\SimdNonVolatileSave_x86_64.inc}

// Initialize working vector
db $C5, $FA, $6F, $01 // vmovdqu xmm0, oword [rcx]
Expand Down Expand Up @@ -992,7 +991,6 @@
db $C5, $FA, $7F, $01 // vmovdqu oword [rcx], xmm0
db $C5, $FA, $7F, $49, $10 // vmovdqu oword [rcx + $10], xmm1

db $C5, $FA, $6F, $34, $24 // vmovdqu xmm6, oword [rsp]
add rsp, 16

db $C5, $F8, $77 // vzeroupper

{$I ..\Include\Simd\Common\SimdNonVolatileRestore_x86_64.inc}
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@
// Message loads via movd + punpcklqdq + shufps.
// Reference: BLAKE2/BLAKE2 sse/ by Samuel Neves.

sub rsp, 16
movdqu oword [rsp], xmm6
{$I ..\Include\Simd\Common\SimdNonVolatileSave_x86_64.inc}

// Initialize working vector
movdqu xmm0, oword [rcx]
Expand Down Expand Up @@ -1073,5 +1072,4 @@
movdqu oword [rcx], xmm0
movdqu oword [rcx + $10], xmm1

movdqu xmm6, oword [rsp]
add rsp, 16
{$I ..\Include\Simd\Common\SimdNonVolatileRestore_x86_64.inc}
30 changes: 11 additions & 19 deletions HashLib/src/Include/Simd/Blake3/Blake3CompressAvx2_x86_64.inc
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,19 @@
// [rsp + 96..111]: IV staging area (loaded into xmm2)
// [rsp +112..119]: padding

sub rsp, 120
db $C5, $F9, $7F, $34, $24 // vmovdqa oword [rsp], xmm6
db $C5, $F9, $7F, $7C, $24, $10 // vmovdqa oword [rsp + $10], xmm7
db $C5, $79, $7F, $44, $24, $20 // vmovdqa oword [rsp + $20], xmm8
db $C5, $79, $7F, $4C, $24, $30 // vmovdqa oword [rsp + $30], xmm9
db $C5, $79, $7F, $5C, $24, $40 // vmovdqa oword [rsp + $40], xmm11
db $C5, $79, $7F, $74, $24, $50 // vmovdqa oword [rsp + $50], xmm14
{$I ..\Include\Simd\Common\SimdNonVolatileSave_x86_64.inc}

sub rsp, 24

mov eax, $6A09E667
mov dword ptr [rsp + $60], eax
mov dword ptr [rsp + $00], eax
mov eax, $BB67AE85
mov dword ptr [rsp + $64], eax
mov dword ptr [rsp + $04], eax
mov eax, $3C6EF372
mov dword ptr [rsp + $68], eax
mov dword ptr [rsp + $08], eax
mov eax, $A54FF53A
mov dword ptr [rsp + $6C], eax
db $C5, $F9, $6F, $54, $24, $60 // vmovdqa xmm2, oword [rsp + $60]
mov dword ptr [rsp + $0C], eax
db $C5, $F9, $6F, $54, $24, $00 // vmovdqa xmm2, oword [rsp + $00]

// Initialize state
db $C4, $C1, $7A, $6F, $00 // vmovdqu xmm0, oword [r8]
Expand Down Expand Up @@ -586,10 +582,6 @@
db $C5, $FA, $7F, $51, $20 // vmovdqu oword [rcx + $20], xmm2
db $C5, $FA, $7F, $59, $30 // vmovdqu oword [rcx + $30], xmm3

db $C5, $F9, $6F, $34, $24 // vmovdqa xmm6, oword [rsp]
db $C5, $F9, $6F, $7C, $24, $10 // vmovdqa xmm7, oword [rsp + $10]
db $C5, $79, $6F, $44, $24, $20 // vmovdqa xmm8, oword [rsp + $20]
db $C5, $79, $6F, $4C, $24, $30 // vmovdqa xmm9, oword [rsp + $30]
db $C5, $79, $6F, $5C, $24, $40 // vmovdqa xmm11, oword [rsp + $40]
db $C5, $79, $6F, $74, $24, $50 // vmovdqa xmm14, oword [rsp + $50]
add rsp, 120
add rsp, 24

{$I ..\Include\Simd\Common\SimdNonVolatileRestore_x86_64.inc}
30 changes: 11 additions & 19 deletions HashLib/src/Include/Simd/Blake3/Blake3CompressSse2_x86_64.inc
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,19 @@
// [rsp + 96..111]: IV staging area (loaded into xmm2)
// [rsp +112..119]: padding

sub rsp, 120
movdqa oword [rsp], xmm6
movdqa oword [rsp + $10], xmm7
movdqa oword [rsp + $20], xmm8
movdqa oword [rsp + $30], xmm9
movdqa oword [rsp + $40], xmm11
movdqa oword [rsp + $50], xmm14
{$I ..\Include\Simd\Common\SimdNonVolatileSave_x86_64.inc}

sub rsp, 24

mov eax, $6A09E667
mov dword ptr [rsp + $60], eax
mov dword ptr [rsp + $00], eax
mov eax, $BB67AE85
mov dword ptr [rsp + $64], eax
mov dword ptr [rsp + $04], eax
mov eax, $3C6EF372
mov dword ptr [rsp + $68], eax
mov dword ptr [rsp + $08], eax
mov eax, $A54FF53A
mov dword ptr [rsp + $6C], eax
movdqa xmm2, oword [rsp + $60]
mov dword ptr [rsp + $0C], eax
movdqa xmm2, oword [rsp + $00]

// Initialize state: a=CV[0..3], b=CV[4..7], c=IV[0..3], d=CounterFlags
movdqu xmm0, oword [r8]
Expand Down Expand Up @@ -639,10 +635,6 @@
movdqu oword [rcx + $20], xmm2
movdqu oword [rcx + $30], xmm3

movdqa xmm6, oword [rsp]
movdqa xmm7, oword [rsp + $10]
movdqa xmm8, oword [rsp + $20]
movdqa xmm9, oword [rsp + $30]
movdqa xmm11, oword [rsp + $40]
movdqa xmm14, oword [rsp + $50]
add rsp, 120
add rsp, 24

{$I ..\Include\Simd\Common\SimdNonVolatileRestore_x86_64.inc}
24 changes: 6 additions & 18 deletions HashLib/src/Include/Simd/Blake3/Blake3Hash4Sse2_x86_64.inc
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,9 @@
push rbx
push rbp

sub rsp, 712
movdqa oword [rsp + 576], xmm6
movdqa oword [rsp + 592], xmm7
movdqa oword [rsp + 608], xmm8
movdqa oword [rsp + 624], xmm9
movdqa oword [rsp + 640], xmm10
movdqa oword [rsp + 656], xmm11
movdqa oword [rsp + 672], xmm12
movdqa oword [rsp + 688], xmm13
{$I ..\Include\Simd\Common\SimdNonVolatileSave_x86_64.inc}

sub rsp, 584

mov qword ptr [rsp + 560], r8
mov dword ptr [rsp + 568], r11d
Expand Down Expand Up @@ -1832,15 +1826,9 @@
movdqu oword [rax + 80], xmm4
movdqu oword [rax + 112], xmm3

movdqa xmm6, oword [rsp + 576]
movdqa xmm7, oword [rsp + 592]
movdqa xmm8, oword [rsp + 608]
movdqa xmm9, oword [rsp + 624]
movdqa xmm10, oword [rsp + 640]
movdqa xmm11, oword [rsp + 656]
movdqa xmm12, oword [rsp + 672]
movdqa xmm13, oword [rsp + 688]
add rsp, 712
add rsp, 584

{$I ..\Include\Simd\Common\SimdNonVolatileRestore_x86_64.inc}

pop rbp
pop rbx
23 changes: 5 additions & 18 deletions HashLib/src/Include/Simd/Blake3/Blake3Hash8Avx2_x86_64.inc
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,16 @@
//
// MS x64 non-volatile saves: xmm6-xmm13.

{$I ..\Include\Simd\Common\SimdNonVolatileSave_x86_64.inc}

push rbx
push rbp
push r12

mov r12, rsp
and rsp, -32

sub rsp, 1280
db $C5, $FA, $7F, $B4, $24, $80, $04, $00, $00 // vmovdqu [rsp+1152], xmm6
db $C5, $FA, $7F, $BC, $24, $90, $04, $00, $00 // vmovdqu [rsp+1168], xmm7
db $C5, $7A, $7F, $84, $24, $A0, $04, $00, $00 // vmovdqu [rsp+1184], xmm8
db $C5, $7A, $7F, $8C, $24, $B0, $04, $00, $00 // vmovdqu [rsp+1200], xmm9
db $C5, $7A, $7F, $94, $24, $C0, $04, $00, $00 // vmovdqu [rsp+1216], xmm10
db $C5, $7A, $7F, $9C, $24, $D0, $04, $00, $00 // vmovdqu [rsp+1232], xmm11
db $C5, $7A, $7F, $A4, $24, $E0, $04, $00, $00 // vmovdqu [rsp+1248], xmm12
db $C5, $7A, $7F, $AC, $24, $F0, $04, $00, $00 // vmovdqu [rsp+1264], xmm13
sub rsp, 1152

mov qword ptr [rsp + 1136], r12
mov qword ptr [rsp + 1120], r8
Expand Down Expand Up @@ -1677,18 +1671,11 @@
db $C5, $7E, $7F, $A0, $C0, $00, $00, $00 // vmovdqu [rax+192], ymm12
db $C5, $7E, $7F, $A8, $E0, $00, $00, $00 // vmovdqu [rax+224], ymm13

db $C5, $FA, $6F, $B4, $24, $80, $04, $00, $00 // vmovdqu xmm6, [rsp+1152]
db $C5, $FA, $6F, $BC, $24, $90, $04, $00, $00 // vmovdqu xmm7, [rsp+1168]
db $C5, $7A, $6F, $84, $24, $A0, $04, $00, $00 // vmovdqu xmm8, [rsp+1184]
db $C5, $7A, $6F, $8C, $24, $B0, $04, $00, $00 // vmovdqu xmm9, [rsp+1200]
db $C5, $7A, $6F, $94, $24, $C0, $04, $00, $00 // vmovdqu xmm10, [rsp+1216]
db $C5, $7A, $6F, $9C, $24, $D0, $04, $00, $00 // vmovdqu xmm11, [rsp+1232]
db $C5, $7A, $6F, $A4, $24, $E0, $04, $00, $00 // vmovdqu xmm12, [rsp+1248]
db $C5, $7A, $6F, $AC, $24, $F0, $04, $00, $00 // vmovdqu xmm13, [rsp+1264]

db $C5, $F8, $77 // vzeroupper

mov rsp, qword ptr [rsp + 1136]
pop r12
pop rbp
pop rbx

{$I ..\Include\Simd\Common\SimdNonVolatileRestore_x86_64.inc}
4 changes: 4 additions & 0 deletions HashLib/src/Include/Simd/CRC/CRCFoldForwardPclmul_x86_64.inc
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
// pshufb xmm_dst, xmm_src (SSSE3):
// 66 0F 38 00 ModRM

{$I ..\Include\Simd\Common\SimdNonVolatileSave_x86_64.inc}

// BswapMask is always needed (kept in xmm6 throughout)
movdqu xmm6, dqword ptr [r9 + 64] // BswapMask

Expand Down Expand Up @@ -192,3 +194,5 @@

// movq rax, xmm0: 66 48 0F 7E C0
db $66, $48, $0F, $7E, $C0

{$I ..\Include\Simd\Common\SimdNonVolatileRestore_x86_64.inc}
4 changes: 4 additions & 0 deletions HashLib/src/Include/Simd/CRC/CRCFoldForwardVpclmul_x86_64.inc
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
// 2-byte: C5 [R.vvvv.L.pp]
// 3-byte: C4 [R.X.B.mmmmm] [W.vvvv.L.pp]

{$I ..\Include\Simd\Common\SimdNonVolatileSave_x86_64.inc}

cmp edx, 128
jb @xmm_path

Expand Down Expand Up @@ -237,3 +239,5 @@
db $C5, $F8, $77 // vzeroupper
// movq rax, xmm0: 66 48 0F 7E C0
db $66, $48, $0F, $7E, $C0

{$I ..\Include\Simd\Common\SimdNonVolatileRestore_x86_64.inc}
Loading
Loading