extern int Math_Init(int);
extern int Math_Sqrt(int, int, int);
extern int Mem_PushStack(int);
void Mem_PopStack(void) __attribute__((naked));
void Mem_PopStack(void)
{
  __asm__ volatile(
  ".syntax unified\n"
  ".thumb\n"
  "push {r4, r5, r6, r7, lr}\n"
  "mov r7, sl\n"
  "mov r6, r9\n"
  "mov r5, r8\n"
  "push {r5, r6, r7}\n"
  "ldr r4, .Lp0\n"
  "add sp, r4\n"
  "mov r7, sp\n"
  "ldr r0, .Lp1\n"
  "ldr r0, [r0, #0]\n"
  "bl Math_Init\n"
  "movs r1, #200\n"
  "lsls r1, r1, #3\n"
  "adds r1, r1, r7\n"
  "str r0, [r1, #0]\n"
  "adds r0, #4\n"
  "ldr r2, .Lp2\n"
  "adds r2, r2, r7\n"
  "str r0, [r2, #0]\n"
  "ldr r3, [r1, #0]\n"
  "ldr r1, [r3, #4]\n"
  "adds r0, r1, #4\n"
  "movs r2, #201\n"
  "lsls r2, r2, #3\n"
  "adds r2, r2, r7\n"
  "str r0, [r2, #0]\n"
  "ldr r0, [r1, #4]\n"
  "cmp r0, #0\n"
  "beq Lepi_%=\n"
  "ldr r3, .Lp3\n"
  "adds r3, r3, r7\n"
  "str r7, [r3, #0]\n"
  "movs r0, #0\n"
  "str r0, [r7, #4]\n"
  "str r1, [r7, #0]\n"
  "adds r1, r7, #0\n"
  "adds r1, #8\n"
  "str r7, [r7, #8]\n"
  "ldr r0, .Lp4\n"
  "str r0, [r1, #4]\n"
  "mov r0, sp\n"
  "str r0, [r1, #8]\n"
  "b Ldo_%=\n"
  ".Lp0: .word 0xFFFFF9B0\n"
  ".Lp1: .word 0x02000200\n"
  ".Lp2: .word 0x00000644\n"
  ".Lp3: .word 0x0000064C\n"
  ".Lp4: .word 0x08015BD0\n"
  "b Ldo2_%=\n"
  "Ldo_%=:\n"
  "ldr r1, .Lp5\n"
  "adds r1, r1, r7\n"
  "ldr r1, [r1, #0]\n"
  "ldr r2, .Lp6\n"
  "adds r2, r2, r7\n"
  "ldr r2, [r2, #0]\n"
  "str r1, [r2, #0]\n"
  "movs r2, #201\n"
  "lsls r2, r2, #3\n"
  "adds r2, r2, r7\n"
  "ldr r2, [r2, #0]\n"
  "ldr r0, [r2, #0]\n"
  "cmp r0, #0\n"
  "beq Lskip_%=\n"
  "Ltop_%=:\n"
  "movs r3, #201\n"
  "lsls r3, r3, #3\n"
  "adds r3, r3, r7\n"
  "ldr r3, [r3, #0]\n"
  "ldr r1, [r3, #0]\n"
  "ldr r2, [r1, #4]\n"
  "ldr r0, [r1, #8]\n"
  "ldr r1, [r1, #0]\n"
  "str r1, [r3, #0]\n"
  "movs r1, #2\n"
  "bl Math_Sqrt\n"
  "movs r1, #201\n"
  "lsls r1, r1, #3\n"
  "adds r1, r1, r7\n"
  "ldr r1, [r1, #0]\n"
  "ldr r0, [r1, #0]\n"
  "cmp r0, #0\n"
  "bne Ltop_%=\n"
  "Lskip_%=:\n"
  "ldr r2, .Lp5\n"
  "adds r2, r2, r7\n"
  "ldr r2, [r2, #0]\n"
  "ldr r0, [r2, #0]\n"
  "ldr r3, .Lp6\n"
  "adds r3, r3, r7\n"
  "ldr r3, [r3, #0]\n"
  "str r0, [r3, #0]\n"
  "b Lepi_%=\n"
  ".hword 0x0000\n"
  ".Lp5: .word 0x0000064C\n"
  ".Lp6: .word 0x00000644\n"
  "Ldo2_%=:\n"
  "bl Mem_PushStack\n"
  "Lepi_%=:\n"
  "movs r1, #200\n"
  "lsls r1, r1, #3\n"
  "adds r1, r1, r7\n"
  "ldr r1, [r1, #0]\n"
  "ldr r0, [r1, #8]\n"
  "cmp r0, #0\n"
  "beq Lpush_%=\n"
  "ldr r2, .Lp7\n"
  "adds r2, r2, r7\n"
  "ldr r2, [r2, #0]\n"
  "ldr r0, [r2, #0]\n"
  "ldr r0, [r0, #0]\n"
  "cmp r0, #0\n"
  "bne Lepi2_%=\n"
  "Lpush_%=:\n"
  "bl Mem_PushStack\n"
  "Lepi2_%=:\n"
  "ldr r3, .Lp7\n"
  "adds r3, r3, r7\n"
  "ldr r3, [r3, #0]\n"
  "ldr r1, [r3, #0]\n"
  "adds r2, r1, #0\n"
  "adds r2, #8\n"
  "ldr r0, [r1, #0]\n"
  "str r0, [r3, #0]\n"
  "ldr r0, [r2, #4]\n"
  "ldr r7, [r1, #8]\n"
  "ldr r2, [r2, #8]\n"
  "mov sp, r2\n"
  "mov pc, r0\n"
  ".hword 0x0000\n"
  ".Lp7: .word 0x00000644\n"
  ::: "r0","r1","r2","r3","r4","r5","r6","r7","memory");
}
