// File: /workspace/github_c_makefile_star2_O2/RodionGork[P]tinyscheme/scheme.c
// Function: opexe_3
static pointer opexe_3(scheme * sc, enum scheme_opcodes op) {
  pointer x;
  num v;
  int (*comp_func) (num, num) = 0;

  switch (op) {
  case OP_NOT:                 /* not */
    s_retbool(is_false(car(sc->args)));
  case OP_BOOLP:               /* boolean? */
    s_retbool(car(sc->args) == sc->F || car(sc->args) == sc->T);
  case OP_EOFOBJP:             /* boolean? */
    s_retbool(car(sc->args) == sc->EOF_OBJ);
  case OP_NULLP:               /* null? */
    s_retbool(car(sc->args) == sc->NIL);
  case OP_NUMEQ:               /* = */
  case OP_LESS:                /* < */
  case OP_GRE:                 /* > */
  case OP_LEQ:                 /* <= */
  case OP_GEQ:                 /* >= */
    switch (op) {
    case OP_NUMEQ:
      comp_func = num_eq;
      break;
    case OP_LESS:
      comp_func = num_lt;
      break;
    case OP_GRE:
      comp_func = num_gt;
      break;
    case OP_LEQ:
      comp_func = num_le;
      break;
    case OP_GEQ:
      comp_func = num_ge;
      break;
    default:
      break;                    /* Quiet the compiler */
    }
    x = sc->args;
    v = nvalue(car(x));
    x = cdr(x);

    for (; x != sc->NIL; x = cdr(x)) {
      if (!comp_func(v, nvalue(car(x)))) {
        s_retbool(0);
      }
      v = nvalue(car(x));
    }
    s_retbool(1);
  case OP_SYMBOLP:             /* symbol? */
    s_retbool(is_symbol(car(sc->args)));
  case OP_NUMBERP:             /* number? */
    s_retbool(is_number(car(sc->args)));
  case OP_STRINGP:             /* string? */
    s_retbool(is_string(car(sc->args)));
  case OP_INTEGERP:            /* integer? */
    s_retbool(is_integer(car(sc->args)));
  case OP_REALP:               /* real? */
    s_retbool(is_number(car(sc->args)));        /* All numbers are real */
  case OP_CHARP:               /* char? */
    s_retbool(is_character(car(sc->args)));
#if USE_CHAR_CLASSIFIERS
  case OP_CHARAP:              /* char-alphabetic? */
    s_retbool(Cisalpha(ivalue(car(sc->args))));
  case OP_CHARNP:              /* char-numeric? */
    s_retbool(Cisdigit(ivalue(car(sc->args))));
  case OP_CHARWP:              /* char-whitespace? */
    s_retbool(Cisspace(ivalue(car(sc->args))));
  case OP_CHARUP:              /* char-upper-case? */
    s_retbool(Cisupper(ivalue(car(sc->args))));
  case OP_CHARLP:              /* char-lower-case? */
    s_retbool(Cislower(ivalue(car(sc->args))));
#endif
  case OP_PORTP:               /* port? */
    s_retbool(is_port(car(sc->args)));
  case OP_INPORTP:             /* input-port? */
    s_retbool(is_inport(car(sc->args)));
  case OP_OUTPORTP:            /* output-port? */
    s_retbool(is_outport(car(sc->args)));
  case OP_PROCP:               /* procedure? */
          /*--
              * continuation should be procedure by the example
              * (call-with-current-continuation procedure?) ==> #t
                 * in R^3 report sec. 6.9
              */
    s_retbool(is_proc(car(sc->args)) || is_closure(car(sc->args))
        || is_continuation(car(sc->args)) || is_foreign(car(sc->args)));
  case OP_PAIRP:               /* pair? */
    s_retbool(is_pair(car(sc->args)));
  case OP_LISTP:               /* list? */
    s_retbool(list_length(sc, car(sc->args)) >= 0);

  case OP_ENVP:                /* environment? */
    s_retbool(is_environment(car(sc->args)));
  case OP_VECTORP:             /* vector? */
    s_retbool(is_vector(car(sc->args)));
  case OP_BVECTORP:             /* bytevector? */
    s_retbool(is_bvector(car(sc->args)));
  case OP_EQ:                  /* eq? */
    s_retbool(car(sc->args) == cadr(sc->args));
  case OP_EQV:                 /* eqv? */
    s_retbool(eqv(car(sc->args), cadr(sc->args)));
  case OP_CURR_SEC:            /* current-second */
    v.is_fixnum = 0;
    v.value.rvalue = time(0);
    s_return(sc, mk_number(sc, v));
  case OP_EVAL_CNT:            /* eval-count */
    v.is_fixnum = 1;
    v.value.ivalue = evalcnt;
    s_return(sc, mk_number(sc, v));
  default:
    sprintf(sc->strbuff, "%d: illegal operator", sc->op);
    Error_0(sc, sc->strbuff);
  }
  return sc->T;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
addl $-0x64, %esi
cmpl $0x20, %esi
ja 0x8fc3
leaq 0x3587(%rip), %rax      # 0xc1fc
movslq (%rax,%rsi,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
movl (%rax), %eax
andl $0x1f, %eax
xorl %ecx, %ecx
cmpl $0x2, %eax
jmp 0x8fb0
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
movl (%rax), %eax
andl $0x1f, %eax
xorl %ecx, %ecx
cmpl $0xb, %eax
jmp 0x8fb0
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
cmpb $0x0, 0x8(%rax)
je 0x8ff4
movq 0x10(%rax), %r14
jmp 0x8ffa
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
movl (%rax), %eax
andl $0x1f, %eax
xorl %ecx, %ecx
cmpl $0x9, %eax
jmp 0x8fb0
leaq -0x4043(%rip), %r14     # 0x4ca2
jmp 0x8e56
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
movl (%rax), %eax
andl $0x1f, %eax
xorl %ecx, %ecx
cmpl $0x3, %eax
jmp 0x8fb0
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
movl (%rax), %eax
andl $0x1f, %eax
xorl %ecx, %ecx
cmpl $0x1, %eax
jmp 0x8fb0
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
xorl %ecx, %ecx
cmpq 0xf0(%rbx), %rax
jmp 0x8fb0
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rsi
movq %rbx, %rdi
callq 0x4cf1
shrl $0x1a, %eax
andl $-0x20, %eax
movq 0xb0(%rax,%rbx), %rsi
jmp 0x90a3
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
movl (%rax), %eax
andl $0x1f, %eax
xorl %ecx, %ecx
cmpl $0x5, %eax
jmp 0x8fb0
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
xorl %ecx, %ecx
cmpq 0x90(%rbx), %rax
jmp 0x8fb0
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
cmpb $0x0, 0x8(%rax)
je 0x9011
movq 0x10(%rax), %r14
jmp 0x9017
leaq 0x29a6(%rip), %r14      # 0xb746
jmp 0x8e56
movq 0x30(%rbx), %rax
movq 0xd0(%rbx), %rsi
cmpq %rsi, 0x8(%rax)
jne 0x90a3
movq 0xb0(%rbx), %rsi
jmp 0x90a3
movq 0x30(%rbx), %rax
movq 0xb0(%rbx), %rcx
movq 0x8(%rax), %rax
movq 0xd0(%rbx), %rdx
cmpq %rcx, %rax
movq %rdx, %rsi
cmoveq %rcx, %rsi
cmpq %rdx, %rax
cmoveq %rcx, %rsi
jmp 0x90a3
xorl %edi, %edi
callq 0x41e0
cvtsi2sd %rax, %xmm0
movq %rbx, %rdi
callq 0x46c6
jmp 0x8ef6
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
cmpb $0x0, 0x8(%rax)
je 0x902e
movq 0x10(%rax), %r14
jmp 0x9034
leaq 0x2887(%rip), %r14      # 0xb6b4
jmp 0x8e56
leaq 0x28c7(%rip), %r14      # 0xb6fd
jmp 0x8e56
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
movl (%rax), %eax
andl $0x1f, %eax
xorl %ecx, %ecx
cmpl $0xa, %eax
jmp 0x8fb0
leaq 0x28fb(%rip), %r14      # 0xb751
movq 0x30(%rbx), %rcx
movq 0x10(%rcx), %r15
cmpq 0x90(%rbx), %r15
je 0x8dba
movq 0x8(%rcx), %rax
movq 0x10(%rax), %rsi
movq 0x8(%r15), %rdx
movq 0x10(%rdx), %rcx
movl 0x8(%rdx), %edx
movl 0x8(%rax), %edi
callq *%r14
movq %r15, %rcx
testl %eax, %eax
jne 0x8e5a
movq 0xd0(%rbx), %rsi
jmp 0x90a3
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rdi
callq 0x44ed
jmp 0x8f0e
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rdi
callq 0x4454
jmp 0x8f0e
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
cmpb $0x0, 0x8(%rax)
je 0x904b
movq 0x10(%rax), %r14
jmp 0x9051
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rdi
movq 0x10(%rax), %rax
movq 0x8(%rax), %rsi
callq 0x4be2
jmp 0x8f0e
movq 0x92da(%rip), %rsi      # 0x121c8
movq %rbx, %rdi
callq 0x46a3
movq %rbx, %rdi
movq %rax, %rsi
jmp 0x90a6
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rdi
callq 0x4506
xorl %ecx, %ecx
testl %eax, %eax
sete %cl
jmp 0x8fb3
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
cmpb $0x0, 0x8(%rax)
je 0x9068
movq 0x10(%rax), %r14
jmp 0x906e
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
movl (%rax), %eax
andl $0x1f, %eax
addl $-0x4, %eax
movl $0xd0, %ecx
cmpl $0x4, %eax
ja 0x8f5c
movl %eax, %eax
leaq 0x34c8(%rip), %rcx      # 0xc420
movq (%rcx,%rax,8), %rcx
movq (%rbx,%rcx), %rsi
jmp 0x90a3
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
movl (%rax), %eax
andl $0x1f, %eax
xorl %ecx, %ecx
cmpl $0xf, %eax
jmp 0x8fb0
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rcx
movq 0x10(%rax), %rax
xorl %edx, %edx
cmpq 0x8(%rax), %rcx
setne %dl
shll $0x5, %edx
movq 0xb0(%rdx,%rbx), %rsi
jmp 0x90a3
movq 0x30(%rbx), %rax
movq 0x8(%rax), %rax
movl (%rax), %eax
andl $0x1f, %eax
xorl %ecx, %ecx
cmpl $0xe, %eax
setne %cl
shll $0x5, %ecx
movq 0xb0(%rcx,%rbx), %rsi
jmp 0x90a3
movq 0xea0(%rbx), %rdi
movl 0xec8(%rbx), %edx
leaq 0x3ca5(%rip), %rsi      # 0xcc7c
xorl %eax, %eax
callq 0x4290
movq 0xea0(%rbx), %rsi
movq %rbx, %rdi
xorl %edx, %edx
popq %rbx
popq %r14
popq %r15
jmp 0xa5c7
cvttsd2si 0x10(%rax), %r14
callq 0x4300
movq (%rax), %rax
movslq %r14d, %rcx
movzwl (%rax,%rcx,2), %eax
xorl %edx, %edx
btl $0xb, %eax
jmp 0x9083
cvttsd2si 0x10(%rax), %r14
callq 0x4300
movq (%rax), %rax
movslq %r14d, %rcx
movzwl (%rax,%rcx,2), %eax
xorl %edx, %edx
btl $0xa, %eax
jmp 0x9083
cvttsd2si 0x10(%rax), %r14
callq 0x4300
movq (%rax), %rax
movslq %r14d, %rcx
movzwl (%rax,%rcx,2), %eax
xorl %edx, %edx
btl $0xd, %eax
jmp 0x9083
cvttsd2si 0x10(%rax), %r14
callq 0x4300
movq (%rax), %rax
movslq %r14d, %rcx
movzwl (%rax,%rcx,2), %eax
xorl %edx, %edx
btl $0x8, %eax
jmp 0x9083
cvttsd2si 0x10(%rax), %r14
callq 0x4300
movq (%rax), %rax
movslq %r14d, %rcx
movzwl (%rax,%rcx,2), %eax
xorl %edx, %edx
btl $0x9, %eax
setae %dl
shll $0x5, %edx
addq $0xb0, %rdx
testl $0xffffff80, %ecx       # imm = 0xFFFFFF80
movl $0xd0, %eax
cmoveq %rdx, %rax
movq (%rbx,%rax), %rsi
movq %rbx, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0xa761