OLD | NEW |
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 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
465 | 465 |
466 class LParameter V8_FINAL : public LTemplateInstruction<1, 0, 0> { | 466 class LParameter V8_FINAL : public LTemplateInstruction<1, 0, 0> { |
467 public: | 467 public: |
468 virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE { | 468 virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE { |
469 return false; | 469 return false; |
470 } | 470 } |
471 DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter") | 471 DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter") |
472 }; | 472 }; |
473 | 473 |
474 | 474 |
475 class LCallStub V8_FINAL : public LTemplateInstruction<1, 0, 0> { | 475 class LCallStub V8_FINAL : public LTemplateInstruction<1, 1, 0> { |
476 public: | 476 public: |
| 477 explicit LCallStub(LOperand* context) { |
| 478 inputs_[0] = context; |
| 479 } |
| 480 |
| 481 LOperand* context() { return inputs_[0]; } |
| 482 |
477 DECLARE_CONCRETE_INSTRUCTION(CallStub, "call-stub") | 483 DECLARE_CONCRETE_INSTRUCTION(CallStub, "call-stub") |
478 DECLARE_HYDROGEN_ACCESSOR(CallStub) | 484 DECLARE_HYDROGEN_ACCESSOR(CallStub) |
479 | 485 |
480 TranscendentalCache::Type transcendental_type() { | 486 TranscendentalCache::Type transcendental_type() { |
481 return hydrogen()->transcendental_type(); | 487 return hydrogen()->transcendental_type(); |
482 } | 488 } |
483 }; | 489 }; |
484 | 490 |
485 | 491 |
486 class LUnknownOSRValue V8_FINAL : public LTemplateInstruction<1, 0, 0> { | 492 class LUnknownOSRValue V8_FINAL : public LTemplateInstruction<1, 0, 0> { |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
720 inputs_[0] = value; | 726 inputs_[0] = value; |
721 } | 727 } |
722 | 728 |
723 LOperand* value() { return inputs_[0]; } | 729 LOperand* value() { return inputs_[0]; } |
724 | 730 |
725 DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round") | 731 DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round") |
726 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) | 732 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) |
727 }; | 733 }; |
728 | 734 |
729 | 735 |
730 class LMathAbs V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 736 class LMathAbs V8_FINAL : public LTemplateInstruction<1, 2, 0> { |
731 public: | 737 public: |
732 explicit LMathAbs(LOperand* value) { | 738 explicit LMathAbs(LOperand* context, LOperand* value) { |
| 739 inputs_[1] = context; |
733 inputs_[0] = value; | 740 inputs_[0] = value; |
734 } | 741 } |
735 | 742 |
| 743 LOperand* context() { return inputs_[1]; } |
736 LOperand* value() { return inputs_[0]; } | 744 LOperand* value() { return inputs_[0]; } |
737 | 745 |
738 DECLARE_CONCRETE_INSTRUCTION(MathAbs, "math-abs") | 746 DECLARE_CONCRETE_INSTRUCTION(MathAbs, "math-abs") |
739 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) | 747 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) |
740 }; | 748 }; |
741 | 749 |
742 | 750 |
743 class LMathLog V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 751 class LMathLog V8_FINAL : public LTemplateInstruction<1, 1, 0> { |
744 public: | 752 public: |
745 explicit LMathLog(LOperand* value) { | 753 explicit LMathLog(LOperand* value) { |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
914 LOperand* temp() { return temps_[0]; } | 922 LOperand* temp() { return temps_[0]; } |
915 | 923 |
916 DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, | 924 DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, |
917 "is-undetectable-and-branch") | 925 "is-undetectable-and-branch") |
918 DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch) | 926 DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch) |
919 | 927 |
920 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 928 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
921 }; | 929 }; |
922 | 930 |
923 | 931 |
924 class LStringCompareAndBranch V8_FINAL : public LControlInstruction<2, 0> { | 932 class LStringCompareAndBranch V8_FINAL : public LControlInstruction<3, 0> { |
925 public: | 933 public: |
926 explicit LStringCompareAndBranch(LOperand* left, LOperand* right) { | 934 explicit LStringCompareAndBranch(LOperand* context, |
927 inputs_[0] = left; | 935 LOperand* left, |
928 inputs_[1] = right; | 936 LOperand* right) { |
| 937 inputs_[0] = context; |
| 938 inputs_[1] = left; |
| 939 inputs_[2] = right; |
929 } | 940 } |
930 | 941 |
931 LOperand* left() { return inputs_[0]; } | 942 LOperand* context() { return inputs_[0]; } |
932 LOperand* right() { return inputs_[1]; } | 943 LOperand* left() { return inputs_[1]; } |
| 944 LOperand* right() { return inputs_[2]; } |
933 | 945 |
934 DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch, | 946 DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch, |
935 "string-compare-and-branch") | 947 "string-compare-and-branch") |
936 DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch) | 948 DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch) |
937 | 949 |
938 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 950 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
939 | 951 |
940 Token::Value op() const { return hydrogen()->token(); } | 952 Token::Value op() const { return hydrogen()->token(); } |
941 }; | 953 }; |
942 | 954 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1000 LOperand* temp2() { return temps_[1]; } | 1012 LOperand* temp2() { return temps_[1]; } |
1001 | 1013 |
1002 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, | 1014 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, |
1003 "class-of-test-and-branch") | 1015 "class-of-test-and-branch") |
1004 DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch) | 1016 DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch) |
1005 | 1017 |
1006 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 1018 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
1007 }; | 1019 }; |
1008 | 1020 |
1009 | 1021 |
1010 class LCmpT V8_FINAL : public LTemplateInstruction<1, 2, 0> { | 1022 class LCmpT V8_FINAL : public LTemplateInstruction<1, 3, 0> { |
1011 public: | 1023 public: |
1012 LCmpT(LOperand* left, LOperand* right) { | 1024 LCmpT(LOperand* context, LOperand* left, LOperand* right) { |
1013 inputs_[0] = left; | 1025 inputs_[0] = context; |
1014 inputs_[1] = right; | 1026 inputs_[1] = left; |
| 1027 inputs_[2] = right; |
1015 } | 1028 } |
1016 | 1029 |
1017 LOperand* left() { return inputs_[0]; } | 1030 LOperand* context() { return inputs_[0]; } |
1018 LOperand* right() { return inputs_[1]; } | 1031 LOperand* left() { return inputs_[1]; } |
| 1032 LOperand* right() { return inputs_[2]; } |
1019 | 1033 |
1020 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") | 1034 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") |
1021 DECLARE_HYDROGEN_ACCESSOR(CompareGeneric) | 1035 DECLARE_HYDROGEN_ACCESSOR(CompareGeneric) |
1022 | 1036 |
1023 Token::Value op() const { return hydrogen()->token(); } | 1037 Token::Value op() const { return hydrogen()->token(); } |
1024 }; | 1038 }; |
1025 | 1039 |
1026 | 1040 |
1027 class LInstanceOf V8_FINAL : public LTemplateInstruction<1, 2, 0> { | 1041 class LInstanceOf V8_FINAL : public LTemplateInstruction<1, 3, 0> { |
1028 public: | 1042 public: |
1029 LInstanceOf(LOperand* left, LOperand* right) { | 1043 LInstanceOf(LOperand* context, LOperand* left, LOperand* right) { |
1030 inputs_[0] = left; | 1044 inputs_[0] = context; |
1031 inputs_[1] = right; | 1045 inputs_[1] = left; |
| 1046 inputs_[2] = right; |
1032 } | 1047 } |
1033 | 1048 |
1034 LOperand* left() { return inputs_[0]; } | 1049 LOperand* context() { return inputs_[0]; } |
1035 LOperand* right() { return inputs_[1]; } | 1050 LOperand* left() { return inputs_[1]; } |
| 1051 LOperand* right() { return inputs_[2]; } |
1036 | 1052 |
1037 DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of") | 1053 DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of") |
1038 }; | 1054 }; |
1039 | 1055 |
1040 | 1056 |
1041 class LInstanceOfKnownGlobal V8_FINAL : public LTemplateInstruction<1, 1, 1> { | 1057 class LInstanceOfKnownGlobal V8_FINAL : public LTemplateInstruction<1, 2, 1> { |
1042 public: | 1058 public: |
1043 LInstanceOfKnownGlobal(LOperand* value, LOperand* temp) { | 1059 LInstanceOfKnownGlobal(LOperand* context, LOperand* value, LOperand* temp) { |
1044 inputs_[0] = value; | 1060 inputs_[0] = context; |
| 1061 inputs_[1] = value; |
1045 temps_[0] = temp; | 1062 temps_[0] = temp; |
1046 } | 1063 } |
1047 | 1064 |
1048 LOperand* value() { return inputs_[0]; } | 1065 LOperand* context() { return inputs_[0]; } |
| 1066 LOperand* value() { return inputs_[1]; } |
1049 LOperand* temp() { return temps_[0]; } | 1067 LOperand* temp() { return temps_[0]; } |
1050 | 1068 |
1051 DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal, | 1069 DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal, |
1052 "instance-of-known-global") | 1070 "instance-of-known-global") |
1053 DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal) | 1071 DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal) |
1054 | 1072 |
1055 Handle<JSFunction> function() const { return hydrogen()->function(); } | 1073 Handle<JSFunction> function() const { return hydrogen()->function(); } |
1056 LEnvironment* GetDeferredLazyDeoptimizationEnvironment() { | 1074 LEnvironment* GetDeferredLazyDeoptimizationEnvironment() { |
1057 return lazy_deopt_env_; | 1075 return lazy_deopt_env_; |
1058 } | 1076 } |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1297 LOperand* value() { return inputs_[2]; } | 1315 LOperand* value() { return inputs_[2]; } |
1298 | 1316 |
1299 DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar, "seq-string-set-char") | 1317 DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar, "seq-string-set-char") |
1300 DECLARE_HYDROGEN_ACCESSOR(SeqStringSetChar) | 1318 DECLARE_HYDROGEN_ACCESSOR(SeqStringSetChar) |
1301 | 1319 |
1302 private: | 1320 private: |
1303 String::Encoding encoding_; | 1321 String::Encoding encoding_; |
1304 }; | 1322 }; |
1305 | 1323 |
1306 | 1324 |
1307 class LThrow V8_FINAL : public LTemplateInstruction<0, 1, 0> { | 1325 class LThrow V8_FINAL : public LTemplateInstruction<0, 2, 0> { |
1308 public: | 1326 public: |
1309 explicit LThrow(LOperand* value) { | 1327 explicit LThrow(LOperand* context, LOperand* value) { |
1310 inputs_[0] = value; | 1328 inputs_[0] = context; |
| 1329 inputs_[1] = value; |
1311 } | 1330 } |
1312 | 1331 |
1313 LOperand* value() { return inputs_[0]; } | 1332 LOperand* context() { return inputs_[0]; } |
| 1333 LOperand* value() { return inputs_[1]; } |
1314 | 1334 |
1315 DECLARE_CONCRETE_INSTRUCTION(Throw, "throw") | 1335 DECLARE_CONCRETE_INSTRUCTION(Throw, "throw") |
1316 }; | 1336 }; |
1317 | 1337 |
1318 | 1338 |
1319 class LAddI V8_FINAL : public LTemplateInstruction<1, 2, 0> { | 1339 class LAddI V8_FINAL : public LTemplateInstruction<1, 2, 0> { |
1320 public: | 1340 public: |
1321 LAddI(LOperand* left, LOperand* right) { | 1341 LAddI(LOperand* left, LOperand* right) { |
1322 inputs_[0] = left; | 1342 inputs_[0] = left; |
1323 inputs_[1] = right; | 1343 inputs_[1] = right; |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1404 return LInstruction::kArithmeticD; | 1424 return LInstruction::kArithmeticD; |
1405 } | 1425 } |
1406 virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE; | 1426 virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE; |
1407 virtual const char* Mnemonic() const V8_OVERRIDE; | 1427 virtual const char* Mnemonic() const V8_OVERRIDE; |
1408 | 1428 |
1409 private: | 1429 private: |
1410 Token::Value op_; | 1430 Token::Value op_; |
1411 }; | 1431 }; |
1412 | 1432 |
1413 | 1433 |
1414 class LArithmeticT V8_FINAL : public LTemplateInstruction<1, 2, 0> { | 1434 class LArithmeticT V8_FINAL : public LTemplateInstruction<1, 3, 0> { |
1415 public: | 1435 public: |
1416 LArithmeticT(Token::Value op, LOperand* left, LOperand* right) | 1436 LArithmeticT(Token::Value op, |
| 1437 LOperand* context, |
| 1438 LOperand* left, |
| 1439 LOperand* right) |
1417 : op_(op) { | 1440 : op_(op) { |
1418 inputs_[0] = left; | 1441 inputs_[0] = context; |
1419 inputs_[1] = right; | 1442 inputs_[1] = left; |
| 1443 inputs_[2] = right; |
1420 } | 1444 } |
1421 | 1445 |
1422 Token::Value op() const { return op_; } | 1446 Token::Value op() const { return op_; } |
1423 LOperand* left() { return inputs_[0]; } | 1447 LOperand* context() { return inputs_[0]; } |
1424 LOperand* right() { return inputs_[1]; } | 1448 LOperand* left() { return inputs_[1]; } |
| 1449 LOperand* right() { return inputs_[2]; } |
1425 | 1450 |
1426 virtual Opcode opcode() const V8_OVERRIDE { | 1451 virtual Opcode opcode() const V8_OVERRIDE { |
1427 return LInstruction::kArithmeticT; | 1452 return LInstruction::kArithmeticT; |
1428 } | 1453 } |
1429 virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE; | 1454 virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE; |
1430 virtual const char* Mnemonic() const V8_OVERRIDE; | 1455 virtual const char* Mnemonic() const V8_OVERRIDE; |
1431 | 1456 |
1432 private: | 1457 private: |
1433 Token::Value op_; | 1458 Token::Value op_; |
1434 }; | 1459 }; |
1435 | 1460 |
1436 | 1461 |
1437 class LReturn V8_FINAL : public LTemplateInstruction<0, 2, 0> { | 1462 class LReturn V8_FINAL : public LTemplateInstruction<0, 3, 0> { |
1438 public: | 1463 public: |
1439 explicit LReturn(LOperand* value, LOperand* parameter_count) { | 1464 explicit LReturn(LOperand* value, |
| 1465 LOperand* context, |
| 1466 LOperand* parameter_count) { |
1440 inputs_[0] = value; | 1467 inputs_[0] = value; |
1441 inputs_[1] = parameter_count; | 1468 inputs_[1] = context; |
| 1469 inputs_[2] = parameter_count; |
1442 } | 1470 } |
1443 | 1471 |
1444 LOperand* value() { return inputs_[0]; } | 1472 LOperand* value() { return inputs_[0]; } |
| 1473 LOperand* context() { return inputs_[1]; } |
1445 | 1474 |
1446 bool has_constant_parameter_count() { | 1475 bool has_constant_parameter_count() { |
1447 return parameter_count()->IsConstantOperand(); | 1476 return parameter_count()->IsConstantOperand(); |
1448 } | 1477 } |
1449 LConstantOperand* constant_parameter_count() { | 1478 LConstantOperand* constant_parameter_count() { |
1450 ASSERT(has_constant_parameter_count()); | 1479 ASSERT(has_constant_parameter_count()); |
1451 return LConstantOperand::cast(parameter_count()); | 1480 return LConstantOperand::cast(parameter_count()); |
1452 } | 1481 } |
1453 LOperand* parameter_count() { return inputs_[1]; } | 1482 LOperand* parameter_count() { return inputs_[2]; } |
1454 | 1483 |
1455 DECLARE_CONCRETE_INSTRUCTION(Return, "return") | 1484 DECLARE_CONCRETE_INSTRUCTION(Return, "return") |
1456 DECLARE_HYDROGEN_ACCESSOR(Return) | 1485 DECLARE_HYDROGEN_ACCESSOR(Return) |
1457 }; | 1486 }; |
1458 | 1487 |
1459 | 1488 |
1460 class LLoadNamedField V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 1489 class LLoadNamedField V8_FINAL : public LTemplateInstruction<1, 1, 0> { |
1461 public: | 1490 public: |
1462 explicit LLoadNamedField(LOperand* object) { | 1491 explicit LLoadNamedField(LOperand* object) { |
1463 inputs_[0] = object; | 1492 inputs_[0] = object; |
1464 } | 1493 } |
1465 | 1494 |
1466 LOperand* object() { return inputs_[0]; } | 1495 LOperand* object() { return inputs_[0]; } |
1467 | 1496 |
1468 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field") | 1497 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field") |
1469 DECLARE_HYDROGEN_ACCESSOR(LoadNamedField) | 1498 DECLARE_HYDROGEN_ACCESSOR(LoadNamedField) |
1470 }; | 1499 }; |
1471 | 1500 |
1472 | 1501 |
1473 class LLoadNamedGeneric V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 1502 class LLoadNamedGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> { |
1474 public: | 1503 public: |
1475 explicit LLoadNamedGeneric(LOperand* object) { | 1504 explicit LLoadNamedGeneric(LOperand* context, LOperand* object) { |
1476 inputs_[0] = object; | 1505 inputs_[0] = context; |
| 1506 inputs_[1] = object; |
1477 } | 1507 } |
1478 | 1508 |
1479 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") | 1509 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") |
1480 DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) | 1510 DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) |
1481 | 1511 |
1482 LOperand* object() { return inputs_[0]; } | 1512 LOperand* context() { return inputs_[0]; } |
| 1513 LOperand* object() { return inputs_[1]; } |
1483 Handle<Object> name() const { return hydrogen()->name(); } | 1514 Handle<Object> name() const { return hydrogen()->name(); } |
1484 }; | 1515 }; |
1485 | 1516 |
1486 | 1517 |
1487 class LLoadFunctionPrototype V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 1518 class LLoadFunctionPrototype V8_FINAL : public LTemplateInstruction<1, 1, 0> { |
1488 public: | 1519 public: |
1489 explicit LLoadFunctionPrototype(LOperand* function) { | 1520 explicit LLoadFunctionPrototype(LOperand* function) { |
1490 inputs_[0] = function; | 1521 inputs_[0] = function; |
1491 } | 1522 } |
1492 | 1523 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1536 LOperand* elements() { return inputs_[0]; } | 1567 LOperand* elements() { return inputs_[0]; } |
1537 LOperand* key() { return inputs_[1]; } | 1568 LOperand* key() { return inputs_[1]; } |
1538 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 1569 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
1539 uint32_t additional_index() const { return hydrogen()->index_offset(); } | 1570 uint32_t additional_index() const { return hydrogen()->index_offset(); } |
1540 ElementsKind elements_kind() const { | 1571 ElementsKind elements_kind() const { |
1541 return hydrogen()->elements_kind(); | 1572 return hydrogen()->elements_kind(); |
1542 } | 1573 } |
1543 }; | 1574 }; |
1544 | 1575 |
1545 | 1576 |
1546 class LLoadKeyedGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> { | 1577 class LLoadKeyedGeneric V8_FINAL : public LTemplateInstruction<1, 3, 0> { |
1547 public: | 1578 public: |
1548 LLoadKeyedGeneric(LOperand* obj, LOperand* key) { | 1579 LLoadKeyedGeneric(LOperand* context, LOperand* obj, LOperand* key) { |
1549 inputs_[0] = obj; | 1580 inputs_[0] = context; |
1550 inputs_[1] = key; | 1581 inputs_[1] = obj; |
| 1582 inputs_[2] = key; |
1551 } | 1583 } |
1552 | 1584 |
1553 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") | 1585 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") |
1554 | 1586 |
1555 LOperand* object() { return inputs_[0]; } | 1587 LOperand* context() { return inputs_[0]; } |
1556 LOperand* key() { return inputs_[1]; } | 1588 LOperand* object() { return inputs_[1]; } |
| 1589 LOperand* key() { return inputs_[2]; } |
1557 }; | 1590 }; |
1558 | 1591 |
1559 | 1592 |
1560 class LLoadGlobalCell V8_FINAL : public LTemplateInstruction<1, 0, 0> { | 1593 class LLoadGlobalCell V8_FINAL : public LTemplateInstruction<1, 0, 0> { |
1561 public: | 1594 public: |
1562 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell") | 1595 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell") |
1563 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell) | 1596 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell) |
1564 }; | 1597 }; |
1565 | 1598 |
1566 | 1599 |
1567 class LLoadGlobalGeneric V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 1600 class LLoadGlobalGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> { |
1568 public: | 1601 public: |
1569 explicit LLoadGlobalGeneric(LOperand* global_object) { | 1602 explicit LLoadGlobalGeneric(LOperand* context, LOperand* global_object) { |
1570 inputs_[0] = global_object; | 1603 inputs_[0] = context; |
| 1604 inputs_[1] = global_object; |
1571 } | 1605 } |
1572 | 1606 |
1573 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic") | 1607 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic") |
1574 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric) | 1608 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric) |
1575 | 1609 |
1576 LOperand* global_object() { return inputs_[0]; } | 1610 LOperand* context() { return inputs_[0]; } |
| 1611 LOperand* global_object() { return inputs_[1]; } |
1577 Handle<Object> name() const { return hydrogen()->name(); } | 1612 Handle<Object> name() const { return hydrogen()->name(); } |
1578 bool for_typeof() const { return hydrogen()->for_typeof(); } | 1613 bool for_typeof() const { return hydrogen()->for_typeof(); } |
1579 }; | 1614 }; |
1580 | 1615 |
1581 | 1616 |
1582 class LStoreGlobalCell V8_FINAL : public LTemplateInstruction<0, 1, 1> { | 1617 class LStoreGlobalCell V8_FINAL : public LTemplateInstruction<0, 1, 1> { |
1583 public: | 1618 public: |
1584 explicit LStoreGlobalCell(LOperand* value, LOperand* temp) { | 1619 explicit LStoreGlobalCell(LOperand* value, LOperand* temp) { |
1585 inputs_[0] = value; | 1620 inputs_[0] = value; |
1586 temps_[0] = temp; | 1621 temps_[0] = temp; |
1587 } | 1622 } |
1588 | 1623 |
1589 LOperand* value() { return inputs_[0]; } | 1624 LOperand* value() { return inputs_[0]; } |
1590 LOperand* temp() { return temps_[0]; } | 1625 LOperand* temp() { return temps_[0]; } |
1591 | 1626 |
1592 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell") | 1627 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell") |
1593 DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell) | 1628 DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell) |
1594 }; | 1629 }; |
1595 | 1630 |
1596 | 1631 |
1597 class LStoreGlobalGeneric V8_FINAL : public LTemplateInstruction<0, 2, 0> { | 1632 class LStoreGlobalGeneric V8_FINAL : public LTemplateInstruction<0, 3, 0> { |
1598 public: | 1633 public: |
1599 explicit LStoreGlobalGeneric(LOperand* global_object, | 1634 explicit LStoreGlobalGeneric(LOperand* context, |
| 1635 LOperand* global_object, |
1600 LOperand* value) { | 1636 LOperand* value) { |
1601 inputs_[0] = global_object; | 1637 inputs_[0] = context; |
1602 inputs_[1] = value; | 1638 inputs_[1] = global_object; |
| 1639 inputs_[2] = value; |
1603 } | 1640 } |
1604 | 1641 |
1605 LOperand* global_object() { return inputs_[0]; } | 1642 LOperand* context() { return inputs_[0]; } |
1606 LOperand* value() { return inputs_[1]; } | 1643 LOperand* global_object() { return inputs_[1]; } |
| 1644 LOperand* value() { return inputs_[2]; } |
1607 | 1645 |
1608 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalGeneric, "store-global-generic") | 1646 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalGeneric, "store-global-generic") |
1609 DECLARE_HYDROGEN_ACCESSOR(StoreGlobalGeneric) | 1647 DECLARE_HYDROGEN_ACCESSOR(StoreGlobalGeneric) |
1610 | 1648 |
1611 Handle<Object> name() const { return hydrogen()->name(); } | 1649 Handle<Object> name() const { return hydrogen()->name(); } |
1612 StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); } | 1650 StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); } |
1613 }; | 1651 }; |
1614 | 1652 |
1615 | 1653 |
1616 class LLoadContextSlot V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 1654 class LLoadContextSlot V8_FINAL : public LTemplateInstruction<1, 1, 0> { |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1728 explicit LOuterContext(LOperand* context) { | 1766 explicit LOuterContext(LOperand* context) { |
1729 inputs_[0] = context; | 1767 inputs_[0] = context; |
1730 } | 1768 } |
1731 | 1769 |
1732 LOperand* context() { return inputs_[0]; } | 1770 LOperand* context() { return inputs_[0]; } |
1733 | 1771 |
1734 DECLARE_CONCRETE_INSTRUCTION(OuterContext, "outer-context") | 1772 DECLARE_CONCRETE_INSTRUCTION(OuterContext, "outer-context") |
1735 }; | 1773 }; |
1736 | 1774 |
1737 | 1775 |
1738 class LDeclareGlobals V8_FINAL : public LTemplateInstruction<0, 0, 0> { | 1776 class LDeclareGlobals V8_FINAL : public LTemplateInstruction<0, 1, 0> { |
1739 public: | 1777 public: |
| 1778 explicit LDeclareGlobals(LOperand* context) { |
| 1779 inputs_[0] = context; |
| 1780 } |
| 1781 |
| 1782 LOperand* context() { return inputs_[0]; } |
| 1783 |
1740 DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals") | 1784 DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals") |
1741 DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals) | 1785 DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals) |
1742 }; | 1786 }; |
1743 | 1787 |
1744 | 1788 |
1745 class LGlobalObject V8_FINAL : public LTemplateInstruction<1, 0, 0> { | 1789 class LGlobalObject V8_FINAL : public LTemplateInstruction<1, 1, 0> { |
1746 public: | 1790 public: |
| 1791 explicit LGlobalObject(LOperand* context) { |
| 1792 inputs_[0] = context; |
| 1793 } |
| 1794 |
| 1795 LOperand* context() { return inputs_[0]; } |
| 1796 |
1747 DECLARE_CONCRETE_INSTRUCTION(GlobalObject, "global-object") | 1797 DECLARE_CONCRETE_INSTRUCTION(GlobalObject, "global-object") |
1748 }; | 1798 }; |
1749 | 1799 |
1750 | 1800 |
1751 class LGlobalReceiver V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 1801 class LGlobalReceiver V8_FINAL : public LTemplateInstruction<1, 1, 0> { |
1752 public: | 1802 public: |
1753 explicit LGlobalReceiver(LOperand* global_object) { | 1803 explicit LGlobalReceiver(LOperand* global_object) { |
1754 inputs_[0] = global_object; | 1804 inputs_[0] = global_object; |
1755 } | 1805 } |
1756 | 1806 |
1757 LOperand* global() { return inputs_[0]; } | 1807 LOperand* global() { return inputs_[0]; } |
1758 | 1808 |
1759 DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver, "global-receiver") | 1809 DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver, "global-receiver") |
1760 }; | 1810 }; |
1761 | 1811 |
1762 | 1812 |
1763 class LCallConstantFunction V8_FINAL : public LTemplateInstruction<1, 0, 0> { | 1813 class LCallConstantFunction V8_FINAL : public LTemplateInstruction<1, 0, 0> { |
1764 public: | 1814 public: |
1765 DECLARE_CONCRETE_INSTRUCTION(CallConstantFunction, "call-constant-function") | 1815 DECLARE_CONCRETE_INSTRUCTION(CallConstantFunction, "call-constant-function") |
1766 DECLARE_HYDROGEN_ACCESSOR(CallConstantFunction) | 1816 DECLARE_HYDROGEN_ACCESSOR(CallConstantFunction) |
1767 | 1817 |
1768 virtual void PrintDataTo(StringStream* stream); | 1818 virtual void PrintDataTo(StringStream* stream); |
1769 | 1819 |
1770 Handle<JSFunction> function() { return hydrogen()->function(); } | 1820 Handle<JSFunction> function() { return hydrogen()->function(); } |
1771 int arity() const { return hydrogen()->argument_count() - 1; } | 1821 int arity() const { return hydrogen()->argument_count() - 1; } |
1772 }; | 1822 }; |
1773 | 1823 |
1774 | 1824 |
1775 class LInvokeFunction V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 1825 class LInvokeFunction V8_FINAL : public LTemplateInstruction<1, 2, 0> { |
1776 public: | 1826 public: |
1777 explicit LInvokeFunction(LOperand* function) { | 1827 LInvokeFunction(LOperand* context, LOperand* function) { |
1778 inputs_[0] = function; | 1828 inputs_[0] = context; |
| 1829 inputs_[1] = function; |
1779 } | 1830 } |
1780 | 1831 |
1781 LOperand* function() { return inputs_[0]; } | 1832 LOperand* context() { return inputs_[0]; } |
| 1833 LOperand* function() { return inputs_[1]; } |
1782 | 1834 |
1783 DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function") | 1835 DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function") |
1784 DECLARE_HYDROGEN_ACCESSOR(InvokeFunction) | 1836 DECLARE_HYDROGEN_ACCESSOR(InvokeFunction) |
1785 | 1837 |
1786 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 1838 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
1787 | 1839 |
1788 int arity() const { return hydrogen()->argument_count() - 1; } | 1840 int arity() const { return hydrogen()->argument_count() - 1; } |
1789 }; | 1841 }; |
1790 | 1842 |
1791 | 1843 |
1792 class LCallKeyed V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 1844 class LCallKeyed V8_FINAL : public LTemplateInstruction<1, 2, 0> { |
1793 public: | 1845 public: |
1794 explicit LCallKeyed(LOperand* key) { | 1846 LCallKeyed(LOperand* context, LOperand* key) { |
1795 inputs_[0] = key; | 1847 inputs_[0] = context; |
| 1848 inputs_[1] = key; |
1796 } | 1849 } |
1797 | 1850 |
1798 DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call-keyed") | 1851 DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call-keyed") |
1799 DECLARE_HYDROGEN_ACCESSOR(CallKeyed) | 1852 DECLARE_HYDROGEN_ACCESSOR(CallKeyed) |
1800 | 1853 |
1801 LOperand* key() { return inputs_[0]; } | 1854 LOperand* context() { return inputs_[0]; } |
| 1855 LOperand* key() { return inputs_[1]; } |
1802 | 1856 |
1803 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 1857 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
1804 | 1858 |
1805 int arity() const { return hydrogen()->argument_count() - 1; } | 1859 int arity() const { return hydrogen()->argument_count() - 1; } |
1806 }; | 1860 }; |
1807 | 1861 |
1808 | 1862 |
1809 class LCallNamed V8_FINAL : public LTemplateInstruction<1, 0, 0> { | 1863 class LCallNamed V8_FINAL : public LTemplateInstruction<1, 1, 0> { |
1810 public: | 1864 public: |
| 1865 explicit LCallNamed(LOperand* context) { |
| 1866 inputs_[0] = context; |
| 1867 } |
| 1868 |
| 1869 LOperand* context() { return inputs_[0]; } |
| 1870 |
1811 DECLARE_CONCRETE_INSTRUCTION(CallNamed, "call-named") | 1871 DECLARE_CONCRETE_INSTRUCTION(CallNamed, "call-named") |
1812 DECLARE_HYDROGEN_ACCESSOR(CallNamed) | 1872 DECLARE_HYDROGEN_ACCESSOR(CallNamed) |
1813 | 1873 |
1814 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 1874 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
1815 | 1875 |
1816 Handle<String> name() const { return hydrogen()->name(); } | 1876 Handle<String> name() const { return hydrogen()->name(); } |
1817 int arity() const { return hydrogen()->argument_count() - 1; } | 1877 int arity() const { return hydrogen()->argument_count() - 1; } |
1818 }; | 1878 }; |
1819 | 1879 |
1820 | 1880 |
1821 class LCallFunction V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 1881 class LCallFunction V8_FINAL : public LTemplateInstruction<1, 2, 0> { |
1822 public: | 1882 public: |
1823 explicit LCallFunction(LOperand* function) { | 1883 LCallFunction(LOperand* context, LOperand* function) { |
1824 inputs_[0] = function; | 1884 inputs_[0] = context; |
| 1885 inputs_[1] = function; |
1825 } | 1886 } |
1826 | 1887 |
1827 DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call-function") | 1888 DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call-function") |
1828 DECLARE_HYDROGEN_ACCESSOR(CallFunction) | 1889 DECLARE_HYDROGEN_ACCESSOR(CallFunction) |
1829 | 1890 |
1830 LOperand* function() { return inputs_[0]; } | 1891 LOperand* context() { return inputs_[0]; } |
| 1892 LOperand* function() { return inputs_[1]; } |
1831 int arity() const { return hydrogen()->argument_count() - 1; } | 1893 int arity() const { return hydrogen()->argument_count() - 1; } |
1832 }; | 1894 }; |
1833 | 1895 |
1834 | 1896 |
1835 class LCallGlobal V8_FINAL : public LTemplateInstruction<1, 0, 0> { | 1897 class LCallGlobal V8_FINAL : public LTemplateInstruction<1, 1, 0> { |
1836 public: | 1898 public: |
| 1899 explicit LCallGlobal(LOperand* context) { |
| 1900 inputs_[0] = context; |
| 1901 } |
| 1902 |
| 1903 LOperand* context() { return inputs_[0]; } |
| 1904 |
1837 DECLARE_CONCRETE_INSTRUCTION(CallGlobal, "call-global") | 1905 DECLARE_CONCRETE_INSTRUCTION(CallGlobal, "call-global") |
1838 DECLARE_HYDROGEN_ACCESSOR(CallGlobal) | 1906 DECLARE_HYDROGEN_ACCESSOR(CallGlobal) |
1839 | 1907 |
1840 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 1908 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
1841 | 1909 |
1842 Handle<String> name() const {return hydrogen()->name(); } | 1910 Handle<String> name() const {return hydrogen()->name(); } |
1843 int arity() const { return hydrogen()->argument_count() - 1; } | 1911 int arity() const { return hydrogen()->argument_count() - 1; } |
1844 }; | 1912 }; |
1845 | 1913 |
1846 | 1914 |
1847 class LCallKnownGlobal V8_FINAL : public LTemplateInstruction<1, 0, 0> { | 1915 class LCallKnownGlobal V8_FINAL : public LTemplateInstruction<1, 0, 0> { |
1848 public: | 1916 public: |
1849 DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal, "call-known-global") | 1917 DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal, "call-known-global") |
1850 DECLARE_HYDROGEN_ACCESSOR(CallKnownGlobal) | 1918 DECLARE_HYDROGEN_ACCESSOR(CallKnownGlobal) |
1851 | 1919 |
1852 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 1920 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
1853 | 1921 |
1854 int arity() const { return hydrogen()->argument_count() - 1; } | 1922 int arity() const { return hydrogen()->argument_count() - 1; } |
1855 }; | 1923 }; |
1856 | 1924 |
1857 | 1925 |
1858 class LCallNew V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 1926 class LCallNew V8_FINAL : public LTemplateInstruction<1, 2, 0> { |
1859 public: | 1927 public: |
1860 explicit LCallNew(LOperand* constructor) { | 1928 LCallNew(LOperand* context, LOperand* constructor) { |
1861 inputs_[0] = constructor; | 1929 inputs_[0] = context; |
| 1930 inputs_[1] = constructor; |
1862 } | 1931 } |
1863 | 1932 |
1864 LOperand* constructor() { return inputs_[0]; } | 1933 LOperand* context() { return inputs_[0]; } |
| 1934 LOperand* constructor() { return inputs_[1]; } |
1865 | 1935 |
1866 DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new") | 1936 DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new") |
1867 DECLARE_HYDROGEN_ACCESSOR(CallNew) | 1937 DECLARE_HYDROGEN_ACCESSOR(CallNew) |
1868 | 1938 |
1869 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 1939 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
1870 | 1940 |
1871 int arity() const { return hydrogen()->argument_count() - 1; } | 1941 int arity() const { return hydrogen()->argument_count() - 1; } |
1872 }; | 1942 }; |
1873 | 1943 |
1874 | 1944 |
1875 class LCallNewArray V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 1945 class LCallNewArray V8_FINAL : public LTemplateInstruction<1, 2, 0> { |
1876 public: | 1946 public: |
1877 explicit LCallNewArray(LOperand* constructor) { | 1947 LCallNewArray(LOperand* context, LOperand* constructor) { |
1878 inputs_[0] = constructor; | 1948 inputs_[0] = context; |
| 1949 inputs_[1] = constructor; |
1879 } | 1950 } |
1880 | 1951 |
1881 LOperand* constructor() { return inputs_[0]; } | 1952 LOperand* context() { return inputs_[0]; } |
| 1953 LOperand* constructor() { return inputs_[1]; } |
1882 | 1954 |
1883 DECLARE_CONCRETE_INSTRUCTION(CallNewArray, "call-new-array") | 1955 DECLARE_CONCRETE_INSTRUCTION(CallNewArray, "call-new-array") |
1884 DECLARE_HYDROGEN_ACCESSOR(CallNewArray) | 1956 DECLARE_HYDROGEN_ACCESSOR(CallNewArray) |
1885 | 1957 |
1886 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 1958 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
1887 | 1959 |
1888 int arity() const { return hydrogen()->argument_count() - 1; } | 1960 int arity() const { return hydrogen()->argument_count() - 1; } |
1889 }; | 1961 }; |
1890 | 1962 |
1891 | 1963 |
1892 class LCallRuntime V8_FINAL : public LTemplateInstruction<1, 0, 0> { | 1964 class LCallRuntime V8_FINAL : public LTemplateInstruction<1, 1, 0> { |
1893 public: | 1965 public: |
| 1966 explicit LCallRuntime(LOperand* context) { |
| 1967 inputs_[0] = context; |
| 1968 } |
| 1969 |
| 1970 LOperand* context() { return inputs_[0]; } |
| 1971 |
1894 DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") | 1972 DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") |
1895 DECLARE_HYDROGEN_ACCESSOR(CallRuntime) | 1973 DECLARE_HYDROGEN_ACCESSOR(CallRuntime) |
1896 | 1974 |
1897 virtual bool ClobbersDoubleRegisters() const V8_OVERRIDE { | 1975 virtual bool ClobbersDoubleRegisters() const V8_OVERRIDE { |
1898 return save_doubles() == kDontSaveFPRegs; | 1976 return save_doubles() == kDontSaveFPRegs; |
1899 } | 1977 } |
1900 | 1978 |
1901 const Runtime::Function* function() const { return hydrogen()->function(); } | 1979 const Runtime::Function* function() const { return hydrogen()->function(); } |
1902 int arity() const { return hydrogen()->argument_count(); } | 1980 int arity() const { return hydrogen()->argument_count(); } |
1903 SaveFPRegsMode save_doubles() const { return hydrogen()->save_doubles(); } | 1981 SaveFPRegsMode save_doubles() const { return hydrogen()->save_doubles(); } |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2090 | 2168 |
2091 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 2169 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
2092 | 2170 |
2093 Handle<Map> transition() const { return hydrogen()->transition_map(); } | 2171 Handle<Map> transition() const { return hydrogen()->transition_map(); } |
2094 Representation representation() const { | 2172 Representation representation() const { |
2095 return hydrogen()->field_representation(); | 2173 return hydrogen()->field_representation(); |
2096 } | 2174 } |
2097 }; | 2175 }; |
2098 | 2176 |
2099 | 2177 |
2100 class LStoreNamedGeneric V8_FINAL : public LTemplateInstruction<0, 2, 0> { | 2178 class LStoreNamedGeneric V8_FINAL : public LTemplateInstruction<0, 3, 0> { |
2101 public: | 2179 public: |
2102 LStoreNamedGeneric(LOperand* object, LOperand* value) { | 2180 LStoreNamedGeneric(LOperand* context, LOperand* object, LOperand* value) { |
2103 inputs_[0] = object; | 2181 inputs_[0] = context; |
2104 inputs_[1] = value; | 2182 inputs_[1] = object; |
| 2183 inputs_[2] = value; |
2105 } | 2184 } |
2106 | 2185 |
2107 LOperand* object() { return inputs_[0]; } | 2186 LOperand* context() { return inputs_[0]; } |
2108 LOperand* value() { return inputs_[1]; } | 2187 LOperand* object() { return inputs_[1]; } |
| 2188 LOperand* value() { return inputs_[2]; } |
2109 | 2189 |
2110 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic") | 2190 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic") |
2111 DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric) | 2191 DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric) |
2112 | 2192 |
2113 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 2193 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
2114 | 2194 |
2115 Handle<Object> name() const { return hydrogen()->name(); } | 2195 Handle<Object> name() const { return hydrogen()->name(); } |
2116 StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); } | 2196 StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); } |
2117 }; | 2197 }; |
2118 | 2198 |
(...skipping 14 matching lines...) Expand all Loading... |
2133 | 2213 |
2134 DECLARE_CONCRETE_INSTRUCTION(StoreKeyed, "store-keyed") | 2214 DECLARE_CONCRETE_INSTRUCTION(StoreKeyed, "store-keyed") |
2135 DECLARE_HYDROGEN_ACCESSOR(StoreKeyed) | 2215 DECLARE_HYDROGEN_ACCESSOR(StoreKeyed) |
2136 | 2216 |
2137 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 2217 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
2138 bool NeedsCanonicalization() { return hydrogen()->NeedsCanonicalization(); } | 2218 bool NeedsCanonicalization() { return hydrogen()->NeedsCanonicalization(); } |
2139 uint32_t additional_index() const { return hydrogen()->index_offset(); } | 2219 uint32_t additional_index() const { return hydrogen()->index_offset(); } |
2140 }; | 2220 }; |
2141 | 2221 |
2142 | 2222 |
2143 class LStoreKeyedGeneric V8_FINAL : public LTemplateInstruction<0, 3, 0> { | 2223 class LStoreKeyedGeneric V8_FINAL : public LTemplateInstruction<0, 4, 0> { |
2144 public: | 2224 public: |
2145 LStoreKeyedGeneric(LOperand* object, LOperand* key, LOperand* value) { | 2225 LStoreKeyedGeneric(LOperand* context, |
2146 inputs_[0] = object; | 2226 LOperand* object, |
2147 inputs_[1] = key; | 2227 LOperand* key, |
2148 inputs_[2] = value; | 2228 LOperand* value) { |
| 2229 inputs_[0] = context; |
| 2230 inputs_[1] = object; |
| 2231 inputs_[2] = key; |
| 2232 inputs_[3] = value; |
2149 } | 2233 } |
2150 | 2234 |
2151 LOperand* object() { return inputs_[0]; } | 2235 LOperand* context() { return inputs_[0]; } |
2152 LOperand* key() { return inputs_[1]; } | 2236 LOperand* object() { return inputs_[1]; } |
2153 LOperand* value() { return inputs_[2]; } | 2237 LOperand* key() { return inputs_[2]; } |
| 2238 LOperand* value() { return inputs_[3]; } |
2154 | 2239 |
2155 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") | 2240 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") |
2156 DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric) | 2241 DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric) |
2157 | 2242 |
2158 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 2243 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
2159 | 2244 |
2160 StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); } | 2245 StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); } |
2161 }; | 2246 }; |
2162 | 2247 |
2163 | 2248 |
2164 class LTransitionElementsKind V8_FINAL : public LTemplateInstruction<0, 1, 2> { | 2249 class LTransitionElementsKind V8_FINAL : public LTemplateInstruction<0, 2, 2> { |
2165 public: | 2250 public: |
2166 LTransitionElementsKind(LOperand* object, | 2251 LTransitionElementsKind(LOperand* object, |
| 2252 LOperand* context, |
2167 LOperand* new_map_temp, | 2253 LOperand* new_map_temp, |
2168 LOperand* temp) { | 2254 LOperand* temp) { |
2169 inputs_[0] = object; | 2255 inputs_[0] = object; |
| 2256 inputs_[1] = context; |
2170 temps_[0] = new_map_temp; | 2257 temps_[0] = new_map_temp; |
2171 temps_[1] = temp; | 2258 temps_[1] = temp; |
2172 } | 2259 } |
2173 | 2260 |
2174 LOperand* object() { return inputs_[0]; } | 2261 LOperand* object() { return inputs_[0]; } |
| 2262 LOperand* context() { return inputs_[1]; } |
2175 LOperand* new_map_temp() { return temps_[0]; } | 2263 LOperand* new_map_temp() { return temps_[0]; } |
2176 LOperand* temp() { return temps_[1]; } | 2264 LOperand* temp() { return temps_[1]; } |
2177 | 2265 |
2178 DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind, | 2266 DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind, |
2179 "transition-elements-kind") | 2267 "transition-elements-kind") |
2180 DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind) | 2268 DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind) |
2181 | 2269 |
2182 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 2270 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
2183 | 2271 |
2184 Handle<Map> original_map() { return hydrogen()->original_map().handle(); } | 2272 Handle<Map> original_map() { return hydrogen()->original_map().handle(); } |
(...skipping 14 matching lines...) Expand all Loading... |
2199 } | 2287 } |
2200 | 2288 |
2201 LOperand* object() { return inputs_[0]; } | 2289 LOperand* object() { return inputs_[0]; } |
2202 LOperand* temp() { return temps_[0]; } | 2290 LOperand* temp() { return temps_[0]; } |
2203 | 2291 |
2204 DECLARE_CONCRETE_INSTRUCTION(TrapAllocationMemento, | 2292 DECLARE_CONCRETE_INSTRUCTION(TrapAllocationMemento, |
2205 "trap-allocation-memento") | 2293 "trap-allocation-memento") |
2206 }; | 2294 }; |
2207 | 2295 |
2208 | 2296 |
2209 class LStringAdd V8_FINAL : public LTemplateInstruction<1, 2, 0> { | 2297 class LStringAdd V8_FINAL : public LTemplateInstruction<1, 3, 0> { |
2210 public: | 2298 public: |
2211 LStringAdd(LOperand* left, LOperand* right) { | 2299 LStringAdd(LOperand* context, LOperand* left, LOperand* right) { |
2212 inputs_[0] = left; | 2300 inputs_[0] = context; |
2213 inputs_[1] = right; | 2301 inputs_[1] = left; |
| 2302 inputs_[2] = right; |
2214 } | 2303 } |
2215 | 2304 |
2216 LOperand* left() { return inputs_[0]; } | 2305 LOperand* context() { return inputs_[0]; } |
2217 LOperand* right() { return inputs_[1]; } | 2306 LOperand* left() { return inputs_[1]; } |
| 2307 LOperand* right() { return inputs_[2]; } |
2218 | 2308 |
2219 DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add") | 2309 DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add") |
2220 DECLARE_HYDROGEN_ACCESSOR(StringAdd) | 2310 DECLARE_HYDROGEN_ACCESSOR(StringAdd) |
2221 }; | 2311 }; |
2222 | 2312 |
2223 | 2313 |
2224 class LStringCharCodeAt V8_FINAL : public LTemplateInstruction<1, 2, 0> { | 2314 class LStringCharCodeAt V8_FINAL : public LTemplateInstruction<1, 3, 0> { |
2225 public: | 2315 public: |
2226 LStringCharCodeAt(LOperand* string, LOperand* index) { | 2316 LStringCharCodeAt(LOperand* context, LOperand* string, LOperand* index) { |
2227 inputs_[0] = string; | 2317 inputs_[0] = context; |
2228 inputs_[1] = index; | 2318 inputs_[1] = string; |
| 2319 inputs_[2] = index; |
2229 } | 2320 } |
2230 | 2321 |
2231 LOperand* string() { return inputs_[0]; } | 2322 LOperand* context() { return inputs_[0]; } |
2232 LOperand* index() { return inputs_[1]; } | 2323 LOperand* string() { return inputs_[1]; } |
| 2324 LOperand* index() { return inputs_[2]; } |
2233 | 2325 |
2234 DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at") | 2326 DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at") |
2235 DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt) | 2327 DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt) |
2236 }; | 2328 }; |
2237 | 2329 |
2238 | 2330 |
2239 class LStringCharFromCode V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 2331 class LStringCharFromCode V8_FINAL : public LTemplateInstruction<1, 2, 0> { |
2240 public: | 2332 public: |
2241 explicit LStringCharFromCode(LOperand* char_code) { | 2333 explicit LStringCharFromCode(LOperand* context, LOperand* char_code) { |
2242 inputs_[0] = char_code; | 2334 inputs_[0] = context; |
| 2335 inputs_[1] = char_code; |
2243 } | 2336 } |
2244 | 2337 |
2245 LOperand* char_code() { return inputs_[0]; } | 2338 LOperand* context() { return inputs_[0]; } |
| 2339 LOperand* char_code() { return inputs_[1]; } |
2246 | 2340 |
2247 DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code") | 2341 DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code") |
2248 DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode) | 2342 DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode) |
2249 }; | 2343 }; |
2250 | 2344 |
2251 | 2345 |
2252 class LCheckValue V8_FINAL : public LTemplateInstruction<0, 1, 0> { | 2346 class LCheckValue V8_FINAL : public LTemplateInstruction<0, 1, 0> { |
2253 public: | 2347 public: |
2254 explicit LCheckValue(LOperand* value) { | 2348 explicit LCheckValue(LOperand* value) { |
2255 inputs_[0] = value; | 2349 inputs_[0] = value; |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2345 inputs_[0] = value; | 2439 inputs_[0] = value; |
2346 } | 2440 } |
2347 | 2441 |
2348 LOperand* value() { return inputs_[0]; } | 2442 LOperand* value() { return inputs_[0]; } |
2349 | 2443 |
2350 DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi") | 2444 DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi") |
2351 DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject) | 2445 DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject) |
2352 }; | 2446 }; |
2353 | 2447 |
2354 | 2448 |
2355 class LAllocate V8_FINAL : public LTemplateInstruction<1, 1, 1> { | 2449 class LAllocate V8_FINAL : public LTemplateInstruction<1, 2, 1> { |
2356 public: | 2450 public: |
2357 LAllocate(LOperand* size, LOperand* temp) { | 2451 LAllocate(LOperand* context, LOperand* size, LOperand* temp) { |
2358 inputs_[0] = size; | 2452 inputs_[0] = context; |
| 2453 inputs_[1] = size; |
2359 temps_[0] = temp; | 2454 temps_[0] = temp; |
2360 } | 2455 } |
2361 | 2456 |
2362 LOperand* size() { return inputs_[0]; } | 2457 LOperand* context() { return inputs_[0]; } |
| 2458 LOperand* size() { return inputs_[1]; } |
2363 LOperand* temp() { return temps_[0]; } | 2459 LOperand* temp() { return temps_[0]; } |
2364 | 2460 |
2365 DECLARE_CONCRETE_INSTRUCTION(Allocate, "allocate") | 2461 DECLARE_CONCRETE_INSTRUCTION(Allocate, "allocate") |
2366 DECLARE_HYDROGEN_ACCESSOR(Allocate) | 2462 DECLARE_HYDROGEN_ACCESSOR(Allocate) |
2367 }; | 2463 }; |
2368 | 2464 |
2369 | 2465 |
2370 class LRegExpLiteral V8_FINAL : public LTemplateInstruction<1, 0, 0> { | 2466 class LRegExpLiteral V8_FINAL : public LTemplateInstruction<1, 1, 0> { |
2371 public: | 2467 public: |
| 2468 explicit LRegExpLiteral(LOperand* context) { |
| 2469 inputs_[0] = context; |
| 2470 } |
| 2471 |
| 2472 LOperand* context() { return inputs_[0]; } |
| 2473 |
2372 DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal") | 2474 DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal") |
2373 DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral) | 2475 DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral) |
2374 }; | 2476 }; |
2375 | 2477 |
2376 | 2478 |
2377 class LFunctionLiteral V8_FINAL : public LTemplateInstruction<1, 0, 0> { | 2479 class LFunctionLiteral V8_FINAL : public LTemplateInstruction<1, 1, 0> { |
2378 public: | 2480 public: |
| 2481 explicit LFunctionLiteral(LOperand* context) { |
| 2482 inputs_[0] = context; |
| 2483 } |
| 2484 |
| 2485 LOperand* context() { return inputs_[0]; } |
| 2486 |
2379 DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal") | 2487 DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal") |
2380 DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral) | 2488 DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral) |
2381 }; | 2489 }; |
2382 | 2490 |
2383 | 2491 |
2384 class LToFastProperties V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 2492 class LToFastProperties V8_FINAL : public LTemplateInstruction<1, 1, 0> { |
2385 public: | 2493 public: |
2386 explicit LToFastProperties(LOperand* value) { | 2494 explicit LToFastProperties(LOperand* value) { |
2387 inputs_[0] = value; | 2495 inputs_[0] = value; |
2388 } | 2496 } |
2389 | 2497 |
2390 LOperand* value() { return inputs_[0]; } | 2498 LOperand* value() { return inputs_[0]; } |
2391 | 2499 |
2392 DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties") | 2500 DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties") |
2393 DECLARE_HYDROGEN_ACCESSOR(ToFastProperties) | 2501 DECLARE_HYDROGEN_ACCESSOR(ToFastProperties) |
2394 }; | 2502 }; |
2395 | 2503 |
2396 | 2504 |
2397 class LTypeof V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 2505 class LTypeof V8_FINAL : public LTemplateInstruction<1, 2, 0> { |
2398 public: | 2506 public: |
2399 explicit LTypeof(LOperand* value) { | 2507 LTypeof(LOperand* context, LOperand* value) { |
2400 inputs_[0] = value; | 2508 inputs_[0] = context; |
| 2509 inputs_[1] = value; |
2401 } | 2510 } |
2402 | 2511 |
2403 LOperand* value() { return inputs_[0]; } | 2512 LOperand* context() { return inputs_[0]; } |
| 2513 LOperand* value() { return inputs_[1]; } |
2404 | 2514 |
2405 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") | 2515 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") |
2406 }; | 2516 }; |
2407 | 2517 |
2408 | 2518 |
2409 class LTypeofIsAndBranch V8_FINAL : public LControlInstruction<1, 0> { | 2519 class LTypeofIsAndBranch V8_FINAL : public LControlInstruction<1, 0> { |
2410 public: | 2520 public: |
2411 explicit LTypeofIsAndBranch(LOperand* value) { | 2521 explicit LTypeofIsAndBranch(LOperand* value) { |
2412 inputs_[0] = value; | 2522 inputs_[0] = value; |
2413 } | 2523 } |
(...skipping 27 matching lines...) Expand all Loading... |
2441 public: | 2551 public: |
2442 LOsrEntry() {} | 2552 LOsrEntry() {} |
2443 | 2553 |
2444 virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE { | 2554 virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE { |
2445 return false; | 2555 return false; |
2446 } | 2556 } |
2447 DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry") | 2557 DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry") |
2448 }; | 2558 }; |
2449 | 2559 |
2450 | 2560 |
2451 class LStackCheck V8_FINAL : public LTemplateInstruction<0, 0, 0> { | 2561 class LStackCheck V8_FINAL : public LTemplateInstruction<0, 1, 0> { |
2452 public: | 2562 public: |
| 2563 explicit LStackCheck(LOperand* context) { |
| 2564 inputs_[0] = context; |
| 2565 } |
| 2566 |
| 2567 LOperand* context() { return inputs_[0]; } |
| 2568 |
2453 DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check") | 2569 DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check") |
2454 DECLARE_HYDROGEN_ACCESSOR(StackCheck) | 2570 DECLARE_HYDROGEN_ACCESSOR(StackCheck) |
2455 | 2571 |
2456 Label* done_label() { return &done_label_; } | 2572 Label* done_label() { return &done_label_; } |
2457 | 2573 |
2458 private: | 2574 private: |
2459 Label done_label_; | 2575 Label done_label_; |
2460 }; | 2576 }; |
2461 | 2577 |
2462 | 2578 |
2463 class LForInPrepareMap V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 2579 class LForInPrepareMap V8_FINAL : public LTemplateInstruction<1, 2, 0> { |
2464 public: | 2580 public: |
2465 explicit LForInPrepareMap(LOperand* object) { | 2581 LForInPrepareMap(LOperand* context, LOperand* object) { |
2466 inputs_[0] = object; | 2582 inputs_[0] = context; |
| 2583 inputs_[1] = object; |
2467 } | 2584 } |
2468 | 2585 |
2469 LOperand* object() { return inputs_[0]; } | 2586 LOperand* context() { return inputs_[0]; } |
| 2587 LOperand* object() { return inputs_[1]; } |
2470 | 2588 |
2471 DECLARE_CONCRETE_INSTRUCTION(ForInPrepareMap, "for-in-prepare-map") | 2589 DECLARE_CONCRETE_INSTRUCTION(ForInPrepareMap, "for-in-prepare-map") |
2472 }; | 2590 }; |
2473 | 2591 |
2474 | 2592 |
2475 class LForInCacheArray V8_FINAL : public LTemplateInstruction<1, 1, 0> { | 2593 class LForInCacheArray V8_FINAL : public LTemplateInstruction<1, 1, 0> { |
2476 public: | 2594 public: |
2477 explicit LForInCacheArray(LOperand* map) { | 2595 explicit LForInCacheArray(LOperand* map) { |
2478 inputs_[0] = map; | 2596 inputs_[0] = map; |
2479 } | 2597 } |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2697 | 2815 |
2698 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); | 2816 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); |
2699 }; | 2817 }; |
2700 | 2818 |
2701 #undef DECLARE_HYDROGEN_ACCESSOR | 2819 #undef DECLARE_HYDROGEN_ACCESSOR |
2702 #undef DECLARE_CONCRETE_INSTRUCTION | 2820 #undef DECLARE_CONCRETE_INSTRUCTION |
2703 | 2821 |
2704 } } // namespace v8::int | 2822 } } // namespace v8::int |
2705 | 2823 |
2706 #endif // V8_X64_LITHIUM_X64_H_ | 2824 #endif // V8_X64_LITHIUM_X64_H_ |
OLD | NEW |