// File: davidjosepha[P]slitherlink/src/generator/loopgen.cpp
// Function: LoopGen::countLines(int, int) const
int LoopGen::countLines(int i, int j) const {
    bool inside = inLoop(i, j);

    int lines = ((!inBounds({ i + 1, j}) && inside) || (inBounds({ i + 1, j }) && inLoop(i + 1, j) != inside))
                + ((!inBounds({ i - 1, j}) && inside) || (inBounds({ i - 1, j }) && inLoop(i - 1, j) != inside))
                + ((!inBounds({ i, j + 1}) && inside) || (inBounds({ i, j + 1 }) && inLoop(i, j + 1) != inside))
                + ((!inBounds({ i, j - 1}) && inside) || (inBounds({ i, j - 1 }) && inLoop(i, j - 1) != inside));

    return lines;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl %edx, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x60(%rbp)
movl -0xc(%rbp), %esi
movl -0x10(%rbp), %edx
callq 0x13760
movq -0x60(%rbp), %rdi
andb $0x1, %al
movb %al, -0x11(%rbp)
movl -0xc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
movl -0x10(%rbp), %eax
movl %eax, -0x1c(%rbp)
movq -0x20(%rbp), %rsi
callq 0x137c0
testb $0x1, %al
jne 0x13528
movb $0x1, %al
testb $0x1, -0x11(%rbp)
movb %al, -0x61(%rbp)
jne 0x13580
movq -0x60(%rbp), %rdi
movl -0xc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x28(%rbp)
movl -0x10(%rbp), %eax
movl %eax, -0x24(%rbp)
movq -0x28(%rbp), %rsi
callq 0x137c0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x62(%rbp)
jne 0x13552
jmp 0x1357a
movq -0x60(%rbp), %rdi
movl -0xc(%rbp), %esi
addl $0x1, %esi
movl -0x10(%rbp), %edx
callq 0x13760
andb $0x1, %al
movzbl %al, %eax
movb -0x11(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
setne %al
movb %al, -0x62(%rbp)
movb -0x62(%rbp), %al
movb %al, -0x61(%rbp)
movq -0x60(%rbp), %rdi
movb -0x61(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x68(%rbp)
movl -0xc(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x30(%rbp)
movl -0x10(%rbp), %eax
movl %eax, -0x2c(%rbp)
movq -0x30(%rbp), %rsi
callq 0x137c0
testb $0x1, %al
jne 0x135b6
movb $0x1, %al
testb $0x1, -0x11(%rbp)
movb %al, -0x69(%rbp)
jne 0x1360e
movq -0x60(%rbp), %rdi
movl -0xc(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x38(%rbp)
movl -0x10(%rbp), %eax
movl %eax, -0x34(%rbp)
movq -0x38(%rbp), %rsi
callq 0x137c0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x6a(%rbp)
jne 0x135e0
jmp 0x13608
movq -0x60(%rbp), %rdi
movl -0xc(%rbp), %esi
subl $0x1, %esi
movl -0x10(%rbp), %edx
callq 0x13760
andb $0x1, %al
movzbl %al, %eax
movb -0x11(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
setne %al
movb %al, -0x6a(%rbp)
movb -0x6a(%rbp), %al
movb %al, -0x69(%rbp)
movq -0x60(%rbp), %rdi
movl -0x68(%rbp), %eax
movb -0x69(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
addl %ecx, %eax
movl %eax, -0x70(%rbp)
movl -0xc(%rbp), %eax
movl %eax, -0x40(%rbp)
movl -0x10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
movq -0x40(%rbp), %rsi
callq 0x137c0
testb $0x1, %al
jne 0x1364a
movb $0x1, %al
testb $0x1, -0x11(%rbp)
movb %al, -0x71(%rbp)
jne 0x136a2
movq -0x60(%rbp), %rdi
movl -0xc(%rbp), %eax
movl %eax, -0x48(%rbp)
movl -0x10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
movq -0x48(%rbp), %rsi
callq 0x137c0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x72(%rbp)
jne 0x13674
jmp 0x1369c
movq -0x60(%rbp), %rdi
movl -0xc(%rbp), %esi
movl -0x10(%rbp), %edx
addl $0x1, %edx
callq 0x13760
andb $0x1, %al
movzbl %al, %eax
movb -0x11(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
setne %al
movb %al, -0x72(%rbp)
movb -0x72(%rbp), %al
movb %al, -0x71(%rbp)
movq -0x60(%rbp), %rdi
movl -0x70(%rbp), %eax
movb -0x71(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
addl %ecx, %eax
movl %eax, -0x78(%rbp)
movl -0xc(%rbp), %eax
movl %eax, -0x50(%rbp)
movl -0x10(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x4c(%rbp)
movq -0x50(%rbp), %rsi
callq 0x137c0
testb $0x1, %al
jne 0x136de
movb $0x1, %al
testb $0x1, -0x11(%rbp)
movb %al, -0x79(%rbp)
jne 0x13736
movq -0x60(%rbp), %rdi
movl -0xc(%rbp), %eax
movl %eax, -0x58(%rbp)
movl -0x10(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x54(%rbp)
movq -0x58(%rbp), %rsi
callq 0x137c0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x7a(%rbp)
jne 0x13708
jmp 0x13730
movq -0x60(%rbp), %rdi
movl -0xc(%rbp), %esi
movl -0x10(%rbp), %edx
subl $0x1, %edx
callq 0x13760
andb $0x1, %al
movzbl %al, %eax
movb -0x11(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
setne %al
movb %al, -0x7a(%rbp)
movb -0x7a(%rbp), %al
movb %al, -0x79(%rbp)
movl -0x78(%rbp), %eax
movb -0x79(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
addl %ecx, %eax
movl %eax, -0x18(%rbp)
movl -0x18(%rbp), %eax
addq $0x80, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)