extern void Physics_Finalize(int);
extern void Physics_CleanupAndFree(int);
extern int Float_Init(int, int);
extern int Mem_CompareAndAlloc(int, int);
int Float_Negate(int a, int b) __attribute__((naked));
int Float_Negate(int a, int b)
{
  (void)a; (void)b;
  __asm__ volatile(
  ".syntax unified\n"
  ".thumb\n"
  "push {r4, r5, r6, r7, lr}\n"
  "mov r7, r8\n"
  "push {r7}\n"
  "adds r7, r0, #0\n"
  "adds r4, r1, #0\n"
  "bl Physics_Finalize\n"
  "ldr r0, .Lp0\n"
  "mov r8, r0\n"
  "ldr r0, [r0, #8]\n"
  "ldr r6, [r0, #4]\n"
  "movs r0, #4\n"
  "negs r0, r0\n"
  "ands r6, r0\n"
  "subs r4, r6, r4\n"
  "movs r5, #128\n"
  "lsls r5, r5, #5\n"
  "ldr r1, .Lp1\n"
  "adds r4, r4, r1\n"
  "adds r0, r4, #0\n"
  "adds r1, r5, #0\n"
  "bl Mem_CompareAndAlloc\n"
  "subs r0, #1\n"
  "lsls r4, r0, #12\n"
  "cmp r4, r5\n"
  "blt Ljoin_%=\n"
  "adds r0, r7, #0\n"
  "movs r1, #0\n"
  "bl Float_Init\n"
  "adds r2, r0, #0\n"
  "mov r1, r8\n"
  "ldr r0, [r1, #8]\n"
  "adds r0, r0, r6\n"
  "cmp r2, r0\n"
  "bne Ljoin_%=\n"
  "negs r1, r4\n"
  "adds r0, r7, #0\n"
  "bl Float_Init\n"
  "movs r1, #1\n"
  "negs r1, r1\n"
  "cmp r0, r1\n"
  "bne Lalt_%=\n"
  "adds r0, r7, #0\n"
  "movs r1, #0\n"
  "bl Float_Init\n"
  "adds r2, r0, #0\n"
  "mov r0, r8\n"
  "ldr r3, [r0, #8]\n"
  "subs r6, r2, r3\n"
  "cmp r6, #15\n"
  "ble Ljoin_%=\n"
  "ldr r1, .Lp2\n"
  "ldr r0, .Lp3\n"
  "ldr r0, [r0, #0]\n"
  "subs r0, r2, r0\n"
  "str r0, [r1, #0]\n"
  "movs r0, #1\n"
  "orrs r6, r0\n"
  "str r6, [r3, #4]\n"
  "Ljoin_%=:\n"
  "adds r0, r7, #0\n"
  "bl Physics_CleanupAndFree\n"
  "movs r0, #0\n"
  "b Lret_%=\n"
  ".Lp0: .word 0x02000208\n"
  ".Lp1: .word 0x00000FEF\n"
  ".Lp2: .word 0x02000624\n"
  ".Lp3: .word 0x02000618\n"
  "Lalt_%=:\n"
  "mov r1, r8\n"
  "ldr r2, [r1, #8]\n"
  "subs r0, r6, r4\n"
  "movs r1, #1\n"
  "orrs r0, r1\n"
  "str r0, [r2, #4]\n"
  "ldr r1, .Lp2b\n"
  "ldr r0, [r1, #0]\n"
  "subs r0, r0, r4\n"
  "str r0, [r1, #0]\n"
  "adds r0, r7, #0\n"
  "bl Physics_CleanupAndFree\n"
  "movs r0, #1\n"
  "Lret_%=:\n"
  "pop {r3}\n"
  "mov r8, r3\n"
  "pop {r4, r5, r6, r7, pc}\n"
  ".hword 0x0000\n"
  ".Lp2b: .word 0x02000624\n"
  ::: "r0","r1","r2","r3","r4","r5","r6","r7","memory");
}
