| // Test EH when V4SI SIMD registers are involved. |
| // Contributed by Aldy Hernandez (aldy@quesejoda.com). |
| // { dg-options "-O -Wno-abi" } |
| // { dg-options "-O -w -msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } |
| // { dg-options "-O -w" { target powerpc*-*-* } } |
| // { dg-options "-O -w -maltivec" { target { powerpc*-*-* && vmx_hw } } } |
| // { dg-do run } |
| // { dg-require-effective-target sse_runtime { target { { i?86-*-* x86_64-*-* } && ilp32 } } } |
| |
| #include "check-vect.h" |
| |
| typedef int __attribute__((vector_size (16))) vecint; |
| |
| vecint vecfunc (vecint beachbum) |
| { |
| return beachbum; |
| } |
| |
| void f3 (void) |
| { |
| vecint foobar = (vecint) {0, 0}; |
| foobar = vecfunc (foobar); |
| |
| throw int(); |
| } |
| |
| void f2 (void) |
| { |
| vecint foobar = (vecint) {0, 0}; |
| foobar = vecfunc (foobar); |
| |
| f3 (); |
| } |
| |
| void f1 (void) |
| { |
| int i; |
| try |
| { |
| f2 (); |
| } |
| catch (int) |
| { |
| i = 9; |
| } |
| } |
| |
| int main () |
| { |
| /* Exit with zero if the hardware does not support AltiVec instructions. */ |
| check_vect (); |
| f1 (); |
| return 0; |
| } |