| /* Test saving and restoring of SIMD registers. */ |
| |
| typedef short Q __attribute__((vector_size(8))); |
| |
| Q q1 = {1, 2}, q2 = {3, 4}, q3 = {5, 6}, q4 = {7, 8}; |
| |
| Q w1, w2, w3, w4; |
| Q z1, z2, z3, z4; |
| |
| volatile int dummy; |
| |
| void __attribute__((__noinline__)) |
| func0 (void) |
| { |
| dummy = 1; |
| } |
| |
| void __attribute__((__noinline__)) |
| func1 (void) |
| { |
| Q a, b; |
| a = q1 * q2; |
| b = q3 * q4; |
| w1 = a; |
| w2 = b; |
| func0 (); |
| w3 = a; |
| w4 = b; |
| } |
| |
| void __attribute__((__noinline__)) |
| func2 (void) |
| { |
| Q a, b; |
| a = q1 + q2; |
| b = q3 - q4; |
| z1 = a; |
| z2 = b; |
| func1 (); |
| z3 = a; |
| z4 = b; |
| } |
| |
| int |
| main (void) |
| { |
| func2 (); |
| |
| if (memcmp (&w1, &w3, sizeof (Q)) != 0) |
| abort (); |
| if (memcmp (&w2, &w4, sizeof (Q)) != 0) |
| abort (); |
| if (memcmp (&z1, &z3, sizeof (Q)) != 0) |
| abort (); |
| if (memcmp (&z2, &z4, sizeof (Q)) != 0) |
| abort (); |
| |
| return 0; |
| } |