LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: toml_timestamp_at
toml_datum_t toml_timestamp_at(const toml_array_t *arr, int idx) {
  toml_timestamp_t ts;
  toml_datum_t ret;
  memset(&ret, 0, sizeof(ret));
  ret.ok = (0 == toml_rtots(toml_raw_at(arr, idx), &ts));
  if (ret.ok) {
    ret.ok = !!(ret.u.ts = MALLOC(sizeof(*ret.u.ts)));
    if (ret.ok) {
      *ret.u.ts = ts;
      if (ret.u.ts->year)
        ret.u.ts->year = &ret.u.ts->__buffer.year;
      if (ret.u.ts->month)
        ret.u.ts->month = &ret.u.ts->__buffer.month;
      if (ret.u.ts->day)
        ret.u.ts->day = &ret.u.ts->__buffer.day;
      if (ret.u.ts->hour)
        ret.u.ts->hour = &ret.u.ts->__buffer.hour;
      if (ret.u.ts->minute)
        ret.u.ts->minute = &ret.u.ts->__buffer.minute;
      if (ret.u.ts->second)
        ret.u.ts->second = &ret.u.ts->__buffer.second;
      if (ret.u.ts->millisec)
        ret.u.ts->millisec = &ret.u.ts->__buffer.millisec;
      if (ret.u.ts->z)
        ret.u.ts->z = ret.u.ts->__buffer.z;
    }
  }
  return ret;
}

// Assembly:
pushq %rbx
subq $0x70, %rsp
xorl %ebx, %ebx
testl %esi, %esi
js 0x3f93
cmpl %esi, 0x10(%rdi)
jle 0x3f93
movq 0x18(%rdi), %rax
movl %esi, %ecx
shlq $0x5, %rcx
movq 0x8(%rax,%rcx), %rdi
jmp 0x3f95
xorl %edi, %edi
leaq 0x8(%rsp), %rsi
callq 0x332c
testl %eax, %eax
je 0x3fad
xorl %edx, %edx
movl %ebx, %eax
addq $0x70, %rsp
popq %rbx
retq
pushq $0x68
popq %rdi
callq *0x415a(%rip)           # 0x8110
testq %rax, %rax
je 0x4053
movq %rax, %rdx
pushq $0xd
popq %rcx
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
rep  movsq (%rsi), %es:(%rdi)
cmpq $0x0, 0x28(%rax)
je 0x3fdb
movq %rdx, 0x28(%rdx)
cmpq $0x0, 0x30(%rdx)
je 0x3fea
leaq 0x4(%rdx), %rax
movq %rax, 0x30(%rdx)
cmpq $0x0, 0x38(%rdx)
je 0x3ff9
leaq 0x8(%rdx), %rax
movq %rax, 0x38(%rdx)
cmpq $0x0, 0x40(%rdx)
je 0x4008
leaq 0xc(%rdx), %rax
movq %rax, 0x40(%rdx)
cmpq $0x0, 0x48(%rdx)
je 0x4017
leaq 0x10(%rdx), %rax
movq %rax, 0x48(%rdx)
cmpq $0x0, 0x50(%rdx)
je 0x4026
leaq 0x14(%rdx), %rax
movq %rax, 0x50(%rdx)
cmpq $0x0, 0x58(%rdx)
je 0x4035
leaq 0x18(%rdx), %rax
movq %rax, 0x58(%rdx)
pushq $0x1
popq %rbx
cmpq $0x0, 0x60(%rdx)
je 0x3fa5
movq %rdx, %rax
addq $0x1c, %rax
movq %rax, 0x60(%rdx)
jmp 0x3fa5
xorl %edx, %edx
xorl %ebx, %ebx
jmp 0x3fa5
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: toml_string_in
toml_datum_t toml_string_in(const toml_table_t *arr, const char *key) {
  toml_datum_t ret;
  memset(&ret, 0, sizeof(ret));
  toml_raw_t raw = toml_raw_in(arr, key);
  if (raw) {
    ret.ok = (0 == toml_rtos(raw, &ret.u.s));
  }
  return ret;
}

// Assembly:
pushq %rbx
subq $0x10, %rsp
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
callq 0x31a6
testq %rax, %rax
je 0x4090
leaq 0x8(%rsp), %rbx
movq %rax, %rdi
movq %rbx, %rsi
callq 0x392f
movl %eax, %ecx
xorl %eax, %eax
testl %ecx, %ecx
sete %al
movq (%rbx), %rdx
jmp 0x4094
xorl %edx, %edx
xorl %eax, %eax
addq $0x10, %rsp
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: toml_bool_in
toml_datum_t toml_bool_in(const toml_table_t *arr, const char *key) {
  toml_datum_t ret;
  memset(&ret, 0, sizeof(ret));
  ret.ok = (0 == toml_rtob(toml_raw_in(arr, key), &ret.u.b));
  return ret;
}

// Assembly:
pushq %rbx
subq $0x10, %rsp
xorps %xmm0, %xmm0
leaq 0x8(%rsp), %rbx
movaps %xmm0, -0x8(%rbx)
callq 0x31a6
movq %rax, %rdi
movq %rbx, %rsi
callq 0x3651
xorl %ecx, %ecx
testl %eax, %eax
sete %cl
movq (%rbx), %rdx
movl %ecx, %eax
addq $0x10, %rsp
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: toml_double_in
toml_datum_t toml_double_in(const toml_table_t *arr, const char *key) {
  toml_datum_t ret;
  memset(&ret, 0, sizeof(ret));
  ret.ok = (0 == toml_rtod(toml_raw_in(arr, key), &ret.u.d));
  return ret;
}

// Assembly:
pushq %rbx
subq $0x10, %rsp
xorps %xmm0, %xmm0
leaq 0x8(%rsp), %rbx
movaps %xmm0, -0x8(%rbx)
callq 0x31a6
movq %rax, %rdi
movq %rbx, %rsi
callq 0x391b
xorl %ecx, %ecx
testl %eax, %eax
sete %cl
movq (%rbx), %rdx
movl %ecx, %eax
addq $0x10, %rsp
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: toml_timestamp_in
toml_datum_t toml_timestamp_in(const toml_table_t *arr, const char *key) {
  toml_timestamp_t ts;
  toml_datum_t ret;
  memset(&ret, 0, sizeof(ret));
  ret.ok = (0 == toml_rtots(toml_raw_in(arr, key), &ts));
  if (ret.ok) {
    ret.ok = !!(ret.u.ts = MALLOC(sizeof(*ret.u.ts)));
    if (ret.ok) {
      *ret.u.ts = ts;
      if (ret.u.ts->year)
        ret.u.ts->year = &ret.u.ts->__buffer.year;
      if (ret.u.ts->month)
        ret.u.ts->month = &ret.u.ts->__buffer.month;
      if (ret.u.ts->day)
        ret.u.ts->day = &ret.u.ts->__buffer.day;
      if (ret.u.ts->hour)
        ret.u.ts->hour = &ret.u.ts->__buffer.hour;
      if (ret.u.ts->minute)
        ret.u.ts->minute = &ret.u.ts->__buffer.minute;
      if (ret.u.ts->second)
        ret.u.ts->second = &ret.u.ts->__buffer.second;
      if (ret.u.ts->millisec)
        ret.u.ts->millisec = &ret.u.ts->__buffer.millisec;
      if (ret.u.ts->z)
        ret.u.ts->z = ret.u.ts->__buffer.z;
    }
  }
  return ret;
}

// Assembly:
subq $0x68, %rsp
callq 0x31a6
movq %rsp, %rsi
movq %rax, %rdi
callq 0x332c
testl %eax, %eax
je 0x4154
xorl %edx, %edx
xorl %eax, %eax
addq $0x68, %rsp
retq
pushq $0x68
popq %rdi
callq *0x3fb3(%rip)           # 0x8110
testq %rax, %rax
je 0x414b
movq %rax, %rdx
pushq $0xd
popq %rcx
movq %rsp, %rsi
movq %rax, %rdi
rep  movsq (%rsi), %es:(%rdi)
cmpq $0x0, 0x28(%rax)
je 0x417c
movq %rdx, 0x28(%rdx)
cmpq $0x0, 0x30(%rdx)
je 0x418b
leaq 0x4(%rdx), %rax
movq %rax, 0x30(%rdx)
cmpq $0x0, 0x38(%rdx)
je 0x419a
leaq 0x8(%rdx), %rax
movq %rax, 0x38(%rdx)
cmpq $0x0, 0x40(%rdx)
je 0x41a9
leaq 0xc(%rdx), %rax
movq %rax, 0x40(%rdx)
cmpq $0x0, 0x48(%rdx)
je 0x41b8
leaq 0x10(%rdx), %rax
movq %rax, 0x48(%rdx)
cmpq $0x0, 0x50(%rdx)
je 0x41c7
leaq 0x14(%rdx), %rax
movq %rax, 0x50(%rdx)
cmpq $0x0, 0x58(%rdx)
je 0x41d6
leaq 0x18(%rdx), %rax
movq %rax, 0x58(%rdx)
pushq $0x1
popq %rax
cmpq $0x0, 0x60(%rdx)
je 0x414f
movq %rdx, %rcx
addq $0x1c, %rcx
movq %rcx, 0x60(%rdx)
jmp 0x414f
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: normalize_key
static char *normalize_key(context_t *ctx, token_t strtok) {
  const char *sp = strtok.ptr;
  const char *sq = strtok.ptr + strtok.len;
  int lineno = strtok.lineno;
  char *ret;
  int ch = *sp;
  char ebuf[80];

  /* handle quoted string */
  if (ch == '\'' || ch == '\"') {
    /* if ''' or """, take 3 chars off front and back. Else, take 1 char off. */
    int multiline = 0;
    if (sp[1] == ch && sp[2] == ch) {
      sp += 3, sq -= 3;
      multiline = 1;
    } else
      sp++, sq--;

    if (ch == '\'') {
      /* for single quote, take it verbatim. */
      if (!(ret = STRNDUP(sp, sq - sp))) {
        e_outofmemory(ctx, FLINE);
        return 0;
      }
    } else {
      /* for double quote, we need to normalize */
      ret = norm_basic_str(sp, sq - sp, multiline, ebuf, sizeof(ebuf));
      if (!ret) {
        e_syntax(ctx, lineno, ebuf);
        return 0;
      }
    }

    /* newlines are not allowed in keys */
    if (strchr(ret, '\n')) {
      xfree(ret);
      e_badkey(ctx, lineno);
      return 0;
    }
    return ret;
  }

  /* for bare-key allow only this regex: [A-Za-z0-9_-]+ */
  const char *xp;
  for (xp = sp; xp != sq; xp++) {
    int k = *xp;
    if (isalnum(k))
      continue;
    if (k == '_' || k == '-')
      continue;
    e_badkey(ctx, lineno);
    return 0;
  }

  /* dup and return it */
  if (!(ret = STRNDUP(sp, sq - sp))) {
    e_outofmemory(ctx, FLINE);
    return 0;
  }
  return ret;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %rdi, %rbx
movq 0x98(%rsp), %r15
movslq 0xa0(%rsp), %r14
movl 0x94(%rsp), %ebp
movzbl (%r15), %eax
cmpl $0x22, %eax
je 0x422e
cmpl $0x27, %eax
jne 0x42b2
addq %r15, %r14
leaq 0x1(%r15), %rdi
xorl %edx, %edx
pushq $-0x1
popq %rcx
cmpb %al, 0x1(%r15)
jne 0x4253
cmpb %al, 0x2(%r15)
jne 0x4253
addq $0x3, %r15
pushq $0x1
popq %rdx
pushq $-0x3
popq %rcx
movq %r15, %rdi
addq %rcx, %r14
subq %rdi, %r14
cmpb $0x27, %al
jne 0x4276
movq %r14, %rsi
callq 0x4457
testq %rax, %rax
jne 0x428a
leaq 0x1033(%rip), %rsi      # 0x52a4
jmp 0x42fb
movq %rsp, %rcx
pushq $0x50
popq %r8
movl %r14d, %esi
callq 0x3b19
testq %rax, %rax
je 0x4305
movq %rax, %r14
pushq $0xa
popq %rsi
movq %rax, %rdi
callq 0x10c0
testq %rax, %rax
je 0x4315
movq %r14, %rdi
callq *0x3e72(%rip)           # 0x8118
movq %rbx, %rdi
movl %ebp, %esi
callq 0x4957
jmp 0x4312
xorl %r12d, %r12d
cmpq %r12, %r14
je 0x42e1
movsbq (%r15,%r12), %r13
callq 0x11f0
movq (%rax), %rax
testb $0x8, (%rax,%r13,2)
jne 0x42dc
movzbl %r13b, %eax
cmpl $0x2d, %eax
je 0x42dc
cmpl $0x5f, %eax
jne 0x42a6
incq %r12
jmp 0x42b5
movq %r15, %rdi
movq %r14, %rsi
callq 0x4457
movq %rax, %r14
testq %rax, %rax
jne 0x4315
leaq 0xfb4(%rip), %rsi       # 0x52af
movq %rbx, %rdi
callq 0x2567
jmp 0x4312
movq %rsp, %rdx
movq %rbx, %rdi
movl %ebp, %esi
callq 0x2e01
xorl %r14d, %r14d
movq %r14, %rax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: create_keytable_in_table
static toml_table_t *create_keytable_in_table(context_t *ctx, toml_table_t *tab,
                                              token_t keytok) {
  /* first, normalize the key to be used for lookup.
   * remember to free it if we error out.
   */
  char *newkey = normalize_key(ctx, keytok);
  if (!newkey)
    return 0;

  /* if key exists: error out */
  toml_table_t *dest = 0;
  if (check_key(tab, newkey, 0, 0, &dest)) {
    xfree(newkey); /* don't need this anymore */

    /* special case: if table exists, but was created implicitly ... */
    if (dest && dest->implicit) {
      /* we make it explicit now, and simply return it. */
      dest->implicit = false;
      return dest;
    }
    e_keyexists(ctx, keytok.lineno);
    return 0;
  }

  /* create a new table entry */
  int n = tab->ntab;
  toml_table_t **base;
  if (0 == (base = (toml_table_t **)expand_ptrarr((void **)tab->tab, n))) {
    xfree(newkey);
    e_outofmemory(ctx, FLINE);
    return 0;
  }
  tab->tab = base;

  if (0 == (base[n] = (toml_table_t *)CALLOC(1, sizeof(*base[n])))) {
    xfree(newkey);
    e_outofmemory(ctx, FLINE);
    return 0;
  }
  dest = tab->tab[tab->ntab++];

  /* save the key in the new table struct */
  dest->key = newkey;
  return dest;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rsi, %r14
movq %rdi, %rbx
movq 0x70(%rsp), %rax
movq %rax, 0x10(%rsp)
movaps 0x60(%rsp), %xmm0
movups %xmm0, (%rsp)
callq 0x41f4
testq %rax, %rax
je 0x4446
movq %rax, %r15
leaq 0x20(%rsp), %r8
andq $0x0, (%r8)
movq %r14, %rdi
movq %rax, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4972
testl %eax, %eax
je 0x43b2
movq %r15, %rdi
callq *0x3d94(%rip)           # 0x8118
movq 0x20(%rsp), %rax
testq %rax, %rax
je 0x439d
cmpb $0x1, 0x8(%rax)
jne 0x439d
movb $0x0, 0x8(%rax)
jmp 0x4448
leaq 0x60(%rsp), %rax
movl 0x4(%rax), %esi
movq %rbx, %rdi
callq 0x4a85
jmp 0x4446
movl 0x28(%r14), %ebp
movq 0x30(%r14), %rdi
movl %ebp, %esi
callq 0x4aa0
testq %rax, %rax
je 0x4417
movq %rax, %r12
movslq %ebp, %r13
movq %rax, 0x30(%r14)
pushq $0x38
popq %rdi
callq *0x3d37(%rip)           # 0x8110
testq %rax, %rax
je 0x4429
xorps %xmm0, %xmm0
movups %xmm0, 0x20(%rax)
movups %xmm0, 0x10(%rax)
movups %xmm0, (%rax)
andq $0x0, 0x30(%rax)
movq %rax, (%r12,%r13,8)
movq 0x30(%r14), %rax
movslq 0x28(%r14), %rcx
leal 0x1(%rcx), %edx
movl %edx, 0x28(%r14)
movq (%rax,%rcx,8), %rax
movq %rax, 0x20(%rsp)
movq %r15, (%rax)
movq 0x20(%rsp), %rax
jmp 0x4448
movq %r15, %rdi
callq *0x3cf8(%rip)           # 0x8118
leaq 0xea4(%rip), %rsi       # 0x52cb
jmp 0x443e
andq $0x0, (%r12,%r13,8)
movq %r15, %rdi
callq *0x3ce1(%rip)           # 0x8118
leaq 0xe98(%rip), %rsi       # 0x52d6
movq %rbx, %rdi
callq 0x2567
xorl %eax, %eax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: STRNDUP
static char *STRNDUP(const char *s, size_t n) {
  size_t len = strnlen(s, n);
  char *p = MALLOC(len + 1);
  if (p) {
    memcpy(p, s, len);
    p[len] = 0;
  }
  return p;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
callq 0x1110
movq %rax, %r14
leaq 0x1(%rax), %rdi
callq *0x3c9f(%rip)           # 0x8110
movq %rax, %r15
testq %rax, %rax
je 0x448c
movq %r15, %rdi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x1180
movb $0x0, (%r15,%r14)
movq %r15, %rax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: create_keyarray_in_table
static toml_array_t *create_keyarray_in_table(context_t *ctx, toml_table_t *tab,
                                              token_t keytok, char kind) {
  /* first, normalize the key to be used for lookup.
   * remember to free it if we error out.
   */
  char *newkey = normalize_key(ctx, keytok);
  if (!newkey)
    return 0;

  /* if key exists: error out */
  if (key_kind(tab, newkey)) {
    xfree(newkey); /* don't need this anymore */
    e_keyexists(ctx, keytok.lineno);
    return 0;
  }

  /* make a new array entry */
  int n = tab->narr;
  toml_array_t **base;
  if (0 == (base = (toml_array_t **)expand_ptrarr((void **)tab->arr, n))) {
    xfree(newkey);
    e_outofmemory(ctx, FLINE);
    return 0;
  }
  tab->arr = base;

  if (0 == (base[n] = (toml_array_t *)CALLOC(1, sizeof(*base[n])))) {
    xfree(newkey);
    e_outofmemory(ctx, FLINE);
    return 0;
  }
  toml_array_t *dest = tab->arr[tab->narr++];

  /* save the key in the new array struct */
  dest->key = newkey;
  dest->kind = kind;
  return dest;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movl %edx, %ebp
movq %rsi, %r14
movq %rdi, %rbx
movq 0x60(%rsp), %rax
movq %rax, 0x10(%rsp)
movaps 0x50(%rsp), %xmm0
movups %xmm0, (%rsp)
callq 0x41f4
testq %rax, %rax
je 0x4586
movq %rax, %r15
movq %r14, %rdi
movq %rax, %rsi
callq 0x4aef
testl %eax, %eax
je 0x44fd
leaq 0x50(%rsp), %r14
movq %r15, %rdi
callq *0x3c2c(%rip)           # 0x8118
movl 0x4(%r14), %esi
movq %rbx, %rdi
callq 0x4a85
jmp 0x4586
movl 0x18(%r14), %r13d
movq 0x20(%r14), %rdi
movl %r13d, %esi
callq 0x4aa0
testq %rax, %rax
je 0x4557
movq %rax, %r12
movslq %r13d, %r13
movq %rax, 0x20(%r14)
pushq $0x20
popq %rdi
callq *0x3beb(%rip)           # 0x8110
testq %rax, %rax
je 0x4569
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rax)
movups %xmm0, (%rax)
movq %rax, (%r12,%r13,8)
movq 0x20(%r14), %rax
movslq 0x18(%r14), %rcx
leal 0x1(%rcx), %edx
movl %edx, 0x18(%r14)
movq (%rax,%rcx,8), %rax
movq %r15, (%rax)
movzbl %bpl, %ecx
movl %ecx, 0x8(%rax)
jmp 0x4588
movq %r15, %rdi
callq *0x3bb8(%rip)           # 0x8118
leaq 0xda4(%rip), %rsi       # 0x530b
jmp 0x457e
andq $0x0, (%r12,%r13,8)
movq %r15, %rdi
callq *0x3ba1(%rip)           # 0x8118
leaq 0xd98(%rip), %rsi       # 0x5316
movq %rbx, %rdi
callq 0x2567
xorl %eax, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: parse_inline_table
static int parse_inline_table(context_t *ctx, toml_table_t *tab) {
  if (eat_token(ctx, LBRACE, 1, FLINE))
    return -1;

  for (;;) {
    if (ctx->tok.tok == NEWLINE)
      return e_syntax(ctx, ctx->tok.lineno,
                      "newline not allowed in inline table");

    /* until } */
    if (ctx->tok.tok == RBRACE)
      break;

    if (ctx->tok.tok != STRING)
      return e_syntax(ctx, ctx->tok.lineno, "expect a string");

    if (parse_keyval(ctx, tab))
      return -1;

    if (ctx->tok.tok == NEWLINE)
      return e_syntax(ctx, ctx->tok.lineno,
                      "newline not allowed in inline table");

    /* on comma, continue to scan for next keyval */
    if (ctx->tok.tok == COMMA) {
      if (eat_token(ctx, COMMA, 1, FLINE))
        return -1;
      continue;
    }
    break;
  }

  if (eat_token(ctx, RBRACE, 1, FLINE))
    return -1;

  tab->readonly = 1;

  return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r15
movq %rdi, %r14
leaq 0xb06(%rip), %rcx       # 0x53a0
pushq $0x4
popq %rsi
pushq $0x1
popq %rdx
callq 0x2e1f
pushq $-0x1
popq %rbx
testl %eax, %eax
jne 0x4946
leaq 0xb28(%rip), %r12       # 0x53df
pushq $0x2
popq %rbp
pushq $0x1
popq %r13
movl 0x20(%r14), %eax
cmpl $0x9, %eax
jne 0x48f5
movq %r14, %rdi
movq %r15, %rsi
callq 0x2adb
testl %eax, %eax
jne 0x4946
movl 0x20(%r14), %eax
cmpl $0x2, %eax
jne 0x490c
movq %r14, %rdi
movl %ebp, %esi
movl %r13d, %edx
movq %r12, %rcx
callq 0x2e1f
testl %eax, %eax
je 0x48be
jmp 0x4946
cmpl $0x5, %eax
je 0x4926
cmpl $0x6, %eax
je 0x4911
movl 0x24(%r14), %esi
leaq 0xac5(%rip), %rdx       # 0x53cf
jmp 0x491c
cmpl $0x6, %eax
jne 0x4926
movl 0x24(%r14), %esi
leaq 0xa8f(%rip), %rdx       # 0x53ab
movq %r14, %rdi
callq 0x2e01
jmp 0x4946
leaq 0xabd(%rip), %rcx       # 0x53ea
pushq $0x5
popq %rsi
pushq $0x1
popq %rdx
movq %r14, %rdi
callq 0x2e1f
testl %eax, %eax
jne 0x4946
movb $0x1, 0x9(%r15)
xorl %ebx, %ebx
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: check_key
static int check_key(toml_table_t *tab, const char *key,
                     toml_keyval_t **ret_val, toml_array_t **ret_arr,
                     toml_table_t **ret_tab) {
  int i;
  void *dummy;

  if (!ret_tab)
    ret_tab = (toml_table_t **)&dummy;
  if (!ret_arr)
    ret_arr = (toml_array_t **)&dummy;
  if (!ret_val)
    ret_val = (toml_keyval_t **)&dummy;

  *ret_tab = 0;
  *ret_arr = 0;
  *ret_val = 0;

  for (i = 0; i < tab->nkval; i++) {
    if (0 == strcmp(key, tab->kval[i]->key)) {
      *ret_val = tab->kval[i];
      return 'v';
    }
  }
  for (i = 0; i < tab->narr; i++) {
    if (0 == strcmp(key, tab->arr[i]->key)) {
      *ret_arr = tab->arr[i];
      return 'a';
    }
  }
  for (i = 0; i < tab->ntab; i++) {
    if (0 == strcmp(key, tab->tab[i]->key)) {
      *ret_tab = tab->tab[i];
      return 't';
    }
  }
  return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdx, %rbp
movq %rsi, %r14
movq %rdi, %r15
testq %r8, %r8
je 0x4992
andq $0x0, (%r8)
testq %rcx, %rcx
je 0x499b
andq $0x0, (%rcx)
movq %r8, 0x8(%rsp)
testq %rbp, %rbp
je 0x49aa
andq $0x0, (%rbp)
movq %rcx, 0x10(%rsp)
movl 0xc(%r15), %r13d
xorl %ebx, %ebx
testl %r13d, %r13d
cmovlel %ebx, %r13d
cmpq %rbx, %r13
je 0x49f2
movq 0x10(%r15), %rax
movq (%rax,%rbx,8), %r12
movq (%r12), %rsi
movq %r14, %rdi
callq 0x1140
incq %rbx
testl %eax, %eax
jne 0x49bc
pushq $0x76
popq %r13
testq %rbp, %rbp
je 0x4a73
movq %r12, (%rbp)
jmp 0x4a73
movl 0x18(%r15), %r13d
xorl %ebp, %ebp
testl %r13d, %r13d
cmovlel %ebp, %r13d
movq 0x10(%rsp), %r12
cmpq %rbp, %r13
je 0x4a32
movq 0x20(%r15), %rax
movq (%rax,%rbp,8), %rbx
movq (%rbx), %rsi
movq %r14, %rdi
callq 0x1140
incq %rbp
testl %eax, %eax
jne 0x4a04
pushq $0x61
popq %r13
testq %r12, %r12
je 0x4a73
movq %rbx, (%r12)
jmp 0x4a73
movl 0x28(%r15), %r12d
xorl %r13d, %r13d
testl %r12d, %r12d
cmovlel %r13d, %r12d
xorl %ebx, %ebx
cmpq %rbx, %r12
je 0x4a73
movq 0x30(%r15), %rax
movq (%rax,%rbx,8), %rbp
movq (%rbp), %rsi
movq %r14, %rdi
callq 0x1140
incq %rbx
testl %eax, %eax
jne 0x4a42
pushq $0x74
popq %r13
movq 0x8(%rsp), %rax
testq %rax, %rax
je 0x4a73
movq %rbp, (%rax)
movl %r13d, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: expand_ptrarr
static void **expand_ptrarr(void **p, int n) {
  void **s = MALLOC((n + 1) * sizeof(void *));
  if (!s)
    return 0;

  s[n] = 0;
  if (p) {
    memcpy(s, p, n * sizeof(void *));
    FREE(p);
  }
  return s;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
movslq %esi, %r15
leaq 0x8(,%r15,8), %rdi
callq *0x3657(%rip)           # 0x8110
movq %rax, %r14
testq %rax, %rax
je 0x4ae6
andq $0x0, (%r14,%r15,8)
testq %rbx, %rbx
je 0x4ae6
shlq $0x3, %r15
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x1180
movq %rbx, %rdi
callq *0x3632(%rip)           # 0x8118
movq %r14, %rax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: skip_newlines
static int skip_newlines(context_t *ctx, int isdotspecial) {
  while (ctx->tok.tok == NEWLINE) {
    if (next_token(ctx, isdotspecial))
      return -1;
    if (ctx->tok.eof)
      break;
  }
  return 0;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdi, %r14
xorl %ebx, %ebx
pushq $-0x1
popq %rbp
cmpl $0x6, 0x20(%r14)
jne 0x4b27
movq %r14, %rdi
xorl %esi, %esi
callq 0x2583
testl %eax, %eax
jne 0x4b25
cmpl $0x0, 0x34(%r14)
je 0x4b07
jmp 0x4b27
movl %ebp, %ebx
movl %ebx, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: create_table_in_array
static toml_table_t *create_table_in_array(context_t *ctx,
                                           toml_array_t *parent) {
  int n = parent->nitem;
  toml_arritem_t *base = expand_arritem(parent->item, n);
  if (!base) {
    e_outofmemory(ctx, FLINE);
    return 0;
  }
  toml_table_t *ret = (toml_table_t *)CALLOC(1, sizeof(toml_table_t));
  if (!ret) {
    e_outofmemory(ctx, FLINE);
    return 0;
  }
  base[n].tab = ret;
  parent->item = base;
  parent->nitem++;
  return ret;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
movl 0x10(%rsi), %ebp
movq 0x18(%rsi), %rdi
movl %ebp, %esi
callq 0x4bac
testq %rax, %rax
je 0x4b87
movq %rax, %r15
pushq $0x38
popq %rdi
callq *0x35b6(%rip)           # 0x8110
testq %rax, %rax
je 0x4b90
movslq %ebp, %rcx
xorps %xmm0, %xmm0
movups %xmm0, 0x20(%rax)
andq $0x0, 0x30(%rax)
movups %xmm0, 0x10(%rax)
movups %xmm0, (%rax)
shlq $0x5, %rcx
movq %rax, 0x18(%r15,%rcx)
movq %r15, 0x18(%rbx)
incl 0x10(%rbx)
jmp 0x4ba1
leaq 0x7fc(%rip), %rsi       # 0x538a
jmp 0x4b97
leaq 0x7fe(%rip), %rsi       # 0x5395
movq %r14, %rdi
callq 0x2567
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: expand_arritem
static toml_arritem_t *expand_arritem(toml_arritem_t *p, int n) {
  toml_arritem_t *pp = expand(p, n * sizeof(*p), (n + 1) * sizeof(*p));
  if (!pp)
    return 0;

  memset(&pp[n], 0, sizeof(pp[n]));
  return pp;
}

// Assembly:
pushq %rbx
movl %esi, %ebx
shll $0x5, %esi
leal 0x20(%rsi), %edx
callq 0x2fae
testq %rax, %rax
je 0x4bd2
movslq %ebx, %rcx
shlq $0x5, %rcx
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rax,%rcx)
movups %xmm0, (%rax,%rcx)
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: STRDUP
static char *STRDUP(const char *s) {
  int len = strlen(s);
  char *p = MALLOC(len + 1);
  if (p) {
    memcpy(p, s, len);
    p[len] = 0;
  }
  return p;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
callq 0x10b0
movq %rax, %r14
shlq $0x20, %r14
movabsq $0x100000000, %rdi      # imm = 0x100000000
addq %r14, %rdi
sarq $0x20, %rdi
callq *0x34f5(%rip)           # 0x8110
movq %rax, %r15
testq %rax, %rax
je 0x4c3a
sarq $0x20, %r14
movq %r15, %rdi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x1180
movb $0x0, (%r15,%r14)
movq %r15, %rax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: xfree_arr
static void xfree_arr(toml_array_t *p) {
  if (!p)
    return;

  xfree(p->key);
  const int n = p->nitem;
  for (int i = 0; i < n; i++) {
    toml_arritem_t *a = &p->item[i];
    if (a->val)
      xfree(a->val);
    else if (a->arr)
      xfree_arr(a->arr);
    else if (a->tab)
      xfree_tab(a->tab);
  }
  xfree(p->item);
  xfree(p);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
testq %rdi, %rdi
je 0x4cd4
movq %rdi, %rbx
movq (%rdi), %rdi
testq %rdi, %rdi
je 0x4c62
callq *0x34b6(%rip)           # 0x8118
movl 0x10(%rbx), %r14d
xorl %r15d, %r15d
testl %r14d, %r14d
cmovlel %r15d, %r14d
shlq $0x5, %r14
movq 0x18(%rbx), %rdi
cmpq %r15, %r14
je 0x4cbb
movq 0x8(%rdi,%r15), %rax
testq %rax, %rax
je 0x4c92
movq %rax, %rdi
callq *0x3488(%rip)           # 0x8118
jmp 0x4cb5
movq 0x10(%rdi,%r15), %rax
testq %rax, %rax
je 0x4ca6
movq %rax, %rdi
callq 0x4c43
jmp 0x4cb5
movq 0x18(%rdi,%r15), %rdi
testq %rdi, %rdi
je 0x4cb5
callq 0x2ff2
addq $0x20, %r15
jmp 0x4c74
testq %rdi, %rdi
je 0x4cc6
callq *0x3452(%rip)           # 0x8118
movq %rbx, %rdi
popq %rbx
popq %r14
popq %r15
jmpq *0x3444(%rip)           # 0x8118
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/cktan[P]tomlc99/toml.c
// Function: scan_digits
static int scan_digits(const char *p, int n) {
  int ret = 0;
  for (; n > 0 && isdigit(*p); n--, p++) {
    ret = 10 * ret + (*p - '0');
  }
  return n ? -1 : ret;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl %esi, %ebp
movq %rdi, %r14
xorl %r15d, %r15d
pushq $-0x1
popq %rbx
movl %esi, %r12d
testl %r12d, %r12d
jle 0x4d1c
callq 0x11f0
movq (%rax), %rcx
movsbq (%r14), %rax
testb $0x8, 0x1(%rcx,%rax,2)
je 0x4d25
imull $0xa, %r15d, %ecx
leal (%rcx,%rax), %r15d
addl $-0x30, %r15d
decl %r12d
incq %r14
jmp 0x4cf0
testl %ebp, %ebp
pushq $-0x1
popq %rbx
cmovnsl %r15d, %ebx
movl %ebx, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/jwang11[P]intel_avx_perf/matrix_int8.c
// Function: init
void init(void) {
  srand(time(0));
  for (int i = 0; i < row; i++) {
    for (int j = 0; j < col; j++) {
      mat[i][j] = (int8_t)(rand() % 32);
    }   
  }
  for (int j = 0; j < col; j++) {
    mutiplier[j] = (int8_t)(rand() % 32);
  }

  for (int i = 0; i < 32; i++) {
       op4_int16[i] = 1;
  }
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
xorl %r14d, %r14d
xorl %edi, %edi
callq 0x1070
movl %eax, %edi
callq 0x1060
leaq 0x2ec4(%rip), %r15      # 0x4070
pushq $0x20
popq %rbx
cmpq $0x40, %r14
je 0x11de
xorl %r12d, %r12d
cmpq $0x1000, %r12           # imm = 0x1000
je 0x11d2
callq 0x1080
cltd
idivl %ebx
movb %dl, (%r15,%r12)
incq %r12
jmp 0x11b8
incq %r14
addq $0x1000, %r15           # imm = 0x1000
jmp 0x11af
xorl %r14d, %r14d
leaq 0x42e88(%rip), %r15     # 0x44070
cmpq $0x1000, %r14           # imm = 0x1000
je 0x1202
callq 0x1080
cltd
idivl %ebx
movb %dl, (%r14,%r15)
incq %r14
jmp 0x11e8
xorl %eax, %eax
leaq 0x43e65(%rip), %rcx     # 0x45070
cmpq $0x40, %rax
je 0x121d
movw $0x1, (%rax,%rcx)
addq $0x2, %rax
jmp 0x120b
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/jwang11[P]intel_avx_perf/matrix_int8.c
// Function: calc_non
void calc_non(void) {
  for(int j = 0; j < row; j++) {
    int sum = 0;
    int8_t *vec = mat[j];

    for(int i = 0; i < col; i += 4) {
      int16_t hw_0 = (int16_t)(vec[i] * mutiplier[i] + vec[i + 1] * mutiplier[i + 1]);
      int16_t hw_1 = (int16_t)(vec[i + 2] * mutiplier[i + 2] + vec[i + 3] * mutiplier[i + 3]);
      sum += (int)hw_0 + (int)hw_1;
    }
    result[j] = sum;
  }
}

// Assembly:
pushq %rbx
leaq 0x2e42(%rip), %rax      # 0x4073
xorl %ecx, %ecx
leaq 0x42e36(%rip), %rdx     # 0x44070
leaq 0x43e6f(%rip), %rsi     # 0x450b0
cmpq $0x40, %rcx
je 0x12be
xorl %edi, %edi
xorl %r8d, %r8d
cmpq $0x1000, %rdi           # imm = 0x1000
jae 0x12af
movsbl -0x3(%rax,%rdi), %r9d
movsbl (%rdi,%rdx), %r10d
imull %r9d, %r10d
movsbl -0x2(%rax,%rdi), %r9d
movsbl 0x1(%rdi,%rdx), %r11d
imull %r9d, %r11d
addl %r10d, %r11d
movsbl -0x1(%rax,%rdi), %r9d
movsbl 0x2(%rdi,%rdx), %r10d
imull %r9d, %r10d
movsbl (%rax,%rdi), %r9d
movsbl 0x3(%rdi,%rdx), %ebx
imull %r9d, %ebx
addl %r10d, %ebx
movswl %r11w, %r9d
movswl %bx, %r10d
addl %r8d, %r9d
addl %r10d, %r9d
addq $0x4, %rdi
movl %r9d, %r8d
jmp 0x124c
movl %r8d, (%rsi,%rcx,4)
incq %rcx
addq $0x1000, %rax           # imm = 0x1000
jmp 0x1241
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/jwang11[P]intel_avx_perf/matrix_int8.c
// Function: calc_avx512
void calc_avx512(void) {
  #define VLEN (512/8/sizeof(int))
  const int col_aligned = col - col % VLEN;

  __m512i op0, op1;
  volatile __m512i tgt;

  __m512i v4_int16 = _mm512_load_si512(&op4_int16);

  for (int i = 0; i < row; i++) {
    int sum = 0;

    tgt = _mm512_setzero_si512();
    for (int j = 0; j < col_aligned; j += 64) {
      op0 = _mm512_load_si512(&mutiplier[j]);
      op1 = _mm512_load_si512(&mat[i][j]);
      __m512i vresult1 = _mm512_maddubs_epi16(op0, op1);
      __m512i vresult2 = _mm512_madd_epi16(vresult1, v4_int16);
      tgt = _mm512_add_epi32(vresult2, tgt);
    }

    int *presult = (int *)&tgt;
    for (int k = 0; k < VLEN; k++)
      sum += presult[k];

    for (int l = col_aligned; l < col; l++)
      sum += (int)(mat[i][l] * mutiplier[l]);

    result[i] = sum;
  }
  #undef VLEN
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
andq $-0x40, %rsp
subq $0x80, %rsp
leaq 0x2d9a(%rip), %rax      # 0x4070
vmovdqa64 0x43d90(%rip), %zmm0 # 0x45070
xorl %ecx, %ecx
vxorps %xmm1, %xmm1, %xmm1
leaq 0x42d83(%rip), %rdx     # 0x44070
leaq 0x43dbc(%rip), %rsi     # 0x450b0
cmpq $0x40, %rcx
je 0x1357
vmovaps %zmm1, (%rsp)
xorl %edi, %edi
cmpq $0x1000, %rdi           # imm = 0x1000
jae 0x1334
vmovdqa64 (%rdi,%rdx), %zmm2
vpmaddubsw (%rax,%rdi), %zmm2, %zmm2
vpmaddwd %zmm0, %zmm2, %zmm2
vpaddd (%rsp), %zmm2, %zmm2
vmovdqa64 %zmm2, (%rsp)
addq $0x40, %rdi
jmp 0x1303
xorl %edi, %edi
xorl %r8d, %r8d
cmpq $0x10, %rdi
je 0x1348
addl (%rsp,%rdi,4), %r8d
incq %rdi
jmp 0x1339
movl %r8d, (%rsi,%rcx,4)
incq %rcx
addq $0x1000, %rax           # imm = 0x1000
jmp 0x12f4
movq %rbp, %rsp
popq %rbp
vzeroupper
retq
// File: /workspace/github_c_makefile_star2_O2/jwang11[P]intel_avx_perf/matrix_int8.c
// Function: calc_avx512_vnni
void calc_avx512_vnni(void) {
  #define VLEN (512/8/sizeof(int))
  const int col_aligned = col - col % VLEN;

  __m512i op0, op1;
  volatile __m512i tgt;

  for (int i = 0; i < row; i++) {
    int sum = 0;

    tgt = _mm512_setzero_si512();
    for (int j = 0; j < col_aligned; j += 64) {
      op0 = _mm512_load_si512(&mutiplier[j]);
      op1 = _mm512_load_si512(&mat[i][j]);
      tgt = _mm512_dpbusds_epi32(tgt, op0, op1);
    }
    int *presult = (int *)&tgt;
    for (int k = 0; k < VLEN; k++)
      sum += presult[k];

    for (int l = col_aligned; l < col; l++)
      sum += (int)(mat[i][l] * mutiplier[l]);

    result[i] = sum;
  }
  #undef VLEN
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
andq $-0x40, %rsp
subq $0x80, %rsp
leaq 0x2cfb(%rip), %rax      # 0x4070
xorl %ecx, %ecx
vxorps %xmm0, %xmm0, %xmm0
leaq 0x42cee(%rip), %rdx     # 0x44070
leaq 0x43d27(%rip), %rsi     # 0x450b0
cmpq $0x40, %rcx
je 0x13e6
vmovaps %zmm0, (%rsp)
xorl %edi, %edi
cmpq $0x1000, %rdi           # imm = 0x1000
jae 0x13c3
vmovdqa64 (%rdi,%rdx), %zmm1
vmovdqa64 (%rsp), %zmm2
vpdpbusds (%rax,%rdi), %zmm1, %zmm2
vmovdqa64 %zmm2, (%rsp)
addq $0x40, %rdi
jmp 0x1398
xorl %edi, %edi
xorl %r8d, %r8d
cmpq $0x10, %rdi
je 0x13d7
addl (%rsp,%rdi,4), %r8d
incq %rdi
jmp 0x13c8
movl %r8d, (%rsi,%rcx,4)
incq %rcx
addq $0x1000, %rax           # imm = 0x1000
jmp 0x1389
movq %rbp, %rsp
popq %rbp
vzeroupper
retq
// File: /workspace/github_c_makefile_star2_O2/jwang11[P]intel_avx_perf/matrix_int8.c
// Function: main
int main() {
  init();
  TIME(LOOP(calc_non()));
  DEBUG
  TIME(LOOP(calc_avx512_vnni()));
  DEBUG
  TIME(LOOP(calc_avx512()));
  DEBUG
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
callq 0x118c
leaq 0xc07(%rip), %rdi       # 0x2008
callq 0x1030
callq 0x1040
movq %rax, %rbx
leaq 0xc04(%rip), %rdi       # 0x2019
movl $0x186a0, %ebp          # imm = 0x186A0
movl $0x186a0, %esi          # imm = 0x186A0
xorl %eax, %eax
callq 0x1050
subl $0x1, %ebp
jb 0x1432
callq 0x1229
jmp 0x1426
callq 0x1040
vcvtsi2ss %rax, %xmm0, %xmm0
vcvtsi2ss %rbx, %xmm1, %xmm1
vsubss %xmm1, %xmm0, %xmm0
vdivss 0xbb7(%rip), %xmm0, %xmm0 # 0x2004
vcvtss2sd %xmm0, %xmm0, %xmm0
leaq 0xbcb(%rip), %rdi       # 0x2023
movb $0x1, %al
callq 0x1050
leaq 0x43c4a(%rip), %r14     # 0x450b0
leaq 0xbd0(%rip), %rbx       # 0x203d
xorl %r15d, %r15d
cmpq $0x20, %r15
je 0x148a
movl (%r15,%r14), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1050
addq $0x4, %r15
jmp 0x1470
leaq 0xbde(%rip), %rdi       # 0x206f
callq 0x1030
leaq 0xba5(%rip), %rdi       # 0x2042
callq 0x1030
callq 0x1040
movq %rax, %rbx
leaq 0xb68(%rip), %rdi       # 0x2019
movl $0x186a0, %ebp          # imm = 0x186A0
movl $0x186a0, %esi          # imm = 0x186A0
xorl %eax, %eax
callq 0x1050
subl $0x1, %ebp
jb 0x14ce
callq 0x135f
jmp 0x14c2
callq 0x1040
vcvtsi2ss %rax, %xmm2, %xmm0
vcvtsi2ss %rbx, %xmm2, %xmm1
vsubss %xmm1, %xmm0, %xmm0
vdivss 0xb1b(%rip), %xmm0, %xmm0 # 0x2004
vcvtss2sd %xmm0, %xmm0, %xmm0
leaq 0xb2f(%rip), %rdi       # 0x2023
movb $0x1, %al
callq 0x1050
leaq 0xb3b(%rip), %rbx       # 0x203d
xorl %r15d, %r15d
cmpq $0x20, %r15
je 0x151f
movl (%r15,%r14), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1050
addq $0x4, %r15
jmp 0x1505
leaq 0xb49(%rip), %rdi       # 0x206f
callq 0x1030
leaq 0xb29(%rip), %rdi       # 0x205b
callq 0x1030
callq 0x1040
movq %rax, %rbx
leaq 0xad3(%rip), %rdi       # 0x2019
movl $0x186a0, %ebp          # imm = 0x186A0
movl $0x186a0, %esi          # imm = 0x186A0
xorl %eax, %eax
callq 0x1050
subl $0x1, %ebp
jb 0x1563
callq 0x12c0
jmp 0x1557
callq 0x1040
vcvtsi2ss %rax, %xmm2, %xmm0
vcvtsi2ss %rbx, %xmm2, %xmm1
vsubss %xmm1, %xmm0, %xmm0
vdivss 0xa86(%rip), %xmm0, %xmm0 # 0x2004
vcvtss2sd %xmm0, %xmm0, %xmm0
leaq 0xa9a(%rip), %rdi       # 0x2023
movb $0x1, %al
callq 0x1050
leaq 0xaa6(%rip), %rbx       # 0x203d
xorl %r15d, %r15d
cmpq $0x20, %r15
je 0x15b4
movl (%r15,%r14), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1050
addq $0x4, %r15
jmp 0x159a
leaq 0xab4(%rip), %rdi       # 0x206f
callq 0x1030
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/richarddurbin[P]hash10x/moshutils.c
// Function: depthHistogram
void depthHistogram (Moshset *ms, FILE *f)
{
  Array h = arrayCreate (256, U32) ;
  U32 i ;
  for (i = 1 ; i <= ms->max ; ++i)
    if (ms->depth[i] < arrayMax(h)) ++arr(h,ms->depth[i],U32) ; /* more efficient to check */
    else ++array(h,ms->depth[i],U32) ;
  for (i = 0 ; i < arrayMax(h) ; ++i)
    if (arr(h,i,U32)) fprintf (f, "DP\t%u\t%u\n", i, arr(h,i,U32)) ;
  arrayDestroy (h) ;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r15
pushq $0x4
popq %rsi
movl $0x100, %edi            # imm = 0x100
callq 0x4a24
movq %rax, %r14
pushq $0x1
popq %rbp
cmpl 0x40(%r15), %ebp
ja 0x13a0
movq 0x30(%r15), %rax
movl %ebp, %ecx
movzwl (%rax,%rcx,2), %esi
cmpl %esi, 0x18(%r14)
jle 0x1392
movslq 0x14(%r14), %rcx
movl %esi, %eax
imulq %rcx, %rax
addq 0x8(%r14), %rax
jmp 0x139a
movq %r14, %rdi
callq 0x4cbc
incl (%rax)
incl %ebp
jmp 0x136c
leaq 0x4c5d(%rip), %r15      # 0x6004
xorl %ebp, %ebp
cmpl 0x18(%r14), %ebp
jae 0x13d4
movq 0x8(%r14), %rax
movl 0x14(%r14), %ecx
imull %ebp, %ecx
movl (%rax,%rcx), %ecx
testl %ecx, %ecx
je 0x13d0
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
xorl %eax, %eax
callq 0x1120
incl %ebp
jmp 0x13a9
movq %r14, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x4b64
// File: /workspace/github_c_makefile_star2_O2/richarddurbin[P]hash10x/moshutils.c
// Function: reportDepths
void reportDepths (Moshset *ms, Array ma, FILE *f)
{
  U32 i, j, index ;
  for (i = 1 ; i <= ms->max ; ++i)
    { fprintf (f, "MH\t%llx\t%d\t%u", ms->value[i], msCopy(ms,i), ms->depth[i]) ;
      for (j = 0 ; j < arrayMax(ma) ; ++j)
	if ((index = moshsetIndexFind (arr(ma,j,Moshset*), ms->value[i], FALSE)))
	  fprintf (f, "\t%u", arr(ma,j,Moshset*)->depth[index]) ;
	else
	  fprintf (f, "\t0") ;
      fputc ('\n', f) ;
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
pushq $0x1
popq %rax
leaq 0x4c14(%rip), %r13      # 0x6018
cmpl 0x40(%r15), %eax
ja 0x14c6
movl %eax, 0x4(%rsp)
movl %eax, %ebp
movq 0x28(%r15), %rax
movq 0x30(%r15), %rsi
movq (%rax,%rbp,8), %rdx
movq 0x38(%r15), %rax
movzbl (%rax,%rbp), %ecx
andl $0x3, %ecx
movzwl (%rsi,%rbp,2), %r8d
xorl %r12d, %r12d
movq %rbx, %rdi
leaq 0x4bd1(%rip), %rsi      # 0x600e
xorl %eax, %eax
callq 0x1120
cmpl 0x18(%r14), %r12d
jae 0x14b0
movq 0x8(%r14), %rax
movl 0x14(%r14), %ecx
imull %r12d, %ecx
movq (%rax,%rcx), %rdi
movq 0x28(%r15), %rax
movq (%rax,%rbp,8), %rsi
xorl %edx, %edx
callq 0x38d7
testl %eax, %eax
je 0x1496
movq 0x8(%r14), %rcx
movl 0x14(%r14), %edx
imull %r12d, %edx
movq (%rcx,%rdx), %rcx
movq 0x30(%rcx), %rcx
movl %eax, %eax
movzwl (%rcx,%rax,2), %edx
movq %rbx, %rdi
movq %r13, %rsi
xorl %eax, %eax
callq 0x1120
jmp 0x14ab
leaq 0x4b7f(%rip), %rdi      # 0x601c
pushq $0x2
popq %rsi
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x1220
incl %r12d
jmp 0x1444
pushq $0xa
popq %rdi
movq %rbx, %rsi
callq 0x10e0
movl 0x4(%rsp), %eax
incl %eax
jmp 0x1404
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/richarddurbin[P]hash10x/moshutils.c
// Function: addSequenceFile
static BOOL addSequenceFile (Moshset *ms, char *filename, BOOL is10x)
{
  char *seq ;			/* ignore the name for now */
  int len ;
  U64 nSeq = 0, totLen = 0, totHash = 0 ;

  dna2indexConv['N'] = dna2indexConv['n'] = 0 ; /* to get 2-bit encoding */
  SeqIO *si = seqIOopen (filename, dna2indexConv, FALSE) ; /* false for no qualities */
  if (!si) return FALSE ;
  while (seqIOread (si))
    { ++nSeq ; totLen += si->seqLen ;
      if (is10x && (nSeq & 0x1)) totHash += addSequence (ms, sqioSeq(si)+23, si->seqLen-23) ;
      else totHash += addSequence (ms, sqioSeq(si), si->seqLen) ;
    }
  seqIOclose (si) ;
  fprintf (outFile, "added %llu sequences total length %llu total hashes %llu, new max %u\n",
	   nSeq, totLen, totHash, ms->max) ;
  return TRUE ;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %edx, 0x4(%rsp)
movq %rsi, %rax
leaq 0x8409(%rip), %rsi      # 0xa740
andl $0x0, 0x1b8(%rsi)
movq %rdi, %rbx
andl $0x0, 0x138(%rsi)
xorl %ebp, %ebp
movq %rax, %rdi
xorl %edx, %edx
callq 0x249c
testq %rax, %rax
je 0x2409
movq %rax, %r13
xorl %r14d, %r14d
xorl %r15d, %r15d
xorl %r12d, %r12d
movq %r13, %rdi
callq 0x2654
testb %al, %al
je 0x23dc
cmpb $0x0, 0x4(%rsp)
setne %al
movslq 0x18(%r13), %rbp
testb $0x1, %r14b
sete %cl
andb %al, %cl
movl (%r13), %eax
cmpb $0x1, %cl
jne 0x239e
cmpl $0x2, %eax
jne 0x23a9
movq 0x70(%r13), %rsi
jmp 0x23b1
cmpl $0x2, %eax
jne 0x23bd
movq 0x70(%r13), %rsi
jmp 0x23c5
movslq 0x24(%r13), %rsi
addq 0x50(%r13), %rsi
addq $0x17, %rsi
leal -0x17(%rbp), %edx
movq %rbx, %rdi
jmp 0x23ca
movslq 0x24(%r13), %rsi
addq 0x50(%r13), %rsi
movq %rbx, %rdi
movl %ebp, %edx
callq 0x241a
addq %rbp, %r15
cltq
addq %rax, %r12
incq %r14
jmp 0x2369
movq %r13, %rdi
callq 0x2623
movq 0x8f65(%rip), %rdi      # 0xb350
movl 0x40(%rbx), %r9d
leaq 0x441a(%rip), %rsi      # 0x6810
movq %r14, %rdx
movq %r15, %rcx
movq %r12, %r8
xorl %eax, %eax
callq 0x1120
movb $0x1, %bpl
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/richarddurbin[P]hash10x/moshutils.c
// Function: addSequence
static int addSequence (Moshset *ms, char *s, int len) /* return number of hashes */
{
  int nHash = 0 ;
  SeqhashRCiterator *mi = moshRCiterator (ms->hasher, s, len) ;
  U64 hash ; int pos ;
  while (moshRCnext (mi, &hash, &pos, 0))
    { U32 index = moshsetIndexFind (ms, hash, TRUE) ;
      U16 *di = &ms->depth[index] ; ++*di ; if (!*di) *di = U16MAX ;
      ++nHash ;
    }
  return nHash ;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdi, %rbx
movq (%rdi), %rdi
callq 0x3545
movq %rax, %r14
xorl %r15d, %r15d
leaq 0x8(%rsp), %r12
leaq 0x14(%rsp), %r13
pushq $0x1
popq %rbp
movq %r14, %rdi
movq %r12, %rsi
movq %r13, %rdx
xorl %ecx, %ecx
callq 0x366d
testb %al, %al
je 0x2488
movq 0x8(%rsp), %rsi
movq %rbx, %rdi
movl %ebp, %edx
callq 0x38d7
movq 0x30(%rbx), %rcx
movl %eax, %eax
movzwl (%rcx,%rax,2), %edx
movl $0xffff, %esi           # imm = 0xFFFF
incw %dx
je 0x247f
movl %edx, %esi
movw %si, (%rcx,%rax,2)
incl %r15d
jmp 0x2446
movl %r15d, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O2/richarddurbin[P]hash10x/seqio.c
// Function: seqIOclose
void seqIOclose (SeqIO *si)
{ free (si->buf) ;
  if (si->seqBuf) free (si->seqBuf) ; if (si->qualBuf) free (si->qualBuf) ;
  gzclose (si->f) ;
  free (si) ;
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
movq 0x50(%rdi), %rdi
callq 0x1040
movq 0x70(%rbx), %rdi
callq 0x1040
movq 0x78(%rbx), %rdi
callq 0x1040
movq 0x48(%rbx), %rdi
callq 0x1030
movq %rbx, %rdi
popq %rbx
jmp 0x1040
// File: /workspace/github_c_makefile_star2_O2/richarddurbin[P]hash10x/seqio.c
// Function: bufRefill
static int bufRefill (SeqIO *si)
{ si->b -= si->recStart ;		/* will be position after move */
  memmove (si->buf, si->buf + si->recStart, si->b - si->buf) ;
  si->idStart -= si->recStart ; si->descStart -= si->recStart ; /* adjust all the offsets */
  si->seqStart -= si->recStart ; si->qualStart -= si->recStart ;
  si->recStart = 0 ;
  si->nb = gzread (si->f, si->b, si->buf + si->bufSize - si->b) ;
  return si->nb ;
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
movslq 0x40(%rdi), %rsi
movq 0x50(%rdi), %rdi
movq 0x58(%rbx), %rdx
subq %rsi, %rdx
movq %rdx, 0x58(%rbx)
addq %rdi, %rsi
subq %rdi, %rdx
callq 0x11a0
movdqu 0x1c(%rbx), %xmm0
movd 0x40(%rbx), %xmm1
pshufd $0x0, %xmm1, %xmm1      # xmm1 = xmm1[0,0,0,0]
psubd %xmm1, %xmm0
movdqu %xmm0, 0x1c(%rbx)
andl $0x0, 0x40(%rbx)
movq 0x48(%rbx), %rdi
movq 0x58(%rbx), %rsi
movl 0x50(%rbx), %edx
addl 0x34(%rbx), %edx
subl %esi, %edx
callq 0x1110
movl %eax, 0x38(%rbx)
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/richarddurbin[P]hash10x/seqio.c
// Function: sqioSeqUnpack
void sqioSeqUnpack (U8 *u, char *s, int len) /* uncompress (len+3)/4 u into s */
{
  int i ;
  while (len > 4)
    { for (i = 4 ; i-- ; ) { s[i] = (*u & 0x3) ; *u >>= 2 ; }
      len -= 4 ; ++u ; s += 4 ;
    }
  if (len) for (i = len ; --i ; ) { s[i] = (*u & 0x3) ; *u >>= 2 ; }
}

// Assembly:
movslq %edx, %rcx
pushq $0x4
popq %rdx
movq %rcx, %rax
movq %rsi, %r8
cmpl $0x5, %eax
jl 0x2eef
movq %rdx, %r10
movq %rdx, %r9
subq $0x1, %r9
jb 0x2ee2
movb (%rdi), %r11b
andb $0x3, %r11b
movb %r11b, -0x1(%r8,%r10)
shrb $0x2, (%rdi)
movq %r9, %r10
jmp 0x2ec8
addq $-0x4, %rax
incq %rdi
addq $0x4, %r8
jmp 0x2ebd
testl %eax, %eax
je 0x2f11
addq %rcx, %rsi
pushq $-0x1
popq %rcx
movq %rax, %rdx
addq %rcx, %rdx
je 0x2f11
movb (%rdi), %dl
andb $0x3, %dl
movb %dl, (%rsi,%rcx)
shrb $0x2, (%rdi)
decq %rcx
jmp 0x2ef9
retq
// File: /workspace/github_c_makefile_star2_O2/richarddurbin[P]hash10x/seqio.c
// Function: sqioQualUnpack
void sqioQualUnpack (U8 *u, char *q, int len, int thresh) /* uncompress (len+7)/8 u into q */
{
  int i ;
  while (len > 8)
    { for (i = 8 ; i-- ; ) { q[i] = (*u & 0x1) ? thresh : 0 ; *u >>= 1 ; }
      len -= 8 ; ++u ; q += 8 ;
    }
  if (len) for (i = len ; --i ; ) { q[i] = (*u & 0x1) ? thresh : 0 ; *u >>= 1 ; }
}

// Assembly:
pushq %rbx
movslq %edx, %rdx
movabsq $0x8, %r8
movq %rdx, %rax
movq %rsi, %r9
cmpl $0x9, %eax
jl 0x2f59
movq %r8, %r11
movq %r8, %r10
subq $0x1, %r10
jb 0x2f4c
movb (%rdi), %bl
andb $0x1, %bl
negb %bl
andb %cl, %bl
movb %bl, -0x1(%r9,%r11)
shrb (%rdi)
movq %r10, %r11
jmp 0x2f31
addq $-0x8, %rax
incq %rdi
addq $0x8, %r9
jmp 0x2f26
testl %eax, %eax
je 0x2f8a
addq %rdx, %rsi
movabsq $-0x1, %rdx
movq %rax, %r8
addq %rdx, %r8
je 0x2f8a
movb (%rdi), %r8b
andb $0x1, %r8b
negb %r8b
andb %cl, %r8b
movb %r8b, (%rsi,%rdx)
shrb (%rdi)
decq %rdx
jmp 0x2f6a
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/richarddurbin[P]hash10x/seqio.c
// Function: sqioSeqPack
void sqioSeqPack (char *s, U8 *u, int len) /* compress s into (len+3)/4 u  */
{
  int i ;
  while (len > 4)
    { *u = 0 ; for (i = 0 ; i < 4 ; ++i) *u = (*u << 2) | dna2indexConv[*s++] ;
      len -= 4 ; ++u ;
    }
  if (len) { *u = 0 ; for (i = 0 ; i < len ; ++i) *u = (*u << 2) | dna2indexConv[*s++] ; }
}

// Assembly:
leaq 0x77ad(%rip), %rax      # 0xa740
cmpl $0x5, %edx
jl 0x2fc9
movb $0x0, (%rsi)
xorl %ecx, %ecx
xorl %r8d, %r8d
cmpl $0x4, %ecx
je 0x2fbe
movzbl %r8b, %r8d
shll $0x2, %r8d
movsbq (%rdi,%rcx), %r9
orl (%rax,%r9,4), %r8d
movb %r8b, (%rsi)
incq %rcx
jmp 0x2fa0
addl $-0x4, %edx
incq %rsi
addq %rcx, %rdi
jmp 0x2f93
testl %edx, %edx
je 0x2ff2
movb $0x0, (%rsi)
xorl %ecx, %ecx
xorl %r8d, %r8d
cmpl %edx, %ecx
jge 0x2ff2
movzbl %r8b, %r8d
shll $0x2, %r8d
movsbq (%rdi,%rcx), %r9
orl (%rax,%r9,4), %r8d
movb %r8b, (%rsi)
incq %rcx
jmp 0x2fd5
retq
// File: /workspace/github_c_makefile_star2_O2/richarddurbin[P]hash10x/seqio.c
// Function: sqioQualPack
void sqioQualPack (char *q, U8 *u, int len, int thresh) /* compress q into (len+7)/8 u  */
{
  int i ;
  while (len > 8)
    { *u = 0 ; for (i = 0 ; i < 8 ; ++i) { if (*q++ >= thresh) *u |= 1 ; *u <<= 1 ; }
      len -= 8 ; ++u ;
    }
  if (len) { *u = 0 ; for (i = 0 ; i < len ; ++i) { if (*q++ >= thresh) *u |= 1 ; *u <<= 1 ; } }
}

// Assembly:
cmpl $0x9, %edx
jl 0x302b
movb $0x0, (%rsi)
xorl %eax, %eax
xorl %r8d, %r8d
cmpl $0x8, %eax
je 0x301f
movsbl (%rdi,%rax), %r9d
cmpl %ecx, %r9d
setge %r9b
orb %r9b, %r8b
addb %r8b, %r8b
movb %r8b, (%rsi)
incq %rax
jmp 0x3000
addq $0x8, %rdi
addl $-0x8, %edx
incq %rsi
jmp 0x2ff3
testl %edx, %edx
je 0x3055
movb $0x0, (%rsi)
xorl %eax, %eax
xorl %r8d, %r8d
cmpl %edx, %eax
jge 0x3055
movsbl (%rdi,%rax), %r9d
cmpl %ecx, %r9d
setge %r9b
orb %r9b, %r8b
addb %r8b, %r8b
movb %r8b, (%rsi)
incq %rax
jmp 0x3037
retq
nop
// File: /workspace/github_c_makefile_star2_O2/richarddurbin[P]hash10x/seqhash.c
// Function: seqhashCreate
Seqhash *seqhashCreate (int k, int w)
{
  assert (sizeof (U64) == 8) ;
  Seqhash *sh = new0 (1, Seqhash) ;
  sh->k = k ; if (k < 1 || k >= 32) die ("seqhash k %d must be between 1 and 32\n", k) ;
  sh->w = w ; if (w < 1) die ("seqhash w %d must be positive\n", w) ;
  sh->mask = ((U64)1 << (2*k)) - 1 ;
  int i ;
  
  sh->factor1 = (random() << 32) | random() | 0x01 ;
  sh->shift1 = 64 - 2*k ;
  sh->factor2 = (random() << 32) | random() | 0x01 ;
  sh->shift2 = 2*k ;
  for (i = 0 ; i < 4 ; ++i) { sh->patternRC[i] = (3-i) ; sh->patternRC[i] <<= 2*(k-1) ; }
  return sh ;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebp
movl %edi, %r14d
pushq $0x1
popq %rdi
pushq $0x48
popq %rsi
callq 0x5280
movq %rax, %rbx
movl %r14d, (%rax)
leal -0x20(%r14), %eax
cmpl $-0x20, %eax
ja 0x308f
leaq 0x38f6(%rip), %rdi      # 0x697b
movl %r14d, %esi
xorl %eax, %eax
callq 0x5198
movl %ebp, 0x4(%rbx)
testl %ebp, %ebp
jg 0x30a6
leaq 0x3905(%rip), %rdi      # 0x69a2
movl %ebp, %esi
xorl %eax, %eax
callq 0x5198
leal (%r14,%r14), %ebp
pushq $-0x1
popq %rax
movl %ebp, %ecx
shlq %cl, %rax
notq %rax
movq %rax, 0x8(%rbx)
callq 0x1160
movq %rax, %r15
shlq $0x20, %r15
callq 0x1160
orq %r15, %rax
orq $0x1, %rax
movq %rax, 0x18(%rbx)
pushq $0x40
popq %rax
subl %ebp, %eax
movl %eax, 0x10(%rbx)
callq 0x1160
movq %rax, %r15
shlq $0x20, %r15
callq 0x1160
orq %r15, %rax
orq $0x1, %rax
movq %rax, 0x20(%rbx)
movl %ebp, 0x14(%rbx)
movq %rbx, %rax
addq $0x28, %rax
leal -0x2(,%r14,2), %ecx
pushq $0x3
popq %rdx
cmpq $-0x1, %rdx
je 0x3126
movq %rdx, %rsi
shlq %cl, %rsi
movq %rsi, (%rax)
decq %rdx
addq $0x8, %rax
jmp 0x310e
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/richarddurbin[P]hash10x/seqhash.c
// Function: seqhashRead
Seqhash *seqhashRead (FILE *f)
{ Seqhash *sh = new (1, Seqhash) ;
  char name[8] ;
  if (fread (name,8,1,f) != 1) die ("failed to read seqhash header") ;
  if (strcmp (name, "SQHSHv1")) die ("seqhash read mismatch") ;
  if (fread (sh,sizeof(Seqhash),1,f) != 1) die ("failed to read seqhash") ;
  return sh ;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %r14
pushq $0x48
popq %rdi
callq 0x5258
movq %rax, %rbx
movq %rsp, %rdi
pushq $0x8
popq %rsi
pushq $0x1
popq %rdx
movq %r14, %rcx
callq 0x1070
cmpq $0x1, %rax
je 0x31d2
leaq 0x3835(%rip), %rdi      # 0x6a00
xorl %eax, %eax
callq 0x5198
movabsq $0x31764853485153, %rax # imm = 0x31764853485153
cmpq %rax, (%rsp)
je 0x31f0
leaq 0x3835(%rip), %rdi      # 0x6a1e
xorl %eax, %eax
callq 0x5198
pushq $0x48
popq %rsi
pushq $0x1
popq %rdx
movq %rbx, %rdi
movq %r14, %rcx
callq 0x1070
cmpq $0x1, %rax
je 0x3215
leaq 0x3826(%rip), %rdi      # 0x6a34
xorl %eax, %eax
callq 0x5198
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
retq