int Bignum_ProcessBytes(char *ptr, int byte, unsigned int len)
{
  register int c __asm__("r5") = byte;
  register char *p __asm__("r1") = ptr;
  register char *wp __asm__("r4");
  register unsigned acc __asm__("r6");
  register unsigned m1 __asm__("r12");
  unsigned int m2;
  unsigned int cnt;
  register unsigned t __asm__("r0");
  c &= 255;
  if (len <= 3)
    goto tail;
  if (((int)p & 3) != 0)
    goto tail;
  wp = p;
  acc = 0;
  cnt = 0;
  do {
    t = acc << 8;
    acc = t + (unsigned)c;
    cnt++;
  } while (cnt <= 3);
  if (len <= 3)
    goto tail2;
  m1 = 0xFEFEFEFF;
  m2 = 0x80808080;
wtop:
  {
    unsigned int w = *(unsigned int *)wp;
    unsigned int x = w ^ acc;
    unsigned int tt = (x + m1) & ~x;
    if ((tt & m2) != 0) {
      char *r1 = wp;
      unsigned int r3 = 0;
      do {
        if (*r1 == (char)c)
          return (int)r1;
        r1++;
        r3++;
      } while (r3 <= 3);
    }
  }
  len -= 4;
  wp += 4;
  if (len > 3)
    goto wtop;
tail2:
  p = wp;
tail:
  {
    unsigned int t2;
    while ((t2 = len--) != 0) {
      if (*p == (char)c)
        return (int)p;
      p++;
    }
    return 0;
  }
}
