int Physics_ApplyDamping(int a0, int a1, int a2) __attribute__((naked));
int Physics_ApplyDamping(int a0, int a1, int a2)
{
  (void)a0; (void)a1; (void)a2;
  __asm__ volatile(
  ".syntax unified\n"
  ".thumb\n"
  "push {r4, r5, r6, r7, lr}\n"
  "mov r7, r8\n"
  "push {r7}\n"
  "sub sp, #8\n"
  "mov r8, r0\n"
  "adds r5, r1, #0\n"
  "adds r4, r2, #0\n"
  "bl Physics_BounceReflect\n"
  "adds r7, r0, #0\n"
  "bl Object_Find\n"
  "adds r6, r0, #0\n"
  "cmp r4, #1\n"
  "bne mode2_%=\n"
  "cmp r6, #20\n"
  "bne m1cont_%=\n"
  "movs r0, #1\n"
  "negs r0, r0\n"
  "b ret_%=\n"
  "m1cont_%=:\n"
  "ldr r0, .Ltab\n"
  "lsls r1, r6, #3\n"
  "adds r0, #4\n"
  "adds r1, r1, r0\n"
  "ldr r0, [r1, #0]\n"
  "adds r5, r5, r0\n"
  "movs r4, #0\n"
  "mode2_%=:\n"
  "cmp r4, #2\n"
  "bne tail_%=\n"
  "str r7, [sp, #0]\n"
  "movs r3, #12\n"
  "adds r0, r3, #0\n"
  "mov r1, sp\n"
  "svc 0xAB\n"
  "adds r2, r0, #0\n"
  "adds r5, r5, r2\n"
  "tail_%=:\n"
  "mov r0, r8\n"
  "bl Physics_BounceReflect\n"
  "str r0, [sp, #0]\n"
  "str r5, [sp, #4]\n"
  "movs r3, #10\n"
  "adds r0, r3, #0\n"
  "mov r1, sp\n"
  "svc 0xAB\n"
  "adds r2, r0, #0\n"
  "cmp r6, #20\n"
  "beq neg1_%=\n"
  "cmp r2, #0\n"
  "bne neg1_%=\n"
  "ldr r0, .Ltab\n"
  "lsls r1, r6, #3\n"
  "adds r0, #4\n"
  "adds r1, r1, r0\n"
  "str r5, [r1, #0]\n"
  "neg1_%=:\n"
  "movs r0, #1\n"
  "negs r0, r0\n"
  "cmp r2, #0\n"
  "bne ret_%=\n"
  "adds r0, r5, #0\n"
  "ret_%=:\n"
  "add sp, #8\n"
  "pop {r3}\n"
  "mov r8, r3\n"
  "pop {r4, r5, r6, r7, pc}\n"
  ".align 2\n"
  ".Ltab: .word 0x02001518\n"
  ::: "r0","r1","r2","r3","r4","r5","r6","r7","memory");
}
