// File: /workspace/github_c_makefile_star2_O0/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 %rbp
movq %rsp, %rbp
subq $0x40, %rsp
leaq 0x10(%rbp), %rax
movq %rax, -0x10(%rbp)
movl (%rax), %eax
addl $-0x4, %eax
movl %eax, %ecx
movq %rcx, -0x8(%rbp)
subl $0x9, %eax
ja 0x10243
movq -0x8(%rbp), %rax
leaq 0xa9b9(%rip), %rcx      # 0x1a998
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
cmpl $0x0, 0x11201(%rip)     # 0x211f0
je 0x10011
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movl 0xc(%rcx), %esi
movq 0x8(%rax), %rax
movq (%rax), %rdx
leaq 0xab45(%rip), %rdi      # 0x1ab4f
movb $0x0, %al
callq 0x20d0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movl 0xc(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0xc(%rcx)
cmpl $0x0, %eax
jg 0x10049
movq -0x10(%rbp), %rcx
movq 0x20(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x20(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0x10400
jmp 0x10245
cmpl $0x0, 0x1119b(%rip)     # 0x211f0
je 0x10077
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movl 0x8(%rcx), %esi
movq 0x8(%rax), %rax
movq (%rax), %rdx
leaq 0xaaf0(%rip), %rdi      # 0x1ab60
movb $0x0, %al
callq 0x20d0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movl 0x8(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0x8(%rcx)
cmpl $0x0, %eax
jg 0x100af
movq -0x10(%rbp), %rcx
movq 0x20(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x20(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0x10400
jmp 0x10245
cmpl $0x0, 0x11135(%rip)     # 0x211f0
je 0x100dd
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movl 0x8(%rcx), %esi
movq 0x8(%rax), %rax
movq (%rax), %rdx
leaq 0xaa9d(%rip), %rdi      # 0x1ab73
movb $0x0, %al
callq 0x20d0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movl 0x8(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0x8(%rcx)
cmpl $0x0, %eax
jg 0x10115
movq -0x10(%rbp), %rcx
movq 0x20(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x20(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0x10400
jmp 0x10245
cmpl $0x0, 0x110cf(%rip)     # 0x211f0
je 0x10143
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movl 0xc(%rcx), %esi
movq 0x8(%rax), %rax
movq (%rax), %rdx
leaq 0xaa49(%rip), %rdi      # 0x1ab85
movb $0x0, %al
callq 0x20d0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movl 0xc(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0xc(%rcx)
cmpl $0x0, %eax
jg 0x1017b
movq -0x10(%rbp), %rcx
movq 0x20(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x20(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0x10400
jmp 0x10245
cmpl $0x0, 0x11069(%rip)     # 0x211f0
je 0x101a9
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movl 0x8(%rcx), %esi
movq 0x8(%rax), %rax
movq (%rax), %rdx
leaq 0xa9f7(%rip), %rdi      # 0x1ab99
movb $0x0, %al
callq 0x20d0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movl 0x8(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0x8(%rcx)
cmpl $0x0, %eax
jg 0x101e1
movq -0x10(%rbp), %rcx
movq 0x20(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x20(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0x10400
jmp 0x10245
cmpl $0x0, 0x11006(%rip)     # 0x211f0
je 0x10209
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movl 0x18(%rcx), %esi
movq 0x8(%rax), %rdx
leaq 0xa9a8(%rip), %rdi      # 0x1abaa
movb $0x0, %al
callq 0x20d0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movl 0x18(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0x18(%rcx)
cmpl $0x0, %eax
jg 0x10241
movq -0x10(%rbp), %rcx
movq 0x20(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x20(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0x10400
jmp 0x10245
jmp 0x10245
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax,%rax)