#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 */
int /*<<< orphan*/ place_finder(unsigned char *, int, int /*<<< orphan*/,
                                int /*<<< orphan*/);
void micro_setup_grid(unsigned char *grid, int size) {
  int i, toggle = 1;
  for (i = 0; i < size; i++) {
    if (toggle == 1) {
      grid[i] = 0x21;
      grid[(i * size)] = 0x21;
      toggle = 0;
    } else {
      grid[i] = 0x20;
      grid[(i * size)] = 0x20;
      toggle = 1;
    }
  }
  place_finder(grid, size, 0, 0);
  for (i = 0; i < 7; i++) {
    grid[(7 * size) + i] = 0x10;
    grid[(i * size) + 7] = 0x10;
  }
  grid[(7 * size) + 7] = 0x10;
  for (i = 0; i < 8; i++) {
    grid[(8 * size) + i] += 0x20;
    grid[(i * size) + 8] += 0x20;
  }
  grid[(8 * size) + 8] += 20;
}


x86 assembly (clang, -O0):
<micro_setup_grid>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movl   $0x1,-0x14(%rbp)
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    11a5 <micro_setup_grid+0x95>
cmpl   $0x1,-0x14(%rbp)
jne    116d <micro_setup_grid+0x5d>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x21,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
imul   -0xc(%rbp),%ecx
movslq %ecx,%rcx
movb   $0x21,(%rax,%rcx,1)
movl   $0x0,-0x14(%rbp)
jmp    1192 <micro_setup_grid+0x82>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
imul   -0xc(%rbp),%ecx
movslq %ecx,%rcx
movb   $0x20,(%rax,%rcx,1)
movl   $0x1,-0x14(%rbp)
jmp    1197 <micro_setup_grid+0x87>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    112d <micro_setup_grid+0x1d>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
xor    %ecx,%ecx
mov    %ecx,%edx
call   1030 <place_finder@plt>
movl   $0x0,-0x10(%rbp)
cmpl   $0x7,-0x10(%rbp)
jge    11fb <micro_setup_grid+0xeb>
mov    -0x8(%rbp),%rax
imul   $0x7,-0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
movslq %ecx,%rcx
movb   $0x10,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
imul   -0xc(%rbp),%ecx
add    $0x7,%ecx
movslq %ecx,%rcx
movb   $0x10,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    11bc <micro_setup_grid+0xac>
mov    -0x8(%rbp),%rax
imul   $0x7,-0xc(%rbp),%ecx
add    $0x7,%ecx
movslq %ecx,%rcx
movb   $0x10,(%rax,%rcx,1)
movl   $0x0,-0x10(%rbp)
cmpl   $0x8,-0x10(%rbp)
jge    1261 <micro_setup_grid+0x151>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x3,%ecx
add    -0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
add    $0x20,%edx
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
imul   -0xc(%rbp),%ecx
add    $0x8,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
add    $0x20,%edx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1214 <micro_setup_grid+0x104>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x3,%ecx
add    $0x8,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
add    $0x14,%edx
mov    %dl,(%rax,%rcx,1)
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<micro_setup_grid>:
push   %r15
push   %r14
push   %rbx
mov    %rdi,%rbx
movslq %esi,%r14
test   %esi,%esi
jle    112b <micro_setup_grid+0x1b>
mov    %esi,%r15d
cmp    $0x1,%esi
jne    1130 <micro_setup_grid+0x20>
xor    %eax,%eax
jmp    116e <micro_setup_grid+0x5e>
mov    %r14,%r15
jmp    1180 <micro_setup_grid+0x70>
mov    %r15d,%ecx
and    $0xfffffffe,%ecx
lea    (%rbx,%r15,1),%r8
lea    (%r15,%r15,1),%rdi
xor    %edx,%edx
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movb   $0x21,(%rbx,%rax,1)
movb   $0x21,(%rbx,%rdx,1)
movb   $0x20,0x1(%rbx,%rax,1)
movb   $0x20,(%r8,%rdx,1)
add    $0x2,%rax
add    %rdi,%rdx
cmp    %rax,%rcx
jne    1150 <micro_setup_grid+0x40>
test   $0x1,%r15b
je     1180 <micro_setup_grid+0x70>
movb   $0x21,(%rbx,%rax,1)
imul   %r15,%rax
movb   $0x21,(%rbx,%rax,1)
mov    %rbx,%rdi
xor    %edx,%edx
xor    %ecx,%ecx
call   1030 <place_finder@plt>
lea    0x0(,%r14,8),%rax
sub    %r14,%rax
movb   $0x10,(%rbx,%rax,1)
movb   $0x10,0x7(%rbx)
movb   $0x10,0x1(%rbx,%rax,1)
movb   $0x10,0x7(%r15,%rbx,1)
movb   $0x10,0x2(%rbx,%rax,1)
movb   $0x10,0x7(%rbx,%r15,2)
movb   $0x10,0x3(%rbx,%rax,1)
lea    (%r15,%r15,2),%rcx
movb   $0x10,0x7(%rbx,%rcx,1)
movb   $0x10,0x4(%rbx,%rax,1)
movb   $0x10,0x7(%rbx,%r15,4)
movb   $0x10,0x5(%rbx,%rax,1)
lea    (%r15,%r15,4),%rdx
movb   $0x10,0x7(%rbx,%rdx,1)
movb   $0x10,0x6(%rbx,%rax,1)
movb   $0x10,0x7(%rbx,%rcx,2)
movb   $0x10,0x7(%rbx,%rax,1)
addb   $0x20,(%rbx,%r14,8)
addb   $0x20,0x8(%rbx)
addb   $0x20,0x1(%rbx,%r14,8)
addb   $0x20,0x8(%r15,%rbx,1)
addb   $0x20,0x2(%rbx,%r14,8)
addb   $0x20,0x8(%rbx,%r15,2)
addb   $0x20,0x3(%rbx,%r14,8)
addb   $0x20,0x8(%rbx,%rcx,1)
addb   $0x20,0x4(%rbx,%r14,8)
addb   $0x20,0x8(%rbx,%r15,4)
addb   $0x20,0x5(%rbx,%r14,8)
addb   $0x20,0x8(%rbx,%rdx,1)
addb   $0x20,0x6(%rbx,%r14,8)
addb   $0x20,0x8(%rbx,%rcx,2)
addb   $0x20,0x7(%rbx,%r14,8)
lea    0x0(,%r15,8),%rax
sub    %r15,%rax
addb   $0x20,0x8(%rax,%rbx,1)
addb   $0x14,0x8(%rbx,%r14,8)
pop    %rbx
pop    %r14
pop    %r15
ret

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

LLVM IR (-O2):
define void @micro_setup_grid(i8* %0, i32 %1) {
%3 = icmp sgt i32 %1, 0
br i1 %3, label %6, label %4
4: ; preds = %2
%5 = sext i32 %1 to i64
br label %32
6: ; preds = %2
%7 = zext i32 %1 to i64
%8 = and i64 %7, 1
%9 = icmp eq i32 %1, 1
br i1 %9, label %25, label %10
10: ; preds = %6
%11 = and i64 %7, 4294967294
br label %12
12: ; preds = %12, %10
%13 = phi i64 [ 0, %10 ], [ %22, %12 ]
%14 = phi i64 [ 0, %10 ], [ %23, %12 ]
%15 = getelementptr inbounds i8, i8* %0, i64 %13
store i8 33, i8* %15
%16 = mul nsw i64 %13, %7
%17 = getelementptr inbounds i8, i8* %0, i64 %16
store i8 33, i8* %17
%18 = or i64 %13, 1
%19 = getelementptr inbounds i8, i8* %0, i64 %18
store i8 32, i8* %19
%20 = mul nsw i64 %18, %7
%21 = getelementptr inbounds i8, i8* %0, i64 %20
store i8 32, i8* %21
%22 = add nuw nsw i64 %13, 2
%23 = add i64 %14, 2
%24 = icmp eq i64 %23, %11
br i1 %24, label %25, label %12
25: ; preds = %12, %6
%26 = phi i64 [ 0, %6 ], [ %22, %12 ]
%27 = icmp eq i64 %8, 0
br i1 %27, label %32, label %28
28: ; preds = %25
%29 = getelementptr inbounds i8, i8* %0, i64 %26
store i8 33, i8* %29
%30 = mul nsw i64 %26, %7
%31 = getelementptr inbounds i8, i8* %0, i64 %30
store i8 33, i8* %31
br label %32
32: ; preds = %28, %25, %4
%33 = phi i64 [ %5, %4 ], [ %7, %25 ], [ %7, %28 ]
%34 = tail call i32 @place_finder(i8* %0, i32 %1, i32 0, i32 0)
%35 = mul nsw i32 %1, 7
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds i8, i8* %0, i64 %36
store i8 16, i8* %37
%38 = getelementptr inbounds i8, i8* %0, i64 7
store i8 16, i8* %38
%39 = add nsw i64 %36, 1
%40 = getelementptr inbounds i8, i8* %0, i64 %39
store i8 16, i8* %40
%41 = add nsw i64 %33, 7
%42 = getelementptr inbounds i8, i8* %0, i64 %41
store i8 16, i8* %42
%43 = add nsw i64 %36, 2
%44 = getelementptr inbounds i8, i8* %0, i64 %43
store i8 16, i8* %44
%45 = shl nsw i64 %33, 1
%46 = add nsw i64 %45, 7
%47 = getelementptr inbounds i8, i8* %0, i64 %46
store i8 16, i8* %47
%48 = add nsw i64 %36, 3
%49 = getelementptr inbounds i8, i8* %0, i64 %48
store i8 16, i8* %49
%50 = mul nsw i64 %33, 3
%51 = add nsw i64 %50, 7
%52 = getelementptr inbounds i8, i8* %0, i64 %51
store i8 16, i8* %52
%53 = add nsw i64 %36, 4
%54 = getelementptr inbounds i8, i8* %0, i64 %53
store i8 16, i8* %54
%55 = shl nsw i64 %33, 2
%56 = add nsw i64 %55, 7
%57 = getelementptr inbounds i8, i8* %0, i64 %56
store i8 16, i8* %57
%58 = add nsw i64 %36, 5
%59 = getelementptr inbounds i8, i8* %0, i64 %58
store i8 16, i8* %59
%60 = mul nsw i64 %33, 5
%61 = add nsw i64 %60, 7
%62 = getelementptr inbounds i8, i8* %0, i64 %61
store i8 16, i8* %62
%63 = add nsw i64 %36, 6
%64 = getelementptr inbounds i8, i8* %0, i64 %63
store i8 16, i8* %64
%65 = mul nsw i64 %33, 6
%66 = add nsw i64 %65, 7
%67 = getelementptr inbounds i8, i8* %0, i64 %66
store i8 16, i8* %67
%68 = add nsw i32 %35, 7
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds i8, i8* %0, i64 %69
store i8 16, i8* %70
%71 = shl nsw i32 %1, 3
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds i8, i8* %0, i64 %72
%74 = load i8, i8* %73
%75 = add i8 %74, 32
store i8 %75, i8* %73
%76 = getelementptr inbounds i8, i8* %0, i64 8
%77 = load i8, i8* %76
%78 = add i8 %77, 32
store i8 %78, i8* %76
%79 = or i64 %72, 1
%80 = getelementptr inbounds i8, i8* %0, i64 %79
%81 = load i8, i8* %80
%82 = add i8 %81, 32
store i8 %82, i8* %80
%83 = add nsw i64 %33, 8
%84 = getelementptr inbounds i8, i8* %0, i64 %83
%85 = load i8, i8* %84
%86 = add i8 %85, 32
store i8 %86, i8* %84
%87 = or i64 %72, 2
%88 = getelementptr inbounds i8, i8* %0, i64 %87
%89 = load i8, i8* %88
%90 = add i8 %89, 32
store i8 %90, i8* %88
%91 = add nsw i64 %45, 8
%92 = getelementptr inbounds i8, i8* %0, i64 %91
%93 = load i8, i8* %92
%94 = add i8 %93, 32
store i8 %94, i8* %92
%95 = or i64 %72, 3
%96 = getelementptr inbounds i8, i8* %0, i64 %95
%97 = load i8, i8* %96
%98 = add i8 %97, 32
store i8 %98, i8* %96
%99 = add nsw i64 %50, 8
%100 = getelementptr inbounds i8, i8* %0, i64 %99
%101 = load i8, i8* %100
%102 = add i8 %101, 32
store i8 %102, i8* %100
%103 = or i64 %72, 4
%104 = getelementptr inbounds i8, i8* %0, i64 %103
%105 = load i8, i8* %104
%106 = add i8 %105, 32
store i8 %106, i8* %104
%107 = add nsw i64 %55, 8
%108 = getelementptr inbounds i8, i8* %0, i64 %107
%109 = load i8, i8* %108
%110 = add i8 %109, 32
store i8 %110, i8* %108
%111 = or i64 %72, 5
%112 = getelementptr inbounds i8, i8* %0, i64 %111
%113 = load i8, i8* %112
%114 = add i8 %113, 32
store i8 %114, i8* %112
%115 = add nsw i64 %60, 8
%116 = getelementptr inbounds i8, i8* %0, i64 %115
%117 = load i8, i8* %116
%118 = add i8 %117, 32
store i8 %118, i8* %116
%119 = or i64 %72, 6
%120 = getelementptr inbounds i8, i8* %0, i64 %119
%121 = load i8, i8* %120
%122 = add i8 %121, 32
store i8 %122, i8* %120
%123 = add nsw i64 %65, 8
%124 = getelementptr inbounds i8, i8* %0, i64 %123
%125 = load i8, i8* %124
%126 = add i8 %125, 32
store i8 %126, i8* %124
%127 = or i64 %72, 7
%128 = getelementptr inbounds i8, i8* %0, i64 %127
%129 = load i8, i8* %128
%130 = add i8 %129, 32
store i8 %130, i8* %128
%131 = mul nsw i64 %33, 7
%132 = add nsw i64 %131, 8
%133 = getelementptr inbounds i8, i8* %0, i64 %132
%134 = load i8, i8* %133
%135 = add i8 %134, 32
store i8 %135, i8* %133
%136 = add nsw i32 %71, 8
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds i8, i8* %0, i64 %137
%139 = load i8, i8* %138
%140 = add i8 %139, 20
store i8 %140, i8* %138
ret void
}