/* Test unwinding of CRUNCH register saves.  */
/* Origin: Martin Guy <martinwguy@yahoo.it> */
/* Adapted from: arm-iwmmxt-unwind.C */

/* { dg-do run } */
/* { dg-require-effective-target arm32 } */

#ifdef __MAVERICK__
extern "C" void abort (void);
extern "C" void exit (int);

double
foo (double r)
{
  register double a=11, b=12, c=13, d=14, e=15, f=16, g=17, h=18, i=19;
  a*=r;
  b*=r;
  c*=r;
  d*=r;
  e*=r;
  f*=r;
  g*=r;
  h*=r;
  i*=r;
  if (r == 0.0) throw "";
  return (a+b+c+d+e+f+g+h+i);
}

int
main (int argc, char **argv)
{
  register double a=1, b=2, c=3, d=4, e=5, f=6, g=7, h=8, i=9;
  double r = argc;
  a*=r;
  b*=r;
  c*=r;
  d*=r;
  e*=r;
  f*=r;
  g*=r;
  h*=r;
  i*=r;
  try {
    foo (a);
  } catch (...) {

  if (a!=1 || b!=2 || c!=3 || d!=4 || e!=5 || f!=6 || g!=7 || h!=8 || i!=9)
      abort ();
  }
  exit (0);
}
#else
int
main (void)
{
  exit (0);
}
#endif
