OLD | NEW |
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 Loading... |
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 Loading... |
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 }) |
OLD | NEW |