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

Side by Side Diff: src/code-stubs.cc

Issue 2407103003: [Interpreter] Collect feedback about Oddballs in Bitwise, Inc, Dec operations. (Closed)
Patch Set: Created 4 years, 2 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 | « no previous file | src/interpreter/interpreter-assembler.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 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 #include "src/code-stubs.h" 5 #include "src/code-stubs.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/ast/ast.h" 9 #include "src/ast/ast.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 1473 matching lines...) Expand 10 before | Expand all | Expand 10 after
1484 1484
1485 assembler->Bind(&if_valueisnumber); 1485 assembler->Bind(&if_valueisnumber);
1486 { 1486 {
1487 // Load the HeapNumber value. 1487 // Load the HeapNumber value.
1488 var_finc_value.Bind(assembler->LoadHeapNumberValue(value)); 1488 var_finc_value.Bind(assembler->LoadHeapNumberValue(value));
1489 assembler->Goto(&do_finc); 1489 assembler->Goto(&do_finc);
1490 } 1490 }
1491 1491
1492 assembler->Bind(&if_valuenotnumber); 1492 assembler->Bind(&if_valuenotnumber);
1493 { 1493 {
1494 // Convert to a Number first and try again. 1494 Label if_valueisoddball(assembler), if_valuenotoddball(assembler);
1495 Callable callable = 1495 Node* instance_type = assembler->LoadMapInstanceType(value_map);
1496 CodeFactory::NonNumberToNumber(assembler->isolate()); 1496 Node* is_oddball = assembler->Word32Equal(
1497 var_type_feedback.Bind( 1497 instance_type, assembler->Int32Constant(ODDBALL_TYPE));
1498 assembler->Int32Constant(BinaryOperationFeedback::kAny)); 1498 assembler->Branch(is_oddball, &if_valueisoddball, &if_valuenotoddball);
1499 value_var.Bind(assembler->CallStub(callable, context, value)); 1499
1500 assembler->Goto(&start); 1500 assembler->Bind(&if_valueisoddball);
1501 {
1502 // Convert Oddball to Number and check again.
1503 value_var.Bind(
1504 assembler->LoadObjectField(value, Oddball::kToNumberOffset));
1505 var_type_feedback.Bind(assembler->Int32Constant(
Leszek Swirski 2016/10/19 08:42:48 Because of the loop, this should possibly be an "o
mythria 2016/10/19 11:26:37 As I explained offline, we don't need it here beca
1506 BinaryOperationFeedback::kNumberOrOddball));
1507 assembler->Goto(&start);
1508 }
1509
1510 assembler->Bind(&if_valuenotoddball);
1511 {
1512 // Convert to a Number first and try again.
1513 Callable callable =
1514 CodeFactory::NonNumberToNumber(assembler->isolate());
1515 var_type_feedback.Bind(
1516 assembler->Int32Constant(BinaryOperationFeedback::kAny));
1517 value_var.Bind(assembler->CallStub(callable, context, value));
1518 assembler->Goto(&start);
1519 }
1501 } 1520 }
1502 } 1521 }
1503 } 1522 }
1504 1523
1505 assembler->Bind(&do_finc); 1524 assembler->Bind(&do_finc);
1506 { 1525 {
1507 Node* finc_value = var_finc_value.value(); 1526 Node* finc_value = var_finc_value.value();
1508 Node* one = assembler->Float64Constant(1.0); 1527 Node* one = assembler->Float64Constant(1.0);
1509 Node* finc_result = assembler->Float64Add(finc_value, one); 1528 Node* finc_result = assembler->Float64Add(finc_value, one);
1510 var_type_feedback.Bind(assembler->Word32Or( 1529 var_type_feedback.Bind(assembler->Word32Or(
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1594 1613
1595 assembler->Bind(&if_valueisnumber); 1614 assembler->Bind(&if_valueisnumber);
1596 { 1615 {
1597 // Load the HeapNumber value. 1616 // Load the HeapNumber value.
1598 var_fdec_value.Bind(assembler->LoadHeapNumberValue(value)); 1617 var_fdec_value.Bind(assembler->LoadHeapNumberValue(value));
1599 assembler->Goto(&do_fdec); 1618 assembler->Goto(&do_fdec);
1600 } 1619 }
1601 1620
1602 assembler->Bind(&if_valuenotnumber); 1621 assembler->Bind(&if_valuenotnumber);
1603 { 1622 {
1604 // Convert to a Number first and try again. 1623 Label if_valueisoddball(assembler), if_valuenotoddball(assembler);
1605 Callable callable = 1624 Node* instance_type = assembler->LoadMapInstanceType(value_map);
1606 CodeFactory::NonNumberToNumber(assembler->isolate()); 1625 Node* is_oddball = assembler->Word32Equal(
1607 var_type_feedback.Bind( 1626 instance_type, assembler->Int32Constant(ODDBALL_TYPE));
1608 assembler->Int32Constant(BinaryOperationFeedback::kAny)); 1627 assembler->Branch(is_oddball, &if_valueisoddball, &if_valuenotoddball);
1609 value_var.Bind(assembler->CallStub(callable, context, value)); 1628
1610 assembler->Goto(&start); 1629 assembler->Bind(&if_valueisoddball);
1630 {
1631 // Convert Oddball to Number and check again.
1632 value_var.Bind(
1633 assembler->LoadObjectField(value, Oddball::kToNumberOffset));
1634 var_type_feedback.Bind(assembler->Int32Constant(
1635 BinaryOperationFeedback::kNumberOrOddball));
1636 assembler->Goto(&start);
1637 }
1638
1639 assembler->Bind(&if_valuenotoddball);
1640 {
1641 // Convert to a Number first and try again.
1642 Callable callable =
1643 CodeFactory::NonNumberToNumber(assembler->isolate());
1644 var_type_feedback.Bind(
1645 assembler->Int32Constant(BinaryOperationFeedback::kAny));
1646 value_var.Bind(assembler->CallStub(callable, context, value));
1647 assembler->Goto(&start);
1648 }
1611 } 1649 }
1612 } 1650 }
1613 } 1651 }
1614 1652
1615 assembler->Bind(&do_fdec); 1653 assembler->Bind(&do_fdec);
1616 { 1654 {
1617 Node* fdec_value = var_fdec_value.value(); 1655 Node* fdec_value = var_fdec_value.value();
1618 Node* one = assembler->Float64Constant(1.0); 1656 Node* one = assembler->Float64Constant(1.0);
1619 Node* fdec_result = assembler->Float64Sub(fdec_value, one); 1657 Node* fdec_result = assembler->Float64Sub(fdec_value, one);
1620 var_type_feedback.Bind(assembler->Word32Or( 1658 var_type_feedback.Bind(assembler->Word32Or(
(...skipping 1405 matching lines...) Expand 10 before | Expand all | Expand 10 after
3026 3064
3027 if (type == MachineType::Pointer()) { 3065 if (type == MachineType::Pointer()) {
3028 return Representation::External(); 3066 return Representation::External();
3029 } 3067 }
3030 3068
3031 return Representation::Tagged(); 3069 return Representation::Tagged();
3032 } 3070 }
3033 3071
3034 } // namespace internal 3072 } // namespace internal
3035 } // namespace v8 3073 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/interpreter/interpreter-assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698