/* { dg-do compile { target powerpc*-*-darwin* } } */
/* { dg-require-effective-target ilp32 } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=G3" } } */
/* { dg-options "-mcpu=G3 -funwind-tables" } */
/* { dg-final { scan-assembler "bl save_world" } } */
/* { dg-final { scan-assembler ".byte\t0x6b" } } */

/* Verify that on Darwin, even with -mcpu=G3, __builtin_eh_return
   saves Altivec registers using save_world, and reports their
   location in its EH information.  */

long offset;
void *handler;

extern void setup_offset(void);

void foo(void)
{
  __builtin_unwind_init ();
  setup_offset();
  __builtin_eh_return (offset, handler);
}
