// File: /workspace/github_c_makefile_star2_O1/maandree[P]libkeccak/digest.c
// Function: libkeccak_squeezing_phase
LIBKECCAK_GCC_ONLY(__attribute__((__nonnull__, __nothrow__, __hot__)))
static void
libkeccak_squeezing_phase(register struct libkeccak_state *restrict state, long int rr,
                          long int nn, long int ww, register unsigned char *restrict hashsum)
{
	register long int ni = (rr - 1) / ww + 1;
	auto long int olen = state->n;
	auto long int i, j = 0;
	register long int k;
	if (__builtin_expect(ww == 8, 1)) {
		register uint64_t v;
		while (olen > 0) {
			for (i = 0; i < ni && j < nn; i++) {
				v = state->S.w64[LANE_TRANSPOSE_MAP[i]];
				for (k = 0; k++ < ww && j++ < nn; v >>= 8)
					*hashsum++ = (unsigned char)v;
			}
			olen -= state->r;
			if (olen > 0)
				libkeccak_f(state);
		}
		if (state->n & 7)
			hashsum[-1] &= (unsigned char)((1 << (state->n & 7)) - 1);
	} else if (__builtin_expect(ww == 4, 1)) {
		register uint32_t v;
		while (olen > 0) {
			for (i = 0; i < ni && j < nn; i++) {
				v = state->S.w32[LANE_TRANSPOSE_MAP[i]];
				for (k = 0; k++ < ww && j++ < nn; v >>= 8)
					*hashsum++ = (unsigned char)v;
			}
			olen -= state->r;
			if (olen > 0)
				libkeccak_f(state);
		}
		if (state->n & 7)
			hashsum[-1] &= (unsigned char)((1 << (state->n & 7)) - 1);
	} else if (__builtin_expect(ww == 2, 1)) {
		register uint16_t v;
		while (olen > 0) {
			for (i = 0; i < ni && j < nn; i++) {
				v = state->S.w16[LANE_TRANSPOSE_MAP[i]];
				for (k = 0; k++ < ww && j++ < nn; v >>= 8)
					*hashsum++ = (unsigned char)v;
			}
			olen -= state->r;
			if (olen > 0)
				libkeccak_f(state);
		}
		if (state->n & 7)
			hashsum[-1] &= (unsigned char)((1 << (state->n & 7)) - 1);
	} else if (__builtin_expect(ww == 1, 1)) {
		register uint8_t v;
		while (olen > 0) {
			for (i = 0; i < ni && j < nn; i++, j++) {
				v = state->S.w8[LANE_TRANSPOSE_MAP[i]];
				*hashsum++ = (unsigned char)v;
			}
			olen -= state->r;
			if (olen > 0)
				libkeccak_f(state);
		}
		if (state->n & 7)
			hashsum[-1] &= (unsigned char)((1 << (state->n & 7)) - 1);
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %rbx
movq %rdx, %r15
leaq -0x1(%rsi), %rax
cqto
idivq %rcx
movq 0xd8(%rdi), %r9
cmpq $0x8, %rcx
jne 0x1444
testq %r9, %r9
jle 0x141f
xorl %r13d, %r13d
leaq 0x4cee(%rip), %rbp      # 0x6090
movq %rax, (%rsp)
testq %rax, %rax
js 0x13fc
cmpq %r15, %r13
jge 0x13fc
xorl %ecx, %ecx
movq %r13, %r11
movq (%rbp,%rcx,8), %rdx
movq (%rdi,%rdx,8), %rdx
xorl %r8d, %r8d
movq %r13, %r10
movq %r8, %rsi
cmpq %r15, %r10
jge 0x13e2
movb %dl, (%rbx)
incq %rbx
shrq $0x8, %rdx
leaq -0x1(%rsi), %r8
incq %r10
cmpq $-0x8, %r8
jne 0x13c4
subq %rsi, %r11
cmpq %rax, %rcx
jge 0x13f6
incq %rcx
leaq 0x1(%r11), %r13
cmpq %r15, %r13
jl 0x13b2
incq %r11
movq %r11, %r13
subq 0xc8(%rdi), %r9
jle 0x141a
movq %r9, %r14
movq %rdi, %r12
callq 0x3519
movq (%rsp), %rax
movq %r12, %rdi
movq %r14, %r9
testq %r9, %r9
jg 0x13a6
movq 0xd8(%rdi), %rcx
andq $0x7, %rcx
je 0x1435
movb $-0x1, %al
shlb %cl, %al
notb %al
andb %al, -0x1(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
cmpq $0x4, %rcx
jne 0x14e0
testq %r9, %r9
jle 0x141f
xorl %ebp, %ebp
leaq 0x4c34(%rip), %r14      # 0x6090
testq %rax, %rax
js 0x14af
cmpq %r15, %rbp
jge 0x14af
xorl %ecx, %ecx
movq %rbp, %r11
movq (%r14,%rcx,8), %rdx
movl (%rdi,%rdx,4), %edx
xorl %r8d, %r8d
movq %rbp, %r10
movq %r8, %rsi
cmpq %r15, %r10
jge 0x1495
movb %dl, (%rbx)
incq %rbx
shrl $0x8, %edx
leaq -0x1(%rsi), %r8
incq %r10
cmpq $-0x4, %r8
jne 0x1478
subq %rsi, %r11
cmpq %rax, %rcx
jge 0x14a9
incq %rcx
leaq 0x1(%r11), %rbp
cmpq %r15, %rbp
jl 0x1468
incq %r11
movq %r11, %rbp
subq 0xc8(%rdi), %r9
jle 0x14d6
movq %r9, %r14
movq %rdi, %r12
movq %rax, %r13
callq 0x3519
movq %r13, %rax
movq %r12, %rdi
movq %r14, %r9
leaq 0x4bba(%rip), %r14      # 0x6090
testq %r9, %r9
jg 0x145c
jmp 0x141f
movq %rax, %r12
movq %rdi, %r14
movq %r9, %r13
cmpq $0x2, %rcx
jne 0x157e
testq %r13, %r13
jle 0x1572
xorl %ebp, %ebp
testq %r12, %r12
js 0x155c
cmpq %r15, %rbp
jge 0x155c
xorl %ecx, %ecx
movq %rbp, %rax
leaq 0x4b80(%rip), %rdx      # 0x6090
movq (%rdx,%rcx,8), %rdx
movzwl (%r14,%rdx,2), %esi
incq %rbp
xorl %r8d, %r8d
movq %rax, %rdi
movq %r8, %rdx
cmpq %r15, %rdi
jge 0x1543
movzwl %si, %esi
movb %sil, (%rbx)
incq %rbx
shrl $0x8, %esi
leaq -0x1(%rdx), %r8
incq %rdi
cmpq $-0x2, %r8
jne 0x1522
cmpq %r12, %rcx
jge 0x1553
incq %rcx
subq %rdx, %rbp
cmpq %r15, %rbp
jl 0x1506
subq %rdx, %rax
incq %rax
movq %rax, %rbp
subq 0xc8(%r14), %r13
jle 0x156d
movq %r14, %rdi
callq 0x3519
testq %r13, %r13
jg 0x14fa
movq 0xd8(%r14), %rcx
jmp 0x1426
cmpq $0x1, %rcx
jne 0x1435
testq %r13, %r13
jle 0x1572
xorl %ebp, %ebp
testq %r12, %r12
setns %al
cmpq %r15, %rbp
setl %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0x15cb
leaq 0x4ae7(%rip), %rax      # 0x6090
xorl %ecx, %ecx
movq (%rax), %rdx
movb (%r14,%rdx), %dl
movb %dl, (%rbx)
incq %rbx
incq %rbp
cmpq %r12, %rcx
jge 0x15cb
incq %rcx
addq $0x8, %rax
cmpq %r15, %rbp
jl 0x15ab
subq 0xc8(%r14), %r13
jle 0x15dc
movq %r14, %rdi
callq 0x3519
testq %r13, %r13
jg 0x158f
jmp 0x1572