// File: /workspace/github_c_makefile_star2_O0/creationix[P]color-control/src/libs/color-control.c
// Function: skip
static void skip(vm_t* vm) {
  opcode_t op = *(vm->pc)++;
  // If the opcode is less than 128, it's a literal unsigned integer
  if (op < 128) return;
  // Everything else needs to be switched based on it's code.
  switch (op) {
    // Handle the larger number literals (these consume 2-5 bytes)
    case UINT8:   vm->pc += 1; return;
    case UINT16:  vm->pc += 2; return;
    case UINT24:  vm->pc += 3; return;
    case UINT32:  vm->pc += 4; return;

    // Operations that don't consume any expressions
    case UPDATE:
    case GET0: case GET1: case GET2: case GET3:
    case GET4: case GET5: case GET6: case GET7:
      return;

    // Operators that consume one expression
    case SET0: case SET1: case SET2: case SET3:
    case SET4: case SET5: case SET6: case SET7:
    case NOT:
    case DELAY:
    case HUE: case RAND: case SRAND:
    case FILL:
      return skip(vm);

    // Operators that consume two expressions
    case ADD: case SUB: case MUL: case DIV: case MOD:
    case LT: case GT: case LTE: case GTE: case EQ: case NEQ:
    case AND: case OR: case WHILE: case IF:
    case PINA: case PINB: case WRITE: case FADE:
      return skip(vm), skip(vm);

    // Consume 3
    case RGB: case MIX:
      return skip(vm), skip(vm), skip(vm);

    // Operators that consume 4 expressions
    case FOR0: case FOR1: case FOR2: case FOR3:
    case FOR4: case FOR5: case FOR6: case FOR7:
      return skip(vm), skip(vm), skip(vm), skip(vm);

    case DO: return skip_do(vm);

    case END:
      vm->on_error(op, "Illegal opcode");
  }
  vm->on_error(op, "Unknown opcode");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rcx
movq 0x58(%rcx), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0x58(%rcx)
movzbl (%rax), %eax
movl %eax, -0xc(%rbp)
cmpl $0x80, -0xc(%rbp)
jae 0x22c3
jmp 0x23dd
movl -0xc(%rbp), %eax
addl $-0x80, %eax
movl %eax, %ecx
movq %rcx, -0x18(%rbp)
subl $0x39, %eax
ja 0x23c9
movq -0x18(%rbp), %rax
leaq 0xe09(%rip), %rcx       # 0x30ec
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x58(%rax)
jmp 0x23dd
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rcx
addq $0x2, %rcx
movq %rcx, 0x58(%rax)
jmp 0x23dd
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rcx
addq $0x3, %rcx
movq %rcx, 0x58(%rax)
jmp 0x23dd
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rcx
addq $0x4, %rcx
movq %rcx, 0x58(%rax)
jmp 0x23dd
jmp 0x23dd
movq -0x8(%rbp), %rdi
callq 0x2290
jmp 0x23dd
movq -0x8(%rbp), %rdi
callq 0x2290
movq -0x8(%rbp), %rdi
callq 0x2290
jmp 0x23dd
movq -0x8(%rbp), %rdi
callq 0x2290
movq -0x8(%rbp), %rdi
callq 0x2290
movq -0x8(%rbp), %rdi
callq 0x2290
jmp 0x23dd
movq -0x8(%rbp), %rdi
callq 0x2290
movq -0x8(%rbp), %rdi
callq 0x2290
movq -0x8(%rbp), %rdi
callq 0x2290
movq -0x8(%rbp), %rdi
callq 0x2290
jmp 0x23dd
movq -0x8(%rbp), %rdi
callq 0x23f0
jmp 0x23dd
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movl -0xc(%rbp), %edi
leaq 0xe0d(%rip), %rsi       # 0x31d4
callq *%rax
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movl -0xc(%rbp), %edi
leaq 0xe08(%rip), %rsi       # 0x31e3
callq *%rax
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)