URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.dg/] [torture/] [vec-cvt-1.c] - Rev 754
Go to most recent revision | Compare with Previous | Blame | View Log
/* { dg-do run } */ #include <stdlib.h> #define N 1024 signed char sc[N]; short ss[N]; int si[N]; long long sl[N]; unsigned char uc[N]; unsigned short us[N]; unsigned int ui[N]; unsigned long long ul[N]; float f[N]; double d[N]; #define FN1(from, to) \ __attribute__((noinline, noclone)) void \ from##2##to (void) \ { \ int i; \ for (i = 0; i < N; i++) \ to[i] = from[i]; \ } #define FN(intt, fltt) FN1 (intt, fltt) FN1 (fltt, intt) FN (sc, f) FN (ss, f) FN (si, f) FN (sl, f) FN (uc, f) FN (us, f) FN (ui, f) FN (ul, f) FN (sc, d) FN (ss, d) FN (si, d) FN (sl, d) FN (uc, d) FN (us, d) FN (ui, d) FN (ul, d) #define FLTTEST(min, max, intt) \ __attribute__((noinline, noclone)) void \ flttointtest##intt (void) \ { \ int i; \ volatile float fltmin, fltmax, vf, vf2; \ volatile double dblmin, dblmax, vd, vd2; \ if (min == 0) \ fltmin = 0.0f; \ else \ { \ vf2 = fltmin = min - 1.0f; \ for (vf = 1.0f; (fltmin = vf2 + vf) == vf2; vf = vf * 2.0f) \ ; \ } \ vf2 = fltmax = max + 1.0f; \ for (vf = 1.0f; (fltmax = vf2 - vf) == vf2; vf = vf * 2.0f) \ ; \ if (min == 0) \ dblmin = 0.0; \ else \ { \ vd2 = dblmin = min - 1.0; \ for (vd = 1.0; (dblmin = vd2 + vd) == vd2; vd = vd * 2.0) \ ; \ } \ vd2 = dblmax = max + 1.0; \ for (vd = 1.0; (dblmax = vd2 - vd) == vd2; vd = vd * 2.0) \ ; \ for (i = 0; i < N; i++) \ { \ asm (""); \ if (i == 0) \ f[i] = fltmin; \ else if (i < N / 4) \ f[i] = fltmin + i + 0.25f; \ else if (i < 3 * N / 4) \ f[i] = (fltmax + fltmin) / 2.0 - N * 8 + 16.0f * i; \ else \ f[i] = fltmax - N + 1 + i; \ if (f[i] < fltmin) f[i] = fltmin; \ if (f[i] > fltmax) f[i] = fltmax; \ if (i == 0) \ d[i] = dblmin; \ else if (i < N / 4) \ d[i] = dblmin + i + 0.25f; \ else if (i < 3 * N / 4) \ d[i] = (dblmax + dblmin) / 2.0 - N * 8 + 16.0f * i; \ else \ d[i] = dblmax - N + 1 + i; \ if (d[i] < dblmin) d[i] = dblmin; \ if (d[i] > dblmax) d[i] = dblmax; \ } \ f2##intt (); \ for (i = 0; i < N; i++) \ if (intt[i] != (__typeof (intt[0])) f[i]) \ abort (); \ d2##intt (); \ for (i = 0; i < N; i++) \ if (intt[i] != (__typeof (intt[0])) d[i]) \ abort (); \ for (i = 0; i < N; i++) \ { \ unsigned long long r = rand (); \ r = (r << 21) ^ (unsigned) rand (); \ r = (r << 21) ^ (unsigned) rand (); \ asm (""); \ f[i] = (r >> 59) / 32.0f + (__typeof (intt[0])) r; \ if (f[i] < fltmin) f[i] = fltmin; \ if (f[i] > fltmax) f[i] = fltmax; \ d[i] = (r >> 59) / 32.0 + (__typeof (intt[0])) r; \ if (d[i] < dblmin) f[i] = dblmin; \ if (d[i] > dblmax) f[i] = dblmax; \ } \ f2##intt (); \ for (i = 0; i < N; i++) \ if (intt[i] != (__typeof (intt[0])) f[i]) \ abort (); \ d2##intt (); \ for (i = 0; i < N; i++) \ if (intt[i] != (__typeof (intt[0])) d[i]) \ abort (); \ } \ \ __attribute__((noinline, noclone)) void \ inttoflttest##intt (void) \ { \ int i; \ volatile float vf; \ volatile double vd; \ for (i = 0; i < N; i++) \ { \ asm (""); \ if (i < N / 4) \ intt[i] = min + i; \ else if (i < 3 * N / 4) \ intt[i] = (max + min) / 2 - N * 8 + 16 * i; \ else \ intt[i] = max - N + 1 + i; \ } \ intt##2f (); \ for (i = 0; i < N; i++) \ { \ vf = intt[i]; \ if (f[i] != vf) \ abort (); \ } \ intt##2d (); \ for (i = 0; i < N; i++) \ { \ vd = intt[i]; \ if (d[i] != vd) \ abort (); \ } \ for (i = 0; i < N; i++) \ { \ unsigned long long r = rand (); \ r = (r << 21) ^ (unsigned) rand (); \ r = (r << 21) ^ (unsigned) rand (); \ asm (""); \ intt[i] = r; \ } \ intt##2f (); \ for (i = 0; i < N; i++) \ { \ vf = intt[i]; \ if (f[i] != vf) \ abort (); \ } \ intt##2d (); \ for (i = 0; i < N; i++) \ { \ vd = intt[i]; \ if (d[i] != vd) \ abort (); \ } \ } FLTTEST (- __SCHAR_MAX__ - 1, __SCHAR_MAX__, sc) FLTTEST (- __SHRT_MAX__ - 1, __SHRT_MAX__, ss) FLTTEST (- __INT_MAX__ - 1, __INT_MAX__, si) FLTTEST (- __LONG_LONG_MAX__ - 1LL, __LONG_LONG_MAX__, sl) FLTTEST (0, 2U * __SCHAR_MAX__ + 1, uc) FLTTEST (0, 2U * __SHRT_MAX__ + 1, us) FLTTEST (0, 2U * __INT_MAX__ + 1, ui) FLTTEST (0, 2ULL * __LONG_LONG_MAX__ + 1, ul) int main () { flttointtestsc (); flttointtestss (); flttointtestsi (); flttointtestsl (); flttointtestuc (); flttointtestus (); flttointtestui (); flttointtestul (); inttoflttestsc (); inttoflttestss (); inttoflttestsi (); inttoflttestsl (); inttoflttestuc (); inttoflttestus (); inttoflttestui (); inttoflttestul (); return 0; }
Go to most recent revision | Compare with Previous | Blame | View Log