void BG_BlendChannel(int a, int b, int c) __attribute__((naked));
void BG_BlendChannel(int a, int b, int c)
{
  (void)a; (void)b; (void)c;
  __asm__ volatile(
  ".syntax unified\n"
  ".thumb\n"
  "push {r4, r5, r6, r7, lr}\n"
  "lsls r0, r0, #24\n"
  "lsrs r0, r0, #24\n"
  "lsls r1, r1, #24\n"
  "lsrs r5, r1, #24\n"
  "lsls r2, r2, #24\n"
  "lsrs r2, r2, #24\n"
  "mov ip, r2\n"
  "cmp r0, #4\n"
  "bne Lnz4_%=\n"
  "cmp r5, #20\n"
  "bhi Lhi_%=\n"
  "movs r5, #0\n"
  "b Ltab4_%=\n"
  "Lhi_%=:\n"
  "adds r0, r5, #0\n"
  "subs r0, #21\n"
  "lsls r0, r0, #24\n"
  "lsrs r5, r0, #24\n"
  "cmp r5, #59\n"
  "bls Ltab4_%=\n"
  "movs r5, #59\n"
  "Ltab4_%=:\n"
  "ldr r0, .LpA\n"
  "adds r0, r5, r0\n"
  "ldrb r0, [r0, #0]\n"
  "b Lepi_%=\n"
  ".hword 0x0000\n"
  ".LpA: .word 0x08547080\n"
  "Lnz4_%=:\n"
  "cmp r5, #35\n"
  "bhi Lhi2_%=\n"
  "movs r0, #0\n"
  "mov ip, r0\n"
  "movs r5, #0\n"
  "b Ltab5_%=\n"
  "Lhi2_%=:\n"
  "adds r0, r5, #0\n"
  "subs r0, #36\n"
  "lsls r0, r0, #24\n"
  "lsrs r5, r0, #24\n"
  "cmp r5, #130\n"
  "bls Ltab5_%=\n"
  "movs r5, #130\n"
  "movs r1, #255\n"
  "mov ip, r1\n"
  "Ltab5_%=:\n"
  "ldr r3, .LpB\n"
  "adds r0, r5, r3\n"
  "ldrb r6, [r0, #0]\n"
  "ldr r4, .LpC\n"
  "movs r2, #15\n"
  "adds r0, r6, #0\n"
  "ands r0, r2\n"
  "lsls r0, r0, #1\n"
  "adds r0, r0, r4\n"
  "movs r7, #0\n"
  "ldrsh r1, [r0, r7]\n"
  "asrs r0, r6, #4\n"
  "adds r6, r1, #0\n"
  "asrs r6, r0\n"
  "adds r0, r5, #1\n"
  "adds r0, r0, r3\n"
  "ldrb r1, [r0, #0]\n"
  "adds r0, r1, #0\n"
  "ands r0, r2\n"
  "lsls r0, r0, #1\n"
  "adds r0, r0, r4\n"
  "movs r2, #0\n"
  "ldrsh r0, [r0, r2]\n"
  "asrs r1, r1, #4\n"
  "asrs r0, r1\n"
  "subs r0, r0, r6\n"
  "mov r7, ip\n"
  "muls r7, r0\n"
  "adds r0, r7, #0\n"
  "asrs r0, r0, #8\n"
  "adds r0, r6, r0\n"
  "movs r1, #128\n"
  "lsls r1, r1, #4\n"
  "adds r0, r0, r1\n"
  "Lepi_%=:\n"
  "pop {r4, r5, r6, r7}\n"
  "pop {r1}\n"
  "bx r1\n"
  ".LpB: .word 0x08546FE4\n"
  ".LpC: .word 0x08547068\n"
  ::: "r0","r1","r2","r3","r4","r5","r6","r7","memory");
}
