// File: /workspace/github_c_makefile_star2_O0/tabemann[P]attoforth/src/runtime/inner.c
// Function: af_global_init
af_global_t* af_global_init(int argc, char** argv) {
  af_global_t* global = malloc(sizeof(af_global_t));
  if(!global) {
    return NULL;
  }
  if(!(global->forth_wordlist = malloc(sizeof(af_wordlist_t)))) {
    free(global);
    return NULL;
  }
  if(!(global->io_wordlist = malloc(sizeof(af_wordlist_t)))) {
    free(global);
    return NULL;
  }
  if(!(global->task_wordlist = malloc(sizeof(af_wordlist_t)))) {
    free(global);
    return NULL;
  }
  global->first_task = NULL;
  global->current_task = NULL;
  global->tasks_active_count = 0;
  global->task_count = 0;
  if(!af_cond_init(&global->cond)) {
    free(global->task_wordlist);
    free(global->io_wordlist);
    free(global->forth_wordlist);
    free(global);
    return NULL;
  }
  if(pthread_mutex_init(&global->mutex, NULL)) {
    af_cond_destroy(&global->cond);
    free(global->task_wordlist);
    free(global->io_wordlist);
    free(global->forth_wordlist);
    free(global);
    return NULL;
  }
  global->first_of_all_words = NULL;
  global->forth_wordlist->first_word = NULL;
  global->io_wordlist->first_word = NULL;
  global->task_wordlist->first_word = NULL;
  global->default_data_stack_count = 1024;
  global->default_float_stack_count = 1024;
  global->default_return_stack_count = 1024;
  global->default_data_stack_base_room_count = 16;
  global->default_float_stack_base_room_count = 16;
  global->default_return_stack_base_room_count = 16;
  global->min_guaranteed_data_space_size = 1024;
  global->default_data_space_size = 130048;
  global->default_cycles_before_yield = 1024 * 16;
  global->max_cycles_before_yield = 1024 * 64;
  global->max_extra_cycles = 1024 * 128;
  global->default_wordlist_order_max_count = 128;
  global->task_local_space_size = 512;
  global->task_local_space_size_allocated = 0;
  global->do_trace = FALSE;
  if(!(global->default_task_local_space_base =
       malloc(global->task_local_space_size * sizeof(af_byte_t)))) {
    pthread_mutex_destroy(&global->mutex);
    af_cond_destroy(&global->cond);
    free(global->task_wordlist);
    free(global->io_wordlist);
    free(global->forth_wordlist);
    free(global);
    return NULL;
  }
  global->builtin_literal_runtime = NULL;
  global->builtin_f_literal_runtime = NULL;
  global->builtin_exit = NULL;
  global->default_abort = NULL;
  if(!(af_io_init(&global->io, global))) {
    free(global->default_task_local_space_base);
    pthread_mutex_destroy(&global->mutex);
    af_cond_destroy(&global->cond);
    free(global->task_wordlist);
    free(global->io_wordlist);
    free(global->forth_wordlist);
    free(global);
    return NULL;
  }
  global->argc = argc;
  global->argv = (af_byte_t**)argv;
  global->atomic_task = NULL;
  global->handler_task = NULL;
  return global;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movl %edi, -0xc(%rbp)
movq %rsi, -0x18(%rbp)
movl $0x228, %edi            # imm = 0x228
callq 0x21f0
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x2461
movq $0x0, -0x8(%rbp)
jmp 0x28a0
movl $0x8, %edi
callq 0x21f0
movq -0x20(%rbp), %rcx
movq %rax, 0x1b8(%rcx)
cmpq $0x0, %rax
jne 0x2492
movq -0x20(%rbp), %rdi
callq 0x2040
movq $0x0, -0x8(%rbp)
jmp 0x28a0
movl $0x8, %edi
callq 0x21f0
movq -0x20(%rbp), %rcx
movq %rax, 0x1c0(%rcx)
cmpq $0x0, %rax
jne 0x24c3
movq -0x20(%rbp), %rdi
callq 0x2040
movq $0x0, -0x8(%rbp)
jmp 0x28a0
movl $0x8, %edi
callq 0x21f0
movq -0x20(%rbp), %rcx
movq %rax, 0x1c8(%rcx)
cmpq $0x0, %rax
jne 0x24f4
movq -0x20(%rbp), %rdi
callq 0x2040
movq $0x0, -0x8(%rbp)
jmp 0x28a0
movq -0x20(%rbp), %rax
movq $0x0, (%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x8(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x10(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x18(%rax)
movq -0x20(%rbp), %rdi
addq $0x20, %rdi
callq 0x16bc0
cmpq $0x0, %rax
jne 0x257c
movq -0x20(%rbp), %rax
movq 0x1c8(%rax), %rdi
callq 0x2040
movq -0x20(%rbp), %rax
movq 0x1c0(%rax), %rdi
callq 0x2040
movq -0x20(%rbp), %rax
movq 0x1b8(%rax), %rdi
callq 0x2040
movq -0x20(%rbp), %rdi
callq 0x2040
movq $0x0, -0x8(%rbp)
jmp 0x28a0
movq -0x20(%rbp), %rdi
addq $0x80, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x22c0
cmpl $0x0, %eax
je 0x25e8
movq -0x20(%rbp), %rdi
addq $0x20, %rdi
callq 0x16c40
movq -0x20(%rbp), %rax
movq 0x1c8(%rax), %rdi
callq 0x2040
movq -0x20(%rbp), %rax
movq 0x1c0(%rax), %rdi
callq 0x2040
movq -0x20(%rbp), %rax
movq 0x1b8(%rax), %rdi
callq 0x2040
movq -0x20(%rbp), %rdi
callq 0x2040
movq $0x0, -0x8(%rbp)
jmp 0x28a0
movq -0x20(%rbp), %rax
movq $0x0, 0x190(%rax)
movq -0x20(%rbp), %rax
movq 0x1b8(%rax), %rax
movq $0x0, (%rax)
movq -0x20(%rbp), %rax
movq 0x1c0(%rax), %rax
movq $0x0, (%rax)
movq -0x20(%rbp), %rax
movq 0x1c8(%rax), %rax
movq $0x0, (%rax)
movq -0x20(%rbp), %rax
movq $0x400, 0x128(%rax) # imm = 0x400
movq -0x20(%rbp), %rax
movq $0x400, 0x130(%rax) # imm = 0x400
movq -0x20(%rbp), %rax
movq $0x400, 0x138(%rax) # imm = 0x400
movq -0x20(%rbp), %rax
movq $0x10, 0x140(%rax)
movq -0x20(%rbp), %rax
movq $0x10, 0x148(%rax)
movq -0x20(%rbp), %rax
movq $0x10, 0x150(%rax)
movq -0x20(%rbp), %rax
movq $0x400, 0x158(%rax) # imm = 0x400
movq -0x20(%rbp), %rax
movq $0x1fc00, 0x160(%rax) # imm = 0x1FC00
movq -0x20(%rbp), %rax
movq $0x4000, 0x168(%rax) # imm = 0x4000
movq -0x20(%rbp), %rax
movq $0x10000, 0x170(%rax) # imm = 0x10000
movq -0x20(%rbp), %rax
movq $0x20000, 0x178(%rax) # imm = 0x20000
movq -0x20(%rbp), %rax
movq $0x80, 0x1d0(%rax)
movq -0x20(%rbp), %rax
movq $0x200, 0x1d8(%rax) # imm = 0x200
movq -0x20(%rbp), %rax
movq $0x0, 0x1e0(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x200(%rax)
movq -0x20(%rbp), %rax
movq 0x1d8(%rax), %rdi
shlq $0x0, %rdi
callq 0x21f0
movq -0x20(%rbp), %rcx
movq %rax, 0x1e8(%rcx)
cmpq $0x0, %rax
jne 0x2796
movq -0x20(%rbp), %rdi
addq $0x80, %rdi
callq 0x2130
movq -0x20(%rbp), %rdi
addq $0x20, %rdi
callq 0x16c40
movq -0x20(%rbp), %rax
movq 0x1c8(%rax), %rdi
callq 0x2040
movq -0x20(%rbp), %rax
movq 0x1c0(%rax), %rdi
callq 0x2040
movq -0x20(%rbp), %rax
movq 0x1b8(%rax), %rdi
callq 0x2040
movq -0x20(%rbp), %rdi
callq 0x2040
movq $0x0, -0x8(%rbp)
jmp 0x28a0
movq -0x20(%rbp), %rax
movq $0x0, 0x180(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x188(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x198(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x1a8(%rax)
movq -0x20(%rbp), %rdi
addq $0xa8, %rdi
movq -0x20(%rbp), %rsi
callq 0x16d10
cmpq $0x0, %rax
jne 0x285c
movq -0x20(%rbp), %rax
movq 0x1e8(%rax), %rdi
callq 0x2040
movq -0x20(%rbp), %rdi
addq $0x80, %rdi
callq 0x2130
movq -0x20(%rbp), %rdi
addq $0x20, %rdi
callq 0x16c40
movq -0x20(%rbp), %rax
movq 0x1c8(%rax), %rdi
callq 0x2040
movq -0x20(%rbp), %rax
movq 0x1c0(%rax), %rdi
callq 0x2040
movq -0x20(%rbp), %rax
movq 0x1b8(%rax), %rdi
callq 0x2040
movq -0x20(%rbp), %rdi
callq 0x2040
movq $0x0, -0x8(%rbp)
jmp 0x28a0
movslq -0xc(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x208(%rax)
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x210(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x218(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x220(%rax)
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x20, %rsp
popq %rbp
retq
nopw (%rax,%rax)