void place_align(unsigned char grid[], int size, int x, int y) {
  int xp, yp;
  int alignment[] = {1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1,
                     0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1};
  x -= 2;
  y -= 2;
  for (xp = 0; xp < 5; xp++) {
    for (yp = 0; yp < 5; yp++) {
      if (alignment[xp + (5 * yp)] == 1) {
        grid[((yp + y) * size) + (xp + x)] = 0x11;
      } else {
        grid[((yp + y) * size) + (xp + x)] = 0x10;
      }
    }
  }
}


x86 assembly (clang, -O0):
<place_align>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
lea    -0x80(%rbp),%rdi
lea    0xecd(%rip),%rsi
mov    $0x64,%edx
call   1030 <memcpy@plt>
mov    -0x10(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
cmpl   $0x5,-0x18(%rbp)
jge    11ec <place_align+0xdc>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x5,-0x1c(%rbp)
jge    11d9 <place_align+0xc9>
mov    -0x18(%rbp),%eax
imul   $0x5,-0x1c(%rbp),%ecx
add    %ecx,%eax
cltq
cmpl   $0x1,-0x80(%rbp,%rax,4)
jne    11a9 <place_align+0x99>
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x14(%rbp),%ecx
imul   -0xc(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    -0x10(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movb   $0x11,(%rax,%rcx,1)
jmp    11c6 <place_align+0xb6>
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x14(%rbp),%ecx
imul   -0xc(%rbp),%ecx
mov    -0x18(%rbp),%edx
add    -0x10(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movb   $0x10,(%rax,%rcx,1)
jmp    11cb <place_align+0xbb>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1167 <place_align+0x57>
jmp    11de <place_align+0xce>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1156 <place_align+0x46>
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<place_align>:
movslq %ecx,%rax
lea    -0x2(%rax),%r8
movslq %esi,%rsi
movslq %edx,%rcx
imul   %rsi,%r8
lea    (%r8,%rcx,1),%rdx
add    $0xfffffffffffffffe,%rdx
movb   $0x11,(%rdi,%rdx,1)
lea    -0x1(%rax),%r9
imul   %rsi,%r9
lea    (%r9,%rcx,1),%rdx
add    $0xfffffffffffffffe,%rdx
movb   $0x11,(%rdi,%rdx,1)
mov    %rax,%r10
imul   %rsi,%r10
lea    (%r10,%rcx,1),%rdx
add    $0xfffffffffffffffe,%rdx
movb   $0x11,(%rdi,%rdx,1)
lea    0x1(%rax),%r11
imul   %rsi,%r11
lea    (%r11,%rcx,1),%rdx
add    $0xfffffffffffffffe,%rdx
movb   $0x11,(%rdi,%rdx,1)
add    $0x2,%rax
imul   %rsi,%rax
lea    (%rax,%rcx,1),%rdx
add    $0xfffffffffffffffe,%rdx
movb   $0x11,(%rdi,%rdx,1)
lea    -0x1(%rcx,%r8,1),%rdx
movb   $0x11,(%rdi,%rdx,1)
lea    -0x1(%rcx,%r9,1),%rdx
movb   $0x10,(%rdi,%rdx,1)
lea    -0x1(%rcx,%r10,1),%rdx
movb   $0x10,(%rdi,%rdx,1)
lea    -0x1(%rcx,%r11,1),%rdx
movb   $0x10,(%rdi,%rdx,1)
lea    -0x1(%rcx,%rax,1),%rdx
movb   $0x11,(%rdi,%rdx,1)
lea    (%rcx,%r8,1),%rdx
movb   $0x11,(%rdi,%rdx,1)
lea    (%rcx,%r9,1),%rdx
movb   $0x10,(%rdi,%rdx,1)
lea    (%rcx,%r10,1),%rdx
movb   $0x11,(%rdi,%rdx,1)
lea    (%rcx,%r11,1),%rdx
movb   $0x10,(%rdi,%rdx,1)
lea    (%rcx,%rax,1),%rdx
movb   $0x11,(%rdi,%rdx,1)
lea    0x1(%rcx,%r8,1),%rdx
movb   $0x11,(%rdi,%rdx,1)
lea    0x1(%rcx,%r9,1),%rdx
movb   $0x10,(%rdi,%rdx,1)
lea    0x1(%rcx,%r10,1),%rdx
movb   $0x10,(%rdi,%rdx,1)
lea    0x1(%rcx,%r11,1),%rdx
movb   $0x10,(%rdi,%rdx,1)
lea    0x1(%rcx,%rax,1),%rdx
movb   $0x11,(%rdi,%rdx,1)
lea    0x2(%rcx,%r8,1),%rdx
movb   $0x11,(%rdi,%rdx,1)
lea    0x2(%rcx,%r9,1),%rdx
movb   $0x11,(%rdi,%rdx,1)
lea    0x2(%rcx,%r10,1),%rdx
movb   $0x11,(%rdi,%rdx,1)
lea    0x2(%rcx,%r11,1),%rdx
movb   $0x11,(%rdi,%rdx,1)
add    %rcx,%rax
add    $0x2,%rax
movb   $0x11,(%rdi,%rax,1)
ret

LLVM IR (-O0):
@__const.place_align.alignment = [25 x i32] [i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 0, i32 0, i32 1, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1]
define void @place_align(i8* %0, i32 %1, i32 %2, i32 %3) {
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca [25 x i32]
store i8* %0, i8** %5
store i32 %1, i32* %6
store i32 %2, i32* %7
store i32 %3, i32* %8
%12 = bitcast [25 x i32]* %11 to i8*
%13 = load i32, i32* %7
%14 = sub nsw i32 %13, 2
store i32 %14, i32* %7
%15 = load i32, i32* %8
%16 = sub nsw i32 %15, 2
store i32 %16, i32* %8
store i32 0, i32* %9
br label %17
17: ; preds = %64, %4
%18 = load i32, i32* %9
%19 = icmp slt i32 %18, 5
br i1 %19, label %20, label %67
20: ; preds = %17
store i32 0, i32* %10
br label %21
21: ; preds = %60, %20
%22 = load i32, i32* %10
%23 = icmp slt i32 %22, 5
br i1 %23, label %24, label %63
24: ; preds = %21
%25 = load i32, i32* %9
%26 = load i32, i32* %10
%27 = mul nsw i32 5, %26
%28 = add nsw i32 %25, %27
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds [25 x i32], [25 x i32]* %11, i64 0, i64 %29
%31 = load i32, i32* %30
%32 = icmp eq i32 %31, 1
br i1 %32, label %33, label %46
33: ; preds = %24
%34 = load i8*, i8** %5
%35 = load i32, i32* %10
%36 = load i32, i32* %8
%37 = add nsw i32 %35, %36
%38 = load i32, i32* %6
%39 = mul nsw i32 %37, %38
%40 = load i32, i32* %9
%41 = load i32, i32* %7
%42 = add nsw i32 %40, %41
%43 = add nsw i32 %39, %42
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds i8, i8* %34, i64 %44
store i8 17, i8* %45
br label %59
46: ; preds = %24
%47 = load i8*, i8** %5
%48 = load i32, i32* %10
%49 = load i32, i32* %8
%50 = add nsw i32 %48, %49
%51 = load i32, i32* %6
%52 = mul nsw i32 %50, %51
%53 = load i32, i32* %9
%54 = load i32, i32* %7
%55 = add nsw i32 %53, %54
%56 = add nsw i32 %52, %55
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds i8, i8* %47, i64 %57
store i8 16, i8* %58
br label %59
59: ; preds = %46, %33
br label %60
60: ; preds = %59
%61 = load i32, i32* %10
%62 = add nsw i32 %61, 1
store i32 %62, i32* %10
br label %21
63: ; preds = %21
br label %64
64: ; preds = %63
%65 = load i32, i32* %9
%66 = add nsw i32 %65, 1
store i32 %66, i32* %9
br label %17
67: ; preds = %17
ret void
}

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