--- test/utils-prng.c | 4 ++++ test/utils-prng.h | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+)
diff --git a/test/utils-prng.c b/test/utils-prng.c index c27b5be..1d62129 100644 --- a/test/utils-prng.c +++ b/test/utils-prng.c @@ -31,6 +31,10 @@ #include <xmmintrin.h> #endif +const uint8_t *random_data; +size_t size_data; +size_t running_data; + void smallprng_srand_r (smallprng_t *x, uint32_t seed) { uint32_t i; diff --git a/test/utils-prng.h b/test/utils-prng.h index f9ae8dd..98022d8 100644 --- a/test/utils-prng.h +++ b/test/utils-prng.h @@ -79,6 +79,11 @@ /*****************************************************************************/ +/* Used if random data from file. */ +extern const uint8_t *random_data; +extern size_t size_data; +extern size_t running_data; + #ifdef HAVE_GCC_VECTOR_EXTENSIONS typedef uint32_t uint32x4 __attribute__ ((vector_size(16))); typedef uint8_t uint8x16 __attribute__ ((vector_size(16))); @@ -111,6 +116,24 @@ typedef union /*****************************************************************************/ +static force_inline uint8_t +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() { + /* 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(); + uint8_t deux = get_rand_data_8(); + uint8_t trois = get_rand_data_8(); + uint8_t quatre = get_rand_data_8(); + return (un << 24) + (deux << 16) + (trois << 8) + (quatre); +} + static force_inline uint32_t smallprng_rand_r (smallprng_t *x) { -- 2.15.0 _______________________________________________ Pixman mailing list Pixman@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/pixman