// File: SethKasmann[P]clever-girl/src/MagicMoves.cpp
// Function: initmagicmoves_Bmoves(int, unsigned long long)
U64 initmagicmoves_Bmoves(const int square, const U64 occ)
{
	U64 ret=0;
	U64 bit;
	U64 bit2;
	U64 rowbits=(((U64)0xFF)<<(8*(square/8)));
	
	bit=(((U64)(1))<<square);
	bit2=bit;
	do
	{
		bit<<=8-1;
		bit2>>=1;
		if(bit2&rowbits) ret|=bit;
		else break;
	}while(bit && !(bit&occ));
	bit=(((U64)(1))<<square);
	bit2=bit;
	do
	{
		bit<<=8+1;
		bit2<<=1;
		if(bit2&rowbits) ret|=bit;
		else break;
	}while(bit && !(bit&occ));
	bit=(((U64)(1))<<square);
	bit2=bit;
	do
	{
		bit>>=8-1;
		bit2<<=1;
		if(bit2&rowbits) ret|=bit;
		else break;
	}while(bit && !(bit&occ));
	bit=(((U64)(1))<<square);
	bit2=bit;
	do
	{
		bit>>=8+1;
		bit2>>=1;
		if(bit2&rowbits) ret|=bit;
		else break;
	}while(bit && !(bit&occ));
	return ret;
}

// Assembly:
movl %edi, -0x4(%rsp)
movq %rsi, -0x10(%rsp)
movq $0x0, -0x18(%rsp)
movl -0x4(%rsp), %eax
movl $0x8, %ecx
cltd
idivl %ecx
shll $0x3, %eax
movl %eax, %eax
movl %eax, %ecx
movl $0xff, %eax
shlq %cl, %rax
movq %rax, -0x30(%rsp)
movl -0x4(%rsp), %eax
movl %eax, %ecx
movl $0x1, %eax
shlq %cl, %rax
movq %rax, -0x20(%rsp)
movq -0x20(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rax
shlq $0x7, %rax
movq %rax, -0x20(%rsp)
movq -0x28(%rsp), %rax
shrq %rax
movq %rax, -0x28(%rsp)
movq -0x28(%rsp), %rax
andq -0x30(%rsp), %rax
cmpq $0x0, %rax
je 0x2009b
movq -0x20(%rsp), %rax
orq -0x18(%rsp), %rax
movq %rax, -0x18(%rsp)
jmp 0x2009d
jmp 0x200cc
jmp 0x2009f
xorl %eax, %eax
cmpq $0x0, -0x20(%rsp)
movb %al, -0x31(%rsp)
je 0x200c4
movq -0x20(%rsp), %rax
andq -0x10(%rsp), %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
movb %al, -0x31(%rsp)
movb -0x31(%rsp), %al
testb $0x1, %al
jne 0x2005f
movl -0x4(%rsp), %eax
movl %eax, %ecx
movl $0x1, %eax
shlq %cl, %rax
movq %rax, -0x20(%rsp)
movq -0x20(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rax
shlq $0x9, %rax
movq %rax, -0x20(%rsp)
movq -0x28(%rsp), %rax
shlq %rax
movq %rax, -0x28(%rsp)
movq -0x28(%rsp), %rax
andq -0x30(%rsp), %rax
cmpq $0x0, %rax
je 0x20125
movq -0x20(%rsp), %rax
orq -0x18(%rsp), %rax
movq %rax, -0x18(%rsp)
jmp 0x20127
jmp 0x20156
jmp 0x20129
xorl %eax, %eax
cmpq $0x0, -0x20(%rsp)
movb %al, -0x32(%rsp)
je 0x2014e
movq -0x20(%rsp), %rax
andq -0x10(%rsp), %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
movb %al, -0x32(%rsp)
movb -0x32(%rsp), %al
testb $0x1, %al
jne 0x200e9
movl -0x4(%rsp), %eax
movl %eax, %ecx
movl $0x1, %eax
shlq %cl, %rax
movq %rax, -0x20(%rsp)
movq -0x20(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rax
shrq $0x7, %rax
movq %rax, -0x20(%rsp)
movq -0x28(%rsp), %rax
shlq %rax
movq %rax, -0x28(%rsp)
movq -0x28(%rsp), %rax
andq -0x30(%rsp), %rax
cmpq $0x0, %rax
je 0x201af
movq -0x20(%rsp), %rax
orq -0x18(%rsp), %rax
movq %rax, -0x18(%rsp)
jmp 0x201b1
jmp 0x201e0
jmp 0x201b3
xorl %eax, %eax
cmpq $0x0, -0x20(%rsp)
movb %al, -0x33(%rsp)
je 0x201d8
movq -0x20(%rsp), %rax
andq -0x10(%rsp), %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
movb %al, -0x33(%rsp)
movb -0x33(%rsp), %al
testb $0x1, %al
jne 0x20173
movl -0x4(%rsp), %eax
movl %eax, %ecx
movl $0x1, %eax
shlq %cl, %rax
movq %rax, -0x20(%rsp)
movq -0x20(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rax
shrq $0x9, %rax
movq %rax, -0x20(%rsp)
movq -0x28(%rsp), %rax
shrq %rax
movq %rax, -0x28(%rsp)
movq -0x28(%rsp), %rax
andq -0x30(%rsp), %rax
cmpq $0x0, %rax
je 0x20239
movq -0x20(%rsp), %rax
orq -0x18(%rsp), %rax
movq %rax, -0x18(%rsp)
jmp 0x2023b
jmp 0x2026a
jmp 0x2023d
xorl %eax, %eax
cmpq $0x0, -0x20(%rsp)
movb %al, -0x34(%rsp)
je 0x20262
movq -0x20(%rsp), %rax
andq -0x10(%rsp), %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
movb %al, -0x34(%rsp)
movb -0x34(%rsp), %al
testb $0x1, %al
jne 0x201fd
movq -0x18(%rsp), %rax
retq