// File: HQarroum[P]thread-pool/examples/one-producer-many-consumers/./../../includes/lightweight_semaphore.hpp
// Function: moodycamel::LightweightSemaphore::tryWaitMany(long)
ssize_t tryWaitMany(ssize_t max)
	{
		assert(max >= 0);
		ssize_t oldCount = m_count.load(std::memory_order_relaxed);
		while (oldCount > 0)
		{
			ssize_t newCount = oldCount > max ? oldCount - max : 0;
			if (m_count.compare_exchange_weak(oldCount, newCount, std::memory_order_acquire, std::memory_order_relaxed))
				return oldCount - newCount;
		}
		return 0;
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1a0, %rsp            # imm = 0x1A0
movq %rdi, -0x58(%rbp)
movq %rsi, -0x60(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x60(%rbp)
jl 0x7634
jmp 0x7653
leaq 0x11042(%rip), %rdi     # 0x1867d
leaq 0x10e80(%rip), %rsi     # 0x184c2
movl $0x16d, %edx            # imm = 0x16D
leaq 0x11082(%rip), %rcx     # 0x186d0
callq 0x3180
movq -0x78(%rbp), %rax
movq %rax, -0x38(%rbp)
movl $0x0, -0x3c(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x88(%rbp)
movl -0x3c(%rbp), %edi
movl $0xffff, %esi           # imm = 0xFFFF
callq 0x58d0
movl %eax, -0x40(%rbp)
movl -0x3c(%rbp), %eax
movl %eax, -0x7c(%rbp)
decl %eax
subl $0x2, %eax
jb 0x76a6
jmp 0x768c
movl -0x7c(%rbp), %eax
subl $0x5, %eax
je 0x76b6
jmp 0x7696
movq -0x88(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0x76c4
movq -0x88(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0x76c4
movq -0x88(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x68(%rbp)
cmpq $0x0, -0x68(%rbp)
jle 0x7d30
movq -0x68(%rbp), %rax
cmpq -0x60(%rbp), %rax
jle 0x76f2
movq -0x68(%rbp), %rax
subq -0x60(%rbp), %rax
movq %rax, -0x90(%rbp)
jmp 0x76fd
xorl %eax, %eax
movq %rax, -0x90(%rbp)
jmp 0x76fd
movq -0x78(%rbp), %rcx
movq -0x90(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq %rcx, -0x8(%rbp)
leaq -0x68(%rbp), %rcx
movq %rcx, -0x10(%rbp)
movq %rax, -0x18(%rbp)
movl $0x2, -0x1c(%rbp)
movl $0x0, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xb0(%rbp)
movl -0x1c(%rbp), %eax
movq -0x10(%rbp), %rcx
movq %rcx, -0xa8(%rbp)
movq -0x18(%rbp), %rcx
movq %rcx, -0x28(%rbp)
movl -0x20(%rbp), %ecx
movl %ecx, -0x9c(%rbp)
decl %eax
movl %eax, %ecx
movq %rcx, -0x98(%rbp)
subl $0x4, %eax
ja 0x777f
movq -0x98(%rbp), %rax
leaq 0x108c2(%rip), %rcx     # 0x18038
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl -0x9c(%rbp), %eax
decl %eax
subl $0x2, %eax
jb 0x7875
jmp 0x7792
movl -0x9c(%rbp), %eax
subl $0x5, %eax
je 0x78a8
jmp 0x7842
movl -0x9c(%rbp), %eax
decl %eax
subl $0x2, %eax
jb 0x796d
jmp 0x77b9
movl -0x9c(%rbp), %eax
subl $0x5, %eax
je 0x79a0
jmp 0x793a
movl -0x9c(%rbp), %eax
decl %eax
subl $0x2, %eax
jb 0x7a65
jmp 0x77e0
movl -0x9c(%rbp), %eax
subl $0x5, %eax
je 0x7a98
jmp 0x7a32
movl -0x9c(%rbp), %eax
decl %eax
subl $0x2, %eax
jb 0x7b5d
jmp 0x7807
movl -0x9c(%rbp), %eax
subl $0x5, %eax
je 0x7b90
jmp 0x7b2a
movl -0x9c(%rbp), %eax
decl %eax
subl $0x2, %eax
jb 0x7c55
jmp 0x782e
movl -0x9c(%rbp), %eax
subl $0x5, %eax
je 0x7c88
jmp 0x7c22
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
lock
cmpxchgq %rdx, (%rcx)
movq %rax, %rcx
sete %al
movb %al, -0xb9(%rbp)
movq %rcx, -0xb8(%rbp)
testb $0x1, %al
jne 0x78f1
jmp 0x78e0
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
lock
cmpxchgq %rdx, (%rcx)
movq %rax, %rcx
sete %al
movb %al, -0xc9(%rbp)
movq %rcx, -0xc8(%rbp)
testb $0x1, %al
jne 0x790f
jmp 0x78fe
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
lock
cmpxchgq %rdx, (%rcx)
movq %rax, %rcx
sete %al
movb %al, -0xd9(%rbp)
movq %rcx, -0xd8(%rbp)
testb $0x1, %al
jne 0x792d
jmp 0x791c
jmp 0x7d17
movq -0xa8(%rbp), %rax
movq -0xb8(%rbp), %rcx
movq %rcx, (%rax)
movb -0xb9(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x78db
movq -0xa8(%rbp), %rax
movq -0xc8(%rbp), %rcx
movq %rcx, (%rax)
movb -0xc9(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x78db
movq -0xa8(%rbp), %rax
movq -0xd8(%rbp), %rcx
movq %rcx, (%rax)
movb -0xd9(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x78db
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
lock
cmpxchgq %rdx, (%rcx)
movq %rax, %rcx
sete %al
movb %al, -0xe9(%rbp)
movq %rcx, -0xe8(%rbp)
testb $0x1, %al
jne 0x79e9
jmp 0x79d8
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
lock
cmpxchgq %rdx, (%rcx)
movq %rax, %rcx
sete %al
movb %al, -0xf9(%rbp)
movq %rcx, -0xf8(%rbp)
testb $0x1, %al
jne 0x7a07
jmp 0x79f6
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
lock
cmpxchgq %rdx, (%rcx)
movq %rax, %rcx
sete %al
movb %al, -0x109(%rbp)
movq %rcx, -0x108(%rbp)
testb $0x1, %al
jne 0x7a25
jmp 0x7a14
jmp 0x7d17
movq -0xa8(%rbp), %rax
movq -0xe8(%rbp), %rcx
movq %rcx, (%rax)
movb -0xe9(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x79d3
movq -0xa8(%rbp), %rax
movq -0xf8(%rbp), %rcx
movq %rcx, (%rax)
movb -0xf9(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x79d3
movq -0xa8(%rbp), %rax
movq -0x108(%rbp), %rcx
movq %rcx, (%rax)
movb -0x109(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x79d3
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
lock
cmpxchgq %rdx, (%rcx)
movq %rax, %rcx
sete %al
movb %al, -0x119(%rbp)
movq %rcx, -0x118(%rbp)
testb $0x1, %al
jne 0x7ae1
jmp 0x7ad0
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
lock
cmpxchgq %rdx, (%rcx)
movq %rax, %rcx
sete %al
movb %al, -0x129(%rbp)
movq %rcx, -0x128(%rbp)
testb $0x1, %al
jne 0x7aff
jmp 0x7aee
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
lock
cmpxchgq %rdx, (%rcx)
movq %rax, %rcx
sete %al
movb %al, -0x139(%rbp)
movq %rcx, -0x138(%rbp)
testb $0x1, %al
jne 0x7b1d
jmp 0x7b0c
jmp 0x7d17
movq -0xa8(%rbp), %rax
movq -0x118(%rbp), %rcx
movq %rcx, (%rax)
movb -0x119(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x7acb
movq -0xa8(%rbp), %rax
movq -0x128(%rbp), %rcx
movq %rcx, (%rax)
movb -0x129(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x7acb
movq -0xa8(%rbp), %rax
movq -0x138(%rbp), %rcx
movq %rcx, (%rax)
movb -0x139(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x7acb
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
lock
cmpxchgq %rdx, (%rcx)
movq %rax, %rcx
sete %al
movb %al, -0x149(%rbp)
movq %rcx, -0x148(%rbp)
testb $0x1, %al
jne 0x7bd9
jmp 0x7bc8
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
lock
cmpxchgq %rdx, (%rcx)
movq %rax, %rcx
sete %al
movb %al, -0x159(%rbp)
movq %rcx, -0x158(%rbp)
testb $0x1, %al
jne 0x7bf7
jmp 0x7be6
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
lock
cmpxchgq %rdx, (%rcx)
movq %rax, %rcx
sete %al
movb %al, -0x169(%rbp)
movq %rcx, -0x168(%rbp)
testb $0x1, %al
jne 0x7c15
jmp 0x7c04
jmp 0x7d17
movq -0xa8(%rbp), %rax
movq -0x148(%rbp), %rcx
movq %rcx, (%rax)
movb -0x149(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x7bc3
movq -0xa8(%rbp), %rax
movq -0x158(%rbp), %rcx
movq %rcx, (%rax)
movb -0x159(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x7bc3
movq -0xa8(%rbp), %rax
movq -0x168(%rbp), %rcx
movq %rcx, (%rax)
movb -0x169(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x7bc3
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
lock
cmpxchgq %rdx, (%rcx)
movq %rax, %rcx
sete %al
movb %al, -0x179(%rbp)
movq %rcx, -0x178(%rbp)
testb $0x1, %al
jne 0x7cce
jmp 0x7cbd
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
lock
cmpxchgq %rdx, (%rcx)
movq %rax, %rcx
sete %al
movb %al, -0x189(%rbp)
movq %rcx, -0x188(%rbp)
testb $0x1, %al
jne 0x7cec
jmp 0x7cdb
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rdx
lock
cmpxchgq %rdx, (%rcx)
movq %rax, %rcx
sete %al
movb %al, -0x199(%rbp)
movq %rcx, -0x198(%rbp)
testb $0x1, %al
jne 0x7d0a
jmp 0x7cf9
jmp 0x7d17
movq -0xa8(%rbp), %rax
movq -0x178(%rbp), %rcx
movq %rcx, (%rax)
movb -0x179(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x7cbb
movq -0xa8(%rbp), %rax
movq -0x188(%rbp), %rcx
movq %rcx, (%rax)
movb -0x189(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x7cbb
movq -0xa8(%rbp), %rax
movq -0x198(%rbp), %rcx
movq %rcx, (%rax)
movb -0x199(%rbp), %al
andb $0x1, %al
movb %al, -0x29(%rbp)
jmp 0x7cbb
testb $0x1, -0x29(%rbp)
je 0x7d2b
movq -0x68(%rbp), %rax
subq -0x70(%rbp), %rax
movq %rax, -0x50(%rbp)
jmp 0x7d38
jmp 0x76cc
movq $0x0, -0x50(%rbp)
movq -0x50(%rbp), %rax
addq $0x1a0, %rsp            # imm = 0x1A0
popq %rbp
retq
nopw %cs:(%rax,%rax)
nop