3 #define vector __attribute__((vector_size(sizeof(int)*4) ))
5 static vector
int allones
= {1, 1, 1, 1};
6 static vector
int allzeros
= {0, 0, 0, 0};
7 static vector
int numbers
= {0, 1, 2, 3};
8 static vector
int numbersleftshiftallones
= {0, 2, 4, 6};
9 static vector
int numbersrightshiftallones
= {0, 0, 1, 1};
12 static vector
unsigned int uallones
= {1, 1, 1, 1};
13 static vector
unsigned int uallzeros
= {0, 0, 0, 0};
14 static vector
unsigned int unumbers
= {0, 1, 2, 3};
15 static vector
unsigned int unumbersleftshiftallones
= {0, 2, 4, 6};
16 static vector
unsigned int unumbersrightshiftallones
= {0, 0, 1, 1};
18 #define TEST(result, expected) \
20 __typeof__(result) result1 = result; \
21 if(sizeof (result1) != sizeof (expected)) \
23 if (__builtin_memcmp (&result1, &expected, sizeof(result1)) != 0) \
30 TEST ((numbers
<< allzeros
), numbers
);
31 TEST ((numbers
>> allzeros
), numbers
);
32 TEST((numbers
<< allones
), numbersleftshiftallones
);
33 TEST((numbers
>> allones
), numbersrightshiftallones
);
34 /* Test left shift followed by a right shift, numbers should be back as
35 numbers are all small numbers and no lose of precision happens. */
36 TEST((numbers
<< allones
) >> allones
, numbers
);
40 TEST ((unumbers
<< uallzeros
), unumbers
);
41 TEST ((unumbers
>> uallzeros
), unumbers
);
42 TEST((unumbers
<< uallones
), unumbersleftshiftallones
);
43 TEST((unumbers
>> uallones
), unumbersrightshiftallones
);
44 /* Test left shift followed by a right shift, numbers should be back as
45 numbers are all small numbers and no lose of precision happens. */
46 TEST((unumbers
<< uallones
) >> uallones
, unumbers
);