// File: /workspace/github_c_makefile_star2_O1/RodionGork[P]tinyscheme/scheme.c
// Function: opexe_1
static pointer opexe_1(scheme * sc, enum scheme_opcodes op) {
  pointer x, y;

  switch (op) {
  case OP_LET0REC:             /* letrec */
    new_frame_in_env(sc, sc->envir);
    sc->args = sc->NIL;
    sc->value = sc->code;
    sc->code = car(sc->code);
    s_goto(sc, OP_LET1REC);

  case OP_LET1REC:             /* letrec (calculate parameters) */
    sc->args = cons(sc, sc->value, sc->args);
    if (is_pair(sc->code)) {    /* continue */
      if (!is_pair(car(sc->code)) || !is_pair(cdar(sc->code))) {
        Error_1(sc, "Bad syntax of binding spec in letrec :", car(sc->code));
      }
      s_save(sc, OP_LET1REC, sc->args, cdr(sc->code));
      sc->code = cadar(sc->code);
      sc->args = sc->NIL;
      s_goto(sc, OP_EVAL);
    } else {                    /* end */
      sc->args = reverse_in_place(sc, sc->NIL, sc->args);
      sc->code = car(sc->args);
      sc->args = cdr(sc->args);
      s_goto(sc, OP_LET2REC);
    }

  case OP_LET2REC:             /* letrec */
    for (x = car(sc->code), y = sc->args; y != sc->NIL;
        x = cdr(x), y = cdr(y)) {
      new_slot_in_env(sc, caar(x), car(y));
    }
    sc->code = cdr(sc->code);
    sc->args = sc->NIL;
    s_goto(sc, OP_BEGIN);

  case OP_COND0:               /* cond */
    if (!is_pair(sc->code)) {
      Error_0(sc, "syntax error in cond");
    }
    s_save(sc, OP_COND1, sc->NIL, sc->code);
    sc->code = caar(sc->code);
    s_goto(sc, OP_EVAL);

  case OP_COND1:               /* cond */
    if (is_true(sc->value)) {
      if ((sc->code = cdar(sc->code)) == sc->NIL) {
        s_return(sc, sc->value);
      }
      if (!sc->code || car(sc->code) == sc->FEED_TO) {
        if (!is_pair(cdr(sc->code))) {
          Error_0(sc, "syntax error in cond");
        }
        x = cons(sc, sc->QUOTE, cons(sc, sc->value, sc->NIL));
        sc->code = cons(sc, cadr(sc->code), cons(sc, x, sc->NIL));
        s_goto(sc, OP_EVAL);
      }
      s_goto(sc, OP_BEGIN);
    } else {
      if ((sc->code = cdr(sc->code)) == sc->NIL) {
        s_return(sc, sc->NIL);
      } else {
        s_save(sc, OP_COND1, sc->NIL, sc->code);
        sc->code = caar(sc->code);
        s_goto(sc, OP_EVAL);
      }
    }

  case OP_DELAY:               /* delay */
    x = mk_closure(sc, cons(sc, sc->NIL, sc->code), sc->envir);
    typeflag(x) = T_PROMISE;
    s_return(sc, x);

  case OP_AND0:                /* and */
    if (sc->code == sc->NIL) {
      s_return(sc, sc->T);
    }
    s_save(sc, OP_AND1, sc->NIL, cdr(sc->code));
    sc->code = car(sc->code);
    s_goto(sc, OP_EVAL);

  case OP_AND1:                /* and */
    if (is_false(sc->value)) {
      s_return(sc, sc->value);
    } else if (sc->code == sc->NIL) {
      s_return(sc, sc->value);
    } else {
      s_save(sc, OP_AND1, sc->NIL, cdr(sc->code));
      sc->code = car(sc->code);
      s_goto(sc, OP_EVAL);
    }

  case OP_OR0:                 /* or */
    if (sc->code == sc->NIL) {
      s_return(sc, sc->F);
    }
    s_save(sc, OP_OR1, sc->NIL, cdr(sc->code));
    sc->code = car(sc->code);
    s_goto(sc, OP_EVAL);

  case OP_OR1:                 /* or */
    if (is_true(sc->value)) {
      s_return(sc, sc->value);
    } else if (sc->code == sc->NIL) {
      s_return(sc, sc->value);
    } else {
      s_save(sc, OP_OR1, sc->NIL, cdr(sc->code));
      sc->code = car(sc->code);
      s_goto(sc, OP_EVAL);
    }

  case OP_C0STREAM:            /* cons-stream */
    s_save(sc, OP_C1STREAM, sc->NIL, cdr(sc->code));
    sc->code = car(sc->code);
    s_goto(sc, OP_EVAL);

  case OP_C1STREAM:            /* cons-stream */
    sc->args = sc->value;       /* save sc->value to register sc->args for gc */
    x = mk_closure(sc, cons(sc, sc->NIL, sc->code), sc->envir);
    typeflag(x) = T_PROMISE;
    s_return(sc, cons(sc, sc->args, x));

  case OP_MACRO0:              /* macro */
    if (is_pair(car(sc->code))) {
      x = caar(sc->code);
      sc->code =
          cons(sc, sc->LAMBDA, cons(sc, cdar(sc->code), cdr(sc->code)));
    } else {
      x = car(sc->code);
      sc->code = cadr(sc->code);
    }
    if (!is_symbol(x)) {
      Error_0(sc, "variable is not a symbol");
    }
    s_save(sc, OP_MACRO1, sc->NIL, x);
    s_goto(sc, OP_EVAL);

  case OP_MACRO1:              /* macro */
    typeflag(sc->value) = T_MACRO;
    x = find_slot_in_env(sc, sc->envir, sc->code, 0);
    if (x != sc->NIL) {
      set_slot_in_env(x, sc->value);
    } else {
      new_slot_in_env(sc, sc->code, sc->value);
    }
    s_return(sc, sc->code);

  case OP_CASE0:               /* case */
    s_save(sc, OP_CASE1, sc->NIL, cdr(sc->code));
    sc->code = car(sc->code);
    s_goto(sc, OP_EVAL);

  case OP_CASE1:               /* case */
    for (x = sc->code; x != sc->NIL; x = cdr(x)) {
      if (!is_pair(y = caar(x))) {
        break;
      }
      for (; y != sc->NIL; y = cdr(y)) {
        if (eqv(car(y), sc->value)) {
          break;
        }
      }
      if (y != sc->NIL) {
        break;
      }
    }
    if (x != sc->NIL) {
      if (is_pair(caar(x))) {
        sc->code = cdar(x);
        s_goto(sc, OP_BEGIN);
      } else {                  /* else */
        s_save(sc, OP_CASE2, sc->NIL, cdar(x));
        sc->code = caar(x);
        s_goto(sc, OP_EVAL);
      }
    } else {
      s_return(sc, sc->NIL);
    }

  case OP_CASE2:               /* case */
    if (is_true(sc->value)) {
      s_goto(sc, OP_BEGIN);
    } else {
      s_return(sc, sc->NIL);
    }

  case OP_PAPPLY:              /* apply */
    sc->code = car(sc->args);
    sc->args = list_star(sc, cdr(sc->args));
    /*sc->args = cadr(sc->args); */
    s_goto(sc, OP_APPLY);

  case OP_PEVAL:               /* eval */
    if (cdr(sc->args) != sc->NIL) {
      sc->envir = cadr(sc->args);
    }
    sc->code = car(sc->args);
    s_goto(sc, OP_EVAL);

  case OP_CONTINUATION:        /* call-with-current-continuation */
    sc->code = car(sc->args);
    sc->args = cons(sc, mk_continuation(sc, sc->dump), sc->NIL);
    s_goto(sc, OP_APPLY);

  default:
    sprintf(sc->strbuff, "%d: illegal operator", sc->op);
    Error_0(sc, sc->strbuff);
  }
  return sc->T;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
addl $-0x20, %esi
cmpl $0x13, %esi
ja 0x7bb0
leaq 0x5990(%rip), %rax      # 0xd0d8
movslq (%rax,%rsi,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq 0x38(%rbx), %rsi
movq %rbx, %rdi
callq 0x5509
movq 0x40(%rbx), %rax
movq 0x90(%rbx), %rcx
movq %rcx, 0x30(%rbx)
movq %rax, 0xec0(%rbx)
movq 0x8(%rax), %rax
movq %rax, 0x40(%rbx)
movl $0x21, 0xec8(%rbx)
jmp 0x7e97
movq 0xec0(%rbx), %rax
cmpq 0xd0(%rbx), %rax
je 0x7df9
movl $0x15, 0xec8(%rbx)
jmp 0x7e97
movq 0x40(%rbx), %rax
movq 0x90(%rbx), %rdx
movq 0x10(%rax), %rcx
movq %rbx, %rdi
movl $0x2f, %esi
jmp 0x7ce0
movq 0xec0(%rbx), %rax
movq %rax, 0x30(%rbx)
movq 0x40(%rbx), %r14
movq 0x90(%rbx), %r15
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x4689
movq %rax, %r12
movl $0x5, %ebp
movl %ebp, (%rax)
movq %r15, 0x8(%rax)
movq %r14, 0x10(%rax)
movq 0x38(%rbx), %r14
movq %rbx, %rdi
movq %rax, %rsi
movq %r14, %rdx
callq 0x4689
movq %rax, %r15
movq %r12, 0x8(%rax)
movq %r14, 0x10(%rax)
movl $0xd, (%rax)
movq 0x30(%rbx), %r14
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0x4689
movl %ebp, (%rax)
movq %r14, 0x8(%rax)
movq %r15, 0x10(%rax)
jmp 0x7c21
movq 0xec0(%rbx), %r14
movq 0x40(%rbx), %rax
cmpq 0xd0(%rbx), %r14
je 0x7e02
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, 0x40(%rbx)
movq 0x90(%rbx), %r15
cmpq %r15, %rax
je 0x7ebd
testq %rax, %rax
je 0x788d
movq 0x8(%rax), %rcx
cmpq 0x138(%rbx), %rcx
jne 0x779e
movq 0x10(%rax), %rax
movl (%rax), %eax
andl $0x1f, %eax
cmpl $0x5, %eax
jne 0x7d6c
movq 0x118(%rbx), %r12
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x4689
movq %rax, %r13
movl $0x5, %ebp
movl %ebp, (%rax)
movq %r14, 0x8(%rax)
movq %r15, 0x10(%rax)
movq %rbx, %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0x4689
movq %rax, %r14
movl %ebp, (%rax)
movq %r12, 0x8(%rax)
movq %r13, 0x10(%rax)
movq 0x40(%rbx), %rax
movq 0x90(%rbx), %r15
movq 0x10(%rax), %rax
movq 0x8(%rax), %r12
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x4689
movq %rax, %r13
movl %ebp, (%rax)
movq %r14, 0x8(%rax)
movq %r15, 0x10(%rax)
movq %rbx, %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0x4689
movl %ebp, (%rax)
movq %r12, 0x8(%rax)
movq %r13, 0x10(%rax)
jmp 0x7ba7
movq 0x40(%rbx), %rax
movq 0x8(%rax), %rcx
movl (%rcx), %edx
andl $0x1f, %edx
cmpl $0x5, %edx
jne 0x7d75
movq 0x8(%rcx), %rdx
movq %rdx, (%rsp)
movq 0x10(%rcx), %r14
movq 0x110(%rbx), %r15
movq 0x10(%rax), %r12
movq %rbx, %rdi
movq %r14, %rsi
movq %r12, %rdx
callq 0x4689
movq %rax, %r13
movl $0x5, %ebp
movl %ebp, (%rax)
movq %r14, 0x8(%rax)
movq %r12, 0x10(%rax)
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
callq 0x4689
movl %ebp, (%rax)
movq %r15, 0x8(%rax)
movq %r13, 0x10(%rax)
movq (%rsp), %rcx
jmp 0x7d7d
movq 0xec0(%rbx), %rsi
cmpq 0xd0(%rbx), %rsi
jne 0x7e71
movq 0x40(%rbx), %rax
movq 0x90(%rbx), %rdx
cmpq %rdx, %rax
jne 0x7cd4
jmp 0x7e71
movq 0x30(%rbx), %r14
movq 0x90(%rbx), %rcx
cmpq %rcx, %r14
je 0x7a0e
movq 0x40(%rbx), %r15
addq $0x8, %r15
movq (%r15), %r15
movq 0x8(%r15), %rax
movq 0x8(%rax), %rdx
movq 0x8(%r14), %rcx
movq 0x38(%rbx), %rsi
movq %rbx, %rdi
callq 0x5f14
addq $0x10, %r15
movq 0x10(%r14), %r14
movq 0x90(%rbx), %rcx
cmpq %rcx, %r14
jne 0x79df
movq 0x40(%rbx), %rdx
movq 0xb0(%rbx), %rax
movq 0x10(%rdx), %rdx
movq %rdx, 0x40(%rbx)
movq %rcx, 0x30(%rbx)
movl $0x15, 0xec8(%rbx)
jmp 0x7e9e
movq 0x40(%rbx), %r12
movq 0x90(%rbx), %r14
cmpq %r14, %r12
sete %cl
je 0x7ebd
movq 0x8(%r12), %rax
movq 0x8(%rax), %r13
movl (%r13), %eax
andl $0x1f, %eax
cmpl $0x5, %eax
jne 0x7eb8
movb %cl, (%rsp)
cmpq %r14, %r13
sete %bpl
je 0x7a9f
movq 0xec0(%rbx), %r15
movq 0x8(%r13), %rdi
movq %r15, %rsi
callq 0x4d0b
testl %eax, %eax
jne 0x7a96
movq 0x10(%r13), %r13
cmpq %r14, %r13
sete %bpl
jne 0x7a77
jmp 0x7a9f
testb %bpl, %bpl
je 0x7eb5
movq 0x10(%r12), %r12
jmp 0x7a3f
movq 0x40(%rbx), %rcx
movl (%rcx), %eax
andl $0x1f, %eax
cmpl $0x5, %eax
jne 0x7d6c
movq 0x90(%rbx), %rdx
jmp 0x7e1a
movq 0xec0(%rbx), %rsi
cmpq 0xd0(%rbx), %rsi
je 0x7e71
movq 0x40(%rbx), %rax
movq 0x90(%rbx), %rdx
cmpq %rdx, %rax
jne 0x7c7c
jmp 0x7e71
movq 0xec0(%rbx), %r14
movq 0x30(%rbx), %r15
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x4689
movl $0x5, (%rax)
movq %r14, 0x8(%rax)
movq %r15, 0x10(%rax)
movq %rax, 0x30(%rbx)
movq 0x40(%rbx), %rcx
movl (%rcx), %edx
andl $0x1f, %edx
cmpl $0x5, %edx
jne 0x7dcd
movq 0x8(%rcx), %rdx
movl (%rdx), %esi
andl $0x1f, %esi
cmpl $0x5, %esi
jne 0x7e3b
movq 0x10(%rdx), %rsi
movl (%rsi), %esi
andl $0x1f, %esi
cmpl $0x5, %esi
jne 0x7e3b
movq 0x10(%rcx), %rcx
movq %rbx, %rdi
movl $0x21, %esi
movq %rax, %rdx
callq 0xb1d1
movq 0x40(%rbx), %rax
movq 0x90(%rbx), %rcx
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x40(%rbx)
movq %rcx, 0x30(%rbx)
jmp 0x7d9f
movq 0x30(%rbx), %rax
movq 0x10(%rax), %rcx
cmpq 0x90(%rbx), %rcx
je 0x7ba3
movq 0x8(%rcx), %rcx
movq %rcx, 0x38(%rbx)
movq 0x8(%rax), %rax
movq %rax, 0x40(%rbx)
jmp 0x7d9f
movq 0xea0(%rbx), %rdi
movl 0xec8(%rbx), %edx
leaq 0x60ef(%rip), %rsi      # 0xdcb3
xorl %eax, %eax
callq 0x4290
movq 0xea0(%rbx), %rsi
jmp 0x7db5
movq 0x40(%rbx), %r14
movq 0x90(%rbx), %r15
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x4689
movq %rax, %r12
movl $0x5, (%rax)
movq %r15, 0x8(%rax)
movq %r14, 0x10(%rax)
movq 0x38(%rbx), %r14
movq %rbx, %rdi
movq %rax, %rsi
movq %r14, %rdx
callq 0x4689
movq %r12, 0x8(%rax)
movq %r14, 0x10(%rax)
movl $0xd, (%rax)
movq %rbx, %rdi
movq %rax, %rsi
jmp 0x7ec3
movq 0xec0(%rbx), %r14
movl $0xc, (%r14)
movq 0x38(%rbx), %r15
movq 0x40(%rbx), %r12
movq %rbx, %rdi
movq %r15, %rsi
movq %r12, %rdx
xorl %ecx, %ecx
callq 0x5e5e
cmpq 0x90(%rbx), %rax
je 0x7e4a
movq %r14, 0x10(%rax)
jmp 0x7e5b
movq 0x40(%rbx), %rax
movq 0x90(%rbx), %rdx
cmpq %rdx, %rax
je 0x7e61
movq 0x10(%rax), %rcx
movq %rbx, %rdi
movl $0x27, %esi
jmp 0x7ce0
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rcx
movq %rcx, 0x40(%rbx)
movq 0x10(%rax), %rsi
movq %rbx, %rdi
callq 0xb69b
jmp 0x7d59
movq 0x40(%rbx), %rax
movq 0x90(%rbx), %rdx
movq 0x10(%rax), %rcx
movq %rbx, %rdi
movl $0x2b, %esi
jmp 0x7ce0
movq 0x40(%rbx), %rax
movq 0x90(%rbx), %rdx
cmpq %rdx, %rax
je 0x7e6a
movq 0x10(%rax), %rcx
movq %rbx, %rdi
movl $0x29, %esi
callq 0xb1d1
movq 0x40(%rbx), %rcx
movq 0xb0(%rbx), %rax
movq 0x8(%rcx), %rcx
movq %rcx, 0x40(%rbx)
movl $0x6, 0xec8(%rbx)
jmp 0x7e9e
movq 0x30(%rbx), %rax
movq 0x48(%rbx), %r14
movq 0x8(%rax), %rax
movq %rax, 0x40(%rbx)
movq 0x90(%rbx), %rsi
movq %rbx, %rdi
movq %r14, %rdx
callq 0x4689
movq %rax, %r15
movl $0x7, (%rax)
movq %r14, 0x10(%rax)
movq 0x90(%rbx), %r14
movq %rbx, %rdi
movq %rax, %rsi
movq %r14, %rdx
callq 0x4689
movl $0x5, (%rax)
movq %r15, 0x8(%rax)
movq %r14, 0x10(%rax)
movq %rax, 0x30(%rbx)
movl $0xa, 0xec8(%rbx)
jmp 0x7e97
leaq 0x5fa0(%rip), %rsi      # 0xdd13
jmp 0x7db5
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x40(%rbx)
movl (%rcx), %eax
andl $0x1f, %eax
cmpl $0x3, %eax
jne 0x7dae
movq 0x90(%rbx), %rdx
movq %rbx, %rdi
movl $0x2d, %esi
callq 0xb1d1
movl $0x6, 0xec8(%rbx)
jmp 0x7e97
leaq 0x5e3c(%rip), %rsi      # 0xdbf1
movq %rbx, %rdi
xorl %edx, %edx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xaec1
movq 0x90(%rbx), %rdx
cmpq %rax, %rdx
je 0x7e76
movq %rax, %rcx
movq 0x10(%rax), %rax
movq %rdx, 0x10(%rcx)
movq %rcx, %rdx
cmpq 0x90(%rbx), %rax
jne 0x7ddd
jmp 0x7e79
movq 0x90(%rbx), %rsi
jmp 0x7e71
movq 0x10(%rax), %rcx
movq %rcx, 0x40(%rbx)
movq 0x90(%rbx), %rdx
cmpq %rdx, %rcx
je 0x7ead
movq %rbx, %rdi
movl $0x24, %esi
callq 0xb1d1
movq 0x40(%rbx), %rcx
movq 0xb0(%rbx), %rax
movq 0x8(%rcx), %rcx
jmp 0x7cf0
leaq 0x5eaa(%rip), %rsi      # 0xdcec
movq %rbx, %rdi
jmp 0x7dba
movq %rbx, %rdi
movq %r15, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0x5f14
movq 0x40(%rbx), %rsi
jmp 0x7e71
movq 0xb0(%rbx), %rsi
jmp 0x7e71
movq 0xd0(%rbx), %rsi
movq %rbx, %rdi
jmp 0x7ec3
movq %rdx, %rcx
movq %rcx, 0x30(%rbx)
movq 0x8(%rcx), %rax
movq %rax, 0x40(%rbx)
movq 0x10(%rcx), %rax
movq %rax, 0x30(%rbx)
movl $0x22, 0xec8(%rbx)
movq 0xb0(%rbx), %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rbx, %rdi
movq %rdx, %rsi
jmp 0x7ec3
movb (%rsp), %cl
testb $0x1, %cl
je 0x7ed6
movq %rbx, %rdi
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xb152
movq 0x8(%r12), %rax
movq 0x8(%rax), %rdx
movq 0x10(%rax), %rcx
movl (%rdx), %eax
andl $0x1f, %eax
cmpl $0x5, %eax
jne 0x7ef6
movq %rcx, 0x40(%rbx)
jmp 0x779e
movq %rbx, %rdi
movl $0x30, %esi
movq %r14, %rdx
callq 0xb1d1
movq 0x8(%r12), %rax
jmp 0x7ba3