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

Side by Side Diff: src/math.js

Issue 470001: Performance improvement for Math.max and Math.min... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | test/mjsunit/math-min-max.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 if (length == 0) { 121 if (length == 0) {
122 return -1/0; // Compiler constant-folds this to -Infinity. 122 return -1/0; // Compiler constant-folds this to -Infinity.
123 } 123 }
124 var r = arg1; 124 var r = arg1;
125 if (!IS_NUMBER(r)) r = ToNumber(r); 125 if (!IS_NUMBER(r)) r = ToNumber(r);
126 if (NUMBER_IS_NAN(r)) return r; 126 if (NUMBER_IS_NAN(r)) return r;
127 for (var i = 1; i < length; i++) { 127 for (var i = 1; i < length; i++) {
128 var n = %_Arguments(i); 128 var n = %_Arguments(i);
129 if (!IS_NUMBER(n)) n = ToNumber(n); 129 if (!IS_NUMBER(n)) n = ToNumber(n);
130 if (NUMBER_IS_NAN(n)) return n; 130 if (NUMBER_IS_NAN(n)) return n;
131 // Make sure +0 is considered greater than -0. 131 // Make sure +0 is considered greater than -0. -0 is never a Smi, +0 can be
132 if (n > r || (r === 0 && n === 0 && !%_IsSmi(r))) r = n; 132 // a Smi or heap number.
133 if (n > r || (r === 0 && n === 0 && !%_IsSmi(r) && 1 / r < 0)) r = n;
133 } 134 }
134 return r; 135 return r;
135 } 136 }
136 137
137 // ECMA 262 - 15.8.2.12 138 // ECMA 262 - 15.8.2.12
138 function MathMin(arg1, arg2) { // length == 2 139 function MathMin(arg1, arg2) { // length == 2
139 var length = %_ArgumentsLength(); 140 var length = %_ArgumentsLength();
140 if (length == 0) { 141 if (length == 0) {
141 return 1/0; // Compiler constant-folds this to Infinity. 142 return 1/0; // Compiler constant-folds this to Infinity.
142 } 143 }
143 var r = arg1; 144 var r = arg1;
144 if (!IS_NUMBER(r)) r = ToNumber(r); 145 if (!IS_NUMBER(r)) r = ToNumber(r);
145 if (NUMBER_IS_NAN(r)) return r; 146 if (NUMBER_IS_NAN(r)) return r;
146 for (var i = 1; i < length; i++) { 147 for (var i = 1; i < length; i++) {
147 var n = %_Arguments(i); 148 var n = %_Arguments(i);
148 if (!IS_NUMBER(n)) n = ToNumber(n); 149 if (!IS_NUMBER(n)) n = ToNumber(n);
149 if (NUMBER_IS_NAN(n)) return n; 150 if (NUMBER_IS_NAN(n)) return n;
150 // Make sure -0 is considered less than +0. 151 // Make sure -0 is considered less than +0. -0 is never a Smi, +0 can b a
151 if (n < r || (r === 0 && n === 0 && !%_IsSmi(n))) r = n; 152 // Smi or a heap number.
153 if (n < r || (r === 0 && n === 0 && !%_IsSmi(n) && 1 / n < 0)) r = n;
152 } 154 }
153 return r; 155 return r;
154 } 156 }
155 157
156 // ECMA 262 - 15.8.2.13 158 // ECMA 262 - 15.8.2.13
157 function MathPow(x, y) { 159 function MathPow(x, y) {
158 if (!IS_NUMBER(x)) x = ToNumber(x); 160 if (!IS_NUMBER(x)) x = ToNumber(x);
159 if (!IS_NUMBER(y)) y = ToNumber(y); 161 if (!IS_NUMBER(y)) y = ToNumber(y);
160 return %Math_pow(x, y); 162 return %Math_pow(x, y);
161 } 163 }
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 "tan", MathTan, 254 "tan", MathTan,
253 "atan2", MathAtan2, 255 "atan2", MathAtan2,
254 "pow", MathPow, 256 "pow", MathPow,
255 "max", MathMax, 257 "max", MathMax,
256 "min", MathMin 258 "min", MathMin
257 )); 259 ));
258 }; 260 };
259 261
260 262
261 SetupMath(); 263 SetupMath();
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/math-min-max.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698