// File: IncredibleHannes[P]QMUL-ChessGame/src/Model/Chessman/Queen.cpp
// Function: Queen::getPossibleMoves[abi:cxx11](Board const&) const
std::list<Move> Queen::getPossibleMoves(const Board &board) const {
  std::list<Move> moves;
  if (!isCaptured()) {
    bool top = true;
    bool right = true;
    bool bottom = true;
    bool left = true;
    bool leftTop = true;
    bool rightTop = true;
    bool leftBottom = true;
    bool rightBottom = true;
    int i = 1;

    while (top || right || bottom || left || leftTop || rightTop || leftBottom || rightBottom) {
      checkMove(board, moves, leftTop, i, -i);
      checkMove(board, moves, rightTop, i, i);
      checkMove(board, moves, leftBottom, -i, -i);
      checkMove(board, moves, rightBottom, -i, i);
      checkMove(board, moves, top, i, 0);
      checkMove(board, moves, right, 0, i);
      checkMove(board, moves, bottom, -i, 0);
      checkMove(board, moves, left, 0, -i);
      i++;
    }
  }
  return moves;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x58(%rbp)
movq %rdi, %rax
movq %rax, -0x50(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x48(%rbp)
movb $0x0, -0x19(%rbp)
callq 0x3220
movq -0x48(%rbp), %rdi
callq 0x57d0
movb %al, -0x39(%rbp)
jmp 0x663e
movb -0x39(%rbp), %al
testb $0x1, %al
jne 0x67f7
jmp 0x664b
movb $0x1, -0x2d(%rbp)
movb $0x1, -0x2e(%rbp)
movb $0x1, -0x2f(%rbp)
movb $0x1, -0x30(%rbp)
movb $0x1, -0x31(%rbp)
movb $0x1, -0x32(%rbp)
movb $0x1, -0x33(%rbp)
movb $0x1, -0x34(%rbp)
movl $0x1, -0x38(%rbp)
movb $0x1, %al
testb $0x1, -0x2d(%rbp)
movb %al, -0x59(%rbp)
jne 0x66c5
movb $0x1, %al
testb $0x1, -0x2e(%rbp)
movb %al, -0x59(%rbp)
jne 0x66c5
movb $0x1, %al
testb $0x1, -0x2f(%rbp)
movb %al, -0x59(%rbp)
jne 0x66c5
movb $0x1, %al
testb $0x1, -0x30(%rbp)
movb %al, -0x59(%rbp)
jne 0x66c5
movb $0x1, %al
testb $0x1, -0x31(%rbp)
movb %al, -0x59(%rbp)
jne 0x66c5
movb $0x1, %al
testb $0x1, -0x32(%rbp)
movb %al, -0x59(%rbp)
jne 0x66c5
movb $0x1, %al
testb $0x1, -0x33(%rbp)
movb %al, -0x59(%rbp)
jne 0x66c5
movb -0x34(%rbp), %al
movb %al, -0x59(%rbp)
movb -0x59(%rbp), %al
testb $0x1, %al
jne 0x66d1
jmp 0x67f5
movq -0x58(%rbp), %rdx
movq -0x48(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x38(%rbp), %r8d
movl %r8d, %r9d
negl %r9d
leaq -0x31(%rbp), %rcx
callq 0x4840
jmp 0x66f2
movq -0x58(%rbp), %rdx
movq -0x48(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x38(%rbp), %r9d
leaq -0x32(%rbp), %rcx
movl %r9d, %r8d
callq 0x4840
jmp 0x6710
movq -0x58(%rbp), %rdx
movq -0x48(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x38(%rbp), %r9d
negl %r9d
leaq -0x33(%rbp), %rcx
movl %r9d, %r8d
callq 0x4840
jmp 0x6731
movq -0x58(%rbp), %rdx
movq -0x48(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x38(%rbp), %r9d
movl %r9d, %r8d
negl %r8d
leaq -0x34(%rbp), %rcx
callq 0x4840
jmp 0x6752
movq -0x58(%rbp), %rdx
movq -0x48(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x38(%rbp), %r8d
leaq -0x2d(%rbp), %rcx
xorl %r9d, %r9d
callq 0x4840
jmp 0x6770
movq -0x58(%rbp), %rdx
movq -0x48(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x38(%rbp), %r9d
leaq -0x2e(%rbp), %rcx
xorl %r8d, %r8d
callq 0x4840
jmp 0x678e
movq -0x58(%rbp), %rdx
movq -0x48(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x38(%rbp), %r8d
negl %r8d
leaq -0x2f(%rbp), %rcx
xorl %r9d, %r9d
callq 0x4840
jmp 0x67af
movq -0x58(%rbp), %rdx
movq -0x48(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x38(%rbp), %r9d
negl %r9d
leaq -0x30(%rbp), %rcx
xorl %r8d, %r8d
callq 0x4840
jmp 0x67d0
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x6672
movq -0x58(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
callq 0x3240
jmp 0x6814
jmp 0x67f7
movb $0x1, -0x19(%rbp)
testb $0x1, -0x19(%rbp)
jne 0x680a
movq -0x58(%rbp), %rdi
callq 0x3240
movq -0x50(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
movq -0x28(%rbp), %rdi
callq 0x2260
nopl (%rax)