// File: /workspace/github_c_makefile_star2_O0/RodionGork[P]tinyscheme/scheme.c
// Function: Eval_Cycle
static void Eval_Cycle(scheme * sc, enum scheme_opcodes op) {
  sc->op = op;
  for (;;) {
    op_code_info *pcd = dispatch_table + sc->op;
    if (pcd->name != 0) {       /* if built-in function, check arguments */
      char msg[AUXBUFF_SIZE];
      int ok = 1;
      int n = list_length(sc, sc->args);

      /* Check number of arguments */
      if (n < pcd->min_arity) {
        ok = 0;
        snprintf(msg, AUXBUFF_SIZE, "%s: needs%s %d argument(s)",
            pcd->name,
            pcd->min_arity == pcd->max_arity ? "" : " at least",
            pcd->min_arity);
      }
      if (ok && n > pcd->max_arity) {
        ok = 0;
        snprintf(msg, AUXBUFF_SIZE, "%s: needs%s %d argument(s)",
            pcd->name,
            pcd->min_arity == pcd->max_arity ? "" : " at most",
            pcd->max_arity);
      }
      if (ok) {
        if (pcd->arg_tests_encoding != 0) {
          int i = 0;
          int j;
          const char *t = pcd->arg_tests_encoding;
          pointer arglist = sc->args;
          do {
            pointer arg = car(arglist);
            j = (int) t[0];
            if (j == TST_LIST[0]) {
              if (arg != sc->NIL && !is_pair(arg))
                break;
            } else {
              if (!tests[j].fct(arg))
                break;
            }

            if (t[1] != 0) {    /* last test is replicated as necessary */
              t++;
            }
            arglist = cdr(arglist);
            i++;
          } while (i < n);
          if (i < n) {
            ok = 0;
            snprintf(msg, AUXBUFF_SIZE, "%s: argument %d must be: %s",
                pcd->name, i + 1, tests[j].kind);
          }
        }
      }
      if (!ok) {
        if (_Error_1(sc, msg, 0) == sc->NIL) {
          return;
        }
        pcd = dispatch_table + sc->op;
      }
    }
    ok_to_freely_gc(sc);
    if (pcd->func(sc, (enum scheme_opcodes) sc->op) == sc->NIL) {
      return;
    }
    if (sc->no_memory) {
      fprintf(stderr, "No memory!\n");
      sc->retcode = 9;
      return;
    }
  }
}

// Assembly:
subq $0x148, %rsp            # imm = 0x148
movq %rdi, 0x140(%rsp)
movl %esi, 0x13c(%rsp)
movl 0x13c(%rsp), %ecx
movq 0x140(%rsp), %rax
movl %ecx, 0xec8(%rax)
movq 0x140(%rsp), %rax
movslq 0xec8(%rax), %rcx
leaq 0x141cf(%rip), %rax     # 0x1b1a0
shlq $0x5, %rcx
addq %rcx, %rax
movq %rax, 0x130(%rsp)
movq 0x130(%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0x72bc
movl $0x1, 0x2c(%rsp)
movq 0x140(%rsp), %rdi
movq 0x140(%rsp), %rax
movq 0x30(%rax), %rsi
callq 0x5840
movl %eax, 0x28(%rsp)
movl 0x28(%rsp), %eax
movq 0x130(%rsp), %rcx
cmpl 0x10(%rcx), %eax
jge 0x708b
movl $0x0, 0x2c(%rsp)
leaq 0x30(%rsp), %rdi
movq 0x130(%rsp), %rax
movq 0x8(%rax), %rcx
movq 0x130(%rsp), %rax
movl 0x10(%rax), %edx
movq 0x130(%rsp), %rax
movl 0x14(%rax), %esi
leaq 0x115c6(%rip), %r8      # 0x18625
leaq 0x109ac(%rip), %rax     # 0x17a12
cmpl %esi, %edx
cmoveq %rax, %r8
movq 0x130(%rsp), %rax
movl 0x10(%rax), %r9d
movl $0x100, %esi            # imm = 0x100
leaq 0x11586(%rip), %rdx     # 0x1860a
movb $0x0, %al
callq 0x40c0
cmpl $0x0, 0x2c(%rsp)
je 0x7105
movl 0x28(%rsp), %eax
movq 0x130(%rsp), %rcx
cmpl 0x14(%rcx), %eax
jle 0x7105
movl $0x0, 0x2c(%rsp)
leaq 0x30(%rsp), %rdi
movq 0x130(%rsp), %rax
movq 0x8(%rax), %rcx
movq 0x130(%rsp), %rax
movl 0x10(%rax), %edx
movq 0x130(%rsp), %rax
movl 0x14(%rax), %esi
leaq 0x11556(%rip), %r8      # 0x1862f
leaq 0x10932(%rip), %rax     # 0x17a12
cmpl %esi, %edx
cmoveq %rax, %r8
movq 0x130(%rsp), %rax
movl 0x14(%rax), %r9d
movl $0x100, %esi            # imm = 0x100
leaq 0x1150c(%rip), %rdx     # 0x1860a
movb $0x0, %al
callq 0x40c0
cmpl $0x0, 0x2c(%rsp)
je 0x7262
movq 0x130(%rsp), %rax
cmpq $0x0, 0x18(%rax)
je 0x7260
movl $0x0, 0x24(%rsp)
movq 0x130(%rsp), %rax
movq 0x18(%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x140(%rsp), %rax
movq 0x30(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x8(%rsp)
movq 0x18(%rsp), %rax
movsbl (%rax), %eax
movl %eax, 0x20(%rsp)
movl 0x20(%rsp), %eax
movsbl 0x10e94(%rip), %ecx     # 0x18006
cmpl %ecx, %eax
jne 0x719f
movq 0x8(%rsp), %rax
movq 0x140(%rsp), %rcx
cmpq 0x90(%rcx), %rax
je 0x719d
movq 0x8(%rsp), %rdi
callq 0x4710
cmpl $0x0, %eax
jne 0x719d
jmp 0x7208
jmp 0x71c5
movslq 0x20(%rsp), %rcx
leaq 0x157a5(%rip), %rax     # 0x1c950
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rax
movq 0x8(%rsp), %rdi
callq *%rax
cmpl $0x0, %eax
jne 0x71c3
jmp 0x7208
jmp 0x71c5
movq 0x18(%rsp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x0, %eax
je 0x71e1
movq 0x18(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x18(%rsp)
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
movl 0x24(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x24(%rsp)
movl 0x24(%rsp), %eax
cmpl 0x28(%rsp), %eax
jl 0x714d
movl 0x24(%rsp), %eax
cmpl 0x28(%rsp), %eax
jge 0x725e
movl $0x0, 0x2c(%rsp)
leaq 0x30(%rsp), %rdi
movq 0x130(%rsp), %rax
movq 0x8(%rax), %rcx
movl 0x24(%rsp), %r8d
addl $0x1, %r8d
movslq 0x20(%rsp), %rdx
leaq 0x15710(%rip), %rax     # 0x1c950
shlq $0x4, %rdx
addq %rdx, %rax
movq 0x8(%rax), %r9
movl $0x100, %esi            # imm = 0x100
leaq 0x113e1(%rip), %rdx     # 0x18638
movb $0x0, %al
callq 0x40c0
jmp 0x7260
jmp 0x7262
cmpl $0x0, 0x2c(%rsp)
jne 0x72ba
movq 0x140(%rsp), %rdi
leaq 0x30(%rsp), %rsi
xorl %eax, %eax
movl %eax, %edx
callq 0x12ce0
movq 0x140(%rsp), %rcx
cmpq 0x90(%rcx), %rax
jne 0x7295
jmp 0x733e
movq 0x140(%rsp), %rax
movslq 0xec8(%rax), %rcx
leaq 0x13ef5(%rip), %rax     # 0x1b1a0
shlq $0x5, %rcx
addq %rcx, %rax
movq %rax, 0x130(%rsp)
jmp 0x72bc
movq 0x140(%rsp), %rdi
callq 0x16da0
movq 0x130(%rsp), %rax
movq (%rax), %rax
movq 0x140(%rsp), %rdi
movq 0x140(%rsp), %rcx
movl 0xec8(%rcx), %esi
callq *%rax
movq 0x140(%rsp), %rcx
cmpq 0x90(%rcx), %rax
jne 0x72ff
jmp 0x733e
movq 0x140(%rsp), %rax
cmpb $0x0, 0xa99(%rax)
je 0x7339
movq 0x13ce1(%rip), %rax     # 0x1aff8
movq (%rax), %rdi
leaq 0x11333(%rip), %rsi     # 0x18654
movb $0x0, %al
callq 0x4190
movq 0x140(%rsp), %rax
movl $0x9, 0x10(%rax)
jmp 0x733e
jmp 0x6fbb
addq $0x148, %rsp            # imm = 0x148
retq
nopw %cs:(%rax,%rax)