extern void Bignum_Free(int *p);
extern int Bignum_ApplyImpulse(int *p, int x);
int Bignum_ProcessData(int *p)
{
  register int *pp __asm__("r5") = p;
  register int *q __asm__("r4");
  int c;
  int n;
  register int t __asm__("r1");
  if (pp[14] == 0) {
    Bignum_Free(pp);
  }
  q = (int *)((char *)pp + (236 << 1));
  goto wtest;
wadv:
  q = *(int **)q;
wtest:
  c = q[2];
  n = q[1];
  goto ctest;
loop: ;
  {
    register int t __asm__("r1") = *(short *)((char *)c + 12);
    if (t == 0)
      goto found;
  }
  c += 88;
ctest:
  n--;
  if (n >= 0)
    goto loop;
  if (*(int **)q != 0)
    goto wadv;
  {
    int r = Bignum_ApplyImpulse(pp, 4);
    *(int **)q = r;
    if (r != 0)
      goto wadv;
  }
  pp[0] = 12;
  return 0;
found: ;
  {
    register int v __asm__("r1") = t;
    *(unsigned short *)((char *)c + 12) = 1;
    *(int **)c = v;
    *(int **)((char *)c + 8) = v;
    *(int **)((char *)c + 4) = v;
    *(int **)((char *)c + 16) = v;
    *(int **)((char *)c + 20) = v;
    *(int **)((char *)c + 24) = v;
    {
      register int ff __asm__("r0") = 0xFFFF;
      *(unsigned short *)((char *)c + 14) = ff;
    }
    *(int **)((char *)c + 48) = v;
    *(int **)((char *)c + 52) = v;
    *(int **)((char *)c + 68) = v;
    *(int **)((char *)c + 72) = v;
    *(int **)((char *)c + 84) = pp;
    return (int)c;
  }
}
