equihash/blake2-asm/asm/proc_blake2_avx1.asm

40 lines
866 B
NASM

;void Blake2Run2(unsigned char *hashout, void *midstate, uint32_t indexctr);
;hashout: hash output buffer: 2*64 bytes
;midstate: 256 bytes from Blake2PrepareMidstate2
;indexctr: For n=200, k=9: {0, 2, 4, ..., 1048574}
include "macro_blake2b_avx1.asm"
Blake2Run2:
mov rax, rsp
sub rsp, 0x28
and rsp, -32
mov [rsp+0x20], rax
mov [rsi+0xd4], edx
add edx, 1
mov [rsi+0xdc], edx
Blake2beq2of2 rsi, rsi+0xc0
vpunpcklqdq xmm8, xmm0, xmm1
vpunpckhqdq xmm1, xmm0, xmm1
vpunpcklqdq xmm10, xmm2, xmm3
vpunpckhqdq xmm3, xmm2, xmm3
vpunpcklqdq xmm12, xmm4, xmm5
vpunpckhqdq xmm5, xmm4, xmm5
vpunpcklqdq xmm14, xmm6, xmm7
vpunpckhqdq xmm7, xmm6, xmm7
vmovdqa [rdi], xmm8
vmovdqa [rdi+0x10], xmm10
vmovdqa [rdi+0x20], xmm12
vmovdqa [rdi+0x30], xmm14
vmovdqa [rdi+0x40], xmm1
vmovdqa [rdi+0x50], xmm3
vmovdqa [rdi+0x60], xmm5
vmovdqa [rdi+0x70], xmm7
mov rsp, [rsp+0x20]
ret