Merge from mainline (165734:167278).
[official-gcc/graphite-test-results.git] / gcc / testsuite / gcc.c-torture / execute / vector-shift.c
blobf52eb58a1b933c341290e219c8e738ac1e0a2e09
2 #define vector __attribute__((vector_size(sizeof(int)*4) ))
4 static vector int allones = {1, 1, 1, 1};
5 static vector int allzeros = {0, 0, 0, 0};
6 static vector int numbers = {0, 1, 2, 3};
7 static vector int numbersleftshiftallones = {0, 2, 4, 6};
8 static vector int numbersrightshiftallones = {0, 0, 1, 1};
11 static vector unsigned int uallones = {1, 1, 1, 1};
12 static vector unsigned int uallzeros = {0, 0, 0, 0};
13 static vector unsigned int unumbers = {0, 1, 2, 3};
14 static vector unsigned int unumbersleftshiftallones = {0, 2, 4, 6};
15 static vector unsigned int unumbersrightshiftallones = {0, 0, 1, 1};
17 #define TEST(result, expected) \
18 do { \
19 typeof(result) result1 = result; \
20 if(sizeof (result1) != sizeof (expected)) \
21 __builtin_abort (); \
22 if (__builtin_memcmp (&result1, &expected, sizeof(result1)) != 0) \
23 __builtin_abort (); \
24 }while (0);
26 int main(void)
28 vector int result;
29 TEST ((numbers << allzeros), numbers);
30 TEST ((numbers >> allzeros), numbers);
31 TEST((numbers << allones), numbersleftshiftallones);
32 TEST((numbers >> allones), numbersrightshiftallones);
33 /* Test left shift followed by a right shift, numbers should be back as
34 numbers are all small numbers and no lose of precision happens. */
35 TEST((numbers << allones) >> allones, numbers);
39 TEST ((unumbers << uallzeros), unumbers);
40 TEST ((unumbers >> uallzeros), unumbers);
41 TEST((unumbers << uallones), unumbersleftshiftallones);
42 TEST((unumbers >> uallones), unumbersrightshiftallones);
43 /* Test left shift followed by a right shift, numbers should be back as
44 numbers are all small numbers and no lose of precision happens. */
45 TEST((unumbers << uallones) >> uallones, unumbers);
47 return 0;