// File: niekh1234[P]nnchesslib/movegen.cpp
// Function: nnchesslib::genBlackMoves(nnchesslib::ChessBoard, std::vector<unsigned int, std::allocator<unsigned int>>&, nnchesslib::BitBoard)
void nnchesslib::genBlackMoves(ChessBoard board, MoveList& moveList, BitBoard blockers)
{
    genBlackSinglePawnMoves(board,moveList, blockers);
    genBlackDoublePawnMoves(board,moveList, blockers);
    genBlackPawnCaptures(board,moveList, blockers);
    genNonSlidingMoves(board,moveList, BLACK, KNIGHT);
    genNonSlidingMoves(board,moveList, BLACK, KING);
    genSlidingMoves(board,moveList, BLACK, ROOK, blockers);
    genSlidingMoves(board,moveList, BLACK, BISHOP, blockers);
    genSlidingMoves(board,moveList, BLACK, QUEEN, blockers);
    genCastlingMoves(board,moveList, BLACK, blockers);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x8f0, %rsp            # imm = 0x8F0
movq %rsi, %rax
leaq 0x10(%rbp), %rsi
movq %rsi, -0x7a8(%rbp)
movq %rax, -0x8(%rbp)
movq %rdi, -0x10(%rbp)
leaq -0xe0(%rbp), %rdi
movl $0xd0, %edx
callq 0x31e0
movq -0x10(%rbp), %rax
movq %rax, -0x810(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rax
movq %rax, -0x818(%rbp)
movq %rsp, %rdi
movl $0x1a, %ecx
leaq -0xe0(%rbp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movq -0x818(%rbp), %rsi
movq -0x810(%rbp), %rdi
callq 0xc400
movq -0x7a8(%rbp), %rsi
leaq -0x1b8(%rbp), %rdi
movl $0xd0, %edx
callq 0x31e0
movq -0x10(%rbp), %rax
movq %rax, -0x800(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x1c0(%rbp)
movq -0x1c0(%rbp), %rax
movq %rax, -0x808(%rbp)
movq %rsp, %rdi
movl $0x1a, %ecx
leaq -0x1b8(%rbp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movq -0x808(%rbp), %rsi
movq -0x800(%rbp), %rdi
callq 0xc5e0
movq -0x7a8(%rbp), %rsi
leaq -0x290(%rbp), %rdi
movl $0xd0, %edx
callq 0x31e0
movq -0x10(%rbp), %rax
movq %rax, -0x7f0(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x298(%rbp)
movq -0x298(%rbp), %rax
movq %rax, -0x7f8(%rbp)
movq %rsp, %rdi
movl $0x1a, %ecx
leaq -0x290(%rbp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movq -0x7f8(%rbp), %rsi
movq -0x7f0(%rbp), %rdi
callq 0xc710
movq -0x7a8(%rbp), %rsi
leaq -0x368(%rbp), %rdi
movl $0xd0, %edx
callq 0x31e0
movq -0x10(%rbp), %rax
movq %rax, -0x7e8(%rbp)
xorl %eax, %eax
movq %rsp, %rdi
movl $0x1a, %ecx
leaq -0x368(%rbp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movq -0x7e8(%rbp), %rdi
xorl %esi, %esi
movl $0x1, %edx
callq 0xbd30
movq -0x7a8(%rbp), %rsi
leaq -0x438(%rbp), %rdi
movl $0xd0, %edx
callq 0x31e0
movq -0x10(%rbp), %rax
movq %rax, -0x7e0(%rbp)
xorl %eax, %eax
movq %rsp, %rdi
movl $0x1a, %ecx
leaq -0x438(%rbp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movq -0x7e0(%rbp), %rdi
xorl %esi, %esi
movl $0x5, %edx
callq 0xbd30
movq -0x7a8(%rbp), %rsi
leaq -0x508(%rbp), %rdi
movl $0xd0, %edx
callq 0x31e0
movq -0x10(%rbp), %rax
movq %rax, -0x7d8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x510(%rbp)
movq -0x510(%rbp), %rax
movq %rax, -0x7d0(%rbp)
xorl %eax, %eax
movq %rsp, %rdi
movl $0x1a, %ecx
leaq -0x508(%rbp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movq -0x7d8(%rbp), %rdi
movq -0x7d0(%rbp), %rcx
xorl %esi, %esi
movl $0x3, %edx
callq 0xbf00
movq -0x7a8(%rbp), %rsi
leaq -0x5e0(%rbp), %rdi
movl $0xd0, %edx
callq 0x31e0
movq -0x10(%rbp), %rax
movq %rax, -0x7c8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x5e8(%rbp)
movq -0x5e8(%rbp), %rax
movq %rax, -0x7c0(%rbp)
xorl %eax, %eax
movq %rsp, %rdi
movl $0x1a, %ecx
leaq -0x5e0(%rbp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movq -0x7c8(%rbp), %rdi
movq -0x7c0(%rbp), %rcx
xorl %esi, %esi
movl $0x2, %edx
callq 0xbf00
movq -0x7a8(%rbp), %rsi
leaq -0x6b8(%rbp), %rdi
movl $0xd0, %edx
callq 0x31e0
movq -0x10(%rbp), %rax
movq %rax, -0x7b8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x6c0(%rbp)
movq -0x6c0(%rbp), %rax
movq %rax, -0x7b0(%rbp)
xorl %eax, %eax
movq %rsp, %rdi
movl $0x1a, %ecx
leaq -0x6b8(%rbp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movq -0x7b8(%rbp), %rdi
movq -0x7b0(%rbp), %rcx
xorl %esi, %esi
movl $0x4, %edx
callq 0xbf00
movq -0x7a8(%rbp), %rsi
leaq -0x790(%rbp), %rdi
movl $0xd0, %edx
callq 0x31e0
movq -0x10(%rbp), %rax
movq %rax, -0x7a0(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x798(%rbp)
movq -0x798(%rbp), %rdx
xorl %eax, %eax
movq %rsp, %rdi
movl $0x1a, %ecx
leaq -0x790(%rbp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movq -0x7a0(%rbp), %rdi
xorl %esi, %esi
callq 0xc0d0
addq $0x8f0, %rsp            # imm = 0x8F0
popq %rbp
retq
nop