// File: /workspace/github_cpp_makefile_star2_O1/theuni[P]libutreexo/crypto/sha256.cpp
// Function: void (anonymous namespace)::TransformD64Wrapper<&sha256_shani::Transform(unsigned int*, unsigned char const*, unsigned long)>(unsigned char*, unsigned char const*)
void TransformD64Wrapper(unsigned char* out, const unsigned char* in)
{
    uint32_t s[8];
    static const unsigned char padding1[64] = {
        0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0,    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0,    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0,    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0
    };
    unsigned char buffer2[64] = {
        0,    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0,    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0,    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0
    };
    sha256::Initialize(s);
    tr(s, in, 1);
    tr(s, padding1, 1);
    WriteBE32(buffer2 + 0, s[0]);
    WriteBE32(buffer2 + 4, s[1]);
    WriteBE32(buffer2 + 8, s[2]);
    WriteBE32(buffer2 + 12, s[3]);
    WriteBE32(buffer2 + 16, s[4]);
    WriteBE32(buffer2 + 20, s[5]);
    WriteBE32(buffer2 + 24, s[6]);
    WriteBE32(buffer2 + 28, s[7]);
    sha256::Initialize(s);
    tr(s, buffer2, 1);
    WriteBE32(out + 0, s[0]);
    WriteBE32(out + 4, s[1]);
    WriteBE32(out + 8, s[2]);
    WriteBE32(out + 12, s[3]);
    WriteBE32(out + 16, s[4]);
    WriteBE32(out + 20, s[5]);
    WriteBE32(out + 24, s[6]);
    WriteBE32(out + 28, s[7]);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x60, %rsp
movq %rdi, %rbx
xorps %xmm0, %xmm0
leaq 0x20(%rsp), %r15
movaps %xmm0, 0x20(%r15)
movaps %xmm0, 0x30(%r15)
movaps %xmm0, 0x10(%r15)
movaps %xmm0, (%r15)
movb $-0x80, 0x20(%r15)
movb $0x1, 0x3e(%r15)
movaps 0x26ad5(%rip), %xmm0    # 0x28040
movq %rsp, %r14
movaps %xmm0, (%r14)
movaps 0x26ad7(%rip), %xmm0    # 0x28050
movaps %xmm0, 0x10(%r14)
movl $0x1, %edx
movq %r14, %rdi
callq 0x15fe4
leaq 0x2706e(%rip), %rsi     # 0x28600
movl $0x1, %edx
movq %r14, %rdi
callq 0x15fe4
movl (%r14), %eax
movl 0x4(%r14), %ecx
bswapl %eax
movl %eax, (%r15)
bswapl %ecx
movl %ecx, 0x4(%r15)
movl 0x8(%r14), %eax
bswapl %eax
movl %eax, 0x8(%r15)
movl 0xc(%r14), %eax
bswapl %eax
movl %eax, 0xc(%r15)
movl 0x10(%r14), %eax
bswapl %eax
movl %eax, 0x10(%r15)
movl 0x14(%r14), %eax
bswapl %eax
movl %eax, 0x14(%r15)
movl 0x18(%r14), %eax
bswapl %eax
movl %eax, 0x18(%r15)
movl 0x1c(%r14), %eax
bswapl %eax
movl %eax, 0x1c(%r15)
movabsq $-0x4498517a95f61999, %rax # imm = 0xBB67AE856A09E667
movq %rax, (%r14)
movabsq $-0x5ab00ac5c3910c8e, %rax # imm = 0xA54FF53A3C6EF372
movq %rax, 0x8(%r14)
movabsq $-0x64fa9773aef1ad81, %rax # imm = 0x9B05688C510E527F
movq %rax, 0x10(%r14)
movabsq $0x5be0cd191f83d9ab, %rax # imm = 0x5BE0CD191F83D9AB
movq %rax, 0x18(%r14)
movl $0x1, %edx
movq %r14, %rdi
movq %r15, %rsi
callq 0x15fe4
movl (%r14), %eax
bswapl %eax
movl %eax, (%rbx)
movl 0x4(%r14), %eax
bswapl %eax
movl %eax, 0x4(%rbx)
movl 0x8(%r14), %eax
bswapl %eax
movl %eax, 0x8(%rbx)
movl 0xc(%r14), %eax
bswapl %eax
movl %eax, 0xc(%rbx)
movl 0x10(%r14), %eax
bswapl %eax
movl %eax, 0x10(%rbx)
movl 0x14(%r14), %eax
bswapl %eax
movl %eax, 0x14(%rbx)
movl 0x18(%r14), %eax
bswapl %eax
movl %eax, 0x18(%rbx)
movl 0x1c(%r14), %eax
bswapl %eax
movl %eax, 0x1c(%rbx)
addq $0x60, %rsp
popq %rbx
popq %r14
popq %r15
retq