20021120-3.c   [plain text]


/* Test whether a partly call-clobbered register will be moved over a call.
   Although the original test case didn't use any GNUisms, it proved
   difficult to reduce without the named register extension.  */
#if __SH64__ == 32
#define LOC asm ("r10")
#else
#define LOC
#endif

unsigned int foo (char *c, unsigned int x, unsigned int y)
{
  register unsigned int z LOC;

  sprintf (c, "%d", x / y);
  z = x + 1;
  return z / (y + 1);
}

int main ()
{
  char c[16];

  if (foo (c, ~1U, 4) != (~0U / 5))
    abort ();
  exit (0);
}