#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*/ display(int, unsigned char *);
int /*<<< orphan*/ gpio_ext(int);
int /*<<< orphan*/ gpio_init();
int main() {
  static unsigned char foo[64] = {
      0xff, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xff, 0x81, 0,    0,    0,    0,
      0,    0,    0x81, 0x81, 0,    0,    0,    0,    0,    0,    0x81, 0x81, 0,
      0,    0,    0,    0,    0,    0x81, 0x81, 0,    0,    0,    0,    0,    0,
      0x81, 0x81, 0,    0,    0,    0,    0,    0,    0x81, 0x81, 0,    0,    0,
      0,    0,    0,    0x81, 0xff, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xff,
  };
  static unsigned char bar[64] = {
      0,    0,    0,    0, 0,    0, 0, 0,    0, 0x7e, 0x42, 0x42, 0x42,
      0x42, 0x7e, 0,    0, 0x42, 0, 0, 0,    0, 0x42, 0,    0,    0x42,
      0,    0,    0,    0, 0x42, 0, 0, 0x42, 0, 0,    0,    0,    0x42,
      0,    0,    0x42, 0, 0,    0, 0, 0x42, 0, 0,    0x7e, 0x42, 0x42,
      0x42, 0x42, 0x7e, 0, 0,    0, 0, 0,    0, 0,    0,    0,
  };
  gpio_init();
  gpio_ext(1);
  for (;;) {
    display(500, foo);
    display(500, bar);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
mov    $0x0,%al
call   1050 <gpio_init@plt>
mov    $0x1,%edi
call   1040 <gpio_ext@plt>
mov    $0x1f4,%edi
lea    0x2ee4(%rip),%rsi
call   1030 <display@plt>
mov    $0x1f4,%edi
lea    0x2f13(%rip),%rsi
call   1030 <display@plt>
jmp    1150 <main+0x20>

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
push   %rax
xor    %eax,%eax
call   1050 <gpio_init@plt>
mov    $0x1,%edi
call   1040 <gpio_ext@plt>
lea    0x2ef4(%rip),%r14
lea    0x2f2d(%rip),%rbx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    $0x1f4,%edi
mov    %r14,%rsi
call   1030 <display@plt>
mov    $0x1f4,%edi
mov    %rbx,%rsi
call   1030 <display@plt>
jmp    1160 <main+0x30>

LLVM IR (-O0):
@main.foo = internal global [64 x i8] c"\FF\81\81\81\81\81\81\FF\81\00\00\00\00\00\00\81\81\00\00\00\00\00\00\81\81\00\00\00\00\00\00\81\81\00\00\00\00\00\00\81\81\00\00\00\00\00\00\81\81\00\00\00\00\00\00\81\FF\81\81\81\81\81\81\FF"
@main.bar = internal global <{ [55 x i8], [9 x i8] }> <{ [55 x i8] c"\00\00\00\00\00\00\00\00\00~BBBB~\00\00B\00\00\00\00B\00\00B\00\00\00\00B\00\00B\00\00\00\00B\00\00B\00\00\00\00B\00\00~BBBB~", [9 x i8] zeroinitializer }>
define i32 @main() {
%1 = alloca i32
store i32 0, i32* %1
%2 = call i32 (...) @gpio_init()
%3 = call i32 @gpio_ext(i32 1)
br label %4
4: ; preds = %4, %0
%5 = call i32 @display(i32 500, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @main.foo, i64 0, i64 0))
%6 = call i32 @display(i32 500, i8* getelementptr inbounds ([64 x i8], [64 x i8]* bitcast (<{ [55 x i8], [9 x i8] }>* @main.bar to [64 x i8]*), i64 0, i64 0))
br label %4
}

LLVM IR (-O2):
@main.foo = internal global [64 x i8] c"\FF\81\81\81\81\81\81\FF\81\00\00\00\00\00\00\81\81\00\00\00\00\00\00\81\81\00\00\00\00\00\00\81\81\00\00\00\00\00\00\81\81\00\00\00\00\00\00\81\81\00\00\00\00\00\00\81\FF\81\81\81\81\81\81\FF"
@main.bar = internal global <{ [55 x i8], [9 x i8] }> <{ [55 x i8] c"\00\00\00\00\00\00\00\00\00~BBBB~\00\00B\00\00\00\00B\00\00B\00\00\00\00B\00\00B\00\00\00\00B\00\00B\00\00\00\00B\00\00~BBBB~", [9 x i8] zeroinitializer }>
define i32 @main() {
%1 = tail call i32 (...) @gpio_init()
%2 = tail call i32 @gpio_ext(i32 1)
br label %3
3: ; preds = %3, %0
%4 = tail call i32 @display(i32 500, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @main.foo, i64 0, i64 0))
%5 = tail call i32 @display(i32 500, i8* getelementptr inbounds (<{ [55 x i8], [9 x i8] }>, <{ [55 x i8], [9 x i8] }>* @main.bar, i64 0, i32 0, i64 0))
br label %3
}