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

Side by Side Diff: src/arm/lithium-arm.h

Issue 24596002: ARM: Let the register allocator handle the context register. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed first round of comments. Created 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 465 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 }; 476 };
477 477
478 478
479 class LParameter V8_FINAL : public LTemplateInstruction<1, 0, 0> { 479 class LParameter V8_FINAL : public LTemplateInstruction<1, 0, 0> {
480 public: 480 public:
481 virtual bool HasInterestingComment(LCodeGen* gen) const { return false; } 481 virtual bool HasInterestingComment(LCodeGen* gen) const { return false; }
482 DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter") 482 DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter")
483 }; 483 };
484 484
485 485
486 class LCallStub V8_FINAL : public LTemplateInstruction<1, 0, 0> { 486 class LCallStub V8_FINAL : public LTemplateInstruction<1, 1, 0> {
487 public: 487 public:
488 explicit LCallStub(LOperand* context) {
489 inputs_[0] = context;
490 }
491
492 LOperand* context() { return inputs_[0]; }
493
488 DECLARE_CONCRETE_INSTRUCTION(CallStub, "call-stub") 494 DECLARE_CONCRETE_INSTRUCTION(CallStub, "call-stub")
489 DECLARE_HYDROGEN_ACCESSOR(CallStub) 495 DECLARE_HYDROGEN_ACCESSOR(CallStub)
490 496
491 TranscendentalCache::Type transcendental_type() { 497 TranscendentalCache::Type transcendental_type() {
492 return hydrogen()->transcendental_type(); 498 return hydrogen()->transcendental_type();
493 } 499 }
494 }; 500 };
495 501
496 502
497 class LUnknownOSRValue V8_FINAL : public LTemplateInstruction<1, 0, 0> { 503 class LUnknownOSRValue V8_FINAL : public LTemplateInstruction<1, 0, 0> {
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 } 784 }
779 785
780 LOperand* value() { return inputs_[0]; } 786 LOperand* value() { return inputs_[0]; }
781 LOperand* temp() { return temps_[0]; } 787 LOperand* temp() { return temps_[0]; }
782 788
783 DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round") 789 DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round")
784 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 790 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
785 }; 791 };
786 792
787 793
788 class LMathAbs V8_FINAL : public LTemplateInstruction<1, 1, 0> { 794 class LMathAbs V8_FINAL : public LTemplateInstruction<1, 2, 0> {
789 public: 795 public:
790 explicit LMathAbs(LOperand* value) { 796 LMathAbs(LOperand* context, LOperand* value) {
797 inputs_[1] = context;
791 inputs_[0] = value; 798 inputs_[0] = value;
792 } 799 }
793 800
801 LOperand* context() { return inputs_[1]; }
794 LOperand* value() { return inputs_[0]; } 802 LOperand* value() { return inputs_[0]; }
795 803
796 DECLARE_CONCRETE_INSTRUCTION(MathAbs, "math-abs") 804 DECLARE_CONCRETE_INSTRUCTION(MathAbs, "math-abs")
797 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 805 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
798 }; 806 };
799 807
800 808
801 class LMathLog V8_FINAL : public LTemplateInstruction<1, 1, 0> { 809 class LMathLog V8_FINAL : public LTemplateInstruction<1, 1, 0> {
802 public: 810 public:
803 explicit LMathLog(LOperand* value) { 811 explicit LMathLog(LOperand* value) {
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
982 LOperand* temp() { return temps_[0]; } 990 LOperand* temp() { return temps_[0]; }
983 991
984 DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, 992 DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch,
985 "is-undetectable-and-branch") 993 "is-undetectable-and-branch")
986 DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch) 994 DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch)
987 995
988 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 996 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
989 }; 997 };
990 998
991 999
992 class LStringCompareAndBranch V8_FINAL : public LControlInstruction<2, 0> { 1000 class LStringCompareAndBranch V8_FINAL : public LControlInstruction<3, 0> {
993 public: 1001 public:
994 LStringCompareAndBranch(LOperand* left, LOperand* right) { 1002 LStringCompareAndBranch(LOperand* context, LOperand* left, LOperand* right) {
995 inputs_[0] = left; 1003 inputs_[0] = context;
996 inputs_[1] = right; 1004 inputs_[1] = left;
1005 inputs_[2] = right;
997 } 1006 }
998 1007
999 LOperand* left() { return inputs_[0]; } 1008 LOperand* context() { return inputs_[0]; }
1000 LOperand* right() { return inputs_[1]; } 1009 LOperand* left() { return inputs_[1]; }
1010 LOperand* right() { return inputs_[2]; }
1001 1011
1002 DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch, 1012 DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch,
1003 "string-compare-and-branch") 1013 "string-compare-and-branch")
1004 DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch) 1014 DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch)
1005 1015
1006 Token::Value op() const { return hydrogen()->token(); } 1016 Token::Value op() const { return hydrogen()->token(); }
1007 1017
1008 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1018 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1009 }; 1019 };
1010 1020
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1066 LOperand* temp() { return temps_[0]; } 1076 LOperand* temp() { return temps_[0]; }
1067 1077
1068 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, 1078 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch,
1069 "class-of-test-and-branch") 1079 "class-of-test-and-branch")
1070 DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch) 1080 DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch)
1071 1081
1072 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1082 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1073 }; 1083 };
1074 1084
1075 1085
1076 class LCmpT V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1086 class LCmpT V8_FINAL : public LTemplateInstruction<1, 3, 0> {
1077 public: 1087 public:
1078 LCmpT(LOperand* left, LOperand* right) { 1088 LCmpT(LOperand* context, LOperand* left, LOperand* right) {
1079 inputs_[0] = left; 1089 inputs_[0] = context;
1080 inputs_[1] = right; 1090 inputs_[1] = left;
1091 inputs_[2] = right;
1081 } 1092 }
1082 1093
1083 LOperand* left() { return inputs_[0]; } 1094 LOperand* context() { return inputs_[0]; }
1084 LOperand* right() { return inputs_[1]; } 1095 LOperand* left() { return inputs_[1]; }
1096 LOperand* right() { return inputs_[2]; }
1085 1097
1086 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") 1098 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t")
1087 DECLARE_HYDROGEN_ACCESSOR(CompareGeneric) 1099 DECLARE_HYDROGEN_ACCESSOR(CompareGeneric)
1088 1100
1089 Token::Value op() const { return hydrogen()->token(); } 1101 Token::Value op() const { return hydrogen()->token(); }
1090 }; 1102 };
1091 1103
1092 1104
1093 class LInstanceOf V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1105 class LInstanceOf V8_FINAL : public LTemplateInstruction<1, 3, 0> {
1094 public: 1106 public:
1095 LInstanceOf(LOperand* left, LOperand* right) { 1107 LInstanceOf(LOperand* context, LOperand* left, LOperand* right) {
1096 inputs_[0] = left; 1108 inputs_[0] = context;
1097 inputs_[1] = right; 1109 inputs_[1] = left;
1110 inputs_[2] = right;
1098 } 1111 }
1099 1112
1100 LOperand* left() { return inputs_[0]; } 1113 LOperand* context() { return inputs_[0]; }
1101 LOperand* right() { return inputs_[1]; } 1114 LOperand* left() { return inputs_[1]; }
1115 LOperand* right() { return inputs_[2]; }
1102 1116
1103 DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of") 1117 DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of")
1104 }; 1118 };
1105 1119
1106 1120
1107 class LInstanceOfKnownGlobal V8_FINAL : public LTemplateInstruction<1, 1, 1> { 1121 class LInstanceOfKnownGlobal V8_FINAL : public LTemplateInstruction<1, 2, 1> {
1108 public: 1122 public:
1109 LInstanceOfKnownGlobal(LOperand* value, LOperand* temp) { 1123 LInstanceOfKnownGlobal(LOperand* context, LOperand* value, LOperand* temp) {
1110 inputs_[0] = value; 1124 inputs_[0] = context;
1125 inputs_[1] = value;
1111 temps_[0] = temp; 1126 temps_[0] = temp;
1112 } 1127 }
1113 1128
1114 LOperand* value() { return inputs_[0]; } 1129 LOperand* context() { return inputs_[0]; }
1130 LOperand* value() { return inputs_[1]; }
1115 LOperand* temp() { return temps_[0]; } 1131 LOperand* temp() { return temps_[0]; }
1116 1132
1117 DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal, 1133 DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal,
1118 "instance-of-known-global") 1134 "instance-of-known-global")
1119 DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal) 1135 DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal)
1120 1136
1121 Handle<JSFunction> function() const { return hydrogen()->function(); } 1137 Handle<JSFunction> function() const { return hydrogen()->function(); }
1122 LEnvironment* GetDeferredLazyDeoptimizationEnvironment() { 1138 LEnvironment* GetDeferredLazyDeoptimizationEnvironment() {
1123 return lazy_deopt_env_; 1139 return lazy_deopt_env_;
1124 } 1140 }
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
1385 LOperand* value() { return inputs_[2]; } 1401 LOperand* value() { return inputs_[2]; }
1386 1402
1387 DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar, "seq-string-set-char") 1403 DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar, "seq-string-set-char")
1388 DECLARE_HYDROGEN_ACCESSOR(SeqStringSetChar) 1404 DECLARE_HYDROGEN_ACCESSOR(SeqStringSetChar)
1389 1405
1390 private: 1406 private:
1391 String::Encoding encoding_; 1407 String::Encoding encoding_;
1392 }; 1408 };
1393 1409
1394 1410
1395 class LThrow V8_FINAL : public LTemplateInstruction<0, 1, 0> { 1411 class LThrow V8_FINAL : public LTemplateInstruction<0, 2, 0> {
1396 public: 1412 public:
1397 explicit LThrow(LOperand* value) { 1413 LThrow(LOperand* context, LOperand* value) {
1398 inputs_[0] = value; 1414 inputs_[0] = context;
1415 inputs_[1] = value;
1399 } 1416 }
1400 1417
1401 LOperand* value() { return inputs_[0]; } 1418 LOperand* context() { return inputs_[0]; }
1419 LOperand* value() { return inputs_[1]; }
1402 1420
1403 DECLARE_CONCRETE_INSTRUCTION(Throw, "throw") 1421 DECLARE_CONCRETE_INSTRUCTION(Throw, "throw")
1404 }; 1422 };
1405 1423
1406 1424
1407 class LAddI V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1425 class LAddI V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1408 public: 1426 public:
1409 LAddI(LOperand* left, LOperand* right) { 1427 LAddI(LOperand* left, LOperand* right) {
1410 inputs_[0] = left; 1428 inputs_[0] = left;
1411 inputs_[1] = right; 1429 inputs_[1] = right;
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1487 return LInstruction::kArithmeticD; 1505 return LInstruction::kArithmeticD;
1488 } 1506 }
1489 virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE; 1507 virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE;
1490 virtual const char* Mnemonic() const V8_OVERRIDE; 1508 virtual const char* Mnemonic() const V8_OVERRIDE;
1491 1509
1492 private: 1510 private:
1493 Token::Value op_; 1511 Token::Value op_;
1494 }; 1512 };
1495 1513
1496 1514
1497 class LArithmeticT V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1515 class LArithmeticT V8_FINAL : public LTemplateInstruction<1, 3, 0> {
1498 public: 1516 public:
1499 LArithmeticT(Token::Value op, LOperand* left, LOperand* right) 1517 LArithmeticT(Token::Value op,
1518 LOperand* context,
1519 LOperand* left,
1520 LOperand* right)
1500 : op_(op) { 1521 : op_(op) {
1501 inputs_[0] = left; 1522 inputs_[0] = context;
1502 inputs_[1] = right; 1523 inputs_[1] = left;
1524 inputs_[2] = right;
1503 } 1525 }
1504 1526
1505 LOperand* left() { return inputs_[0]; } 1527 LOperand* context() { return inputs_[0]; }
1506 LOperand* right() { return inputs_[1]; } 1528 LOperand* left() { return inputs_[1]; }
1529 LOperand* right() { return inputs_[2]; }
1507 Token::Value op() const { return op_; } 1530 Token::Value op() const { return op_; }
1508 1531
1509 virtual Opcode opcode() const V8_OVERRIDE { 1532 virtual Opcode opcode() const V8_OVERRIDE {
1510 return LInstruction::kArithmeticT; 1533 return LInstruction::kArithmeticT;
1511 } 1534 }
1512 virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE; 1535 virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE;
1513 virtual const char* Mnemonic() const V8_OVERRIDE; 1536 virtual const char* Mnemonic() const V8_OVERRIDE;
1514 1537
1515 private: 1538 private:
1516 Token::Value op_; 1539 Token::Value op_;
1517 }; 1540 };
1518 1541
1519 1542
1520 class LReturn V8_FINAL : public LTemplateInstruction<0, 2, 0> { 1543 class LReturn V8_FINAL : public LTemplateInstruction<0, 3, 0> {
1521 public: 1544 public:
1522 explicit LReturn(LOperand* value, LOperand* parameter_count) { 1545 LReturn(LOperand* value, LOperand* context, LOperand* parameter_count) {
1523 inputs_[0] = value; 1546 inputs_[0] = value;
1524 inputs_[1] = parameter_count; 1547 inputs_[1] = context;
1548 inputs_[2] = parameter_count;
1525 } 1549 }
1526 1550
1527 LOperand* value() { return inputs_[0]; } 1551 LOperand* value() { return inputs_[0]; }
1528 1552
1529 bool has_constant_parameter_count() { 1553 bool has_constant_parameter_count() {
1530 return parameter_count()->IsConstantOperand(); 1554 return parameter_count()->IsConstantOperand();
1531 } 1555 }
1532 LConstantOperand* constant_parameter_count() { 1556 LConstantOperand* constant_parameter_count() {
1533 ASSERT(has_constant_parameter_count()); 1557 ASSERT(has_constant_parameter_count());
1534 return LConstantOperand::cast(parameter_count()); 1558 return LConstantOperand::cast(parameter_count());
1535 } 1559 }
1536 LOperand* parameter_count() { return inputs_[1]; } 1560 LOperand* parameter_count() { return inputs_[2]; }
1537 1561
1538 DECLARE_CONCRETE_INSTRUCTION(Return, "return") 1562 DECLARE_CONCRETE_INSTRUCTION(Return, "return")
1539 }; 1563 };
1540 1564
1541 1565
1542 class LLoadNamedField V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1566 class LLoadNamedField V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1543 public: 1567 public:
1544 explicit LLoadNamedField(LOperand* object) { 1568 explicit LLoadNamedField(LOperand* object) {
1545 inputs_[0] = object; 1569 inputs_[0] = object;
1546 } 1570 }
1547 1571
1548 LOperand* object() { return inputs_[0]; } 1572 LOperand* object() { return inputs_[0]; }
1549 1573
1550 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field") 1574 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field")
1551 DECLARE_HYDROGEN_ACCESSOR(LoadNamedField) 1575 DECLARE_HYDROGEN_ACCESSOR(LoadNamedField)
1552 }; 1576 };
1553 1577
1554 1578
1555 class LLoadNamedGeneric V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1579 class LLoadNamedGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1556 public: 1580 public:
1557 explicit LLoadNamedGeneric(LOperand* object) { 1581 LLoadNamedGeneric(LOperand* context, LOperand* object) {
1558 inputs_[0] = object; 1582 inputs_[0] = context;
1583 inputs_[1] = object;
1559 } 1584 }
1560 1585
1561 LOperand* object() { return inputs_[0]; } 1586 LOperand* context() { return inputs_[0]; }
1587 LOperand* object() { return inputs_[1]; }
1562 1588
1563 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") 1589 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic")
1564 DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) 1590 DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric)
1565 1591
1566 Handle<Object> name() const { return hydrogen()->name(); } 1592 Handle<Object> name() const { return hydrogen()->name(); }
1567 }; 1593 };
1568 1594
1569 1595
1570 class LLoadFunctionPrototype V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1596 class LLoadFunctionPrototype V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1571 public: 1597 public:
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1620 } 1646 }
1621 1647
1622 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed, "load-keyed") 1648 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed, "load-keyed")
1623 DECLARE_HYDROGEN_ACCESSOR(LoadKeyed) 1649 DECLARE_HYDROGEN_ACCESSOR(LoadKeyed)
1624 1650
1625 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1651 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1626 uint32_t additional_index() const { return hydrogen()->index_offset(); } 1652 uint32_t additional_index() const { return hydrogen()->index_offset(); }
1627 }; 1653 };
1628 1654
1629 1655
1630 class LLoadKeyedGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1656 class LLoadKeyedGeneric V8_FINAL : public LTemplateInstruction<1, 3, 0> {
1631 public: 1657 public:
1632 LLoadKeyedGeneric(LOperand* object, LOperand* key) { 1658 LLoadKeyedGeneric(LOperand* context, LOperand* object, LOperand* key) {
1633 inputs_[0] = object; 1659 inputs_[0] = context;
1634 inputs_[1] = key; 1660 inputs_[1] = object;
1661 inputs_[2] = key;
1635 } 1662 }
1636 1663
1637 LOperand* object() { return inputs_[0]; } 1664 LOperand* context() { return inputs_[0]; }
1638 LOperand* key() { return inputs_[1]; } 1665 LOperand* object() { return inputs_[1]; }
1666 LOperand* key() { return inputs_[2]; }
1639 1667
1640 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") 1668 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic")
1641 }; 1669 };
1642 1670
1643 1671
1644 class LLoadGlobalCell V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1672 class LLoadGlobalCell V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1645 public: 1673 public:
1646 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell") 1674 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell")
1647 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell) 1675 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell)
1648 }; 1676 };
1649 1677
1650 1678
1651 class LLoadGlobalGeneric V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1679 class LLoadGlobalGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1652 public: 1680 public:
1653 explicit LLoadGlobalGeneric(LOperand* global_object) { 1681 LLoadGlobalGeneric(LOperand* context, LOperand* global_object) {
1654 inputs_[0] = global_object; 1682 inputs_[0] = context;
1683 inputs_[1] = global_object;
1655 } 1684 }
1656 1685
1657 LOperand* global_object() { return inputs_[0]; } 1686 LOperand* context() { return inputs_[0]; }
1687 LOperand* global_object() { return inputs_[1]; }
1658 1688
1659 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic") 1689 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic")
1660 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric) 1690 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric)
1661 1691
1662 Handle<Object> name() const { return hydrogen()->name(); } 1692 Handle<Object> name() const { return hydrogen()->name(); }
1663 bool for_typeof() const { return hydrogen()->for_typeof(); } 1693 bool for_typeof() const { return hydrogen()->for_typeof(); }
1664 }; 1694 };
1665 1695
1666 1696
1667 class LStoreGlobalCell V8_FINAL : public LTemplateInstruction<0, 1, 1> { 1697 class LStoreGlobalCell V8_FINAL : public LTemplateInstruction<0, 1, 1> {
1668 public: 1698 public:
1669 LStoreGlobalCell(LOperand* value, LOperand* temp) { 1699 LStoreGlobalCell(LOperand* value, LOperand* temp) {
1670 inputs_[0] = value; 1700 inputs_[0] = value;
1671 temps_[0] = temp; 1701 temps_[0] = temp;
1672 } 1702 }
1673 1703
1674 LOperand* value() { return inputs_[0]; } 1704 LOperand* value() { return inputs_[0]; }
1675 LOperand* temp() { return temps_[0]; } 1705 LOperand* temp() { return temps_[0]; }
1676 1706
1677 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell") 1707 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell")
1678 DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell) 1708 DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell)
1679 }; 1709 };
1680 1710
1681 1711
1682 class LStoreGlobalGeneric V8_FINAL : public LTemplateInstruction<0, 2, 0> { 1712 class LStoreGlobalGeneric V8_FINAL : public LTemplateInstruction<0, 3, 0> {
1683 public: 1713 public:
1684 explicit LStoreGlobalGeneric(LOperand* global_object, 1714 LStoreGlobalGeneric(LOperand* context,
1685 LOperand* value) { 1715 LOperand* global_object,
1686 inputs_[0] = global_object; 1716 LOperand* value) {
1687 inputs_[1] = value; 1717 inputs_[0] = context;
1718 inputs_[1] = global_object;
1719 inputs_[2] = value;
1688 } 1720 }
1689 1721
1690 LOperand* global_object() { return inputs_[0]; } 1722 LOperand* context() { return inputs_[0]; }
1691 LOperand* value() { return inputs_[1]; } 1723 LOperand* global_object() { return inputs_[1]; }
1724 LOperand* value() { return inputs_[2]; }
1692 1725
1693 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalGeneric, "store-global-generic") 1726 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalGeneric, "store-global-generic")
1694 DECLARE_HYDROGEN_ACCESSOR(StoreGlobalGeneric) 1727 DECLARE_HYDROGEN_ACCESSOR(StoreGlobalGeneric)
1695 1728
1696 Handle<Object> name() const { return hydrogen()->name(); } 1729 Handle<Object> name() const { return hydrogen()->name(); }
1697 StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); } 1730 StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); }
1698 }; 1731 };
1699 1732
1700 1733
1701 class LLoadContextSlot V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1734 class LLoadContextSlot V8_FINAL : public LTemplateInstruction<1, 1, 0> {
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1811 explicit LOuterContext(LOperand* context) { 1844 explicit LOuterContext(LOperand* context) {
1812 inputs_[0] = context; 1845 inputs_[0] = context;
1813 } 1846 }
1814 1847
1815 LOperand* context() { return inputs_[0]; } 1848 LOperand* context() { return inputs_[0]; }
1816 1849
1817 DECLARE_CONCRETE_INSTRUCTION(OuterContext, "outer-context") 1850 DECLARE_CONCRETE_INSTRUCTION(OuterContext, "outer-context")
1818 }; 1851 };
1819 1852
1820 1853
1821 class LDeclareGlobals V8_FINAL : public LTemplateInstruction<0, 0, 0> { 1854 class LDeclareGlobals V8_FINAL : public LTemplateInstruction<0, 1, 0> {
1822 public: 1855 public:
1856 explicit LDeclareGlobals(LOperand* context) {
1857 inputs_[0] = context;
1858 }
1859
1860 LOperand* context() { return inputs_[0]; }
1861
1823 DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals") 1862 DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals")
1824 DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals) 1863 DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals)
1825 }; 1864 };
1826 1865
1827 1866
1828 class LGlobalObject V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1867 class LGlobalObject V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1829 public: 1868 public:
1830 explicit LGlobalObject(LOperand* context) { 1869 explicit LGlobalObject(LOperand* context) {
1831 inputs_[0] = context; 1870 inputs_[0] = context;
1832 } 1871 }
(...skipping 21 matching lines...) Expand all
1854 DECLARE_CONCRETE_INSTRUCTION(CallConstantFunction, "call-constant-function") 1893 DECLARE_CONCRETE_INSTRUCTION(CallConstantFunction, "call-constant-function")
1855 DECLARE_HYDROGEN_ACCESSOR(CallConstantFunction) 1894 DECLARE_HYDROGEN_ACCESSOR(CallConstantFunction)
1856 1895
1857 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1896 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1858 1897
1859 Handle<JSFunction> function() { return hydrogen()->function(); } 1898 Handle<JSFunction> function() { return hydrogen()->function(); }
1860 int arity() const { return hydrogen()->argument_count() - 1; } 1899 int arity() const { return hydrogen()->argument_count() - 1; }
1861 }; 1900 };
1862 1901
1863 1902
1864 class LInvokeFunction V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1903 class LInvokeFunction V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1865 public: 1904 public:
1866 explicit LInvokeFunction(LOperand* function) { 1905 LInvokeFunction(LOperand* context, LOperand* function) {
1867 inputs_[0] = function; 1906 inputs_[0] = context;
1907 inputs_[1] = function;
1868 } 1908 }
1869 1909
1870 LOperand* function() { return inputs_[0]; } 1910 LOperand* context() { return inputs_[0]; }
1911 LOperand* function() { return inputs_[1]; }
1871 1912
1872 DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function") 1913 DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function")
1873 DECLARE_HYDROGEN_ACCESSOR(InvokeFunction) 1914 DECLARE_HYDROGEN_ACCESSOR(InvokeFunction)
1874 1915
1875 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1916 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1876 1917
1877 int arity() const { return hydrogen()->argument_count() - 1; } 1918 int arity() const { return hydrogen()->argument_count() - 1; }
1878 }; 1919 };
1879 1920
1880 1921
1881 class LCallKeyed V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1922 class LCallKeyed V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1882 public: 1923 public:
1883 explicit LCallKeyed(LOperand* key) { 1924 LCallKeyed(LOperand* context, LOperand* key) {
1884 inputs_[0] = key; 1925 inputs_[0] = context;
1926 inputs_[1] = key;
1885 } 1927 }
1886 1928
1887 LOperand* key() { return inputs_[0]; } 1929 LOperand* context() { return inputs_[0]; }
1930 LOperand* key() { return inputs_[1]; }
1888 1931
1889 DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call-keyed") 1932 DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call-keyed")
1890 DECLARE_HYDROGEN_ACCESSOR(CallKeyed) 1933 DECLARE_HYDROGEN_ACCESSOR(CallKeyed)
1891 1934
1892 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1935 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1893 1936
1894 int arity() const { return hydrogen()->argument_count() - 1; } 1937 int arity() const { return hydrogen()->argument_count() - 1; }
1895 }; 1938 };
1896 1939
1897 1940
1898 1941
1899 class LCallNamed V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1942 class LCallNamed V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1900 public: 1943 public:
1944 explicit LCallNamed(LOperand* context) {
1945 inputs_[0] = context;
1946 }
1947
1948 LOperand* context() { return inputs_[0]; }
1949
1901 DECLARE_CONCRETE_INSTRUCTION(CallNamed, "call-named") 1950 DECLARE_CONCRETE_INSTRUCTION(CallNamed, "call-named")
1902 DECLARE_HYDROGEN_ACCESSOR(CallNamed) 1951 DECLARE_HYDROGEN_ACCESSOR(CallNamed)
1903 1952
1904 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1953 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1905 1954
1906 Handle<String> name() const { return hydrogen()->name(); } 1955 Handle<String> name() const { return hydrogen()->name(); }
1907 int arity() const { return hydrogen()->argument_count() - 1; } 1956 int arity() const { return hydrogen()->argument_count() - 1; }
1908 }; 1957 };
1909 1958
1910 1959
1911 class LCallFunction V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1960 class LCallFunction V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1912 public: 1961 public:
1913 explicit LCallFunction(LOperand* function) { 1962 LCallFunction(LOperand* context, LOperand* function) {
1914 inputs_[0] = function; 1963 inputs_[0] = context;
1964 inputs_[1] = function;
1915 } 1965 }
1916 1966
1917 LOperand* function() { return inputs_[0]; } 1967 LOperand* context() { return inputs_[0]; }
1968 LOperand* function() { return inputs_[1]; }
1918 1969
1919 DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call-function") 1970 DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call-function")
1920 DECLARE_HYDROGEN_ACCESSOR(CallFunction) 1971 DECLARE_HYDROGEN_ACCESSOR(CallFunction)
1921 1972
1922 int arity() const { return hydrogen()->argument_count() - 1; } 1973 int arity() const { return hydrogen()->argument_count() - 1; }
1923 }; 1974 };
1924 1975
1925 1976
1926 class LCallGlobal V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1977 class LCallGlobal V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1927 public: 1978 public:
1979 explicit LCallGlobal(LOperand* context) {
1980 inputs_[0] = context;
1981 }
1982
1983 LOperand* context() { return inputs_[0]; }
1984
1928 DECLARE_CONCRETE_INSTRUCTION(CallGlobal, "call-global") 1985 DECLARE_CONCRETE_INSTRUCTION(CallGlobal, "call-global")
1929 DECLARE_HYDROGEN_ACCESSOR(CallGlobal) 1986 DECLARE_HYDROGEN_ACCESSOR(CallGlobal)
1930 1987
1931 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1988 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1932 1989
1933 Handle<String> name() const {return hydrogen()->name(); } 1990 Handle<String> name() const {return hydrogen()->name(); }
1934 int arity() const { return hydrogen()->argument_count() - 1; } 1991 int arity() const { return hydrogen()->argument_count() - 1; }
1935 }; 1992 };
1936 1993
1937 1994
1938 class LCallKnownGlobal V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1995 class LCallKnownGlobal V8_FINAL : public LTemplateInstruction<1, 0, 0> {
1939 public: 1996 public:
1940 DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal, "call-known-global") 1997 DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal, "call-known-global")
1941 DECLARE_HYDROGEN_ACCESSOR(CallKnownGlobal) 1998 DECLARE_HYDROGEN_ACCESSOR(CallKnownGlobal)
1942 1999
1943 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2000 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1944 2001
1945 int arity() const { return hydrogen()->argument_count() - 1; } 2002 int arity() const { return hydrogen()->argument_count() - 1; }
1946 }; 2003 };
1947 2004
1948 2005
1949 class LCallNew V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2006 class LCallNew V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1950 public: 2007 public:
1951 explicit LCallNew(LOperand* constructor) { 2008 LCallNew(LOperand* context, LOperand* constructor) {
1952 inputs_[0] = constructor; 2009 inputs_[0] = context;
2010 inputs_[1] = constructor;
1953 } 2011 }
1954 2012
1955 LOperand* constructor() { return inputs_[0]; } 2013 LOperand* context() { return inputs_[0]; }
2014 LOperand* constructor() { return inputs_[1]; }
1956 2015
1957 DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new") 2016 DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new")
1958 DECLARE_HYDROGEN_ACCESSOR(CallNew) 2017 DECLARE_HYDROGEN_ACCESSOR(CallNew)
1959 2018
1960 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2019 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1961 2020
1962 int arity() const { return hydrogen()->argument_count() - 1; } 2021 int arity() const { return hydrogen()->argument_count() - 1; }
1963 }; 2022 };
1964 2023
1965 2024
1966 class LCallNewArray V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2025 class LCallNewArray V8_FINAL : public LTemplateInstruction<1, 2, 0> {
1967 public: 2026 public:
1968 explicit LCallNewArray(LOperand* constructor) { 2027 LCallNewArray(LOperand* context, LOperand* constructor) {
1969 inputs_[0] = constructor; 2028 inputs_[0] = context;
2029 inputs_[1] = constructor;
1970 } 2030 }
1971 2031
1972 LOperand* constructor() { return inputs_[0]; } 2032 LOperand* context() { return inputs_[0]; }
2033 LOperand* constructor() { return inputs_[1]; }
1973 2034
1974 DECLARE_CONCRETE_INSTRUCTION(CallNewArray, "call-new-array") 2035 DECLARE_CONCRETE_INSTRUCTION(CallNewArray, "call-new-array")
1975 DECLARE_HYDROGEN_ACCESSOR(CallNewArray) 2036 DECLARE_HYDROGEN_ACCESSOR(CallNewArray)
1976 2037
1977 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2038 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
1978 2039
1979 int arity() const { return hydrogen()->argument_count() - 1; } 2040 int arity() const { return hydrogen()->argument_count() - 1; }
1980 }; 2041 };
1981 2042
1982 2043
1983 class LCallRuntime V8_FINAL : public LTemplateInstruction<1, 0, 0> { 2044 class LCallRuntime V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1984 public: 2045 public:
2046 explicit LCallRuntime(LOperand* context) {
2047 inputs_[0] = context;
2048 }
2049
2050 LOperand* context() { return inputs_[0]; }
2051
1985 DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") 2052 DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime")
1986 DECLARE_HYDROGEN_ACCESSOR(CallRuntime) 2053 DECLARE_HYDROGEN_ACCESSOR(CallRuntime)
1987 2054
1988 const Runtime::Function* function() const { return hydrogen()->function(); } 2055 const Runtime::Function* function() const { return hydrogen()->function(); }
1989 int arity() const { return hydrogen()->argument_count(); } 2056 int arity() const { return hydrogen()->argument_count(); }
1990 }; 2057 };
1991 2058
1992 2059
1993 class LInteger32ToDouble V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2060 class LInteger32ToDouble V8_FINAL : public LTemplateInstruction<1, 1, 0> {
1994 public: 2061 public:
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
2180 2247
2181 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2248 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
2182 2249
2183 Handle<Map> transition() const { return hydrogen()->transition_map(); } 2250 Handle<Map> transition() const { return hydrogen()->transition_map(); }
2184 Representation representation() const { 2251 Representation representation() const {
2185 return hydrogen()->field_representation(); 2252 return hydrogen()->field_representation();
2186 } 2253 }
2187 }; 2254 };
2188 2255
2189 2256
2190 class LStoreNamedGeneric V8_FINAL : public LTemplateInstruction<0, 2, 0> { 2257 class LStoreNamedGeneric V8_FINAL : public LTemplateInstruction<0, 3, 0> {
2191 public: 2258 public:
2192 LStoreNamedGeneric(LOperand* object, LOperand* value) { 2259 LStoreNamedGeneric(LOperand* context, LOperand* object, LOperand* value) {
2193 inputs_[0] = object; 2260 inputs_[0] = context;
2194 inputs_[1] = value; 2261 inputs_[1] = object;
2262 inputs_[2] = value;
2195 } 2263 }
2196 2264
2197 LOperand* object() { return inputs_[0]; } 2265 LOperand* context() { return inputs_[0]; }
2198 LOperand* value() { return inputs_[1]; } 2266 LOperand* object() { return inputs_[1]; }
2267 LOperand* value() { return inputs_[2]; }
2199 2268
2200 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic") 2269 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic")
2201 DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric) 2270 DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric)
2202 2271
2203 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2272 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
2204 2273
2205 Handle<Object> name() const { return hydrogen()->name(); } 2274 Handle<Object> name() const { return hydrogen()->name(); }
2206 StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); } 2275 StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); }
2207 }; 2276 };
2208 2277
(...skipping 22 matching lines...) Expand all
2231 if (hydrogen()->value()->IsAdd() || hydrogen()->value()->IsSub() || 2300 if (hydrogen()->value()->IsAdd() || hydrogen()->value()->IsSub() ||
2232 hydrogen()->value()->IsMul() || hydrogen()->value()->IsDiv()) { 2301 hydrogen()->value()->IsMul() || hydrogen()->value()->IsDiv()) {
2233 return false; 2302 return false;
2234 } 2303 }
2235 return hydrogen()->NeedsCanonicalization(); 2304 return hydrogen()->NeedsCanonicalization();
2236 } 2305 }
2237 uint32_t additional_index() const { return hydrogen()->index_offset(); } 2306 uint32_t additional_index() const { return hydrogen()->index_offset(); }
2238 }; 2307 };
2239 2308
2240 2309
2241 class LStoreKeyedGeneric V8_FINAL : public LTemplateInstruction<0, 3, 0> { 2310 class LStoreKeyedGeneric V8_FINAL : public LTemplateInstruction<0, 4, 0> {
2242 public: 2311 public:
2243 LStoreKeyedGeneric(LOperand* obj, LOperand* key, LOperand* value) { 2312 LStoreKeyedGeneric(LOperand* context,
2244 inputs_[0] = obj; 2313 LOperand* obj,
2245 inputs_[1] = key; 2314 LOperand* key,
2246 inputs_[2] = value; 2315 LOperand* value) {
2316 inputs_[0] = context;
2317 inputs_[1] = obj;
2318 inputs_[2] = key;
2319 inputs_[3] = value;
2247 } 2320 }
2248 2321
2249 LOperand* object() { return inputs_[0]; } 2322 LOperand* context() { return inputs_[0]; }
2250 LOperand* key() { return inputs_[1]; } 2323 LOperand* object() { return inputs_[1]; }
2251 LOperand* value() { return inputs_[2]; } 2324 LOperand* key() { return inputs_[2]; }
2325 LOperand* value() { return inputs_[3]; }
2252 2326
2253 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") 2327 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic")
2254 DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric) 2328 DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric)
2255 2329
2256 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2330 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
2257 2331
2258 StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); } 2332 StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); }
2259 }; 2333 };
2260 2334
2261 2335
2262 class LTransitionElementsKind V8_FINAL : public LTemplateInstruction<0, 1, 1> { 2336 class LTransitionElementsKind V8_FINAL : public LTemplateInstruction<0, 2, 1> {
2263 public: 2337 public:
2264 LTransitionElementsKind(LOperand* object, 2338 LTransitionElementsKind(LOperand* object,
2339 LOperand* context,
2265 LOperand* new_map_temp) { 2340 LOperand* new_map_temp) {
2266 inputs_[0] = object; 2341 inputs_[0] = object;
2342 inputs_[1] = context;
2267 temps_[0] = new_map_temp; 2343 temps_[0] = new_map_temp;
2268 } 2344 }
2269 2345
2346 LOperand* context() { return inputs_[1]; }
2270 LOperand* object() { return inputs_[0]; } 2347 LOperand* object() { return inputs_[0]; }
2271 LOperand* new_map_temp() { return temps_[0]; } 2348 LOperand* new_map_temp() { return temps_[0]; }
2272 2349
2273 DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind, 2350 DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind,
2274 "transition-elements-kind") 2351 "transition-elements-kind")
2275 DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind) 2352 DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind)
2276 2353
2277 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2354 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
2278 2355
2279 Handle<Map> original_map() { return hydrogen()->original_map().handle(); } 2356 Handle<Map> original_map() { return hydrogen()->original_map().handle(); }
(...skipping 14 matching lines...) Expand all
2294 } 2371 }
2295 2372
2296 LOperand* object() { return inputs_[0]; } 2373 LOperand* object() { return inputs_[0]; }
2297 LOperand* temp() { return temps_[0]; } 2374 LOperand* temp() { return temps_[0]; }
2298 2375
2299 DECLARE_CONCRETE_INSTRUCTION(TrapAllocationMemento, 2376 DECLARE_CONCRETE_INSTRUCTION(TrapAllocationMemento,
2300 "trap-allocation-memento") 2377 "trap-allocation-memento")
2301 }; 2378 };
2302 2379
2303 2380
2304 class LStringAdd V8_FINAL : public LTemplateInstruction<1, 2, 0> { 2381 class LStringAdd V8_FINAL : public LTemplateInstruction<1, 3, 0> {
2305 public: 2382 public:
2306 LStringAdd(LOperand* left, LOperand* right) { 2383 LStringAdd(LOperand* context, LOperand* left, LOperand* right) {
2307 inputs_[0] = left; 2384 inputs_[0] = context;
2308 inputs_[1] = right; 2385 inputs_[1] = left;
2386 inputs_[2] = right;
2309 } 2387 }
2310 2388
2311 LOperand* left() { return inputs_[0]; } 2389 LOperand* context() { return inputs_[0]; }
2312 LOperand* right() { return inputs_[1]; } 2390 LOperand* left() { return inputs_[1]; }
2391 LOperand* right() { return inputs_[2]; }
2313 2392
2314 DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add") 2393 DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add")
2315 DECLARE_HYDROGEN_ACCESSOR(StringAdd) 2394 DECLARE_HYDROGEN_ACCESSOR(StringAdd)
2316 }; 2395 };
2317 2396
2318 2397
2319 2398
2320 class LStringCharCodeAt V8_FINAL : public LTemplateInstruction<1, 2, 0> { 2399 class LStringCharCodeAt V8_FINAL : public LTemplateInstruction<1, 3, 0> {
2321 public: 2400 public:
2322 LStringCharCodeAt(LOperand* string, LOperand* index) { 2401 LStringCharCodeAt(LOperand* context, LOperand* string, LOperand* index) {
2323 inputs_[0] = string; 2402 inputs_[0] = context;
2324 inputs_[1] = index; 2403 inputs_[1] = string;
2404 inputs_[2] = index;
2325 } 2405 }
2326 2406
2327 LOperand* string() { return inputs_[0]; } 2407 LOperand* context() { return inputs_[0]; }
2328 LOperand* index() { return inputs_[1]; } 2408 LOperand* string() { return inputs_[1]; }
2409 LOperand* index() { return inputs_[2]; }
2329 2410
2330 DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at") 2411 DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at")
2331 DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt) 2412 DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt)
2332 }; 2413 };
2333 2414
2334 2415
2335 class LStringCharFromCode V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2416 class LStringCharFromCode V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2336 public: 2417 public:
2337 explicit LStringCharFromCode(LOperand* char_code) { 2418 explicit LStringCharFromCode(LOperand* context, LOperand* char_code) {
2338 inputs_[0] = char_code; 2419 inputs_[0] = context;
2420 inputs_[1] = char_code;
2339 } 2421 }
2340 2422
2341 LOperand* char_code() { return inputs_[0]; } 2423 LOperand* context() { return inputs_[0]; }
2424 LOperand* char_code() { return inputs_[1]; }
2342 2425
2343 DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code") 2426 DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code")
2344 DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode) 2427 DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode)
2345 }; 2428 };
2346 2429
2347 2430
2348 class LCheckValue V8_FINAL : public LTemplateInstruction<0, 1, 0> { 2431 class LCheckValue V8_FINAL : public LTemplateInstruction<0, 1, 0> {
2349 public: 2432 public:
2350 explicit LCheckValue(LOperand* value) { 2433 explicit LCheckValue(LOperand* value) {
2351 inputs_[0] = value; 2434 inputs_[0] = value;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
2442 2525
2443 LOperand* unclamped() { return inputs_[0]; } 2526 LOperand* unclamped() { return inputs_[0]; }
2444 LOperand* temp() { return temps_[0]; } 2527 LOperand* temp() { return temps_[0]; }
2445 2528
2446 DECLARE_CONCRETE_INSTRUCTION(ClampTToUint8, "clamp-t-to-uint8") 2529 DECLARE_CONCRETE_INSTRUCTION(ClampTToUint8, "clamp-t-to-uint8")
2447 }; 2530 };
2448 2531
2449 2532
2450 class LAllocate V8_FINAL : public LTemplateInstruction<1, 2, 2> { 2533 class LAllocate V8_FINAL : public LTemplateInstruction<1, 2, 2> {
2451 public: 2534 public:
2452 LAllocate(LOperand* size, LOperand* temp1, LOperand* temp2) { 2535 LAllocate(LOperand* context,
2536 LOperand* size,
2537 LOperand* temp1,
2538 LOperand* temp2) {
2539 inputs_[0] = context;
2453 inputs_[1] = size; 2540 inputs_[1] = size;
2454 temps_[0] = temp1; 2541 temps_[0] = temp1;
2455 temps_[1] = temp2; 2542 temps_[1] = temp2;
2456 } 2543 }
2457 2544
2545 LOperand* context() { return inputs_[0]; }
2458 LOperand* size() { return inputs_[1]; } 2546 LOperand* size() { return inputs_[1]; }
2459 LOperand* temp1() { return temps_[0]; } 2547 LOperand* temp1() { return temps_[0]; }
2460 LOperand* temp2() { return temps_[1]; } 2548 LOperand* temp2() { return temps_[1]; }
2461 2549
2462 DECLARE_CONCRETE_INSTRUCTION(Allocate, "allocate") 2550 DECLARE_CONCRETE_INSTRUCTION(Allocate, "allocate")
2463 DECLARE_HYDROGEN_ACCESSOR(Allocate) 2551 DECLARE_HYDROGEN_ACCESSOR(Allocate)
2464 }; 2552 };
2465 2553
2466 2554
2467 class LRegExpLiteral V8_FINAL : public LTemplateInstruction<1, 0, 0> { 2555 class LRegExpLiteral V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2468 public: 2556 public:
2557 explicit LRegExpLiteral(LOperand* context) {
2558 inputs_[0] = context;
2559 }
2560
2561 LOperand* context() { return inputs_[0]; }
2562
2469 DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal") 2563 DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal")
2470 DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral) 2564 DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral)
2471 }; 2565 };
2472 2566
2473 2567
2474 class LFunctionLiteral V8_FINAL : public LTemplateInstruction<1, 0, 0> { 2568 class LFunctionLiteral V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2475 public: 2569 public:
2570 explicit LFunctionLiteral(LOperand* context) {
2571 inputs_[0] = context;
2572 }
2573
2574 LOperand* context() { return inputs_[0]; }
2575
2476 DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal") 2576 DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal")
2477 DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral) 2577 DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral)
2478 }; 2578 };
2479 2579
2480 2580
2481 class LToFastProperties V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2581 class LToFastProperties V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2482 public: 2582 public:
2483 explicit LToFastProperties(LOperand* value) { 2583 explicit LToFastProperties(LOperand* value) {
2484 inputs_[0] = value; 2584 inputs_[0] = value;
2485 } 2585 }
2486 2586
2487 LOperand* value() { return inputs_[0]; } 2587 LOperand* value() { return inputs_[0]; }
2488 2588
2489 DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties") 2589 DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties")
2490 DECLARE_HYDROGEN_ACCESSOR(ToFastProperties) 2590 DECLARE_HYDROGEN_ACCESSOR(ToFastProperties)
2491 }; 2591 };
2492 2592
2493 2593
2494 class LTypeof V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2594 class LTypeof V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2495 public: 2595 public:
2496 explicit LTypeof(LOperand* value) { 2596 LTypeof(LOperand* context, LOperand* value) {
2497 inputs_[0] = value; 2597 inputs_[0] = context;
2598 inputs_[1] = value;
2498 } 2599 }
2499 2600
2500 LOperand* value() { return inputs_[0]; } 2601 LOperand* context() { return inputs_[0]; }
2602 LOperand* value() { return inputs_[1]; }
2501 2603
2502 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") 2604 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof")
2503 }; 2605 };
2504 2606
2505 2607
2506 class LTypeofIsAndBranch V8_FINAL : public LControlInstruction<1, 0> { 2608 class LTypeofIsAndBranch V8_FINAL : public LControlInstruction<1, 0> {
2507 public: 2609 public:
2508 explicit LTypeofIsAndBranch(LOperand* value) { 2610 explicit LTypeofIsAndBranch(LOperand* value) {
2509 inputs_[0] = value; 2611 inputs_[0] = value;
2510 } 2612 }
(...skipping 26 matching lines...) Expand all
2537 public: 2639 public:
2538 LOsrEntry() {} 2640 LOsrEntry() {}
2539 2641
2540 virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE { 2642 virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE {
2541 return false; 2643 return false;
2542 } 2644 }
2543 DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry") 2645 DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry")
2544 }; 2646 };
2545 2647
2546 2648
2547 class LStackCheck V8_FINAL : public LTemplateInstruction<0, 0, 0> { 2649 class LStackCheck V8_FINAL : public LTemplateInstruction<0, 1, 0> {
2548 public: 2650 public:
2651 explicit LStackCheck(LOperand* context) {
2652 inputs_[0] = context;
2653 }
2654
2655 LOperand* context() { return inputs_[0]; }
2656
2549 DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check") 2657 DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check")
2550 DECLARE_HYDROGEN_ACCESSOR(StackCheck) 2658 DECLARE_HYDROGEN_ACCESSOR(StackCheck)
2551 2659
2552 Label* done_label() { return &done_label_; } 2660 Label* done_label() { return &done_label_; }
2553 2661
2554 private: 2662 private:
2555 Label done_label_; 2663 Label done_label_;
2556 }; 2664 };
2557 2665
2558 2666
2559 class LForInPrepareMap V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2667 class LForInPrepareMap V8_FINAL : public LTemplateInstruction<1, 2, 0> {
2560 public: 2668 public:
2561 explicit LForInPrepareMap(LOperand* object) { 2669 LForInPrepareMap(LOperand* context, LOperand* object) {
2562 inputs_[0] = object; 2670 inputs_[0] = context;
2671 inputs_[1] = object;
2563 } 2672 }
2564 2673
2565 LOperand* object() { return inputs_[0]; } 2674 LOperand* context() { return inputs_[0]; }
2675 LOperand* object() { return inputs_[1]; }
2566 2676
2567 DECLARE_CONCRETE_INSTRUCTION(ForInPrepareMap, "for-in-prepare-map") 2677 DECLARE_CONCRETE_INSTRUCTION(ForInPrepareMap, "for-in-prepare-map")
2568 }; 2678 };
2569 2679
2570 2680
2571 class LForInCacheArray V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2681 class LForInCacheArray V8_FINAL : public LTemplateInstruction<1, 1, 0> {
2572 public: 2682 public:
2573 explicit LForInCacheArray(LOperand* map) { 2683 explicit LForInCacheArray(LOperand* map) {
2574 inputs_[0] = map; 2684 inputs_[0] = map;
2575 } 2685 }
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
2794 2904
2795 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); 2905 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder);
2796 }; 2906 };
2797 2907
2798 #undef DECLARE_HYDROGEN_ACCESSOR 2908 #undef DECLARE_HYDROGEN_ACCESSOR
2799 #undef DECLARE_CONCRETE_INSTRUCTION 2909 #undef DECLARE_CONCRETE_INSTRUCTION
2800 2910
2801 } } // namespace v8::internal 2911 } } // namespace v8::internal
2802 2912
2803 #endif // V8_ARM_LITHIUM_ARM_H_ 2913 #endif // V8_ARM_LITHIUM_ARM_H_
OLDNEW
« no previous file with comments | « src/arm/assembler-arm.h ('k') | src/arm/lithium-arm.cc » ('j') | src/arm/lithium-arm.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698