LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/mattn[P]orelang/ore.c
// Function: ore_define_class
static ore_value
ore_define_class(ore_context* ore, mpc_ast_t* tn, mpc_ast_t* tb, const char* base) {
  ore_value v = { ORE_TYPE_CLASS };
  v.v.c = (ore_class*) malloc(sizeof(ore_class));
  if (!v.v.c) {
    fprintf(stderr, "failed to allocate memory\n");
    ore->err = ORE_ERROR_EXCEPTION;
    return ore_value_nil();
  }
  v.v.c->n = strdup(tn->contents);
  if (!v.v.c->n) {
    fprintf(stderr, "failed to allocate memory\n");
    ore->err = ORE_ERROR_EXCEPTION;
    return ore_value_nil();
  }
  v.v.c->t = tb;
  v.v.c->b = base;
  ore_context* g = ore;
  while (g->parent) g = g->parent;
  ore_define(g, v.v.c->n, v);
  return v;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %r8, %r15
movq %rcx, %r12
movq %rdx, %r13
movq %rsi, %r14
movq %rdi, %rbx
xorps %xmm0, %xmm0
movaps %xmm0, 0x30(%rsp)
movaps %xmm0, 0x40(%rsp)
andq $0x0, 0x50(%rsp)
movl $0xb, 0x30(%rsp)
pushq $0x18
popq %rdi
callq 0x21a0
movq %rax, 0x38(%rsp)
testq %rax, %rax
je 0xee7e
movq %rax, %rbp
movq 0x8(%r13), %rdi
callq 0x2270
movq %rax, (%rbp)
testq %rax, %rax
je 0xee7e
movq %r12, 0x8(%rbp)
movq %r15, 0x10(%rbp)
movq %r14, %rdi
movq 0x8(%r14), %r14
testq %r14, %r14
jne 0xee21
movq 0x50(%rsp), %rcx
movq %rcx, 0x20(%rsp)
movaps 0x30(%rsp), %xmm0
movaps 0x40(%rsp), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %rax, %rsi
callq 0xaad0
movq 0x50(%rsp), %rax
movq %rax, 0x20(%rbx)
movaps 0x30(%rsp), %xmm0
movaps 0x40(%rsp), %xmm1
movups %xmm1, 0x10(%rbx)
movups %xmm0, (%rbx)
movq %rbx, %rax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x9173(%rip), %rax      # 0x17ff8
movq (%rax), %rcx
leaq 0x1bb7(%rip), %rdi      # 0x10a46
pushq $0x1a
popq %rsi
pushq $0x1
popq %rdx
callq 0x2260
movl $0x1, 0x20(%r14)
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movups %xmm0, 0x10(%rbx)
andq $0x0, 0x20(%rbx)
jmp 0xee6c
// File: /workspace/github_c_makefile_star2_O2/mattn[P]orelang/ore.c
// Function: ore_is_true
static int
ore_is_true(ore_value v) {
  switch (v.t) {
    case ORE_TYPE_BOOL:
      return v.v.b != 0;
    case ORE_TYPE_INT:
      return v.v.i != 0;
    case ORE_TYPE_FLOAT:
      return v.v.d != 0;
    case ORE_TYPE_STRING:
      return v.v.s->l > 0;
    case ORE_TYPE_ARRAY:
      {
        int n = 0;
        ore_array_t* a = (ore_array_t*) v.v.a->p;
        ore_array_iter_t *k;
        for (k = kl_begin(a); k != kl_end(a); k = kl_next(k)) n++;
        return n > 0;
      }
    case ORE_TYPE_HASH:
      {
        ore_hash_t* h = (ore_hash_t*) v.v.h->p;
        ore_hash_iter_t k;
        int n = 0;
        for (k = kh_begin(h); k != kh_end(h); k++) {
          if (!kh_exist(h, k)) continue;
          n++;
        }
        return n > 0;
      }
    case ORE_TYPE_REGEXP:
      return v.v.r->l > 0;
    case ORE_TYPE_ENV:
      return 1; // TODO
    case ORE_TYPE_CLASS:
      return 1; // TODO
    case ORE_TYPE_CCLASS:
      return 1; // TODO
    case ORE_TYPE_OBJECT:
      return 1; // TODO
    default:
      break;
  }
  return 0;
}

// Assembly:
movl 0x8(%rsp), %ecx
decl %ecx
cmpl $0xc, %ecx
ja 0xef71
leaq 0x8(%rsp), %rax
leaq 0x1a02(%rip), %rdx      # 0x108d0
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movb $0x1, %al
jmp 0xef6d
cmpl $0x0, 0x8(%rax)
jmp 0xef6a
movq 0x8(%rax), %rax
cmpl $0x0, 0x8(%rax)
setg %al
jmp 0xef6d
movq 0x8(%rax), %rax
movq (%rax), %rax
movq 0x8(%rax), %rdx
xorl %ecx, %ecx
movq (%rax), %rax
cmpq %rdx, %rax
je 0xef11
addq $0x28, %rax
decl %ecx
jmp 0xef01
testl %ecx, %ecx
jmp 0xef6a
xorpd %xmm0, %xmm0
cmpneqsd 0x8(%rax), %xmm0
movq %xmm0, %rax
andl $0x1, %eax
jmp 0xef6d
movq 0x8(%rax), %rax
movq (%rax), %rax
movl (%rax), %edx
xorl %esi, %esi
xorl %r8d, %r8d
xorl %edi, %edi
cmpl %r8d, %edx
je 0xef68
movq 0x10(%rax), %rcx
movl %r8d, %r9d
shrl $0x4, %r9d
movl (%rcx,%r9,4), %r9d
movl %esi, %ecx
andb $0x1e, %cl
shrl %cl, %r9d
andl $0x3, %r9d
cmpl $0x1, %r9d
adcl $0x0, %edi
incl %r8d
addl $0x2, %esi
jmp 0xef39
testl %edi, %edi
setne %al
movzbl %al, %eax
retq
xorl %eax, %eax
jmp 0xef6d
// File: /workspace/github_c_makefile_star2_O2/mattn[P]orelang/ore.c
// Function: ore_find_statements
static mpc_ast_t*
ore_find_statements(mpc_ast_t* t) {
  int i;
  if (is_a(t, "template")) return t;
  for (i = 0; i < t->children_num; i++) {
    if (is_a(t->children[i], "char") && t->children[i]->contents[0] == '{') {
      if (t->children[i+1]->contents[0] != '}') {
        return t->children[i+1];
      }
    }
  }
  return NULL;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq (%rdi), %rdi
leaq 0x1bc0(%rip), %rsi      # 0x10b4d
callq 0x2290
testq %rax, %rax
je 0xef9c
movq %rbx, %rax
jmp 0xeff0
movl 0x28(%rbx), %r15d
xorl %eax, %eax
testl %r15d, %r15d
cmovlel %eax, %r15d
leaq 0x1548(%rip), %r14      # 0x104f8
xorl %r12d, %r12d
cmpq %r12, %r15
je 0xefee
movq 0x30(%rbx), %r13
movq (%r13,%r12,8), %rbp
movq (%rbp), %rdi
movq %r14, %rsi
callq 0x2290
testq %rax, %rax
je 0xefe9
movq 0x8(%rbp), %rax
cmpb $0x7b, (%rax)
jne 0xefe9
movq 0x8(%r13,%r12,8), %rax
movq 0x8(%rax), %rcx
cmpb $0x7d, (%rcx)
jne 0xeff0
incq %r12
jmp 0xefb3
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/mattn[P]orelang/ore.c
// Function: ore_cmp_eq
static int
ore_cmp_eq(ore_context* ore, ore_value lhs, ore_value rhs) {
  switch (lhs.t) {
    case ORE_TYPE_NIL:
      return rhs.t == ORE_TYPE_NIL;
    case ORE_TYPE_BOOL:
      if (rhs.t == ORE_TYPE_BOOL && lhs.v.b == rhs.v.b) return 1;
      return 0;
    case ORE_TYPE_INT:
      if (rhs.t == ORE_TYPE_INT && lhs.v.i == rhs.v.i) return 1;
      if (rhs.t == ORE_TYPE_FLOAT && lhs.v.i == rhs.v.d) return 1;
      return 0;
    case ORE_TYPE_FLOAT:
      if (rhs.t == ORE_TYPE_INT && lhs.v.d == rhs.v.i) return 1;
      if (rhs.t == ORE_TYPE_FLOAT && lhs.v.d == rhs.v.d) return 1;
      return 0;
    case ORE_TYPE_STRING:
      if (lhs.t == rhs.t && lhs.v.s->l == rhs.v.s->l &&
          !memcmp(lhs.v.s->p, rhs.v.s->p, lhs.v.s->l))
        return 1;
      return 0;
    case ORE_TYPE_ARRAY:
      if (lhs.t == rhs.t && lhs.v.a->p == rhs.v.a->p)
        return 1;
      return 0;
    case ORE_TYPE_HASH:
      if (lhs.t == rhs.t && lhs.v.h->p == rhs.v.h->p)
        return 1;
      return 0;
    case ORE_TYPE_REGEXP:
      if (lhs.t == rhs.t && lhs.v.r->l == rhs.v.r->l &&
          !memcmp(lhs.v.r->p, rhs.v.r->p, lhs.v.r->l))
        return 1;
      return 0;
    case ORE_TYPE_FUNC:
      if (lhs.t == rhs.t && lhs.v.f.x.o == rhs.v.f.x.o)
        return 1;
      return 0;
    case ORE_TYPE_CFUNC:
      if (lhs.t == rhs.t && lhs.v.f.x.c == rhs.v.f.x.c)
        return 1;
      return 0;
    case ORE_TYPE_ENV:
      if (lhs.t == rhs.t && lhs.v.e->p == rhs.v.e->p)
        return 1;
      return 0;
    default:
      break;
  }
  return 0;
}

// Assembly:
pushq %rbx
movl 0x10(%rsp), %edx
xorl %ebx, %ebx
cmpq $0xa, %rdx
ja 0xf3fd
leaq 0x38(%rsp), %rax
leaq 0x10(%rsp), %rcx
leaq 0x1602(%rip), %rsi      # 0x10904
movslq (%rsi,%rdx,4), %rdx
addq %rsi, %rdx
jmpq *%rdx
xorl %ebx, %ebx
cmpl $0x0, (%rax)
sete %bl
jmp 0xf3fd
cmpl $0x4, (%rax)
je 0xf375
jmp 0xf3fd
cmpl $0x9, (%rax)
je 0xf3d0
jmp 0xf3fd
movl (%rax), %edx
cmpl $0x3, %edx
je 0xf3dc
cmpl $0x2, %edx
je 0xf39c
jmp 0xf3fd
movl (%rax), %edx
cmpl $0x3, %edx
je 0xf3ec
cmpl $0x2, %edx
jne 0xf3fd
movsd 0x8(%rcx), %xmm0
cvtsi2sdl 0x8(%rax), %xmm1
ucomisd %xmm1, %xmm0
jmp 0xf3f6
cmpl $0x7, (%rax)
jne 0xf3fd
movq 0x8(%rcx), %rcx
movslq 0x8(%rcx), %rdx
movq 0x8(%rax), %rax
cmpl 0x8(%rax), %edx
jne 0xf3fd
movq (%rcx), %rdi
movq (%rax), %rsi
callq 0x21c0
testl %eax, %eax
jne 0xf3fd
jmp 0xf3fa
cmpl $0x1, (%rax)
jne 0xf3fd
movl 0x8(%rcx), %ecx
cmpl 0x8(%rax), %ecx
je 0xf3fa
jmp 0xf3fd
cmpl $0x5, (%rax)
je 0xf3b9
jmp 0xf3fd
cmpl $0x6, (%rax)
je 0xf3b9
jmp 0xf3fd
cmpl $0xa, (%rax)
jne 0xf3fd
movq 0x8(%rcx), %rcx
movq (%rcx), %rcx
movq 0x8(%rax), %rax
cmpq (%rax), %rcx
jne 0xf3fd
jmp 0xf3fa
cmpl $0x8, (%rax)
jne 0xf3fd
movq 0x18(%rcx), %rcx
cmpq 0x18(%rax), %rcx
jne 0xf3fd
jmp 0xf3fa
cvtsi2sdl 0x8(%rcx), %xmm0
movsd 0x8(%rax), %xmm1
ucomisd %xmm0, %xmm1
jmp 0xf3f6
movsd 0x8(%rcx), %xmm0
ucomisd 0x8(%rax), %xmm0
jne 0xf3fd
jp 0xf3fd
pushq $0x1
popq %rbx
movl %ebx, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/mattn[P]orelang/ore.c
// Function: ore_class_new
static ore_value
ore_class_new(ore_context* ore, ore_value clazz) {
  ore_value v = { ORE_TYPE_OBJECT };
  ore_context* this = ore_new(ore);
  v.v.o = (ore_object*) malloc(sizeof(ore_object));
  if (!v.v.o) {
    fprintf(stderr, "failed to allocate memory\n");
    ore->err = ORE_ERROR_EXCEPTION;
    return ore_value_nil();
  }
  if (clazz.v.c->b != NULL) {
    ore_value bc = ore_find_global(ore, clazz.v.c->b);
    if (bc.t == ORE_TYPE_CLASS)
      ore_define(this, "super", ore_class_new(this, bc));
  }
  v.v.o->t = clazz.t;
  v.v.o->c = clazz.v.c;
  v.v.o->e = this;
  v.v.o->ref = -1;
  ore_eval(this, ore_find_statements(clazz.v.c->t));
  ore_define(this, "this", v);
  return v;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa8, %rsp
movq %rsi, %r12
movq %rdi, %rbx
xorps %xmm0, %xmm0
movaps %xmm0, 0x30(%rsp)
movaps %xmm0, 0x40(%rsp)
andq $0x0, 0x50(%rsp)
movl $0xd, 0x30(%rsp)
movq %rsi, %rdi
callq 0xaca5
movq %rax, %r14
pushq $0x20
popq %rdi
callq 0x21a0
movq %rax, 0x38(%rsp)
testq %rax, %rax
je 0xf58e
movq %rax, %r15
leaq 0xe0(%rsp), %rax
movq 0x8(%rax), %rbp
movq 0x10(%rbp), %rdx
testq %rdx, %rdx
je 0xf508
leaq 0x58(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0xf401
cmpl $0xb, (%r13)
jne 0xf500
movq 0x78(%rsp), %rax
movq %rax, 0x20(%rsp)
movups 0x58(%rsp), %xmm0
movups 0x68(%rsp), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
leaq 0x80(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0xf421
movq 0x20(%r12), %rax
movq %rax, 0x20(%rsp)
movups (%r12), %xmm0
movups 0x10(%r12), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
leaq 0x2b91(%rip), %rsi      # 0x12089
movq %r14, %rdi
callq 0xaad0
leaq 0xe0(%rsp), %rax
movl (%rax), %eax
movl %eax, (%r15)
movq %rbp, 0x8(%r15)
movq %r14, 0x10(%r15)
orl $-0x1, 0x18(%r15)
movq 0x8(%rbp), %rdi
callq 0xef75
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0xb1b8
movq 0x50(%rsp), %rax
movq %rax, 0x20(%rsp)
movaps 0x30(%rsp), %xmm0
movaps 0x40(%rsp), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
leaq 0x2b38(%rip), %rsi      # 0x1208f
movq %r14, %rdi
callq 0xaad0
movq 0x50(%rsp), %rax
movq %rax, 0x20(%rbx)
movaps 0x30(%rsp), %xmm0
movaps 0x40(%rsp), %xmm1
movups %xmm1, 0x10(%rbx)
movups %xmm0, (%rbx)
movq %rbx, %rax
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x8a63(%rip), %rax      # 0x17ff8
movq (%rax), %rcx
leaq 0x14a7(%rip), %rdi      # 0x10a46
pushq $0x1a
popq %rsi
pushq $0x1
popq %rdx
callq 0x2260
movl $0x1, 0x20(%r12)
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movups %xmm0, 0x10(%rbx)
andq $0x0, 0x20(%rbx)
jmp 0xf579
// File: /workspace/github_c_makefile_star2_O2/mattn[P]orelang/./kstring.h
// Function: kputc
static inline int kputc(int c, kstring_t *s)
{
	if (s->l + 1 >= s->m) {
		char *tmp;
		s->m = s->l + 2;
		kroundup32(s->m);
		if ((tmp = (char*)realloc(s->s, s->m)))
			s->s = tmp;
		else
			return EOF;
	}
	s->s[s->l++] = c;
	s->s[s->l] = 0;
	return c;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movq %rsi, %rbx
movl %edi, %ebp
movq (%rsi), %rdx
leaq 0x1(%rdx), %rcx
cmpq 0x8(%rsi), %rcx
jae 0xfc20
movq 0x10(%rbx), %rax
jmp 0xfc71
movq %rcx, %rax
shrq %rax
orq %rcx, %rax
movq %rax, %rcx
shrq $0x2, %rcx
orq %rax, %rcx
movq %rcx, %rax
shrq $0x4, %rax
orq %rcx, %rax
movq %rax, %rcx
shrq $0x8, %rcx
orq %rax, %rcx
movq %rcx, %rsi
shrq $0x10, %rsi
orq %rcx, %rsi
incq %rsi
movq %rsi, 0x8(%rbx)
movq 0x10(%rbx), %rdi
callq 0x21e0
testq %rax, %rax
je 0xfc83
movq %rax, 0x10(%rbx)
movq (%rbx), %rdx
leaq 0x1(%rdx), %rcx
movq %rcx, (%rbx)
movb %bpl, (%rax,%rdx)
movq (%rbx), %rax
movq 0x10(%rbx), %rcx
movb $0x0, (%rcx,%rax)
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/gregtour[P]minimal-compiler/assembler.c
// Function: EMIT
void EMIT(const char* str, 
          ...)
{
    va_list args;
    va_start(args, str);
    if (emit_tabs) fprintf(working_assembler_output, "    ");
    vfprintf(working_assembler_output, str, args);
    fprintf(working_assembler_output, "\r\n");
    va_end(args);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $0xc8, %rsp
movq %rdi, %rbx
leaq -0xd0(%rbp), %rdi
movq %rsi, 0x8(%rdi)
movq %rdx, 0x10(%rdi)
movq %rcx, 0x18(%rdi)
movq %r8, 0x20(%rdi)
movq %r9, 0x28(%rdi)
testb %al, %al
je 0x11c0
movaps %xmm0, -0xa0(%rbp)
movaps %xmm1, -0x90(%rbp)
movaps %xmm2, -0x80(%rbp)
movaps %xmm3, -0x70(%rbp)
movaps %xmm4, -0x60(%rbp)
movaps %xmm5, -0x50(%rbp)
movaps %xmm6, -0x40(%rbp)
movaps %xmm7, -0x30(%rbp)
movq %rdi, -0x10(%rbp)
leaq 0x10(%rbp), %rax
movq %rax, -0x18(%rbp)
movabsq $0x3000000008, %rax     # imm = 0x3000000008
movq %rax, -0x20(%rbp)
cmpl $0x0, 0x2e77(%rip)      # 0x4058
je 0x11fc
movq 0x2e66(%rip), %rcx      # 0x4050
leaq 0xe13(%rip), %rdi       # 0x2004
pushq $0x4
popq %rsi
pushq $0x1
popq %rdx
callq 0x1060
movq 0x2e4d(%rip), %rdi      # 0x4050
leaq -0x20(%rbp), %rdx
movq %rbx, %rsi
callq 0x1050
movq 0x2e3a(%rip), %rcx      # 0x4050
leaq 0xdec(%rip), %rdi       # 0x2009
pushq $0x2
popq %rsi
pushq $0x1
popq %rdx
callq 0x1060
addq $0xc8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/gregtour[P]minimal-compiler/assembler.c
// Function: EMIT_HEADER
void EMIT_HEADER()
{
    EMIT("// Beginning of source file");
    EMIT("#include <stdio.h>");
    EMIT("#include <stdlib.h>");
    EMIT("");
    EMIT("int main(int arg_c, char* arg_v[]) \r\n{");
    EMIT("  __asm");
    EMIT("  {");
    emit_tabs = 1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq 0xd2e(%rip), %rdi       # 0x200c
xorl %eax, %eax
callq 0x116c
leaq 0xd3c(%rip), %rdi       # 0x2028
xorl %eax, %eax
callq 0x116c
leaq 0xd41(%rip), %rdi       # 0x203b
xorl %eax, %eax
callq 0x116c
leaq 0xd03(%rip), %rdi       # 0x200b
xorl %eax, %eax
callq 0x116c
leaq 0xd39(%rip), %rdi       # 0x204f
xorl %eax, %eax
callq 0x116c
leaq 0xd52(%rip), %rdi       # 0x2076
xorl %eax, %eax
callq 0x116c
leaq 0xd4c(%rip), %rdi       # 0x207e
xorl %eax, %eax
callq 0x116c
movl $0x1, 0x2d15(%rip)      # 0x4058
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/gregtour[P]minimal-compiler/assembler.c
// Function: EMIT_FOOTER
void EMIT_FOOTER()
{
    emit_tabs = 0;
    EMIT("  }");
    EMIT("  ");
    EMIT("  return 0;");
    EMIT("}");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
andl $0x0, 0x2d08(%rip)      # 0x4058
leaq 0xd2b(%rip), %rdi       # 0x2082
xorl %eax, %eax
callq 0x116c
leaq 0xca1(%rip), %rdi       # 0x2006
xorl %eax, %eax
callq 0x116c
leaq 0xd13(%rip), %rdi       # 0x2086
xorl %eax, %eax
callq 0x116c
leaq 0xd03(%rip), %rdi       # 0x2084
xorl %eax, %eax
popq %rbp
jmp 0x116c
// File: /workspace/github_c_makefile_star2_O2/gregtour[P]minimal-compiler/assembler.c
// Function: assemble_code
void assemble_code(const char* output_src,
                         void* IR)
{
    FILE* output;
    output = fopen(output_src, "wb");
    if (output == NULL)
    {
        ERROR("Could not open output file %s.\n", output_src);
        return;
    } else {
        working_assembler_output = output;
    }
    
    EMIT_HEADER();
  
    EMIT("; Beginning of source assembly");
    GenerateProgram();
    EMIT("_emit 0x90 ;");
    
    EMIT_FOOTER();
    
    fprintf(output, "\r\n");
    fclose(output);
    return;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
leaq 0xcfc(%rip), %rsi       # 0x2092
callq 0x1040
testq %rax, %rax
je 0x13f8
movq %rax, %rbx
movq %rax, 0x2ca6(%rip)      # 0x4050
callq 0x12d3
leaq 0xcdf(%rip), %rdi       # 0x2095
xorl %eax, %eax
callq 0x116c
callq 0x145c
leaq 0xceb(%rip), %rdi       # 0x20b4
xorl %eax, %eax
callq 0x116c
callq 0x1345
leaq 0xc2d(%rip), %rdi       # 0x2009
pushq $0x2
popq %rsi
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x1060
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x1030
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/gregtour[P]minimal-compiler/assembler.c
// Function: GenerateProgram
void GenerateProgram()
{
    EMIT("jp start");
    EMIT_L("head:");

    STRINGCONST("World");   // 6    
    STRINGCONST("Hello");   // 6
    STRINGCONST("%s, %s."); // 8

    EMIT_L("start:");
    EMIT("mov eax, head");
    EMIT("push eax");
    EMIT("add eax, 6");
    EMIT("push eax");
    EMIT("add eax, 6");
    EMIT("push eax");
    EMIT("call printf");
    EMIT("pop ebx");
    EMIT("pop ebx");
    EMIT("pop ebx");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
leaq 0xc70(%rip), %rdi       # 0x20da
xorl %eax, %eax
callq 0x116c
leaq 0xc6b(%rip), %rdi       # 0x20e3
xorl %eax, %eax
callq 0x1232
leaq 0xc63(%rip), %rdi       # 0x20e9
callq 0x1413
leaq 0xc5d(%rip), %rdi       # 0x20ef
callq 0x1413
leaq 0xc57(%rip), %rdi       # 0x20f5
callq 0x1413
leaq 0xc53(%rip), %rdi       # 0x20fd
xorl %eax, %eax
callq 0x1232
leaq 0xc4c(%rip), %rdi       # 0x2104
xorl %eax, %eax
callq 0x116c
leaq 0xc4c(%rip), %rbx       # 0x2112
movq %rbx, %rdi
xorl %eax, %eax
callq 0x116c
leaq 0xc44(%rip), %r14       # 0x211b
movq %r14, %rdi
xorl %eax, %eax
callq 0x116c
movq %rbx, %rdi
xorl %eax, %eax
callq 0x116c
movq %r14, %rdi
xorl %eax, %eax
callq 0x116c
movq %rbx, %rdi
xorl %eax, %eax
callq 0x116c
leaq 0xc20(%rip), %rdi       # 0x2126
xorl %eax, %eax
callq 0x116c
leaq 0xc1e(%rip), %rbx       # 0x2132
movq %rbx, %rdi
xorl %eax, %eax
callq 0x116c
movq %rbx, %rdi
xorl %eax, %eax
callq 0x116c
movq %rbx, %rdi
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
jmp 0x116c
// File: /workspace/github_c_makefile_star2_O2/rajatxjain[P]gpiocfg/gpiocfg.c
// Function: usage
static void usage(char *prog)
{
	printf("\nUsage: %s [options] <command>\n\n", prog);
	printf("Options:\n");
	printf("  -p, --platform=<name>    Platform to use (Default: icelake)\n\n");
	printf("Commands:\n");
	printf("  -r, --read=<gpio pin>    Read and parse DW0/DW1 config for given pin\n");
	printf("  -v, --value=<DW0 value>  Parse the given DW0 register value\n");
	printf("  -l, --list               List the GPIO pins for selected platform\n");
	printf("  -h, --help               Print this help.\n\n");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, %rsi
leaq 0x7a2(%rip), %rdi       # 0x2113
xorl %eax, %eax
callq 0x1070
leaq 0xee1(%rip), %rdi       # 0x2860
callq 0x1040
leaq 0xede(%rip), %rdi       # 0x2869
callq 0x1040
leaq 0xf11(%rip), %rdi       # 0x28a8
callq 0x1040
leaq 0xf0f(%rip), %rdi       # 0x28b2
callq 0x1040
leaq 0xf4a(%rip), %rdi       # 0x28f9
callq 0x1040
leaq 0xf7c(%rip), %rdi       # 0x2937
callq 0x1040
leaq 0xfb4(%rip), %rdi       # 0x297b
popq %rbp
jmp 0x1040
// File: /workspace/github_c_makefile_star2_O2/rajatxjain[P]gpiocfg/gpiocfg.c
// Function: lookup_pin
static int lookup_pin(char *pin_name, struct community **community, unsigned *pin_no_in_cmty)
{
	unsigned cmty_num, pin;
	struct community *cmty;

	for (cmty_num = 0; cmty_num < platform->num_communities; cmty_num++) {		
		cmty = &platform->communities[cmty_num];
		for (pin = 0; pin < cmty->num_pins; pin++)
			if (!strcmp(cmty->pin_names[pin], pin_name)) {
				*community = cmty;
				*pin_no_in_cmty = pin;
				return 1;
			}
	}
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rdx, -0x38(%rbp)
movq %rsi, -0x30(%rbp)
movq %rdi, %r12
movq 0x26d0(%rip), %rax      # 0x40c0
movl 0x28(%rax), %ecx
pushq $0x10
popq %rdx
xorl %r15d, %r15d
movq %rax, -0x48(%rbp)
movq %rcx, -0x40(%rbp)
cmpq %rcx, %r15
je 0x1a81
movq 0x30(%rax), %r13
imulq $0x1010, %r15, %rax     # imm = 0x1010
leaq (%rax,%r13), %rcx
movq %rcx, -0x50(%rbp)
movl 0xc(%r13,%rax), %ebx
movq %rdx, -0x58(%rbp)
addq %rdx, %r13
xorl %r14d, %r14d
cmpq %r14, %rbx
je 0x1a45
movq %r13, %rdi
movq %r12, %rsi
callq 0x1090
testl %eax, %eax
je 0x1a5d
incq %r14
addq $0x20, %r13
jmp 0x1a28
incq %r15
movq -0x58(%rbp), %rdx
addq $0x1010, %rdx           # imm = 0x1010
movq -0x48(%rbp), %rax
movq -0x40(%rbp), %rcx
jmp 0x1a01
movq -0x30(%rbp), %rax
movq -0x50(%rbp), %rcx
movq %rcx, (%rax)
movq -0x38(%rbp), %rax
movl %r14d, (%rax)
pushq $0x1
popq %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
xorl %eax, %eax
jmp 0x1a72
// File: /workspace/github_c_makefile_star2_O2/rajatxjain[P]gpiocfg/gpiocfg.c
// Function: mmio_read32
static u_int32_t mmio_read32(unsigned long addr)
{
	int fd;
	volatile u_int32_t *ptr;
	u_int32_t val;
	unsigned int pgsize = getpagesize();
	unsigned long aligned_addr = addr & ~(pgsize - 1);
	unsigned long offset = addr & (pgsize - 1);
	
	fd = open("/dev/mem", O_RDONLY | O_SYNC);
	if (fd < 0) {
		printf("Error opening /dev/mem!!!\n");
		return -1;
	}
	ptr = mmap(NULL, pgsize, PROT_READ, MAP_SHARED, fd, aligned_addr);
	if (!ptr || ptr == MAP_FAILED) {
		printf("Error in mmap for addr 0x%X!!!\n", addr);
		return -1;
	}
	val = *(volatile u_int32_t *)((unsigned long)ptr + offset);
	munmap((void*) ptr, pgsize);
	close(fd);
	return val;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdi, %rbx
callq 0x10d0
movl %eax, %r15d
leaq 0x7a2(%rip), %rdi       # 0x2244
movl $0x101000, %esi         # imm = 0x101000
xorl %eax, %eax
callq 0x10b0
testl %eax, %eax
js 0x1af2
movl %eax, %r14d
movl %r15d, %eax
negl %eax
movl %ebx, %r9d
andl %eax, %r9d
movl %r15d, %r12d
pushq $0x1
popq %rcx
xorl %edi, %edi
movq %r12, %rsi
movl %ecx, %edx
movl %r14d, %r8d
callq 0x1050
leaq 0x1(%rax), %rcx
cmpq $0x1, %rcx
ja 0x1b03
leaq 0x767(%rip), %rdi       # 0x224d
movq %rbx, %rsi
xorl %eax, %eax
callq 0x1070
jmp 0x1afe
leaq 0x1033(%rip), %rdi      # 0x2b2c
callq 0x1040
pushq $-0x1
popq %rbx
jmp 0x1b1f
decl %r15d
andl %r15d, %ebx
movl (%rbx,%rax), %ebx
movq %rax, %rdi
movq %r12, %rsi
callq 0x10a0
movl %r14d, %edi
callq 0x1080
movl %ebx, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O2/ohkimur[P]the-c-programming-language-2nd-edition-solutions/chapter_1/exercise_1_18/trailing_blanks.c
// Function: main
int main(void)
{
  int len;
  char line[MAXLINE];

  while ((len = get_line(line, MAXLINE)) > 0)
  {
    remove_trailing_blanks(line, len);
    printf("%s", line);
  }

  return 0;
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x3e8, %rsp            # imm = 0x3E8
movq %rsp, %rbx
leaq 0xea4(%rip), %r14       # 0x2004
movq %rbx, %rdi
movl $0x3e8, %esi            # imm = 0x3E8
callq 0x1197
testl %eax, %eax
jle 0x118a
movq %rbx, %rdi
movl %eax, %esi
callq 0x11ec
movq %r14, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x1030
jmp 0x1160
xorl %eax, %eax
addq $0x3e8, %rsp            # imm = 0x3E8
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/hsjoihs[P]c-compiler/codegen.c
// Function: collect_named_labels
static struct Vector /*<SourceLabel>*/
collect_named_labels(const struct Statement *ptr_sta)
{
	struct Statement sta = *ptr_sta;
	struct Vector /*<SourceLabel>*/ ans = init_vector();
	concat_vector(&ans, &sta.labels);
	switch (sta.category) {
	case RETURN_STATEMENT:
	case BREAK_STATEMENT:
	case CONTINUE_STATEMENT:
	case EXPRESSION_STATEMENT:
	case DECLARATION_STATEMENT:
	case GOTO_STATEMENT:
		/* nothing */
		break;

	case SWITCH_STATEMENT: /* do peek labels */
	case IF_STATEMENT:
	case FOR_STATEMENT:
	case WHILE_STATEMENT:
	case DO_WHILE_STATEMENT: {
		const struct Vector /*<SourceLabel>*/ inner_vec =
		    collect_named_labels(sta.inner_statement);
		concat_vector(&ans, &inner_vec);
		break;
	}

	case COMPOUND_STATEMENT:
	case IF_ELSE_STATEMENT: {
		struct Vector /*<Statement>*/ statement_vec = sta.statement_vector;
		for (int counter = 0; counter != statement_vec.length; ++counter) {
			const struct Statement *ptr_ith = statement_vec.vector[counter];
			const struct Vector /*<SourceLabel>*/ inner_vec =
			    collect_named_labels(ptr_ith);
			concat_vector(&ans, &inner_vec);
		}
		break;
	}
	}
	return ans;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x3b8, %rsp            # imm = 0x3B8
movq %rdi, %rsi
leaq -0x3d8(%rbp), %rbx
movl $0x390, %edx            # imm = 0x390
movq %rbx, %rdi
callq 0x1100
callq 0x49e0
leaq -0x38(%rbp), %rdi
movq %rax, (%rdi)
movq %rdx, 0x8(%rdi)
leaq -0x60(%rbp), %rsi
callq 0x4ab0
movl (%rbx), %eax
cmpl $0xb, %eax
ja 0x1c9e
movl $0x83a, %ecx            # imm = 0x83A
btl %eax, %ecx
jae 0x1cb8
movq -0xc0(%rbp), %rdi
callq 0x1c29
leaq -0x48(%rbp), %rsi
movq %rax, (%rsi)
movq %rdx, 0x8(%rsi)
leaq -0x38(%rbp), %rdi
callq 0x4ab0
movq -0x38(%rbp), %rax
movq -0x30(%rbp), %rdx
addq $0x3b8, %rsp            # imm = 0x3B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
pushq $0x5
popq %rcx
btl %eax, %ecx
jae 0x1c9e
movl -0x3d0(%rbp), %r15d
movq -0x3c8(%rbp), %r12
xorl %r13d, %r13d
leaq -0x38(%rbp), %rbx
leaq -0x48(%rbp), %r14
cmpq %r13, %r15
je 0x1c9e
movq (%r12,%r13,8), %rdi
callq 0x1c29
movq %rax, -0x48(%rbp)
movq %rdx, -0x40(%rbp)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4ab0
incq %r13
jmp 0x1cd9
nop
// File: /workspace/github_c_makefile_star2_O2/hsjoihs[P]c-compiler/alignment.c
// Function: get_size_alignment_offsets_for_union
struct SizeAndAlignment get_size_alignment_offsets_for_union(
    const struct SizeAndAlignment *inner_type_vec, int **ptr_offset_vec,
    int length)
{
	struct SizeAndAlignment res;
	res.alignment = 1;

	/* union's alignment is the maximum of the members' alignments */
	for (int i = 0; i < length; i++) {
		if (inner_type_vec[i].alignment > res.alignment) {
			res.alignment = inner_type_vec[i].alignment;
		}
	}

	int max_size_of_member = 1;

	/* union's size is AT LEAST the maximum of the members' sizes */
	for (int i = 0; i < length; i++) {
		if (inner_type_vec[i].size > max_size_of_member) {
			max_size_of_member = inner_type_vec[i].size;
		}
	}

	if (max_size_of_member % res.alignment) {
		max_size_of_member +=
		    res.alignment - (max_size_of_member % res.alignment);
	}

	res.size = max_size_of_member;

	/* calloc; all is zero */
	int *offset_vec = calloc(length, sizeof(int));
	*ptr_offset_vec = offset_vec;
	return res;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %ecx
movq %rsi, %rbx
xorl %edx, %edx
testl %ecx, %ecx
movl $0x0, %eax
cmovgl %ecx, %eax
pushq $0x1
popq %r15
cmpq %rdx, %rax
je 0x1d34
movl 0x4(%rdi,%rdx,8), %esi
cmpl %r15d, %esi
cmovgl %esi, %r15d
incq %rdx
jmp 0x1d1f
pushq $0x1
popq %rsi
xorl %edx, %edx
cmpq %rdx, %rax
je 0x1d4e
movl (%rdi,%rdx,8), %r8d
cmpl %esi, %r8d
cmovgl %r8d, %esi
incq %rdx
jmp 0x1d39
movl %esi, %eax
xorl %edx, %edx
divl %r15d
movl %r15d, %r14d
subl %edx, %r14d
testl %edx, %edx
cmovel %edx, %r14d
addl %esi, %r14d
movslq %ecx, %rdi
pushq $0x4
popq %rsi
callq 0x10d0
movq %rax, (%rbx)
shlq $0x20, %r15
orq %r15, %r14
movq %r14, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/hsjoihs[P]c-compiler/alignment.c
// Function: get_size_alignment_offsets_for_struct_not_union
struct SizeAndAlignment get_size_alignment_offsets_for_struct_not_union(
    const struct SizeAndAlignment *inner_type_vec, int **ptr_offset_vec,
    int length)
{
	struct SizeAndAlignment res;
	res.alignment = 1;

	/* struct's alignment is the maximum of the members' alignments */
	for (int i = 0; i < length; i++) {
		if (inner_type_vec[i].alignment > res.alignment) {
			res.alignment = inner_type_vec[i].alignment;
		}
	}

	int offset = 0;
	int *offset_vec = calloc(length, sizeof(int));

	for (int i = 0; i < length; i++) {
		if (offset % inner_type_vec[i].alignment) {
			offset += inner_type_vec[i].alignment -
			          (offset % inner_type_vec[i].alignment);
		}
		offset_vec[i] = offset;
		offset += inner_type_vec[i].size;
	}

	if (offset % res.alignment) {
		offset += res.alignment - (offset % res.alignment);
	}

	res.size = offset;
	*ptr_offset_vec = offset_vec;
	return res;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
xorl %eax, %eax
testl %edx, %edx
movl $0x0, %r12d
cmovgl %edx, %r12d
pushq $0x1
popq %r15
cmpq %rax, %r12
je 0x1dc0
movl 0x4(%r14,%rax,8), %ecx
cmpl %r15d, %ecx
cmovgl %ecx, %r15d
incq %rax
jmp 0x1daa
movslq %edx, %rdi
pushq $0x4
popq %rsi
callq 0x10d0
movq %rax, %rcx
xorl %edi, %edi
xorl %esi, %esi
cmpq %rdi, %r12
je 0x1dfe
movl 0x4(%r14,%rdi,8), %r8d
movl %esi, %eax
cltd
idivl %r8d
subl %edx, %r8d
testl %edx, %edx
cmovel %edx, %r8d
addl %esi, %r8d
movl %r8d, (%rcx,%rdi,4)
addl (%r14,%rdi,8), %r8d
incq %rdi
movl %r8d, %esi
jmp 0x1dd2
movl %esi, %eax
cltd
idivl %r15d
movl %r15d, %eax
subl %edx, %eax
testl %edx, %edx
cmovel %edx, %eax
addl %esi, %eax
movq %rcx, (%rbx)
shlq $0x20, %r15
orq %r15, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O2/hsjoihs[P]c-compiler/parse_analyze_toplevel.c
// Function: size_of
int size_of(const struct AnalyzerState *ptr_ps, const struct Type *ref_type)
{
	const struct Type type = *ref_type;
	switch (type.type_category) {
	case INT_:
		return 4;
	case PTR_:
		return 8;
	case CHAR_:
		return 1;
	case ARRAY:
		return type.array_length * size_of(ptr_ps, type.derived_from);
	case FN:
		fprintf(stderr, "function type does not have a size\n");
		exit(EXIT_FAILURE);
	case STRUCT_NOT_UNION:
	case UNION:
		if ((0)) { /* is local struct/union */
			unsupported("struct/union type declared locally");
		}
		const char *tag = type.s.struct_or_union_tag;
		const struct StructOrUnionInternalCompleteInfo *ptr_info =
		    lookup(ptr_ps->global_struct_or_union_tag_map, tag);
		if (!ptr_info) {
			fprintf(stderr, "tried to take the size of an incomplete type `");
			debug_print_type(&type);
			fprintf(stderr, "`\n");
			exit(EXIT_FAILURE);
		}
		return ptr_info->s_and_a.size;
	case VOID_:
		fprintf(stderr, "the size of type `void` is never known\n");
		exit(EXIT_FAILURE);
	case ENUM_:
		return 4;
	}

	fprintf(stderr,
	        "****************************\n"
	        "* INTERNAL COMPILER ERROR @ %s\n"
	        "* Unexpected value of TypeCategory: `type.type_category` is `%d`\n"
	        "****************************\n",
	        __func__, type.type_category);
	exit(EXIT_FAILURE);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x50, %rsp
movq %rdi, %rax
pushq $0xa
popq %rcx
leaq -0x60(%rbp), %rdx
movq %rdx, %rdi
rep  movsq (%rsi), %es:(%rdi)
movl (%rdx), %ecx
cmpq $0x8, %rcx
ja 0x1f0d
leaq 0xb53a(%rip), %rdx      # 0xd38c
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
pushq $0x4
jmp 0x1e7c
movq -0x30(%rbp), %rsi
movq 0x78(%rax), %rdi
callq 0x92a8
testq %rax, %rax
je 0x1e9a
movl 0x10(%rax), %eax
jmp 0x1e7d
pushq $0x1
jmp 0x1e7c
pushq $0x8
popq %rax
addq $0x50, %rsp
popq %rbx
popq %r14
popq %rbp
retq
movl -0x50(%rbp), %ebx
movq -0x58(%rbp), %rsi
movq %rax, %rdi
callq 0x1e24
imull %ebx, %eax
jmp 0x1e7d
movq 0x14157(%rip), %r14     # 0x15ff8
movq (%r14), %rcx
leaq 0xb595(%rip), %rdi      # 0xd440
pushq $0x2e
popq %rsi
pushq $0x1
popq %rbx
movq %rbx, %rdx
callq 0x1180
leaq -0x60(%rbp), %rdi
callq 0x827e
movq (%r14), %rcx
leaq 0xc019(%rip), %rdi      # 0xdee5
pushq $0x2
popq %rsi
movq %rbx, %rdx
jmp 0x1f00
movq 0x1411d(%rip), %rax     # 0x15ff8
movq (%rax), %rcx
leaq 0xb537(%rip), %rdi      # 0xd41c
pushq $0x23
jmp 0x1efc
movq 0x14108(%rip), %rax     # 0x15ff8
movq (%rax), %rcx
leaq 0xb575(%rip), %rdi      # 0xd46f
pushq $0x27
popq %rsi
pushq $0x1
popq %rdx
callq 0x1180
pushq $0x1
popq %rdi
callq 0x1170
movq 0x140e4(%rip), %rax     # 0x15ff8
movq (%rax), %rdi
leaq 0xb579(%rip), %rsi      # 0xd497
leaq 0xb60d(%rip), %rdx      # 0xd532
xorl %eax, %eax
callq 0x10f0
jmp 0x1f05
// File: /workspace/github_c_makefile_star2_O2/hsjoihs[P]c-compiler/parse_analyze_toplevel.c
// Function: align_of
int align_of(const struct AnalyzerState *ptr_ps, const struct Type *ref_type)
{
	const struct Type type = *ref_type;
	switch (type.type_category) {
	case INT_:
		return 4;
	case PTR_:
		return 8;
	case CHAR_:
		return 1;
	case ARRAY:
		return align_of(ptr_ps, type.derived_from);
	case FN:
		fprintf(stderr,
		        "a function type does not have a size or an alignment\n");
		exit(EXIT_FAILURE);
	case STRUCT_NOT_UNION:
	case UNION:
		if ((0)) { /* is local struct/union */
			unsupported("struct/union type declared locally");
		}
		const char *tag = type.s.struct_or_union_tag;
		const struct StructOrUnionInternalCompleteInfo *ptr_info =
		    lookup(ptr_ps->global_struct_or_union_tag_map, tag);
		if (!ptr_info) {
			fprintf(stderr,
			        "tried to find the alignment of an incomplete type `");
			debug_print_type(&type);
			fprintf(stderr, "`\n");
			exit(EXIT_FAILURE);
		}
		return ptr_info->s_and_a.alignment;
	case VOID_:
		fprintf(stderr, "cannot get alignment of `void`\n");
		exit(EXIT_FAILURE);
	case ENUM_:
		return 4;
	}

	fprintf(stderr,
	        "****************************\n"
	        "* INTERNAL COMPILER ERROR @ %s\n"
	        "* Unexpected value of TypeCategory: `type.type_category` is `%d`\n"
	        "****************************\n",
	        __func__, type.type_category);
	exit(EXIT_FAILURE);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x50, %rsp
movq %rdi, %rax
pushq $0xa
popq %rcx
leaq -0x60(%rbp), %rdx
movq %rdx, %rdi
rep  movsq (%rsi), %es:(%rdi)
movl (%rdx), %ecx
cmpq $0x8, %rcx
ja 0x2017
leaq 0xb454(%rip), %rdx      # 0xd3b0
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
pushq $0x4
jmp 0x1f86
movq -0x30(%rbp), %rsi
movq 0x78(%rax), %rdi
callq 0x92a8
testq %rax, %rax
je 0x1fa4
movl 0x14(%rax), %eax
jmp 0x1f87
pushq $0x1
jmp 0x1f86
pushq $0x8
popq %rax
addq $0x50, %rsp
popq %rbx
popq %r14
popq %rbp
retq
movq -0x58(%rbp), %rsi
movq %rax, %rdi
addq $0x50, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x1f2e
movq 0x1404d(%rip), %r14     # 0x15ff8
movq (%r14), %rcx
leaq 0xb5bb(%rip), %rdi      # 0xd570
pushq $0x33
popq %rsi
pushq $0x1
popq %rbx
movq %rbx, %rdx
callq 0x1180
leaq -0x60(%rbp), %rdi
callq 0x827e
movq (%r14), %rcx
leaq 0xbf0f(%rip), %rdi      # 0xdee5
pushq $0x2
popq %rsi
movq %rbx, %rdx
jmp 0x200a
movq 0x14013(%rip), %rax     # 0x15ff8
movq (%rax), %rcx
leaq 0xb54b(%rip), %rdi      # 0xd53a
pushq $0x35
jmp 0x2006
movq 0x13ffe(%rip), %rax     # 0x15ff8
movq (%rax), %rcx
leaq 0xb5a0(%rip), %rdi      # 0xd5a4
pushq $0x1f
popq %rsi
pushq $0x1
popq %rdx
callq 0x1180
pushq $0x1
popq %rdi
callq 0x1170
movq 0x13fda(%rip), %rax     # 0x15ff8
movq (%rax), %rdi
leaq 0xb46f(%rip), %rsi      # 0xd497
leaq 0xb595(%rip), %rdx      # 0xd5c4
xorl %eax, %eax
callq 0x10f0
jmp 0x200f
// File: /workspace/github_c_makefile_star2_O2/hsjoihs[P]c-compiler/parse_analyze_toplevel.c
// Function: system_v_abi_class_of
enum SystemVAbiClass system_v_abi_class_of(const struct AnalyzerState *ptr_ps,
                                           const struct Type *ref_type)
{
	const struct Type type = *ref_type;
	switch (type.type_category) {
	case INT_:
	case PTR_:
	case CHAR_:
	case ARRAY:
	case ENUM_:
		return INTEGER_CLASS;
	case FN:
		fprintf(stderr, "function type does not have System V ABI class\n");
		exit(EXIT_FAILURE);
	case VOID_:
		fprintf(stderr, "type `void` does not have System V ABI class\n");
		exit(EXIT_FAILURE);
	case STRUCT_NOT_UNION:
	case UNION:
		if ((0)) { /* is local struct/union */
			unsupported("struct/union type declared locally");
		}
		const char *tag = type.s.struct_or_union_tag;
		const struct StructOrUnionInternalCompleteInfo *ptr_info =
		    lookup(ptr_ps->global_struct_or_union_tag_map, tag);
		if (!ptr_info) {
			fprintf(
			    stderr,
			    "tried to find the System V ABI class of incomplete type `");
			debug_print_type(&type);
			fprintf(stderr, "`\n");
			exit(EXIT_FAILURE);
		}

		if (size_of(ptr_ps, &type) > 2 * 8) {
			return MEMORY_CLASS;
		}
		return INTEGER_CLASS;
	}

	fprintf(stderr,
	        "****************************\n"
	        "* INTERNAL COMPILER ERROR @ %s\n"
	        "* Unexpected value of TypeCategory: `type.type_category` is `%d`\n"
	        "****************************\n",
	        __func__, type.type_category);
	exit(EXIT_FAILURE);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x50, %rsp
movq %rdi, %rbx
pushq $0xa
popq %rcx
leaq -0x60(%rbp), %rax
movq %rax, %rdi
rep  movsq (%rsi), %es:(%rdi)
movl (%rax), %ecx
cmpq $0x8, %rcx
ja 0x2115
xorl %eax, %eax
leaq 0xb36c(%rip), %rdx      # 0xd3d4
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq -0x30(%rbp), %rsi
movq 0x78(%rbx), %rdi
callq 0x92a8
testq %rax, %rax
je 0x20a2
leaq -0x60(%rbp), %rsi
movq %rbx, %rdi
callq 0x1e24
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x11, %ecx
setge %al
addq $0x50, %rsp
popq %rbx
popq %r14
popq %rbp
retq
movq 0x13f4f(%rip), %r14     # 0x15ff8
movq (%r14), %rcx
leaq 0xb578(%rip), %rdi      # 0xd62b
pushq $0x39
popq %rsi
pushq $0x1
popq %rbx
movq %rbx, %rdx
callq 0x1180
leaq -0x60(%rbp), %rdi
callq 0x827e
movq (%r14), %rcx
leaq 0xbe11(%rip), %rdi      # 0xdee5
pushq $0x2
popq %rsi
movq %rbx, %rdx
jmp 0x2108
movq 0x13f15(%rip), %rax     # 0x15ff8
movq (%rax), %rcx
leaq 0xb510(%rip), %rdi      # 0xd5fd
pushq $0x2d
jmp 0x2104
movq 0x13f00(%rip), %rax     # 0x15ff8
movq (%rax), %rcx
leaq 0xb4cb(%rip), %rdi      # 0xd5cd
pushq $0x2f
popq %rsi
pushq $0x1
popq %rdx
callq 0x1180
pushq $0x1
popq %rdi
callq 0x1170
movq 0x13edc(%rip), %rax     # 0x15ff8
movq (%rax), %rdi
leaq 0xb371(%rip), %rsi      # 0xd497
leaq 0xb538(%rip), %rdx      # 0xd665
xorl %eax, %eax
callq 0x10f0
jmp 0x210d
// File: /workspace/github_c_makefile_star2_O2/hsjoihs[P]c-compiler/parse_analyze_toplevel.c
// Function: push_offset_and_type
static int
push_offset_and_type(struct AnalyzerState *ptr_ps, const struct Type *ref_type,
                     struct Vector /*<LocalVarInfo>*/ *ptr_offsets_and_types,
                     const char *ident_str)
{

	int offset = add_local_var_to_scope(ptr_ps, ref_type, ident_str);

	struct LocalVarInfo info;
	info.offset = offset;
	info.type = *ref_type;

	struct LocalVarInfo *ptr1 = calloc(1, sizeof(struct LocalVarInfo));
	*ptr1 = info;
	push_vector(ptr_offsets_and_types, ptr1);

	return offset;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %rbx
movq %rsi, %r14
movq %rcx, %rdx
callq 0x289c
movl %eax, %r15d
pushq $0x1
popq %rdi
pushq $0x58
popq %rsi
callq 0x10d0
pushq $0xa
popq %rcx
movq %rax, %rdi
movq %r14, %rsi
rep  movsq (%rsi), %es:(%rdi)
movl %r15d, 0x50(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4a57
movl %r15d, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/hsjoihs[P]c-compiler/parse_analyze_statement.c
// Function: add_local_var_to_scope
int add_local_var_to_scope(struct AnalyzerState *ptr_ps,
                           const struct Type *ref_vartype, const char *str)
{
	ptr_ps->newest_offset -= size_of(ptr_ps, ref_vartype);

	struct LocalVarInfo *ptr_varinfo = calloc(1, sizeof(struct LocalVarInfo));
	ptr_varinfo->offset = ptr_ps->newest_offset;
	ptr_varinfo->type = *ref_vartype;
	insert(ptr_ps->scope_chain.var_table, str, ptr_varinfo);

	return ptr_varinfo->offset;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
callq 0x1e24
movl 0x70(%r15), %r13d
subl %eax, %r13d
movl %r13d, 0x70(%r15)
pushq $0x1
popq %rdi
pushq $0x58
popq %rsi
callq 0x10d0
movq %rax, %r12
movl %r13d, 0x50(%rax)
pushq $0xa
popq %rcx
movq %rax, %rdi
movq %r14, %rsi
rep  movsq (%rsi), %es:(%rdi)
movq (%r15), %rdi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x9250
movl 0x50(%r12), %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/hsjoihs[P]c-compiler/parse_analyze_statement.c
// Function: parse_labeled_statement
struct Statement parse_labeled_statement(struct AnalyzerState *ptr_ps,
                                         const struct Token **ptr_tokvec)
{
	const struct Token *tokvec = *ptr_tokvec;
	enum TokenKind kind = tokvec[0].kind;

	struct SourceLabel l;
	if (kind == RES_DEFAULT) {
		++tokvec;
		l.category = DEFAULT_LABEL;
	} else if (kind == RES_CASE) {
		++tokvec;
		const struct UntypedExpr u = parse_constant_expression(&tokvec);
		int case_int =
		    typecheck_constant_integral_expression(ptr_ps, &u, "case");
		l.category = CASE_LABEL;
		l.case_int = case_int;
	} else {
		l.ident_str = tokvec[0].ident_str;
		++tokvec;
		l.category = IDENT_LABEL;
	}
	expect_and_consume(&tokvec, COLON,
	                   "colon of `default:`, `case VALUE:`, or `ident:`");

	struct Statement s = parse_statement(ptr_ps, &tokvec);

	struct SourceLabel *ptr_l = calloc(1, sizeof(struct SourceLabel));
	*ptr_l = l;
	push_vector(&s.labels, ptr_l);
	*ptr_tokvec = tokvec;
	return s;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xb8, %rsp
movq %rdx, %rbx
movq %rsi, %r15
movq %rdi, %r14
movq (%rdx), %rax
movl (%rax), %ecx
cmpl $0x40, %ecx
je 0x293c
cmpl $0x41, %ecx
jne 0x2971
addq $0x20, %rax
movq %rax, -0x30(%rbp)
xorl %r12d, %r12d
jmp 0x296f
addq $0x20, %rax
leaq -0x30(%rbp), %rsi
movq %rax, (%rsi)
leaq -0xe0(%rbp), %r12
movq %r12, %rdi
callq 0x78a2
leaq 0xaeef(%rip), %rdx      # 0xd84c
movq %r15, %rdi
movq %r12, %rsi
callq 0x4b4c
movl %eax, -0x34(%rbp)
pushq $0x1
popq %r12
jmp 0x2985
movq 0x8(%rax), %rcx
movq %rcx, -0x40(%rbp)
addq $0x20, %rax
movq %rax, -0x30(%rbp)
pushq $0x2
popq %r12
leaq 0xaec5(%rip), %rdx      # 0xd851
leaq -0x30(%rbp), %r13
pushq $0x1d
popq %rsi
movq %r13, %rdi
callq 0x8168
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x29f3
pushq $0x1
popq %rdi
pushq $0x10
popq %rsi
callq 0x10d0
movl %r12d, (%rax)
movl -0x34(%rbp), %ecx
movl %ecx, 0x4(%rax)
movq -0x40(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq %r14, %rdi
addq $0x378, %rdi            # imm = 0x378
movq %rax, %rsi
callq 0x4a57
movq (%r13), %rax
movq %rax, (%rbx)
movq %r14, %rax
addq $0xb8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/hsjoihs[P]c-compiler/parse_analyze_statement.c
// Function: integer_1
static struct Expr integer_1(void)
{
	struct Expr expr;
	expr.details.type = INT_TYPE();
	expr.int_value = 1;
	expr.category = INT_VALUE;

	return expr;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
callq 0x81b0
movl $0x1, 0xc8(%rbx)
movl $0x9, 0xa0(%rbx)
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/hsjoihs[P]c-compiler/parse_analyze_statement.c
// Function: declare_var_and_return_initializer
static struct Expr *declare_var_and_return_initializer(
    struct AnalyzerState *ptr_ps, const struct Type *ref_vartype,
    const char *str, const struct UntypedExpr *ptr_uexpr,
    struct Statement *ptr_statement)
{
	const struct Type vartype = *ref_vartype;
	add_local_var_to_scope(ptr_ps, ref_vartype, str);

	struct Statement s;
	s.category = DECLARATION_STATEMENT;
	s.declaration.type = vartype;
	s.declaration.ident_str = str;
	s.labels = init_vector();
	struct Statement *ptr_s = calloc(1, sizeof(struct Statement));
	*ptr_s = s;
	push_vector(&ptr_statement->statement_vector, ptr_s);

	struct Expr *ptr_expr = 0;
	if (ptr_uexpr) { /* initializer exists */
		struct UntypedExpr left_uexpr;
		left_uexpr.category = VAR;
		left_uexpr.var_name = str;

		struct UntypedExpr uexpr =
		    binary_op_untyped(&left_uexpr, ptr_uexpr, OP_EQ);
		struct Expr expr = typecheck_expression(ptr_ps, &uexpr);
		ptr_expr = calloc(1, sizeof(struct Expr));
		*ptr_expr = expr;
	}
	return ptr_expr;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x618, %rsp            # imm = 0x618
movq %r8, %r12
movq %rcx, -0x38(%rbp)
movq %rdx, %r15
movq %rsi, %rax
movq %rdi, %rdx
pushq $0xa
popq %rcx
leaq -0x88(%rbp), %r13
movq %r13, %rdi
rep  movsq (%rsi), %es:(%rdi)
movq %rdx, -0x30(%rbp)
movq %rdx, %rdi
movq %rax, %rsi
movq %r15, %rdx
callq 0x289c
leaq -0x318(%rbp), %rdi
pushq $0x14
popq %rcx
movq %r13, %rsi
rep  movsl (%rsi), %es:(%rdi)
callq 0x49e0
movq %rax, %r13
movq %rdx, %rbx
pushq $0x1
popq %rdi
movl $0x390, %esi            # imm = 0x390
callq 0x10d0
movq %rax, %r14
movl $0xa, (%rax)
leaq 0x4(%rax), %rdi
leaq -0x634(%rbp), %rsi
movl $0x36c, %edx            # imm = 0x36C
callq 0x1100
movq %r15, 0x370(%r14)
movq %r13, 0x378(%r14)
movq %rbx, 0x380(%r14)
addq $0x8, %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x4a57
movq -0x38(%rbp), %rdx
testq %rdx, %rdx
je 0x37d9
leaq -0x1c8(%rbp), %rsi
movl $0x3, 0x4(%rsi)
movq %r15, 0x28(%rsi)
leaq -0x128(%rbp), %rbx
pushq $0x17
popq %rcx
movq %rbx, %rdi
callq 0x7114
leaq -0x2c8(%rbp), %r14
movq %r14, %rdi
movq -0x30(%rbp), %rsi
movq %rbx, %rdx
callq 0x54d7
pushq $0x1
popq %rdi
movl $0x100, %esi            # imm = 0x100
callq 0x10d0
movq %rax, %rbx
movl $0x100, %edx            # imm = 0x100
movq %rax, %rdi
movq %r14, %rsi
callq 0x1100
jmp 0x37db
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x618, %rsp            # imm = 0x618
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/hsjoihs[P]c-compiler/codegen_expression.c
// Function: pass_args
static void pass_args(struct PrinterState *ptr_prs,
                      const struct Vector /*<Expr>*/ *ref_args)
{
	for (int counter = ref_args->length - 1; counter >= 0; counter--) {
		const struct Expr *ptr_expr_ = ref_args->vector[counter];

		print_expression(ptr_prs, ptr_expr_);
	}

	for (int counter = 0; counter < ref_args->length; counter++) {
		if (counter >= 6) {
			break;
		}
		const struct Expr *ptr_expr_ = ref_args->vector[counter];

		switch (size_of_basic(&ptr_expr_->details.type, "argument")) {
		case 1:
		case 4:
			gen_pop_to_reg_4byte(get_reg_name_from_arg_pos_4byte(counter));
			break;
		case 8:
			gen_pop_to_reg_8byte(get_reg_name_from_arg_pos_8byte(counter));
			break;
		default:
			unsupported("Unsupported width in function argument");
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
movl (%rsi), %r15d
testl %r15d, %r15d
jle 0x4445
movq 0x8(%rbx), %rax
movq -0x8(%rax,%r15,8), %rsi
decq %r15
movq %r14, %rdi
callq 0x3b8f
jmp 0x442a
xorl %r14d, %r14d
leaq 0x9f94(%rip), %r15      # 0xe3e3
cmpq $0x5, %r14
ja 0x44a3
movslq (%rbx), %rax
cmpq %rax, %r14
jge 0x44a3
movq 0x8(%rbx), %rax
movq (%rax,%r14,8), %rdi
movq %r15, %rsi
callq 0x81de
cmpl $0x1, %eax
je 0x447c
cmpl $0x8, %eax
je 0x448e
cmpl $0x4, %eax
jne 0x44ae
movl %r14d, %edi
callq 0xa676
movq %rax, %rdi
callq 0xa0ae
jmp 0x449e
movl %r14d, %edi
callq 0xa5ba
movq %rax, %rdi
callq 0xa0f4
incq %r14
jmp 0x444f
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x9f10(%rip), %rdi      # 0xe3c5
callq 0x8186
// File: /workspace/github_c_makefile_star2_O2/hsjoihs[P]c-compiler/codegen_expression.c
// Function: count_args
static int count_args(const struct Vector /*<Expr>*/ *ref_args)
{
	int ans = 0;
	for (int counter = ref_args->length - 1; counter >= 0; counter--) {
		ans++;
	}

	for (int counter = 0; counter < ref_args->length; counter++) {
		if (counter >= 6) {
			break;
		}
		const struct Expr *ptr_expr_ = ref_args->vector[counter];

		switch (size_of_basic(&ptr_expr_->details.type, "argument")) {
		case 1:
		case 4:
		case 8:
			ans--;
			break;
		default:
			unsupported("Unsupported width in function argument");
		}
	}
	return ans;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %r14
movl (%rdi), %eax
movl %eax, %ebx
sarl $0x1f, %ebx
notl %ebx
andl %eax, %ebx
xorl %r12d, %r12d
leaq 0x9f03(%rip), %r15      # 0xe3e3
movl $0x112, %r13d           # imm = 0x112
cmpq $0x5, %r12
ja 0x4516
cltq
cmpq %rax, %r12
jge 0x4516
movq 0x8(%r14), %rax
movq (%rax,%r12,8), %rdi
movq %r15, %rsi
callq 0x81de
cmpl $0x8, %eax
ja 0x452a
btl %eax, %r13d
jae 0x452a
incq %r12
movl (%r14), %eax
jmp 0x44e6
subl %r12d, %ebx
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x9e94(%rip), %rdi      # 0xe3c5
callq 0x8186