// File: /workspace/github_c_makefile_star2_O3/mattn[P]orelang/ore.c
// Function: ore_value_unref
void
ore_value_unref(ore_value v) {
  switch (v.t) {
    case ORE_TYPE_STRING:
      if (verbose)
        printf("unref str %d %s\n", v.v.s->ref, v.v.s->p);
      if (--v.v.s->ref <= 0)
        ore_value_real_free(v);
      break;
    case ORE_TYPE_ARRAY:
      if (verbose)
        printf("unref array %d %p\n", v.v.a->ref, v.v.a->p);
      if (--v.v.a->ref <= 0)
        ore_value_real_free(v);
      break;
    case ORE_TYPE_HASH:
      if (verbose)
        printf("unref hash %d %p\n", v.v.h->ref, v.v.h->p);
      if (--v.v.h->ref <= 0)
        ore_value_real_free(v);
      break;
    case ORE_TYPE_REGEXP:
      if (verbose)
        printf("unref regexp %d %p\n", v.v.r->ref, v.v.r->p);
      if (--v.v.r->ref <= 0)
        ore_value_real_free(v);
      break;
    case ORE_TYPE_ENV:
      if (verbose)
        printf("unref env %d %p\n", v.v.e->ref, v.v.e->p);
      if (--v.v.e->ref <= 0)
        ore_value_real_free(v);
      break;
    case ORE_TYPE_OBJECT:
      if (verbose)
        printf("unref object %d %p\n", v.v.o->ref, v.v.o);
      if (--v.v.o->ref <= 0)
        ore_value_real_free(v);
      break;
    default: 
      break;
  }
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x80, %rsp
movl 0xb0(%rsp), %ecx
addl $-0x4, %ecx
cmpl $0x9, %ecx
ja 0xcaa8
leaq 0xb0(%rsp), %rax
leaq 0x811f(%rip), %rdx      # 0x14834
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
cmpl $0x0, 0xfae3(%rip)      # 0x1c208
movq 0x8(%rax), %rbx
je 0xc73f
movl 0xc(%rbx), %esi
movq (%rbx), %rdx
leaq 0x832b(%rip), %rdi      # 0x14a63
xorl %eax, %eax
callq 0x20e0
movl 0xc(%rbx), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0xc(%rbx)
cmpl $0x2, %eax
jge 0xcaa8
cmpl $0x0, 0xfab0(%rip)      # 0x1c208
je 0xc9cc
movq (%rbx), %rsi
leaq 0x97d9(%rip), %rdi      # 0x15f41
jmp 0xc9c5
cmpl $0x0, 0xfa94(%rip)      # 0x1c208
movq 0x8(%rax), %rbx
je 0xc78e
movl 0x8(%rbx), %esi
movq (%rbx), %rdx
leaq 0x8300(%rip), %rdi      # 0x14a87
xorl %eax, %eax
callq 0x20e0
movl 0x8(%rbx), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0x8(%rbx)
cmpl $0x2, %eax
jge 0xcaa8
cmpl $0x0, 0xfa61(%rip)      # 0x1c208
je 0xc7ba
movq (%rbx), %rsi
leaq 0x97aa(%rip), %rdi      # 0x15f5d
xorl %eax, %eax
callq 0x20e0
movq (%rbx), %r14
testq %r14, %r14
je 0xcaa0
movq 0x18(%r14), %rdi
callq 0x22c0
movq 0x10(%r14), %rdi
callq 0x22c0
movq 0x20(%r14), %rdi
jmp 0xca93
cmpl $0x0, 0xfa20(%rip)      # 0x1c208
movq 0x8(%rax), %rbx
je 0xc802
movl 0x18(%rbx), %esi
leaq 0x82c6(%rip), %rdi      # 0x14abe
movq %rbx, %rdx
xorl %eax, %eax
callq 0x20e0
movl 0x18(%rbx), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0x18(%rbx)
cmpl $0x2, %eax
jge 0xcaa8
cmpl $0x0, 0xf9ed(%rip)      # 0x1c208
je 0xc82e
leaq 0x9764(%rip), %rdi      # 0x15f88
movq %rbx, %rsi
xorl %eax, %eax
callq 0x20e0
movq 0x10(%rbx), %rsi
leaq 0x975f(%rip), %rdx      # 0x15f98
leaq 0x30(%rsp), %r14
movq %r14, %rdi
callq 0xccb4
cmpl $0x8, (%r14)
jne 0xcaa0
movq 0x10(%rbx), %rsi
movq 0x50(%rsp), %rax
movq %rax, 0x20(%rsp)
movups 0x30(%rsp), %xmm0
movups 0x40(%rsp), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
leaq 0x58(%rsp), %rdi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0xd774
jmp 0xcaa0
cmpl $0x0, 0xf97d(%rip)      # 0x1c208
movq 0x8(%rax), %rbx
je 0xc8a5
movl 0x8(%rbx), %esi
movq (%rbx), %rdx
leaq 0x81d6(%rip), %rdi      # 0x14a74
xorl %eax, %eax
callq 0x20e0
movl 0x8(%rbx), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0x8(%rbx)
cmpl $0x2, %eax
jge 0xcaa8
cmpl $0x0, 0xf94a(%rip)      # 0x1c208
je 0xc8d1
movq (%rbx), %rsi
leaq 0x9684(%rip), %rdi      # 0x15f4e
xorl %eax, %eax
callq 0x20e0
movq (%rbx), %r14
movq (%r14), %r15
cmpq 0x8(%r14), %r15
je 0xc935
movl $0x10, %r12d
movq 0x10(%r14), %r13
decq (%r13)
movq 0x8(%r13), %rcx
cmpq 0x10(%r13), %rcx
jne 0xc91b
leaq (%rcx,%rcx), %rsi
testq %rcx, %rcx
cmoveq %r12, %rsi
movq %rsi, 0x10(%r13)
movq 0x18(%r13), %rdi
shlq $0x3, %rsi
callq 0x21e0
movq %rax, 0x18(%r13)
movq 0x8(%r13), %rcx
jmp 0xc91f
movq 0x18(%r13), %rax
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%r13)
movq %r15, (%rax,%rcx,8)
movq 0x28(%r15), %r15
cmpq 0x8(%r14), %r15
jne 0xc8e3
movq 0x10(%r14), %r12
decq (%r12)
movq 0x8(%r12), %rcx
cmpq 0x10(%r12), %rcx
jne 0xca2b
leaq (%rcx,%rcx), %rax
testq %rcx, %rcx
movl $0x10, %esi
cmovneq %rax, %rsi
movq %rsi, 0x10(%r12)
movq 0x18(%r12), %rdi
shlq $0x3, %rsi
callq 0x21e0
movq %rax, 0x18(%r12)
movq 0x8(%r12), %rcx
jmp 0xca30
cmpl $0x0, 0xf882(%rip)      # 0x1c208
movq 0x8(%rax), %rbx
je 0xc9a0
movl 0xc(%rbx), %esi
movq (%rbx), %rdx
leaq 0x8100(%rip), %rdi      # 0x14a99
xorl %eax, %eax
callq 0x20e0
movl 0xc(%rbx), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0xc(%rbx)
cmpl $0x2, %eax
jge 0xcaa8
cmpl $0x0, 0xf84f(%rip)      # 0x1c208
je 0xc9cc
movq (%rbx), %rsi
leaq 0x95a6(%rip), %rdi      # 0x15f6b
xorl %eax, %eax
callq 0x20e0
movq (%rbx), %rdi
jmp 0xca9b
cmpl $0x0, 0xf82d(%rip)      # 0x1c208
movq 0x8(%rax), %rbx
je 0xc9f5
movl 0x8(%rbx), %esi
movq (%rbx), %rdx
leaq 0x80bf(%rip), %rdi      # 0x14aad
xorl %eax, %eax
callq 0x20e0
movl 0x8(%rbx), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0x8(%rbx)
cmpl $0x2, %eax
jge 0xcaa8
cmpl $0x0, 0xf7fa(%rip)      # 0x1c208
je 0xca21
movq (%rbx), %rsi
leaq 0x9561(%rip), %rdi      # 0x15f7b
xorl %eax, %eax
callq 0x20e0
movq (%rbx), %rdi
callq 0xed53
jmp 0xcaa8
movq 0x18(%r12), %rax
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%r12)
movq %r15, (%rax,%rcx,8)
movq 0x10(%r14), %r15
cmpq $0x0, 0x8(%r15)
je 0xca87
xorl %r12d, %r12d
movq 0x18(%r15), %rax
movq (%rax,%r12,8), %rax
movq 0x20(%rax), %rcx
movq %rcx, 0x20(%rsp)
movups (%rax), %xmm0
movups 0x10(%rax), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0xc6e3
movq 0x18(%r15), %rax
movq (%rax,%r12,8), %rdi
callq 0x22c0
incq %r12
cmpq 0x8(%r15), %r12
jb 0xca4b
movq 0x18(%r15), %rdi
callq 0x22c0
movq %r15, %rdi
callq 0x22c0
movq %r14, %rdi
callq 0x22c0
movq %rbx, %rdi
callq 0x22c0
addq $0x80, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq