--- test/utils-prng.c | 27 +++++++++++++++------------ test/utils-prng.h | 43 ++++++++++++++++++++++++++++++------------- 2 files changed, 45 insertions(+), 25 deletions(-)
diff --git a/test/utils-prng.c b/test/utils-prng.c index 1d62129..0981f12 100644 --- a/test/utils-prng.c +++ b/test/utils-prng.c @@ -57,23 +57,26 @@ void smallprng_srand_r (smallprng_t *x, uint32_t seed) void prng_srand_r (prng_t *x, uint32_t seed) { #ifdef HAVE_GCC_VECTOR_EXTENSIONS - int i; - prng_rand_128_data_t dummy; - smallprng_srand_r (&x->p0, seed); - x->a[0] = x->a[1] = x->a[2] = x->a[3] = 0xf1ea5eed; - x->b[0] = x->c[0] = x->d[0] = (seed = seed * 1103515245 + 12345); - x->b[1] = x->c[1] = x->d[1] = (seed = seed * 1103515245 + 12345); - x->b[2] = x->c[2] = x->d[2] = (seed = seed * 1103515245 + 12345); - x->b[3] = x->c[3] = x->d[3] = (seed = seed * 1103515245 + 12345); - for (i = 0; i < 20; ++i) - prng_rand_128_r (x, &dummy); -#else + if (random_data == NULL) + { + int i; + prng_rand_128_data_t dummy; + smallprng_srand_r (&x->p0, seed); + x->a[0] = x->a[1] = x->a[2] = x->a[3] = 0xf1ea5eed; + x->b[0] = x->c[0] = x->d[0] = (seed = seed * 1103515245 + 12345); + x->b[1] = x->c[1] = x->d[1] = (seed = seed * 1103515245 + 12345); + x->b[2] = x->c[2] = x->d[2] = (seed = seed * 1103515245 + 12345); + x->b[3] = x->c[3] = x->d[3] = (seed = seed * 1103515245 + 12345); + for (i = 0; i < 20; ++i) + prng_rand_128_r (x, &dummy); + return; + } +#endif smallprng_srand_r (&x->p0, seed); smallprng_srand_r (&x->p1, (seed = seed * 1103515245 + 12345)); smallprng_srand_r (&x->p2, (seed = seed * 1103515245 + 12345)); smallprng_srand_r (&x->p3, (seed = seed * 1103515245 + 12345)); smallprng_srand_r (&x->p4, (seed = seed * 1103515245 + 12345)); -#endif } static force_inline void diff --git a/test/utils-prng.h b/test/utils-prng.h index 98022d8..cb36517 100644 --- a/test/utils-prng.h +++ b/test/utils-prng.h @@ -102,6 +102,7 @@ typedef struct smallprng_t p1, p2, p3, p4; #endif smallprng_t p0; +#else } prng_t; typedef union @@ -117,14 +118,16 @@ typedef union /*****************************************************************************/ static force_inline uint8_t -get_rand_data_8() { +get_rand_data_8 () +{ uint8_t retour = random_data[running_data]; running_data = (running_data + 1) % size_data; return retour; } static force_inline uint32_t -get_rand_data_32() { +get_rand_data_32 () +{ /* Do not use 4 get_rand_data_8 () in the same line * to be sure of the execution order. */ uint8_t un = get_rand_data_8(); @@ -137,11 +140,21 @@ get_rand_data_32() { static force_inline uint32_t smallprng_rand_r (smallprng_t *x) { - uint32_t e = x->a - ((x->b << 27) + (x->b >> (32 - 27))); - x->a = x->b ^ ((x->c << 17) ^ (x->c >> (32 - 17))); - x->b = x->c + x->d; - x->c = x->d + e; - x->d = e + x->a; + if (random_data == NULL) + { + uint32_t e = x->a - ((x->b << 27) + (x->b >> (32 - 27))); + x->a = x->b ^ ((x->c << 17) ^ (x->c >> (32 - 17))); + x->b = x->c + x->d; + x->c = x->d + e; + x->d = e + x->a; + } + else + { + x->a = get_rand_data_32 (); + x->b = get_rand_data_32 (); + x->c = get_rand_data_32 (); + x->d = get_rand_data_32 (); + } return x->d; } @@ -157,12 +170,16 @@ static force_inline void prng_rand_128_r (prng_t *x, prng_rand_128_data_t *data) { #ifdef HAVE_GCC_VECTOR_EXTENSIONS - uint32x4 e = x->a - ((x->b << 27) + (x->b >> (32 - 27))); - x->a = x->b ^ ((x->c << 17) ^ (x->c >> (32 - 17))); - x->b = x->c + x->d; - x->c = x->d + e; - x->d = e + x->a; - data->vw = x->d; + if (random_data == NULL) + { + uint32x4 e = x->a - ((x->b << 27) + (x->b >> (32 - 27))); + x->a = x->b ^ ((x->c << 17) ^ (x->c >> (32 - 17))); + x->b = x->c + x->d; + x->c = x->d + e; + x->d = e + x->a; + data->vw = x->d; + return; + } #else data->w[0] = smallprng_rand_r (&x->p1); data->w[1] = smallprng_rand_r (&x->p2); -- 2.15.0 _______________________________________________ Pixman mailing list Pixman@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/pixman