static void random_init(JSRuntime *rt) { int64 tmp, tmp2; /* Do at most once. */ if (rt->rngInitialized) return; rt->rngInitialized = JS_TRUE; /* rt->rngMultiplier = 0x5DEECE66DL */ JSLL_ISHL(tmp, 0x5, 32); JSLL_UI2L(tmp2, 0xDEECE66DL); JSLL_OR(rt->rngMultiplier, tmp, tmp2); /* rt->rngAddend = 0xBL */ JSLL_I2L(rt->rngAddend, 0xBL); /* rt->rngMask = (1L << 48) - 1 */ JSLL_I2L(tmp, 1); JSLL_SHL(tmp2, tmp, 48); JSLL_SUB(rt->rngMask, tmp2, tmp); /* rt->rngDscale = (jsdouble)(1L << 53) */ JSLL_SHL(tmp2, tmp, 53); JSLL_L2D(rt->rngDscale, tmp2); /* Finally, set the seed from current time. */ random_setSeed(rt, PRMJ_Now()); }
void js_InitRandom(JSContext *cx) { /* * Set the seed from current time. Since we have a RNG per context and we often bring * up several contexts at the same time, we xor in some additional values, namely * the context and its successor. We don't just use the context because it might be * possible to reverse engineer the context pointer if one guesses the time right. */ random_setSeed(cx, (PRMJ_Now() / 1000) ^ int64(cx) ^ int64(cx->link.next)); }
void js_InitRandom(JSThreadData *data) { /* Finally, set the seed from current time. */ random_setSeed(data, PRMJ_Now() / 1000); }
void ExecutableAllocator::initSeed() { random_setSeed(&rngSeed, (PRMJ_Now() / 1000) ^ int64_t(this)); }