void plot8(int posicao, int colunas, char matriz[7][colunas]) {
  int cx = 0;
  int cy = 0;
  int p = posicao;
  int x[] = {0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 3,
             3, 3, 4, 4, 5, 5, 6, 6, 6, 6, 6};
  int y[] = {p + 1, p + 2, p + 3, p + 4, p + 5, p + 0, p + 6, p + 0,
             p + 6, p + 1, p + 2, p + 3, p + 4, p + 5, p + 0, p + 6,
             p + 0, p + 6, p + 1, p + 2, p + 3, p + 4, p + 5};
  int points = sizeof(x) / sizeof(int);
  for (cx = 0; cx < points; ++cx) {
    matriz[x[cx]][y[cx]] = '8';
  }
}


x86 assembly (clang, -O0):
<plot8>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    -0x8(%rbp),%eax
mov    %rax,-0xf0(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x1c(%rbp)
lea    -0x80(%rbp),%rdi
lea    0xeb2(%rip),%rsi
mov    $0x5c,%edx
call   1030 <memcpy@plt>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xe0(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0xdc(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0xd8(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0xd4(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0xd0(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0xcc(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0xc8(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0xc4(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0xc0(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xbc(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0xb8(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0xb4(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0xb0(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0xac(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0xa8(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0xa4(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0xa0(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x9c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x98(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x94(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x90(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x8c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x88(%rbp)
movl   $0x17,-0xe4(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0xe4(%rbp),%eax
jge    12c5 <plot8+0x1b5>
mov    -0xf0(%rbp),%rdx
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movslq -0x80(%rbp,%rcx,4),%rcx
imul   %rdx,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
movslq -0xe0(%rbp,%rcx,4),%rcx
ff
movb   $0x38,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    127d <plot8+0x16d>
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<plot8>:
mov    %esi,%eax
movslq %edi,%rcx
lea    0x1(%rcx),%r8
mov    %r8d,-0x68(%rsp)
lea    0x2(%rcx),%r9d
mov    %r9d,-0x64(%rsp)
lea    0x3(%rcx),%r10d
mov    %r10d,-0x60(%rsp)
lea    0x4(%rcx),%r11d
mov    %r11d,-0x5c(%rsp)
lea    0x5(%rcx),%esi
mov    %esi,-0x58(%rsp)
mov    %ecx,-0x54(%rsp)
lea    0x6(%rcx),%edi
mov    %edi,-0x50(%rsp)
mov    %ecx,-0x4c(%rsp)
mov    %edi,-0x48(%rsp)
mov    %r8d,-0x44(%rsp)
mov    %r9d,-0x40(%rsp)
mov    %r10d,-0x3c(%rsp)
mov    %r11d,-0x38(%rsp)
mov    %esi,-0x34(%rsp)
mov    %ecx,-0x30(%rsp)
mov    %edi,-0x2c(%rsp)
mov    %ecx,-0x28(%rsp)
mov    %edi,-0x24(%rsp)
mov    %r8d,-0x20(%rsp)
mov    %r9d,-0x1c(%rsp)
mov    %r10d,-0x18(%rsp)
mov    %r11d,-0x14(%rsp)
mov    %esi,-0x10(%rsp)
movb   $0x38,0x1(%rdx,%rcx,1)
mov    $0x2,%ecx
lea    0xe6c(%rip),%r8
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movslq -0x6c(%rsp,%rcx,4),%rdi
movslq -0x4(%r8,%rcx,4),%rsi
imul   %rax,%rsi
add    %rdx,%rsi
movb   $0x38,(%rdi,%rsi,1)
movslq -0x68(%rsp,%rcx,4),%rsi
movslq (%r8,%rcx,4),%rdi
imul   %rax,%rdi
add    %rdx,%rdi
movb   $0x38,(%rsi,%rdi,1)
add    $0x2,%rcx
cmp    $0x18,%rcx
jne    11a0 <plot8+0xa0>
ret

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

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