// File: /workspace/github_c_makefile_star2_O0/LoupVaillant[P]Monocypher-Utils/src/sha512.c
// Function: sha512_compress
static void sha512_compress(crypto_sha512_ctx *ctx)
{
    u64 *w = ctx->w;
    FOR(i,  0, 16) { w[i] = ctx->input[i]; }
    FOR(i, 16, 80) { w[i] = (lit_sigma1(w[i- 2]) + w[i- 7] +
                             lit_sigma0(w[i-15]) + w[i-16]); }

    u64 a = ctx->hash[0];    u64 b = ctx->hash[1];
    u64 c = ctx->hash[2];    u64 d = ctx->hash[3];
    u64 e = ctx->hash[4];    u64 f = ctx->hash[5];
    u64 g = ctx->hash[6];    u64 h = ctx->hash[7];
    FOR(i, 0, 80) {
        u64 t1 = big_sigma1(e) + ch (e, f, g) + h + K[i] + w[i];
        u64 t2 = big_sigma0(a) + maj(a, b, c);
        h = g;  g = f;  f = e;  e = d  + t1;
        d = c;  c = b;  b = a;  a = t1 + t2;
    }
    ctx->hash[0] += a;    ctx->hash[1] += b;
    ctx->hash[2] += c;    ctx->hash[3] += d;
    ctx->hash[4] += e;    ctx->hash[5] += f;
    ctx->hash[6] += g;    ctx->hash[7] += h;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x10(%rbp)
movq $0x0, -0x18(%rbp)
cmpq $0x10, -0x18(%rbp)
jae 0x10e40
movq -0x8(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x2c0(%rax,%rcx,8), %rdx
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x10e0f
movq $0x10, -0x20(%rbp)
cmpq $0x50, -0x20(%rbp)
jae 0x10ebe
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
subq $0x2, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x11250
movq -0x10(%rbp), %rcx
movq -0x20(%rbp), %rdx
subq $0x7, %rdx
addq (%rcx,%rdx,8), %rax
movq %rax, -0x80(%rbp)
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
subq $0xf, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x112a0
movq -0x80(%rbp), %rdx
addq %rax, %rdx
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
subq $0x10, %rcx
addq (%rax,%rcx,8), %rdx
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x10e48
movq -0x8(%rbp), %rax
movq 0x280(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rax
movq 0x288(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq 0x290(%rax), %rax
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rax
movq 0x298(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rax
movq 0x2a0(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x8(%rbp), %rax
movq 0x2a8(%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x8(%rbp), %rax
movq 0x2b0(%rax), %rax
movq %rax, -0x58(%rbp)
movq -0x8(%rbp), %rax
movq 0x2b8(%rax), %rax
movq %rax, -0x60(%rbp)
movq $0x0, -0x68(%rbp)
cmpq $0x50, -0x68(%rbp)
jae 0x11025
movq -0x48(%rbp), %rdi
callq 0x112f0
movq %rax, -0x90(%rbp)
movq -0x48(%rbp), %rdi
movq -0x50(%rbp), %rsi
movq -0x58(%rbp), %rdx
callq 0x11350
movq %rax, %rcx
movq -0x90(%rbp), %rax
addq %rcx, %rax
addq -0x60(%rbp), %rax
movq -0x68(%rbp), %rdx
leaq 0x212a(%rip), %rcx      # 0x130b0
addq (%rcx,%rdx,8), %rax
movq -0x10(%rbp), %rcx
movq -0x68(%rbp), %rdx
addq (%rcx,%rdx,8), %rax
movq %rax, -0x70(%rbp)
movq -0x28(%rbp), %rdi
callq 0x11380
movq %rax, -0x88(%rbp)
movq -0x28(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x38(%rbp), %rdx
callq 0x113e0
movq %rax, %rcx
movq -0x88(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x78(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x40(%rbp), %rax
addq -0x70(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x70(%rbp), %rax
addq -0x78(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x68(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x68(%rbp)
jmp 0x10f3e
movq -0x28(%rbp), %rcx
movq -0x8(%rbp), %rax
addq 0x280(%rax), %rcx
movq %rcx, 0x280(%rax)
movq -0x30(%rbp), %rcx
movq -0x8(%rbp), %rax
addq 0x288(%rax), %rcx
movq %rcx, 0x288(%rax)
movq -0x38(%rbp), %rcx
movq -0x8(%rbp), %rax
addq 0x290(%rax), %rcx
movq %rcx, 0x290(%rax)
movq -0x40(%rbp), %rcx
movq -0x8(%rbp), %rax
addq 0x298(%rax), %rcx
movq %rcx, 0x298(%rax)
movq -0x48(%rbp), %rcx
movq -0x8(%rbp), %rax
addq 0x2a0(%rax), %rcx
movq %rcx, 0x2a0(%rax)
movq -0x50(%rbp), %rcx
movq -0x8(%rbp), %rax
addq 0x2a8(%rax), %rcx
movq %rcx, 0x2a8(%rax)
movq -0x58(%rbp), %rcx
movq -0x8(%rbp), %rax
addq 0x2b0(%rax), %rcx
movq %rcx, 0x2b0(%rax)
movq -0x60(%rbp), %rcx
movq -0x8(%rbp), %rax
addq 0x2b8(%rax), %rcx
movq %rcx, 0x2b8(%rax)
addq $0x90, %rsp
popq %rbp
retq
nop