#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
void gen_dirs_board(unsigned long long *board_l, unsigned long long *board_u,
                    int pos) {
  int row = (int)pos / 10;
  int row_adj = row % 5;
  int pos_adj = pos % 50;
  unsigned long long *board_ptr = NULL;
  if (row < 9) {
    if (pos > 39)
      board_ptr = board_u;
    else
      board_ptr = board_l;
    if (pos == 40)
      *board_ptr |= 0x3;
    else
      *board_ptr |= (((unsigned long long)0x7 << ((pos_adj + 9) % 50)) &
                     ((unsigned long long)0x3ff << (((row_adj + 1) % 5) * 10)));
  }
  if (pos < 50)
    board_ptr = board_l;
  else
    board_ptr = board_u;
  if (pos_adj == 0)
    *board_ptr |= (unsigned long long)(0x2);
  else
    *board_ptr |= (((unsigned long long)0x5 << (pos_adj - 1)) &
                   ((unsigned long long)0x3ff << (row_adj * 10)));
  if (row > 0) {
    if (pos < 60)
      board_ptr = board_l;
    else
      board_ptr = board_u;
    if (pos_adj == 10)
      *board_ptr |= (unsigned long long)0x3;
    else
      *board_ptr |= (((unsigned long long)0x7 << ((pos - 11) % 50)) &
                     ((unsigned long long)0x3ff << (((row - 1) % 5) * 10)));
  }
}


x86 assembly (clang, -O0):
<gen_dirs_board>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
mov    %edx,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x32,%ecx
cltd
idiv   %ecx
mov    %edx,-0x20(%rbp)
movq   $0x0,-0x28(%rbp)
cmpl   $0x9,-0x18(%rbp)
jge    11d8 <gen_dirs_board+0xd8>
cmpl   $0x27,-0x14(%rbp)
jle    1162 <gen_dirs_board+0x62>
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
jmp    116a <gen_dirs_board+0x6a>
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
cmpl   $0x28,-0x14(%rbp)
jne    1187 <gen_dirs_board+0x87>
mov    -0x28(%rbp),%rax
mov    (%rax),%rcx
or     $0x3,%rcx
mov    %rcx,(%rax)
jmp    11d3 <gen_dirs_board+0xd3>
mov    -0x20(%rbp),%eax
add    $0x9,%eax
mov    $0x32,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
mov    %eax,%ecx
mov    $0x7,%eax
shl    %cl,%rax
mov    %rax,-0x30(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
imul   $0xa,%edx,%eax
mov    %eax,%eax
mov    %eax,%ecx
mov    $0x3ff,%eax
shl    %cl,%rax
mov    -0x30(%rbp),%rcx
and    %rax,%rcx
mov    -0x28(%rbp),%rax
or     (%rax),%rcx
mov    %rcx,(%rax)
jmp    11d8 <gen_dirs_board+0xd8>
cmpl   $0x32,-0x14(%rbp)
jge    11ef <gen_dirs_board+0xef>
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
jmp    11f7 <gen_dirs_board+0xf7>
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
cmpl   $0x0,-0x20(%rbp)
jne    1214 <gen_dirs_board+0x114>
mov    -0x28(%rbp),%rax
mov    (%rax),%rcx
or     $0x2,%rcx
mov    %rcx,(%rax)
jmp    124b <gen_dirs_board+0x14b>
mov    -0x20(%rbp),%eax
sub    $0x1,%eax
mov    %eax,%eax
mov    %eax,%ecx
mov    $0x5,%eax
shl    %cl,%rax
mov    %rax,-0x38(%rbp)
imul   $0xa,-0x1c(%rbp),%eax
mov    %eax,%eax
mov    %eax,%ecx
mov    $0x3ff,%eax
shl    %cl,%rax
mov    -0x38(%rbp),%rcx
and    %rax,%rcx
mov    -0x28(%rbp),%rax
or     (%rax),%rcx
mov    %rcx,(%rax)
cmpl   $0x0,-0x18(%rbp)
jle    12e2 <gen_dirs_board+0x1e2>
cmpl   $0x3c,-0x14(%rbp)
jge    126c <gen_dirs_board+0x16c>
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
jmp    1274 <gen_dirs_board+0x174>
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
cmpl   $0xa,-0x20(%rbp)
jne    1291 <gen_dirs_board+0x191>
mov    -0x28(%rbp),%rax
mov    (%rax),%rcx
or     $0x3,%rcx
mov    %rcx,(%rax)
jmp    12dd <gen_dirs_board+0x1dd>
mov    -0x14(%rbp),%eax
sub    $0xb,%eax
mov    $0x32,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
mov    %eax,%ecx
mov    $0x7,%eax
shl    %cl,%rax
mov    %rax,-0x40(%rbp)
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
imul   $0xa,%edx,%eax
mov    %eax,%eax
mov    %eax,%ecx
mov    $0x3ff,%eax
shl    %cl,%rax
mov    -0x40(%rbp),%rcx
and    %rax,%rcx
mov    -0x28(%rbp),%rax
or     (%rax),%rcx
mov    %rcx,(%rax)
jmp    12e2 <gen_dirs_board+0x1e2>
pop    %rbp
ret

x86 assembly (clang, -O2):
<gen_dirs_board>:
push   %r14
push   %rbx
movslq %edx,%rcx
imul   $0x66666667,%rcx,%r8
mov    %r8,%rax
shr    $0x3f,%rax
sar    $0x22,%r8
add    %eax,%r8d
movslq %r8d,%r14
imul   $0x66666667,%r14,%rax
mov    %rax,%rbx
shr    $0x3f,%rbx
sar    $0x21,%rax
add    %ebx,%eax
lea    (%rax,%rax,4),%eax
sub    %eax,%r14d
imul   $0x51eb851f,%rcx,%rax
mov    %rax,%rbx
shr    $0x3f,%rbx
sar    $0x24,%rax
add    %ebx,%eax
imul   $0x32,%eax,%eax
mov    %ecx,%r9d
sub    %eax,%r9d
cmp    $0x59,%ecx
jg     11cb <gen_dirs_board+0xcb>
mov    %rdi,%r10
cmp    $0x28,%edx
cmovge %rsi,%r10
jne    116f <gen_dirs_board+0x6f>
orb    $0x3,(%r10)
mov    %rdi,%r10
jmp    11da <gen_dirs_board+0xda>
lea    0x9(%r9),%eax
movsbl %al,%ecx
lea    (%rcx,%rcx,4),%eax
lea    (%rcx,%rax,8),%eax
movzwl %ax,%ebx
shr    $0xb,%eax
shr    $0xf,%ebx
add    %al,%bl
movzbl %bl,%eax
imul   $0x32,%eax,%eax
sub    %al,%cl
mov    $0x7,%r11d
shl    %cl,%r11
lea    0x1(%r14),%eax
movsbl %al,%eax
imul   $0x67,%eax,%ecx
movzwl %cx,%ebx
shr    $0x9,%ecx
shr    $0xf,%ebx
add    %cl,%bl
movzbl %bl,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %cl,%al
movzbl %al,%eax
add    %eax,%eax
lea    (%rax,%rax,4),%ecx
mov    $0x3ff,%eax
shl    %cl,%rax
and    %r11,%rax
or     %rax,(%r10)
cmp    $0x32,%edx
mov    %rsi,%r10
cmovl  %rdi,%r10
test   %r9d,%r9d
je     1214 <gen_dirs_board+0x114>
lea    -0x1(%r9),%ecx
mov    $0x5,%ebx
shl    %cl,%rbx
add    %r14d,%r14d
lea    (%r14,%r14,4),%ecx
mov    $0x3ff,%eax
shl    %cl,%rax
and    %rbx,%rax
or     %rax,(%r10)
cmp    $0x9,%edx
jle    127e <gen_dirs_board+0x17e>
cmp    $0x3c,%edx
cmovb  %rdi,%rsi
mov    $0x3,%edi
cmp    $0xa,%r9d
jne    1224 <gen_dirs_board+0x124>
jmp    127b <gen_dirs_board+0x17b>
orb    $0x2,(%r10)
cmp    $0xa,%edx
jl     127e <gen_dirs_board+0x17e>
cmp    $0x3c,%edx
cmovb  %rdi,%rsi
add    $0xfffffff5,%edx
movslq %edx,%rcx
imul   $0x51eb851f,%rcx,%rax
mov    %rax,%rdx
shr    $0x3f,%rdx
shr    $0x24,%rax
add    %edx,%eax
imul   $0x32,%eax,%eax
sub    %eax,%ecx
mov    $0x7,%eax
shl    %cl,%rax
add    $0xffffffff,%r8d
movslq %r8d,%rcx
imul   $0x66666667,%rcx,%rdx
mov    %rdx,%rdi
shr    $0x3f,%rdi
shr    $0x21,%rdx
add    %edi,%edx
lea    (%rdx,%rdx,4),%edx
sub    %edx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
mov    $0x3ff,%edi
shl    %cl,%rdi
and    %rax,%rdi
or     %rdi,(%rsi)
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define void @gen_dirs_board(i64* %0, i64* %1, i32 %2) {
%4 = alloca i64*
%5 = alloca i64*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i64*
store i64* %0, i64** %4
store i64* %1, i64** %5
store i32 %2, i32* %6
%11 = load i32, i32* %6
%12 = sdiv i32 %11, 10
store i32 %12, i32* %7
%13 = load i32, i32* %7
%14 = srem i32 %13, 5
store i32 %14, i32* %8
%15 = load i32, i32* %6
%16 = srem i32 %15, 50
store i32 %16, i32* %9
store i64* null, i64** %10
%17 = load i32, i32* %7
%18 = icmp slt i32 %17, 9
br i1 %18, label %19, label %50
19: ; preds = %3
%20 = load i32, i32* %6
%21 = icmp sgt i32 %20, 39
br i1 %21, label %22, label %24
22: ; preds = %19
%23 = load i64*, i64** %5
store i64* %23, i64** %10
br label %26
24: ; preds = %19
%25 = load i64*, i64** %4
store i64* %25, i64** %10
br label %26
26: ; preds = %24, %22
%27 = load i32, i32* %6
%28 = icmp eq i32 %27, 40
br i1 %28, label %29, label %33
29: ; preds = %26
%30 = load i64*, i64** %10
%31 = load i64, i64* %30
%32 = or i64 %31, 3
store i64 %32, i64* %30
br label %49
33: ; preds = %26
%34 = load i32, i32* %9
%35 = add nsw i32 %34, 9
%36 = srem i32 %35, 50
%37 = zext i32 %36 to i64
%38 = shl i64 7, %37
%39 = load i32, i32* %8
%40 = add nsw i32 %39, 1
%41 = srem i32 %40, 5
%42 = mul nsw i32 %41, 10
%43 = zext i32 %42 to i64
%44 = shl i64 1023, %43
%45 = and i64 %38, %44
%46 = load i64*, i64** %10
%47 = load i64, i64* %46
%48 = or i64 %47, %45
store i64 %48, i64* %46
br label %49
49: ; preds = %33, %29
br label %50
50: ; preds = %49, %3
%51 = load i32, i32* %6
%52 = icmp slt i32 %51, 50
br i1 %52, label %53, label %55
53: ; preds = %50
%54 = load i64*, i64** %4
store i64* %54, i64** %10
br label %57
55: ; preds = %50
%56 = load i64*, i64** %5
store i64* %56, i64** %10
br label %57
57: ; preds = %55, %53
%58 = load i32, i32* %9
%59 = icmp eq i32 %58, 0
br i1 %59, label %60, label %64
60: ; preds = %57
%61 = load i64*, i64** %10
%62 = load i64, i64* %61
%63 = or i64 %62, 2
store i64 %63, i64* %61
br label %77
64: ; preds = %57
%65 = load i32, i32* %9
%66 = sub nsw i32 %65, 1
%67 = zext i32 %66 to i64
%68 = shl i64 5, %67
%69 = load i32, i32* %8
%70 = mul nsw i32 %69, 10
%71 = zext i32 %70 to i64
%72 = shl i64 1023, %71
%73 = and i64 %68, %72
%74 = load i64*, i64** %10
%75 = load i64, i64* %74
%76 = or i64 %75, %73
store i64 %76, i64* %74
br label %77
77: ; preds = %64, %60
%78 = load i32, i32* %7
%79 = icmp sgt i32 %78, 0
br i1 %79, label %80, label %111
80: ; preds = %77
%81 = load i32, i32* %6
%82 = icmp slt i32 %81, 60
br i1 %82, label %83, label %85
83: ; preds = %80
%84 = load i64*, i64** %4
store i64* %84, i64** %10
br label %87
85: ; preds = %80
%86 = load i64*, i64** %5
store i64* %86, i64** %10
br label %87
87: ; preds = %85, %83
%88 = load i32, i32* %9
%89 = icmp eq i32 %88, 10
br i1 %89, label %90, label %94
90: ; preds = %87
%91 = load i64*, i64** %10
%92 = load i64, i64* %91
%93 = or i64 %92, 3
store i64 %93, i64* %91
br label %110
94: ; preds = %87
%95 = load i32, i32* %6
%96 = sub nsw i32 %95, 11
%97 = srem i32 %96, 50
%98 = zext i32 %97 to i64
%99 = shl i64 7, %98
%100 = load i32, i32* %7
%101 = sub nsw i32 %100, 1
%102 = srem i32 %101, 5
%103 = mul nsw i32 %102, 10
%104 = zext i32 %103 to i64
%105 = shl i64 1023, %104
%106 = and i64 %99, %105
%107 = load i64*, i64** %10
%108 = load i64, i64* %107
%109 = or i64 %108, %106
store i64 %109, i64* %107
br label %110
110: ; preds = %94, %90
br label %111
111: ; preds = %110, %77
ret void
}

LLVM IR (-O2):
define void @gen_dirs_board(i64* nocapture %0, i64* nocapture %1, i32 %2) {
%4 = sdiv i32 %2, 10
%5 = srem i32 %4, 5
%6 = srem i32 %2, 50
%7 = icmp slt i32 %2, 90
br i1 %7, label %8, label %32
8: ; preds = %3
%9 = icmp sgt i32 %2, 39
%10 = select i1 %9, i64* %1, i64* %0
%11 = icmp eq i32 %2, 40
br i1 %11, label %12, label %15
12: ; preds = %8
%13 = load i64, i64* %10
%14 = or i64 %13, 3
store i64 %14, i64* %10
br label %36
15: ; preds = %8
%16 = trunc i32 %6 to i8
%17 = add nsw i8 %16, 9
%18 = srem i8 %17, 50
%19 = sext i8 %18 to i64
%20 = and i64 %19, 4294967295
%21 = shl i64 7, %20
%22 = trunc i32 %5 to i8
%23 = add nsw i8 %22, 1
%24 = srem i8 %23, 5
%25 = mul nsw i8 %24, 10
%26 = sext i8 %25 to i64
%27 = and i64 %26, 4294967294
%28 = shl i64 1023, %27
%29 = and i64 %28, %21
%30 = load i64, i64* %10
%31 = or i64 %30, %29
store i64 %31, i64* %10
br label %32
32: ; preds = %15, %3
%33 = icmp slt i32 %2, 50
%34 = select i1 %33, i64* %0, i64* %1
%35 = icmp eq i32 %6, 0
br i1 %35, label %48, label %36
36: ; preds = %32, %12
%37 = phi i64* [ %0, %12 ], [ %34, %32 ]
%38 = add nsw i32 %6, -1
%39 = zext i32 %38 to i64
%40 = shl i64 5, %39
%41 = mul nsw i32 %5, 10
%42 = zext i32 %41 to i64
%43 = shl i64 1023, %42
%44 = and i64 %43, %40
%45 = load i64, i64* %37
%46 = or i64 %45, %44
store i64 %46, i64* %37
%47 = icmp sgt i32 %2, 9
br i1 %47, label %55, label %76
48: ; preds = %32
%49 = load i64, i64* %34
%50 = or i64 %49, 2
store i64 %50, i64* %34
%51 = icmp sgt i32 %2, 9
br i1 %51, label %52, label %76
52: ; preds = %48
%53 = icmp ult i32 %2, 60
%54 = select i1 %53, i64* %0, i64* %1
br label %59
55: ; preds = %36
%56 = icmp ult i32 %2, 60
%57 = select i1 %56, i64* %0, i64* %1
%58 = icmp eq i32 %6, 10
br i1 %58, label %71, label %59
59: ; preds = %52, %55
%60 = phi i64* [ %54, %52 ], [ %57, %55 ]
%61 = add nsw i32 %2, -11
%62 = srem i32 %61, 50
%63 = zext i32 %62 to i64
%64 = shl i64 7, %63
%65 = add nsw i32 %4, -1
%66 = srem i32 %65, 5
%67 = mul nsw i32 %66, 10
%68 = zext i32 %67 to i64
%69 = shl i64 1023, %68
%70 = and i64 %69, %64
br label %71
71: ; preds = %55, %59
%72 = phi i64* [ %60, %59 ], [ %57, %55 ]
%73 = phi i64 [ %70, %59 ], [ 3, %55 ]
%74 = load i64, i64* %72
%75 = or i64 %74, %73
store i64 %75, i64* %72
br label %76
76: ; preds = %71, %48, %36
ret void
}