/* Test unwinding of CRUNCH register saves. */ /* Origin: Martin Guy */ /* 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