Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(534)

Side by Side Diff: src/js/math.js

Issue 1462293002: Tweak RNG. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix bug Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 (function(global, utils) { 5 (function(global, utils) {
6 "use strict"; 6 "use strict";
7 7
8 %CheckIsBootstrapping(); 8 %CheckIsBootstrapping();
9 9
10 // ------------------------------------------------------------------- 10 // -------------------------------------------------------------------
11 // Imports 11 // Imports
12 12
13 var GlobalMath = global.Math; 13 var GlobalMath = global.Math;
14 var GlobalObject = global.Object; 14 var GlobalObject = global.Object;
15 var InternalArray = utils.InternalArray; 15 var InternalArray = utils.InternalArray;
16 var NaN = %GetRootNaN(); 16 var NaN = %GetRootNaN();
17 var rngstate_0; 17 var rngstate;
18 var rngstate_1;
19 var rngstate_2;
20 var rngstate_3;
21 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); 18 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol");
22 19
23 utils.InitializeRNG = function() { 20 utils.InitializeRNG = function() {
24 var rngstate = %InitializeRNG(); 21 var state = %InitializeRNG();
25 rngstate_0 = rngstate[0]; 22 rngstate = { a: state[0], b: state[1], c: state[2], d: state[3] };
26 rngstate_1 = rngstate[1];
27 rngstate_2 = rngstate[2];
28 rngstate_3 = rngstate[3];
29 }; 23 };
30 24
31 //------------------------------------------------------------------- 25 //-------------------------------------------------------------------
32 26
33 // ECMA 262 - 15.8.2.1 27 // ECMA 262 - 15.8.2.1
34 function MathAbs(x) { 28 function MathAbs(x) {
35 x = +x; 29 x = +x;
36 return (x > 0) ? x : 0 - x; 30 return (x > 0) ? x : 0 - x;
37 } 31 }
38 32
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 return r; 128 return r;
135 } 129 }
136 130
137 // ECMA 262 - 15.8.2.13 131 // ECMA 262 - 15.8.2.13
138 function MathPowJS(x, y) { 132 function MathPowJS(x, y) {
139 return %_MathPow(TO_NUMBER(x), TO_NUMBER(y)); 133 return %_MathPow(TO_NUMBER(x), TO_NUMBER(y));
140 } 134 }
141 135
142 // ECMA 262 - 15.8.2.14 136 // ECMA 262 - 15.8.2.14
143 function MathRandom() { 137 function MathRandom() {
144 var r0 = (MathImul(18030, rngstate_0) + rngstate_1) | 0; 138 var r0 = (MathImul(18030, rngstate.a) + rngstate.b) | 0;
145 var r1 = (MathImul(36969, rngstate_2) + rngstate_3) | 0; 139 var r1 = (MathImul(36969, rngstate.c) + rngstate.d) | 0;
146 rngstate_0 = r0 & 0xFFFF; 140 rngstate.a = r0 & 0xFFFF;
147 rngstate_1 = r0 >>> 16; 141 rngstate.b = r0 >>> 16;
148 rngstate_2 = r1 & 0xFFFF; 142 rngstate.c = r1 & 0xFFFF;
149 rngstate_3 = r1 >>> 16; 143 rngstate.d = r1 >>> 16;
144 var r = r0 ^ r1;
150 // Construct a double number 1.<32-bits of randomness> and subtract 1. 145 // Construct a double number 1.<32-bits of randomness> and subtract 1.
151 return %_ConstructDouble(0x3FF00000 | (r0 & 0x000FFFFF), r1 & 0xFFF00000) - 1; 146 return %_ConstructDouble(0x3FF00000 | (r & 0x000FFFFF), r & 0xFFF00000) - 1;
152 } 147 }
153 148
154 function MathRandomRaw() { 149 function MathRandomRaw() {
155 var r0 = (MathImul(18030, rngstate_0) + rngstate_1) | 0; 150 var r0 = (MathImul(18030, rngstate.a) + rngstate.b) | 0;
156 var r1 = (MathImul(36969, rngstate_2) + rngstate_3) | 0; 151 var r1 = (MathImul(36969, rngstate.d) + rngstate.c) | 0;
157 rngstate_0 = r0 & 0xFFFF; 152 rngstate.a = r0 & 0xFFFF;
158 rngstate_1 = r0 >>> 16; 153 rngstate.b = r0 >>> 16;
159 rngstate_2 = r1 & 0xFFFF; 154 rngstate.c = r1 & 0xFFFF;
160 rngstate_3 = r1 >>> 16; 155 rngstate.d = r1 >>> 16;
161 var x = ((r0 << 16) + (r1 & 0xFFFF)) | 0; 156 var r = r0 ^ r1;
162 return x & 0x3FFFFFFF; 157 return r & 0x3FFFFFFF;
163 } 158 }
164 159
165 // ECMA 262 - 15.8.2.15 160 // ECMA 262 - 15.8.2.15
166 function MathRound(x) { 161 function MathRound(x) {
167 return %RoundNumber(TO_NUMBER(x)); 162 return %RoundNumber(TO_NUMBER(x));
168 } 163 }
169 164
170 // ECMA 262 - 15.8.2.17 165 // ECMA 262 - 15.8.2.17
171 function MathSqrtJS(x) { 166 function MathSqrtJS(x) {
172 return %_MathSqrt(+x); 167 return %_MathSqrt(+x);
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 utils.Export(function(to) { 353 utils.Export(function(to) {
359 to.MathAbs = MathAbs; 354 to.MathAbs = MathAbs;
360 to.MathExp = MathExp; 355 to.MathExp = MathExp;
361 to.MathFloor = MathFloorJS; 356 to.MathFloor = MathFloorJS;
362 to.IntRandom = MathRandomRaw; 357 to.IntRandom = MathRandomRaw;
363 to.MathMax = MathMax; 358 to.MathMax = MathMax;
364 to.MathMin = MathMin; 359 to.MathMin = MathMin;
365 }); 360 });
366 361
367 }) 362 })
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698