From b50f6f1730238eb5aea294565b0c2098c2a7f8a4 Mon Sep 17 00:00:00 2001 From: Matt Pharr Date: Sun, 29 Jan 2012 13:46:57 -0800 Subject: [PATCH] Fix RNG seed code in stdlib for scalar target. --- stdlib.ispc | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/stdlib.ispc b/stdlib.ispc index 6cb7e732..0fe5e8ea 100644 --- a/stdlib.ispc +++ b/stdlib.ispc @@ -3246,14 +3246,23 @@ static inline uniform unsigned int __seed4(RNGState * uniform state, } static inline void seed_rng(uniform RNGState * uniform state, uniform unsigned int seed) { - seed = __seed4(state, 0, seed); - if (programCount == 8) - __seed4(state, 4, seed ^ 0xbeeff00d); - if (programCount == 16) { - __seed4(state, 4, seed ^ 0xbeeff00d); - __seed4(state, 8, ((seed & 0xffff) << 16) | (seed >> 16)); - __seed4(state, 12, (((seed & 0xff) << 24) | ((seed & 0xff00) << 8) | - ((seed & 0xff0000) >> 8) | (seed & 0xff000000) >> 24)); + if (programCount == 1) { + state->z1 = seed; + state->z2 = seed ^ 0xbeeff00d; + state->z3 = ((seed & 0xffff) << 16) | (seed >> 16); + state->z4 = (((seed & 0xff) << 24) | ((seed & 0xff00) << 8) | + ((seed & 0xff0000) >> 8) | (seed & 0xff000000) >> 24); + } + else { + seed = __seed4(state, 0, seed); + if (programCount == 8) + __seed4(state, 4, seed ^ 0xbeeff00d); + if (programCount == 16) { + __seed4(state, 4, seed ^ 0xbeeff00d); + __seed4(state, 8, ((seed & 0xffff) << 16) | (seed >> 16)); + __seed4(state, 12, (((seed & 0xff) << 24) | ((seed & 0xff00) << 8) | + ((seed & 0xff0000) >> 8) | (seed & 0xff000000) >> 24)); + } } }