.text .global sha256_update sha256_update: push %r15 push %r14 push %r13 push %r12 push %rsi push %rdi push %rbp push %rbx movdqu 0(%rdi), %xmm1 movdqu 16(%rdi), %xmm2 mov $289644378169868803, %rax pinsrq $0, %rax, %xmm7 mov $868365760874482187, %rax pinsrq $1, %rax, %xmm7 pshufd $27, %xmm1, %xmm0 pshufd $177, %xmm1, %xmm1 pshufd $27, %xmm2, %xmm2 movdqu %xmm7, %xmm8 palignr $8, %xmm2, %xmm1 shufpd $0, %xmm0, %xmm2 jmp L1 .balign 16 L0: movdqu 0(%rsi), %xmm3 movdqu 16(%rsi), %xmm4 movdqu 32(%rsi), %xmm5 pshufb %xmm7, %xmm3 movdqu 48(%rsi), %xmm6 movdqu 0(%rcx), %xmm0 paddd %xmm3, %xmm0 pshufb %xmm7, %xmm4 movdqu %xmm2, %xmm10 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 movdqu %xmm1, %xmm9 sha256rnds2 %xmm2, %xmm1 movdqu 16(%rcx), %xmm0 paddd %xmm4, %xmm0 pshufb %xmm7, %xmm5 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 add $64, %rsi sha256msg1 %xmm4, %xmm3 sha256rnds2 %xmm2, %xmm1 movdqu 32(%rcx), %xmm0 paddd %xmm5, %xmm0 pshufb %xmm7, %xmm6 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 movdqu %xmm6, %xmm7 palignr $4, %xmm5, %xmm7 paddd %xmm7, %xmm3 sha256msg1 %xmm5, %xmm4 sha256rnds2 %xmm2, %xmm1 movdqu 48(%rcx), %xmm0 paddd %xmm6, %xmm0 sha256msg2 %xmm6, %xmm3 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 movdqu %xmm3, %xmm7 palignr $4, %xmm6, %xmm7 paddd %xmm7, %xmm4 sha256msg1 %xmm6, %xmm5 sha256rnds2 %xmm2, %xmm1 movdqu 64(%rcx), %xmm0 paddd %xmm3, %xmm0 sha256msg2 %xmm3, %xmm4 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 movdqu %xmm4, %xmm7 palignr $4, %xmm3, %xmm7 paddd %xmm7, %xmm5 sha256msg1 %xmm3, %xmm6 sha256rnds2 %xmm2, %xmm1 movdqu %xmm3, %xmm7 movdqu %xmm6, %xmm0 movdqu %xmm4, %xmm3 movdqu %xmm5, %xmm4 movdqu %xmm7, %xmm6 movdqu %xmm0, %xmm5 movdqu 80(%rcx), %xmm0 paddd %xmm3, %xmm0 sha256msg2 %xmm3, %xmm4 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 movdqu %xmm4, %xmm7 palignr $4, %xmm3, %xmm7 paddd %xmm7, %xmm5 sha256msg1 %xmm3, %xmm6 sha256rnds2 %xmm2, %xmm1 movdqu %xmm3, %xmm7 movdqu %xmm6, %xmm0 movdqu %xmm4, %xmm3 movdqu %xmm5, %xmm4 movdqu %xmm7, %xmm6 movdqu %xmm0, %xmm5 movdqu 96(%rcx), %xmm0 paddd %xmm3, %xmm0 sha256msg2 %xmm3, %xmm4 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 movdqu %xmm4, %xmm7 palignr $4, %xmm3, %xmm7 paddd %xmm7, %xmm5 sha256msg1 %xmm3, %xmm6 sha256rnds2 %xmm2, %xmm1 movdqu %xmm3, %xmm7 movdqu %xmm6, %xmm0 movdqu %xmm4, %xmm3 movdqu %xmm5, %xmm4 movdqu %xmm7, %xmm6 movdqu %xmm0, %xmm5 movdqu 112(%rcx), %xmm0 paddd %xmm3, %xmm0 sha256msg2 %xmm3, %xmm4 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 movdqu %xmm4, %xmm7 palignr $4, %xmm3, %xmm7 paddd %xmm7, %xmm5 sha256msg1 %xmm3, %xmm6 sha256rnds2 %xmm2, %xmm1 movdqu %xmm3, %xmm7 movdqu %xmm6, %xmm0 movdqu %xmm4, %xmm3 movdqu %xmm5, %xmm4 movdqu %xmm7, %xmm6 movdqu %xmm0, %xmm5 movdqu 128(%rcx), %xmm0 paddd %xmm3, %xmm0 sha256msg2 %xmm3, %xmm4 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 movdqu %xmm4, %xmm7 palignr $4, %xmm3, %xmm7 paddd %xmm7, %xmm5 sha256msg1 %xmm3, %xmm6 sha256rnds2 %xmm2, %xmm1 movdqu %xmm3, %xmm7 movdqu %xmm6, %xmm0 movdqu %xmm4, %xmm3 movdqu %xmm5, %xmm4 movdqu %xmm7, %xmm6 movdqu %xmm0, %xmm5 movdqu 144(%rcx), %xmm0 paddd %xmm3, %xmm0 sha256msg2 %xmm3, %xmm4 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 movdqu %xmm4, %xmm7 palignr $4, %xmm3, %xmm7 paddd %xmm7, %xmm5 sha256msg1 %xmm3, %xmm6 sha256rnds2 %xmm2, %xmm1 movdqu %xmm3, %xmm7 movdqu %xmm6, %xmm0 movdqu %xmm4, %xmm3 movdqu %xmm5, %xmm4 movdqu %xmm7, %xmm6 movdqu %xmm0, %xmm5 movdqu 160(%rcx), %xmm0 paddd %xmm3, %xmm0 sha256msg2 %xmm3, %xmm4 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 movdqu %xmm4, %xmm7 palignr $4, %xmm3, %xmm7 paddd %xmm7, %xmm5 sha256msg1 %xmm3, %xmm6 sha256rnds2 %xmm2, %xmm1 movdqu %xmm3, %xmm7 movdqu %xmm6, %xmm0 movdqu %xmm4, %xmm3 movdqu %xmm5, %xmm4 movdqu %xmm7, %xmm6 movdqu %xmm0, %xmm5 movdqu 176(%rcx), %xmm0 paddd %xmm3, %xmm0 sha256msg2 %xmm3, %xmm4 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 movdqu %xmm4, %xmm7 palignr $4, %xmm3, %xmm7 paddd %xmm7, %xmm5 sha256msg1 %xmm3, %xmm6 sha256rnds2 %xmm2, %xmm1 movdqu %xmm3, %xmm7 movdqu %xmm6, %xmm0 movdqu %xmm4, %xmm3 movdqu %xmm5, %xmm4 movdqu %xmm7, %xmm6 movdqu %xmm0, %xmm5 movdqu 192(%rcx), %xmm0 paddd %xmm3, %xmm0 sha256msg2 %xmm3, %xmm4 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 movdqu %xmm4, %xmm7 palignr $4, %xmm3, %xmm7 paddd %xmm7, %xmm5 sha256msg1 %xmm3, %xmm6 sha256rnds2 %xmm2, %xmm1 movdqu %xmm3, %xmm7 movdqu %xmm6, %xmm0 movdqu %xmm4, %xmm3 movdqu %xmm5, %xmm4 movdqu %xmm7, %xmm6 movdqu %xmm0, %xmm5 movdqu 208(%rcx), %xmm0 paddd %xmm3, %xmm0 sha256msg2 %xmm3, %xmm4 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 movdqu %xmm4, %xmm7 palignr $4, %xmm3, %xmm7 sha256rnds2 %xmm2, %xmm1 paddd %xmm7, %xmm5 movdqu 224(%rcx), %xmm0 paddd %xmm4, %xmm0 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 sha256msg2 %xmm4, %xmm5 movdqu %xmm8, %xmm7 sha256rnds2 %xmm2, %xmm1 movdqu 240(%rcx), %xmm0 paddd %xmm5, %xmm0 sha256rnds2 %xmm1, %xmm2 pshufd $14, %xmm0, %xmm0 sub $1, %rdx sha256rnds2 %xmm2, %xmm1 paddd %xmm10, %xmm2 paddd %xmm9, %xmm1 .balign 16 L1: cmp $0, %rdx ja L0 pshufd $177, %xmm2, %xmm2 pshufd $27, %xmm1, %xmm7 pshufd $177, %xmm1, %xmm1 shufpd $3, %xmm2, %xmm1 palignr $8, %xmm7, %xmm2 movdqu %xmm1, 0(%rdi) movdqu %xmm2, 16(%rdi) pop %rbx pop %rbp pop %rdi pop %rsi pop %r12 pop %r13 pop %r14 pop %r15 ret