// File: /workspace/github_c_makefile_star2_O0/tylerneylon[P]APIsWithLua/lua/lgc.c
// Function: reallymarkobject
static void reallymarkobject (global_State *g, GCObject *o) {
 reentry:
  white2gray(o);
  switch (o->tt) {
    case LUA_TSHRSTR: {
      gray2black(o);
      g->GCmemtrav += sizelstring(gco2ts(o)->shrlen);
      break;
    }
    case LUA_TLNGSTR: {
      gray2black(o);
      g->GCmemtrav += sizelstring(gco2ts(o)->u.lnglen);
      break;
    }
    case LUA_TUSERDATA: {
      TValue uvalue;
      markobjectN(g, gco2u(o)->metatable);  /* mark its metatable */
      gray2black(o);
      g->GCmemtrav += sizeudata(gco2u(o));
      getuservalue(g->mainthread, gco2u(o), &uvalue);
      if (valiswhite(&uvalue)) {  /* markvalue(g, &uvalue); */
        o = gcvalue(&uvalue);
        goto reentry;
      }
      break;
    }
    case LUA_TLCL: {
      linkgclist(gco2lcl(o), g->gray);
      break;
    }
    case LUA_TCCL: {
      linkgclist(gco2ccl(o), g->gray);
      break;
    }
    case LUA_TTABLE: {
      linkgclist(gco2t(o), g->gray);
      break;
    }
    case LUA_TTHREAD: {
      linkgclist(gco2th(o), g->gray);
      break;
    }
    case LUA_TPROTO: {
      linkgclist(gco2p(o), g->gray);
      break;
    }
    default: lua_assert(0); break;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movb 0x9(%rax), %cl
andb $-0x4, %cl
movb %cl, 0x9(%rax)
movq -0x10(%rbp), %rax
movzbl 0x8(%rax), %eax
addl $-0x4, %eax
movl %eax, %ecx
movq %rcx, -0x38(%rbp)
subl $0x22, %eax
ja 0xd80c
movq -0x38(%rbp), %rax
leaq 0x2708e(%rip), %rcx     # 0x346e0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rax
movzbl 0x9(%rax), %ecx
orl $0x4, %ecx
movb %cl, 0x9(%rax)
movq -0x10(%rbp), %rax
movzbl 0xb(%rax), %eax
addl $0x1, %eax
movslq %eax, %rcx
shlq $0x0, %rcx
addq $0x18, %rcx
movq -0x8(%rbp), %rax
addq 0x20(%rax), %rcx
movq %rcx, 0x20(%rax)
jmp 0xd80e
movq -0x10(%rbp), %rax
movzbl 0x9(%rax), %ecx
orl $0x4, %ecx
movb %cl, 0x9(%rax)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
shlq $0x0, %rcx
addq $0x18, %rcx
movq -0x8(%rbp), %rax
addq 0x20(%rax), %rcx
movq %rcx, 0x20(%rax)
jmp 0xd80e
movq -0x10(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xd6f5
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movzbl 0x9(%rax), %eax
andl $0x3, %eax
cmpl $0x0, %eax
je 0xd6f3
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xd610
jmp 0xd6f5
movq -0x10(%rbp), %rax
movzbl 0x9(%rax), %ecx
orl $0x4, %ecx
movb %cl, 0x9(%rax)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rcx
addq $0x28, %rcx
movq -0x8(%rbp), %rax
addq 0x20(%rax), %rcx
movq %rcx, 0x20(%rax)
leaq -0x20(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
movq -0x30(%rbp), %rcx
movq 0x20(%rcx), %rcx
movq %rcx, (%rax)
movq -0x30(%rbp), %rax
movzbl 0xa(%rax), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x8(%rax)
movl -0x18(%rbp), %eax
andl $0x40, %eax
cmpl $0x0, %eax
je 0xd771
movq -0x20(%rbp), %rax
movzbl 0x9(%rax), %eax
andl $0x3, %eax
cmpl $0x0, %eax
je 0xd771
movq -0x20(%rbp), %rax
movq %rax, -0x10(%rbp)
jmp 0xd620
jmp 0xd80e
movq -0x8(%rbp), %rax
movq 0x70(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x10(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x70(%rax)
jmp 0xd80e
movq -0x8(%rbp), %rax
movq 0x70(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x10(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x70(%rax)
jmp 0xd80e
movq -0x8(%rbp), %rax
movq 0x70(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x10(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x70(%rax)
jmp 0xd80e
movq -0x8(%rbp), %rax
movq 0x70(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x10(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x70(%rax)
jmp 0xd80e
movq -0x8(%rbp), %rax
movq 0x70(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x70(%rax)
movq -0x10(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x70(%rax)
jmp 0xd80e
jmp 0xd80e
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)