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

Side by Side Diff: src/builtins/builtins-math.cc

Issue 2728463006: Migrate Math.Min/Max to CodeStubAssembler (Closed)
Patch Set: Created 3 years, 9 months 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 | « src/builtins/builtins.h ('k') | src/compiler/code-assembler.h » ('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 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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 #include <limits>
6
5 #include "src/builtins/builtins-utils.h" 7 #include "src/builtins/builtins-utils.h"
6 #include "src/builtins/builtins.h" 8 #include "src/builtins/builtins.h"
7 #include "src/code-factory.h" 9 #include "src/code-factory.h"
8 #include "src/code-stub-assembler.h" 10 #include "src/code-stub-assembler.h"
9 #include "src/counters.h" 11 #include "src/counters.h"
10 #include "src/objects-inl.h" 12 #include "src/objects-inl.h"
11 13
12 namespace v8 { 14 namespace v8 {
13 namespace internal { 15 namespace internal {
14 16
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 // ES6 section 20.2.2.34 Math.tanh ( x ) 489 // ES6 section 20.2.2.34 Math.tanh ( x )
488 TF_BUILTIN(MathTanh, MathBuiltinsAssembler) { 490 TF_BUILTIN(MathTanh, MathBuiltinsAssembler) {
489 MathUnaryOperation(&CodeStubAssembler::Float64Tanh); 491 MathUnaryOperation(&CodeStubAssembler::Float64Tanh);
490 } 492 }
491 493
492 // ES6 section 20.2.2.35 Math.trunc ( x ) 494 // ES6 section 20.2.2.35 Math.trunc ( x )
493 TF_BUILTIN(MathTrunc, MathBuiltinsAssembler) { 495 TF_BUILTIN(MathTrunc, MathBuiltinsAssembler) {
494 MathRoundingOperation(&CodeStubAssembler::Float64Trunc); 496 MathRoundingOperation(&CodeStubAssembler::Float64Trunc);
495 } 497 }
496 498
497 void Builtins::Generate_MathMax(MacroAssembler* masm) { 499 // ES6 section 20.2.2.24 Math.max ( value1, value2 , ...values )
498 Generate_MathMaxMin(masm, MathMaxMinKind::kMax); 500 TF_BUILTIN(MathMax, MathBuiltinsAssembler) {
501 Label return_result(this), return_nan(this);
502
503 Node* argc = Parameter(BuiltinDescriptor::kArgumentsCount);
504 Node* context = Parameter(BuiltinDescriptor::kContext);
505
506 CodeStubArguments arguments(this, ChangeInt32ToIntPtr(argc));
507 // From now on use word-size argc value.
508 argc = arguments.GetLength();
509
510 // If no arguments are given, the result is -infinity.
511 Variable result(this, MachineRepresentation::kFloat64);
512 result.Bind(Float64Constant(-1.0 * V8_INFINITY));
513 GotoIf(IntPtrEqual(argc, IntPtrConstant(0)), &return_result);
514
515 Node* nan = Float64Constant(std::numeric_limits<double>::quiet_NaN());
516 CodeStubAssembler::VariableList vars({&result}, zone());
517 arguments.ForEach(vars,
518 [this, context, nan, &result, &return_nan](Node* arg) {
519 Node* float_value = TruncateTaggedToFloat64(context, arg);
520 GotoIf(Float64Equal(float_value, nan), &return_nan);
vabr (Chromium) 2017/03/03 10:39:14 Interestingly, when I remove this jump, the perfor
521 result.Bind(Float64Max(result.value(), float_value));
522 });
523
524 Goto(&return_result);
525 Bind(&return_result);
526 { arguments.PopAndReturn(AllocateHeapNumberWithValue(result.value())); }
527
528 Bind(&return_nan);
529 { arguments.PopAndReturn(AllocateHeapNumberWithValue(nan)); }
499 } 530 }
500 531
501 void Builtins::Generate_MathMin(MacroAssembler* masm) { 532 void Builtins::Generate_MathMin(MacroAssembler* masm) {
502 Generate_MathMaxMin(masm, MathMaxMinKind::kMin); 533 Generate_MathMaxMin(masm, MathMaxMinKind::kMin);
503 } 534 }
504 535
505 } // namespace internal 536 } // namespace internal
506 } // namespace v8 537 } // namespace v8
OLDNEW
« no previous file with comments | « src/builtins/builtins.h ('k') | src/compiler/code-assembler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698