extern int Sub_0800CAA4(int);
extern int Sub_0800CB18(int);
extern int Sub_0800D000(int);
extern int Sub_0800D0B8(int);
extern int Sub_0800D0D0(int);
void Sub_0800C9AC(int a) __attribute__((naked));
void Sub_0800C9AC(int a)
{
  (void)a;
  __asm__ volatile(
  ".syntax unified\n"
  ".thumb\n"
  "Sec_%=:\n"
  "push {r4, lr}\n"
  "adds r4, r0, #0\n"
  "movs r1, #130\n"
  "lsls r1, r1, #4\n"
  "adds r0, r4, r1\n"
  "ldrb r0, [r0, #0]\n"
  "movs r1, #128\n"
  "lsls r1, r1, #2\n"
  "adds r3, r1, #0\n"
  "cmp r0, #0\n"
  "beq QQL800C9C8_%=\n"
  "movs r0, #192\n"
  "lsls r0, r0, #2\n"
  "adds r3, r0, #0\n"
  "QQL800C9C8_%=:\n"
  "ldr	r0, .LpQ800C9E8\n"
  "ldr r1, [r0, #0]\n"
  "movs r2, #0\n"
  "strh r3, [r1, #0]\n"
  "ldr	r0, .LpQ800C9EC\n"
  "strh r0, [r1, #16]\n"
  "strh r2, [r1, #32]\n"
  "strh r2, [r1, #36]\n"
  "ldr r0, [r4, #0]\n"
  "cmp r0, #4\n"
  "bhi QQL800CA2E_%=\n"
  "lsls r0, r0, #2\n"
  "ldr	r1, .LpQ800C9F0\n"
  "adds r0, r0, r1\n"
  "ldr r0, [r0, #0]\n"
  "mov pc, r0\n"
  ".LpQ800C9E8: .word 0x02000144\n"
  ".LpQ800C9EC: .word 0x00001801\n"
  ".LpQ800C9F0: .word 0x0800C9F4\n"
  "ldmia r2!, {r3}\n"
  "lsrs r0, r0, #32\n"
  "ldmia r2!, {r4}\n"
  "lsrs r0, r0, #32\n"
  "ldmia r2!, {r3, r4}\n"
  "lsrs r0, r0, #32\n"
  "ldmia r2!, {r5}\n"
  "lsrs r0, r0, #32\n"
  "ldmia r2!, {r3, r5}\n"
  "lsrs r0, r0, #32\n"
  "adds r0, r4, #0\n"
  "bl Sub_0800CAA4\n"
  "b QQL800CA2E_%=\n"
  "adds r0, r4, #0\n"
  "bl Sub_0800CB18\n"
  "b QQL800CA2E_%=\n"
  "adds r0, r4, #0\n"
  "bl Sub_0800D000\n"
  "b QQL800CA2E_%=\n"
  "adds r0, r4, #0\n"
  "bl Sub_0800D0B8\n"
  "b QQL800CA2E_%=\n"
  "adds r0, r4, #0\n"
  "bl Sub_0800D0D0\n"
  "QQL800CA2E_%=:\n"
  "ldr r0, [r4, #0]\n"
  "ldr r1, [r4, #8]\n"
  "cmp r0, r1\n"
  "beq QQL800CA3E_%=\n"
  "str r0, [r4, #4]\n"
  "str r1, [r4, #0]\n"
  "movs r0, #0\n"
  "b QQL800CA42_%=\n"
  "QQL800CA3E_%=:\n"
  "ldr r0, [r4, #16]\n"
  "adds r0, #1\n"
  "QQL800CA42_%=:\n"
  "str r0, [r4, #16]\n"
  "pop {r4}\n"
  "pop {r0}\n"
  "bx r0\n"
  ::: "r0","r1","r2","r3","memory");
}
