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

Side by Side Diff: src/code-stub-assembler.cc

Issue 2744173002: [csa] Remove context inputs from StrictEqual, SameValue and Typeof. (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/code-stub-assembler.h ('k') | src/ic/keyed-store-generic.cc » ('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 #include "src/code-stub-assembler.h" 4 #include "src/code-stub-assembler.h"
5 #include "src/code-factory.h" 5 #include "src/code-factory.h"
6 #include "src/frames-inl.h" 6 #include "src/frames-inl.h"
7 #include "src/frames.h" 7 #include "src/frames.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
(...skipping 7232 matching lines...) Expand 10 before | Expand all | Expand 10 after
7243 Bind(&if_notequal); 7243 Bind(&if_notequal);
7244 { 7244 {
7245 result.Bind(FalseConstant()); 7245 result.Bind(FalseConstant());
7246 Goto(&end); 7246 Goto(&end);
7247 } 7247 }
7248 7248
7249 Bind(&end); 7249 Bind(&end);
7250 return result.value(); 7250 return result.value();
7251 } 7251 }
7252 7252
7253 Node* CodeStubAssembler::StrictEqual(Node* lhs, Node* rhs, Node* context) { 7253 Node* CodeStubAssembler::StrictEqual(Node* lhs, Node* rhs) {
7254 // Here's pseudo-code for the algorithm below in case of kDontNegateResult 7254 // Here's pseudo-code for the algorithm below in case of kDontNegateResult
7255 // mode; for kNegateResult mode we properly negate the result. 7255 // mode; for kNegateResult mode we properly negate the result.
7256 // 7256 //
7257 // if (lhs == rhs) { 7257 // if (lhs == rhs) {
7258 // if (lhs->IsHeapNumber()) return HeapNumber::cast(lhs)->value() != NaN; 7258 // if (lhs->IsHeapNumber()) return HeapNumber::cast(lhs)->value() != NaN;
7259 // return true; 7259 // return true;
7260 // } 7260 // }
7261 // if (!lhs->IsSmi()) { 7261 // if (!lhs->IsSmi()) {
7262 // if (lhs->IsHeapNumber()) { 7262 // if (lhs->IsHeapNumber()) {
7263 // if (rhs->IsSmi()) { 7263 // if (rhs->IsSmi()) {
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
7393 7393
7394 // Check if {rhs} is also a String. 7394 // Check if {rhs} is also a String.
7395 Label if_rhsisstring(this, Label::kDeferred), 7395 Label if_rhsisstring(this, Label::kDeferred),
7396 if_rhsisnotstring(this); 7396 if_rhsisnotstring(this);
7397 Branch(IsStringInstanceType(rhs_instance_type), &if_rhsisstring, 7397 Branch(IsStringInstanceType(rhs_instance_type), &if_rhsisstring,
7398 &if_rhsisnotstring); 7398 &if_rhsisnotstring);
7399 7399
7400 Bind(&if_rhsisstring); 7400 Bind(&if_rhsisstring);
7401 { 7401 {
7402 Callable callable = CodeFactory::StringEqual(isolate()); 7402 Callable callable = CodeFactory::StringEqual(isolate());
7403 result.Bind(CallStub(callable, context, lhs, rhs)); 7403 result.Bind(CallStub(callable, NoContextConstant(), lhs, rhs));
7404 Goto(&end); 7404 Goto(&end);
7405 } 7405 }
7406 7406
7407 Bind(&if_rhsisnotstring); 7407 Bind(&if_rhsisnotstring);
7408 Goto(&if_notequal); 7408 Goto(&if_notequal);
7409 } 7409 }
7410 7410
7411 Bind(&if_lhsisnotstring); 7411 Bind(&if_lhsisnotstring);
7412 Goto(&if_notequal); 7412 Goto(&if_notequal);
7413 } 7413 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
7464 Goto(&end); 7464 Goto(&end);
7465 } 7465 }
7466 7466
7467 Bind(&end); 7467 Bind(&end);
7468 return result.value(); 7468 return result.value();
7469 } 7469 }
7470 7470
7471 // ECMA#sec-samevalue 7471 // ECMA#sec-samevalue
7472 // This algorithm differs from the Strict Equality Comparison Algorithm in its 7472 // This algorithm differs from the Strict Equality Comparison Algorithm in its
7473 // treatment of signed zeroes and NaNs. 7473 // treatment of signed zeroes and NaNs.
7474 Node* CodeStubAssembler::SameValue(Node* lhs, Node* rhs, Node* context) { 7474 Node* CodeStubAssembler::SameValue(Node* lhs, Node* rhs) {
7475 Variable var_result(this, MachineRepresentation::kWord32); 7475 Variable var_result(this, MachineRepresentation::kWord32);
7476 Label strict_equal(this), out(this); 7476 Label strict_equal(this), out(this);
7477 7477
7478 Node* const int_false = Int32Constant(0); 7478 Node* const int_false = Int32Constant(0);
7479 Node* const int_true = Int32Constant(1); 7479 Node* const int_true = Int32Constant(1);
7480 7480
7481 Label if_equal(this), if_notequal(this); 7481 Label if_equal(this), if_notequal(this);
7482 Branch(WordEqual(lhs, rhs), &if_equal, &if_notequal); 7482 Branch(WordEqual(lhs, rhs), &if_equal, &if_notequal);
7483 7483
7484 Bind(&if_equal); 7484 Bind(&if_equal);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
7538 Bind(&if_floatnotequal); 7538 Bind(&if_floatnotequal);
7539 { 7539 {
7540 var_result.Bind(int_false); 7540 var_result.Bind(int_false);
7541 Goto(&out); 7541 Goto(&out);
7542 } 7542 }
7543 } 7543 }
7544 } 7544 }
7545 7545
7546 Bind(&strict_equal); 7546 Bind(&strict_equal);
7547 { 7547 {
7548 Node* const is_equal = StrictEqual(lhs, rhs, context); 7548 Node* const is_equal = StrictEqual(lhs, rhs);
7549 Node* const result = WordEqual(is_equal, TrueConstant()); 7549 Node* const result = WordEqual(is_equal, TrueConstant());
7550 var_result.Bind(result); 7550 var_result.Bind(result);
7551 Goto(&out); 7551 Goto(&out);
7552 } 7552 }
7553 7553
7554 Bind(&out); 7554 Bind(&out);
7555 return var_result.value(); 7555 return var_result.value();
7556 } 7556 }
7557 7557
7558 Node* CodeStubAssembler::HasProperty( 7558 Node* CodeStubAssembler::HasProperty(
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
7649 Goto(&return_result); 7649 Goto(&return_result);
7650 7650
7651 Bind(&if_primitive); 7651 Bind(&if_primitive);
7652 var_result.Bind(NullConstant()); 7652 var_result.Bind(NullConstant());
7653 Goto(&return_result); 7653 Goto(&return_result);
7654 7654
7655 Bind(&return_result); 7655 Bind(&return_result);
7656 return var_result.value(); 7656 return var_result.value();
7657 } 7657 }
7658 7658
7659 Node* CodeStubAssembler::Typeof(Node* value, Node* context) { 7659 Node* CodeStubAssembler::Typeof(Node* value) {
7660 Variable result_var(this, MachineRepresentation::kTagged); 7660 Variable result_var(this, MachineRepresentation::kTagged);
7661 7661
7662 Label return_number(this, Label::kDeferred), if_oddball(this), 7662 Label return_number(this, Label::kDeferred), if_oddball(this),
7663 return_function(this), return_undefined(this), return_object(this), 7663 return_function(this), return_undefined(this), return_object(this),
7664 return_string(this), return_result(this); 7664 return_string(this), return_result(this);
7665 7665
7666 GotoIf(TaggedIsSmi(value), &return_number); 7666 GotoIf(TaggedIsSmi(value), &return_number);
7667 7667
7668 Node* map = LoadMap(value); 7668 Node* map = LoadMap(value);
7669 7669
(...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after
8312 formatted.c_str(), TENURED); 8312 formatted.c_str(), TENURED);
8313 CallRuntime(Runtime::kGlobalPrint, NoContextConstant(), 8313 CallRuntime(Runtime::kGlobalPrint, NoContextConstant(),
8314 HeapConstant(string)); 8314 HeapConstant(string));
8315 } 8315 }
8316 CallRuntime(Runtime::kDebugPrint, NoContextConstant(), tagged_value); 8316 CallRuntime(Runtime::kDebugPrint, NoContextConstant(), tagged_value);
8317 #endif 8317 #endif
8318 } 8318 }
8319 8319
8320 } // namespace internal 8320 } // namespace internal
8321 } // namespace v8 8321 } // namespace v8
OLDNEW
« no previous file with comments | « src/code-stub-assembler.h ('k') | src/ic/keyed-store-generic.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698