// File: srajangarg[P]raytracer/src/core/stb_image.hpp
// Function: stbi__out_gif_code(stbi__gif*, unsigned short)
static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code)
{
   stbi_uc *p, *c;

   // recurse to decode the prefixes, since the linked-list is backwards,
   // and working backwards through an interleaved image would be nasty
   if (g->codes[code].prefix >= 0)
      stbi__out_gif_code(g, g->codes[code].prefix);

   if (g->cur_y >= g->max_y) return;

   p = &g->out[g->cur_x + g->cur_y];
   c = &g->color_table[g->codes[code].suffix * 4];

   if (c[3] >= 128) {
      p[0] = c[2];
      p[1] = c[1];
      p[2] = c[0];
      p[3] = c[3];
   }
   g->cur_x += 4;

   if (g->cur_x >= g->max_x) {
      g->cur_x = g->start_x;
      g->cur_y += g->step;

      while (g->cur_y >= g->max_y && g->parse > 0) {
         g->step = (1 << g->parse) * g->line_size;
         g->cur_y = g->start_y + (g->step >> 1);
         --g->parse;
      }
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movw %si, %ax
movq %rdi, -0x8(%rbp)
movw %ax, -0xa(%rbp)
movq -0x8(%rbp), %rax
movzwl -0xa(%rbp), %ecx
movswl 0x830(%rax,%rcx,4), %eax
cmpl $0x0, %eax
jl 0x347b1
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rax
movzwl -0xa(%rbp), %ecx
movzwl 0x830(%rax,%rcx,4), %esi
callq 0x34770
movq -0x8(%rbp), %rax
movl 0x4858(%rax), %eax
movq -0x8(%rbp), %rcx
cmpl 0x4850(%rcx), %eax
jl 0x347cc
jmp 0x34953
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x8(%rbp), %rcx
movl 0x4854(%rcx), %ecx
movq -0x8(%rbp), %rdx
addl 0x4858(%rdx), %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq 0x4830(%rax), %rax
movq -0x8(%rbp), %rcx
movzwl -0xa(%rbp), %edx
movzbl 0x833(%rcx,%rdx,4), %ecx
shll $0x2, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movzbl 0x3(%rax), %eax
cmpl $0x80, %eax
jl 0x3485f
movq -0x20(%rbp), %rax
movb 0x2(%rax), %cl
movq -0x18(%rbp), %rax
movb %cl, (%rax)
movq -0x20(%rbp), %rax
movb 0x1(%rax), %cl
movq -0x18(%rbp), %rax
movb %cl, 0x1(%rax)
movq -0x20(%rbp), %rax
movb (%rax), %cl
movq -0x18(%rbp), %rax
movb %cl, 0x2(%rax)
movq -0x20(%rbp), %rax
movb 0x3(%rax), %cl
movq -0x18(%rbp), %rax
movb %cl, 0x3(%rax)
movq -0x8(%rbp), %rax
movl 0x4854(%rax), %ecx
addl $0x4, %ecx
movl %ecx, 0x4854(%rax)
movq -0x8(%rbp), %rax
movl 0x4854(%rax), %eax
movq -0x8(%rbp), %rcx
cmpl 0x484c(%rcx), %eax
jl 0x34953
movq -0x8(%rbp), %rax
movl 0x4844(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x4854(%rax)
movq -0x8(%rbp), %rax
movl 0x483c(%rax), %ecx
movq -0x8(%rbp), %rax
addl 0x4858(%rax), %ecx
movl %ecx, 0x4858(%rax)
movq -0x8(%rbp), %rax
movl 0x4858(%rax), %ecx
movq -0x8(%rbp), %rdx
xorl %eax, %eax
cmpl 0x4850(%rdx), %ecx
movb %al, -0x21(%rbp)
jl 0x348e6
movq -0x8(%rbp), %rax
cmpl $0x0, 0x4838(%rax)
setg %al
movb %al, -0x21(%rbp)
movb -0x21(%rbp), %al
testb $0x1, %al
jne 0x348ef
jmp 0x34951
movq -0x8(%rbp), %rax
movl 0x4838(%rax), %ecx
movl $0x1, %eax
shll %cl, %eax
movl %eax, %ecx
movq -0x8(%rbp), %rax
imull 0x485c(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x483c(%rax)
movq -0x8(%rbp), %rax
movl 0x4848(%rax), %ecx
movq -0x8(%rbp), %rax
movl 0x483c(%rax), %eax
sarl %eax
addl %eax, %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x4858(%rax)
movq -0x8(%rbp), %rax
movl 0x4838(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x4838(%rax)
jmp 0x348ba
jmp 0x34953
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax)