extern int Image_DrawLineH(int, int);
void Image_ParseTileHeader(int a) __attribute__((naked));
void Image_ParseTileHeader(int a)
{
  (void)a;
  __asm__ volatile(
  ".syntax unified\n"
  ".thumb\n"
  "push {r4, r5, r6, r7, lr}\n"
  "sub sp, #4\n"
  "adds r7, r0, #0\n"
  "ldr r1, [r7, #52]\n"
  "ldr r0, .Lp0\n"
  "cmp r1, r0\n"
  "bne Lepi_%=\n"
  "adds r0, r1, #1\n"
  "str r0, [r7, #52]\n"
  "ldrb r5, [r7, #8]\n"
  "ldr r4, [r7, #44]\n"
  "cmp r5, #0\n"
  "ble Ldone_%=\n"
  "movs r2, #128\n"
  "Ltop_%=:\n"
  "ldrb r1, [r4, #0]\n"
  "adds r0, r2, #0\n"
  "ands r0, r1\n"
  "cmp r0, #0\n"
  "beq Lnext_%=\n"
  "movs r6, #64\n"
  "adds r0, r6, #0\n"
  "ands r0, r1\n"
  "cmp r0, #0\n"
  "beq Lnext_%=\n"
  "adds r0, r4, #0\n"
  "str r2, [sp, #0]\n"
  "bl Image_DrawLineH\n"
  "ldr r2, [sp, #0]\n"
  "strb r2, [r4, #0]\n"
  "movs r0, #2\n"
  "strb r0, [r4, #15]\n"
  "strb r6, [r4, #19]\n"
  "movs r0, #22\n"
  "strb r0, [r4, #25]\n"
  "adds r1, r4, #0\n"
  "adds r1, #36\n"
  "movs r0, #1\n"
  "strb r0, [r1, #0]\n"
  "Lnext_%=:\n"
  "subs r5, #1\n"
  "adds r4, #80\n"
  "cmp r5, #0\n"
  "bgt Ltop_%=\n"
  "Ldone_%=:\n"
  "ldr r0, .Lp0\n"
  "str r0, [r7, #52]\n"
  "Lepi_%=:\n"
  "add sp, #4\n"
  "pop {r4, r5, r6, r7}\n"
  "pop {r0}\n"
  "bx r0\n"
  ".hword 0x0000\n"
  ".Lp0: .word 0x68736D53\n"
  ::: "r0","r1","r2","r3","r4","r5","r6","r7","memory");
}
