| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #ifndef V8_X64_LITHIUM_X64_H_ | 5 #ifndef V8_X64_LITHIUM_X64_H_ | 
| 6 #define V8_X64_LITHIUM_X64_H_ | 6 #define V8_X64_LITHIUM_X64_H_ | 
| 7 | 7 | 
| 8 #include "src/hydrogen.h" | 8 #include "src/hydrogen.h" | 
| 9 #include "src/lithium.h" | 9 #include "src/lithium.h" | 
| 10 #include "src/lithium-allocator.h" | 10 #include "src/lithium-allocator.h" | 
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 156   V(ToFastProperties)                        \ | 156   V(ToFastProperties)                        \ | 
| 157   V(TransitionElementsKind)                  \ | 157   V(TransitionElementsKind)                  \ | 
| 158   V(TrapAllocationMemento)                   \ | 158   V(TrapAllocationMemento)                   \ | 
| 159   V(Typeof)                                  \ | 159   V(Typeof)                                  \ | 
| 160   V(TypeofIsAndBranch)                       \ | 160   V(TypeofIsAndBranch)                       \ | 
| 161   V(Uint32ToDouble)                          \ | 161   V(Uint32ToDouble)                          \ | 
| 162   V(UnknownOSRValue)                         \ | 162   V(UnknownOSRValue)                         \ | 
| 163   V(WrapReceiver) | 163   V(WrapReceiver) | 
| 164 | 164 | 
| 165 | 165 | 
| 166 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic)                        \ | 166 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic)            \ | 
| 167   virtual Opcode opcode() const FINAL OVERRIDE {                      \ | 167   Opcode opcode() const FINAL { return LInstruction::k##type; } \ | 
| 168     return LInstruction::k##type;                                           \ | 168   void CompileToNative(LCodeGen* generator) FINAL;              \ | 
| 169   }                                                                         \ | 169   const char* Mnemonic() const FINAL { return mnemonic; }       \ | 
| 170   virtual void CompileToNative(LCodeGen* generator) FINAL OVERRIDE;   \ | 170   static L##type* cast(LInstruction* instr) {                   \ | 
| 171   virtual const char* Mnemonic() const FINAL OVERRIDE {               \ | 171     DCHECK(instr->Is##type());                                  \ | 
| 172     return mnemonic;                                                        \ | 172     return reinterpret_cast<L##type*>(instr);                   \ | 
| 173   }                                                                         \ |  | 
| 174   static L##type* cast(LInstruction* instr) {                               \ |  | 
| 175     DCHECK(instr->Is##type());                                              \ |  | 
| 176     return reinterpret_cast<L##type*>(instr);                               \ |  | 
| 177   } | 173   } | 
| 178 | 174 | 
| 179 | 175 | 
| 180 #define DECLARE_HYDROGEN_ACCESSOR(type)     \ | 176 #define DECLARE_HYDROGEN_ACCESSOR(type)     \ | 
| 181   H##type* hydrogen() const {               \ | 177   H##type* hydrogen() const {               \ | 
| 182     return H##type::cast(hydrogen_value()); \ | 178     return H##type::cast(hydrogen_value()); \ | 
| 183   } | 179   } | 
| 184 | 180 | 
| 185 | 181 | 
| 186 class LInstruction : public ZoneObject { | 182 class LInstruction : public ZoneObject { | 
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 285   int bit_field_; | 281   int bit_field_; | 
| 286 }; | 282 }; | 
| 287 | 283 | 
| 288 | 284 | 
| 289 // R = number of result operands (0 or 1). | 285 // R = number of result operands (0 or 1). | 
| 290 template<int R> | 286 template<int R> | 
| 291 class LTemplateResultInstruction : public LInstruction { | 287 class LTemplateResultInstruction : public LInstruction { | 
| 292  public: | 288  public: | 
| 293   // Allow 0 or 1 output operands. | 289   // Allow 0 or 1 output operands. | 
| 294   STATIC_ASSERT(R == 0 || R == 1); | 290   STATIC_ASSERT(R == 0 || R == 1); | 
| 295   virtual bool HasResult() const FINAL OVERRIDE { | 291   bool HasResult() const FINAL { return R != 0 && result() != NULL; } | 
| 296     return R != 0 && result() != NULL; |  | 
| 297   } |  | 
| 298   void set_result(LOperand* operand) { results_[0] = operand; } | 292   void set_result(LOperand* operand) { results_[0] = operand; } | 
| 299   LOperand* result() const { return results_[0]; } | 293   LOperand* result() const OVERRIDE { return results_[0]; } | 
| 300 | 294 | 
| 301   virtual bool MustSignExtendResult( | 295   bool MustSignExtendResult(LPlatformChunk* chunk) const FINAL; | 
| 302       LPlatformChunk* chunk) const FINAL OVERRIDE; |  | 
| 303 | 296 | 
| 304  protected: | 297  protected: | 
| 305   EmbeddedContainer<LOperand*, R> results_; | 298   EmbeddedContainer<LOperand*, R> results_; | 
| 306 }; | 299 }; | 
| 307 | 300 | 
| 308 | 301 | 
| 309 // R = number of result operands (0 or 1). | 302 // R = number of result operands (0 or 1). | 
| 310 // I = number of input operands. | 303 // I = number of input operands. | 
| 311 // T = number of temporary operands. | 304 // T = number of temporary operands. | 
| 312 template<int R, int I, int T> | 305 template<int R, int I, int T> | 
| 313 class LTemplateInstruction : public LTemplateResultInstruction<R> { | 306 class LTemplateInstruction : public LTemplateResultInstruction<R> { | 
| 314  protected: | 307  protected: | 
| 315   EmbeddedContainer<LOperand*, I> inputs_; | 308   EmbeddedContainer<LOperand*, I> inputs_; | 
| 316   EmbeddedContainer<LOperand*, T> temps_; | 309   EmbeddedContainer<LOperand*, T> temps_; | 
| 317 | 310 | 
| 318  private: | 311  private: | 
| 319   // Iterator support. | 312   // Iterator support. | 
| 320   virtual int InputCount() FINAL OVERRIDE { return I; } | 313   int InputCount() FINAL { return I; } | 
| 321   virtual LOperand* InputAt(int i) FINAL OVERRIDE { return inputs_[i]; } | 314   LOperand* InputAt(int i) FINAL { return inputs_[i]; } | 
| 322 | 315 | 
| 323   virtual int TempCount() FINAL OVERRIDE { return T; } | 316   int TempCount() FINAL { return T; } | 
| 324   virtual LOperand* TempAt(int i) FINAL OVERRIDE { return temps_[i]; } | 317   LOperand* TempAt(int i) FINAL { return temps_[i]; } | 
| 325 }; | 318 }; | 
| 326 | 319 | 
| 327 | 320 | 
| 328 class LGap : public LTemplateInstruction<0, 0, 0> { | 321 class LGap : public LTemplateInstruction<0, 0, 0> { | 
| 329  public: | 322  public: | 
| 330   explicit LGap(HBasicBlock* block) | 323   explicit LGap(HBasicBlock* block) | 
| 331       : block_(block) { | 324       : block_(block) { | 
| 332     parallel_moves_[BEFORE] = NULL; | 325     parallel_moves_[BEFORE] = NULL; | 
| 333     parallel_moves_[START] = NULL; | 326     parallel_moves_[START] = NULL; | 
| 334     parallel_moves_[END] = NULL; | 327     parallel_moves_[END] = NULL; | 
| 335     parallel_moves_[AFTER] = NULL; | 328     parallel_moves_[AFTER] = NULL; | 
| 336   } | 329   } | 
| 337 | 330 | 
| 338   // Can't use the DECLARE-macro here because of sub-classes. | 331   // Can't use the DECLARE-macro here because of sub-classes. | 
| 339   virtual bool IsGap() const FINAL OVERRIDE { return true; } | 332   bool IsGap() const FINAL { return true; } | 
| 340   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 333   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 341   static LGap* cast(LInstruction* instr) { | 334   static LGap* cast(LInstruction* instr) { | 
| 342     DCHECK(instr->IsGap()); | 335     DCHECK(instr->IsGap()); | 
| 343     return reinterpret_cast<LGap*>(instr); | 336     return reinterpret_cast<LGap*>(instr); | 
| 344   } | 337   } | 
| 345 | 338 | 
| 346   bool IsRedundant() const; | 339   bool IsRedundant() const; | 
| 347 | 340 | 
| 348   HBasicBlock* block() const { return block_; } | 341   HBasicBlock* block() const { return block_; } | 
| 349 | 342 | 
| 350   enum InnerPosition { | 343   enum InnerPosition { | 
| (...skipping 20 matching lines...) Expand all  Loading... | 
| 371  private: | 364  private: | 
| 372   LParallelMove* parallel_moves_[LAST_INNER_POSITION + 1]; | 365   LParallelMove* parallel_moves_[LAST_INNER_POSITION + 1]; | 
| 373   HBasicBlock* block_; | 366   HBasicBlock* block_; | 
| 374 }; | 367 }; | 
| 375 | 368 | 
| 376 | 369 | 
| 377 class LInstructionGap FINAL : public LGap { | 370 class LInstructionGap FINAL : public LGap { | 
| 378  public: | 371  public: | 
| 379   explicit LInstructionGap(HBasicBlock* block) : LGap(block) { } | 372   explicit LInstructionGap(HBasicBlock* block) : LGap(block) { } | 
| 380 | 373 | 
| 381   virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { | 374   bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { | 
| 382     return !IsRedundant(); | 375     return !IsRedundant(); | 
| 383   } | 376   } | 
| 384 | 377 | 
| 385   DECLARE_CONCRETE_INSTRUCTION(InstructionGap, "gap") | 378   DECLARE_CONCRETE_INSTRUCTION(InstructionGap, "gap") | 
| 386 }; | 379 }; | 
| 387 | 380 | 
| 388 | 381 | 
| 389 class LGoto FINAL : public LTemplateInstruction<0, 0, 0> { | 382 class LGoto FINAL : public LTemplateInstruction<0, 0, 0> { | 
| 390  public: | 383  public: | 
| 391   explicit LGoto(HBasicBlock* block) : block_(block) { } | 384   explicit LGoto(HBasicBlock* block) : block_(block) { } | 
| 392 | 385 | 
| 393   virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE; | 386   bool HasInterestingComment(LCodeGen* gen) const OVERRIDE; | 
| 394   DECLARE_CONCRETE_INSTRUCTION(Goto, "goto") | 387   DECLARE_CONCRETE_INSTRUCTION(Goto, "goto") | 
| 395   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 388   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 396   virtual bool IsControl() const OVERRIDE { return true; } | 389   bool IsControl() const OVERRIDE { return true; } | 
| 397 | 390 | 
| 398   int block_id() const { return block_->block_id(); } | 391   int block_id() const { return block_->block_id(); } | 
| 399 | 392 | 
| 400  private: | 393  private: | 
| 401   HBasicBlock* block_; | 394   HBasicBlock* block_; | 
| 402 }; | 395 }; | 
| 403 | 396 | 
| 404 | 397 | 
| 405 class LLazyBailout FINAL : public LTemplateInstruction<0, 0, 0> { | 398 class LLazyBailout FINAL : public LTemplateInstruction<0, 0, 0> { | 
| 406  public: | 399  public: | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
| 429  public: | 422  public: | 
| 430   explicit LDummyUse(LOperand* value) { | 423   explicit LDummyUse(LOperand* value) { | 
| 431     inputs_[0] = value; | 424     inputs_[0] = value; | 
| 432   } | 425   } | 
| 433   DECLARE_CONCRETE_INSTRUCTION(DummyUse, "dummy-use") | 426   DECLARE_CONCRETE_INSTRUCTION(DummyUse, "dummy-use") | 
| 434 }; | 427 }; | 
| 435 | 428 | 
| 436 | 429 | 
| 437 class LDeoptimize FINAL : public LTemplateInstruction<0, 0, 0> { | 430 class LDeoptimize FINAL : public LTemplateInstruction<0, 0, 0> { | 
| 438  public: | 431  public: | 
| 439   virtual bool IsControl() const OVERRIDE { return true; } | 432   bool IsControl() const OVERRIDE { return true; } | 
| 440   DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize") | 433   DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize") | 
| 441   DECLARE_HYDROGEN_ACCESSOR(Deoptimize) | 434   DECLARE_HYDROGEN_ACCESSOR(Deoptimize) | 
| 442 }; | 435 }; | 
| 443 | 436 | 
| 444 | 437 | 
| 445 class LLabel FINAL : public LGap { | 438 class LLabel FINAL : public LGap { | 
| 446  public: | 439  public: | 
| 447   explicit LLabel(HBasicBlock* block) | 440   explicit LLabel(HBasicBlock* block) | 
| 448       : LGap(block), replacement_(NULL) { } | 441       : LGap(block), replacement_(NULL) { } | 
| 449 | 442 | 
| 450   virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { | 443   bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { return false; } | 
| 451     return false; |  | 
| 452   } |  | 
| 453   DECLARE_CONCRETE_INSTRUCTION(Label, "label") | 444   DECLARE_CONCRETE_INSTRUCTION(Label, "label") | 
| 454 | 445 | 
| 455   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 446   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 456 | 447 | 
| 457   int block_id() const { return block()->block_id(); } | 448   int block_id() const { return block()->block_id(); } | 
| 458   bool is_loop_header() const { return block()->IsLoopHeader(); } | 449   bool is_loop_header() const { return block()->IsLoopHeader(); } | 
| 459   bool is_osr_entry() const { return block()->is_osr_entry(); } | 450   bool is_osr_entry() const { return block()->is_osr_entry(); } | 
| 460   Label* label() { return &label_; } | 451   Label* label() { return &label_; } | 
| 461   LLabel* replacement() const { return replacement_; } | 452   LLabel* replacement() const { return replacement_; } | 
| 462   void set_replacement(LLabel* label) { replacement_ = label; } | 453   void set_replacement(LLabel* label) { replacement_ = label; } | 
| 463   bool HasReplacement() const { return replacement_ != NULL; } | 454   bool HasReplacement() const { return replacement_ != NULL; } | 
| 464 | 455 | 
| 465  private: | 456  private: | 
| 466   Label label_; | 457   Label label_; | 
| 467   LLabel* replacement_; | 458   LLabel* replacement_; | 
| 468 }; | 459 }; | 
| 469 | 460 | 
| 470 | 461 | 
| 471 class LParameter FINAL : public LTemplateInstruction<1, 0, 0> { | 462 class LParameter FINAL : public LTemplateInstruction<1, 0, 0> { | 
| 472  public: | 463  public: | 
| 473   virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { | 464   bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { return false; } | 
| 474     return false; |  | 
| 475   } |  | 
| 476   DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter") | 465   DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter") | 
| 477 }; | 466 }; | 
| 478 | 467 | 
| 479 | 468 | 
| 480 class LCallStub FINAL : public LTemplateInstruction<1, 1, 0> { | 469 class LCallStub FINAL : public LTemplateInstruction<1, 1, 0> { | 
| 481  public: | 470  public: | 
| 482   explicit LCallStub(LOperand* context) { | 471   explicit LCallStub(LOperand* context) { | 
| 483     inputs_[0] = context; | 472     inputs_[0] = context; | 
| 484   } | 473   } | 
| 485 | 474 | 
| (...skipping 20 matching lines...) Expand all  Loading... | 
| 506   LOperand* name() { return inputs_[2]; } | 495   LOperand* name() { return inputs_[2]; } | 
| 507 | 496 | 
| 508   DECLARE_CONCRETE_INSTRUCTION(TailCallThroughMegamorphicCache, | 497   DECLARE_CONCRETE_INSTRUCTION(TailCallThroughMegamorphicCache, | 
| 509                                "tail-call-through-megamorphic-cache") | 498                                "tail-call-through-megamorphic-cache") | 
| 510   DECLARE_HYDROGEN_ACCESSOR(TailCallThroughMegamorphicCache) | 499   DECLARE_HYDROGEN_ACCESSOR(TailCallThroughMegamorphicCache) | 
| 511 }; | 500 }; | 
| 512 | 501 | 
| 513 | 502 | 
| 514 class LUnknownOSRValue FINAL : public LTemplateInstruction<1, 0, 0> { | 503 class LUnknownOSRValue FINAL : public LTemplateInstruction<1, 0, 0> { | 
| 515  public: | 504  public: | 
| 516   virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { | 505   bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { return false; } | 
| 517     return false; |  | 
| 518   } |  | 
| 519   DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") | 506   DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") | 
| 520 }; | 507 }; | 
| 521 | 508 | 
| 522 | 509 | 
| 523 template<int I, int T> | 510 template<int I, int T> | 
| 524 class LControlInstruction : public LTemplateInstruction<0, I, T> { | 511 class LControlInstruction : public LTemplateInstruction<0, I, T> { | 
| 525  public: | 512  public: | 
| 526   LControlInstruction() : false_label_(NULL), true_label_(NULL) { } | 513   LControlInstruction() : false_label_(NULL), true_label_(NULL) { } | 
| 527 | 514 | 
| 528   virtual bool IsControl() const FINAL OVERRIDE { return true; } | 515   bool IsControl() const FINAL { return true; } | 
| 529 | 516 | 
| 530   int SuccessorCount() { return hydrogen()->SuccessorCount(); } | 517   int SuccessorCount() { return hydrogen()->SuccessorCount(); } | 
| 531   HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); } | 518   HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); } | 
| 532 | 519 | 
| 533   int TrueDestination(LChunk* chunk) { | 520   int TrueDestination(LChunk* chunk) { | 
| 534     return chunk->LookupDestination(true_block_id()); | 521     return chunk->LookupDestination(true_block_id()); | 
| 535   } | 522   } | 
| 536   int FalseDestination(LChunk* chunk) { | 523   int FalseDestination(LChunk* chunk) { | 
| 537     return chunk->LookupDestination(false_block_id()); | 524     return chunk->LookupDestination(false_block_id()); | 
| 538   } | 525   } | 
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 607     inputs_[1] = length; | 594     inputs_[1] = length; | 
| 608     inputs_[2] = index; | 595     inputs_[2] = index; | 
| 609   } | 596   } | 
| 610 | 597 | 
| 611   LOperand* arguments() { return inputs_[0]; } | 598   LOperand* arguments() { return inputs_[0]; } | 
| 612   LOperand* length() { return inputs_[1]; } | 599   LOperand* length() { return inputs_[1]; } | 
| 613   LOperand* index() { return inputs_[2]; } | 600   LOperand* index() { return inputs_[2]; } | 
| 614 | 601 | 
| 615   DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at") | 602   DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at") | 
| 616 | 603 | 
| 617   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 604   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 618 }; | 605 }; | 
| 619 | 606 | 
| 620 | 607 | 
| 621 class LArgumentsLength FINAL : public LTemplateInstruction<1, 1, 0> { | 608 class LArgumentsLength FINAL : public LTemplateInstruction<1, 1, 0> { | 
| 622  public: | 609  public: | 
| 623   explicit LArgumentsLength(LOperand* elements) { | 610   explicit LArgumentsLength(LOperand* elements) { | 
| 624     inputs_[0] = elements; | 611     inputs_[0] = elements; | 
| 625   } | 612   } | 
| 626 | 613 | 
| 627   LOperand* elements() { return inputs_[0]; } | 614   LOperand* elements() { return inputs_[0]; } | 
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 848 | 835 | 
| 849   DECLARE_CONCRETE_INSTRUCTION(CompareNumericAndBranch, | 836   DECLARE_CONCRETE_INSTRUCTION(CompareNumericAndBranch, | 
| 850                                "compare-numeric-and-branch") | 837                                "compare-numeric-and-branch") | 
| 851   DECLARE_HYDROGEN_ACCESSOR(CompareNumericAndBranch) | 838   DECLARE_HYDROGEN_ACCESSOR(CompareNumericAndBranch) | 
| 852 | 839 | 
| 853   Token::Value op() const { return hydrogen()->token(); } | 840   Token::Value op() const { return hydrogen()->token(); } | 
| 854   bool is_double() const { | 841   bool is_double() const { | 
| 855     return hydrogen()->representation().IsDouble(); | 842     return hydrogen()->representation().IsDouble(); | 
| 856   } | 843   } | 
| 857 | 844 | 
| 858   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 845   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 859 }; | 846 }; | 
| 860 | 847 | 
| 861 | 848 | 
| 862 class LMathFloor FINAL : public LTemplateInstruction<1, 1, 0> { | 849 class LMathFloor FINAL : public LTemplateInstruction<1, 1, 0> { | 
| 863  public: | 850  public: | 
| 864   explicit LMathFloor(LOperand* value) { | 851   explicit LMathFloor(LOperand* value) { | 
| 865     inputs_[0] = value; | 852     inputs_[0] = value; | 
| 866   } | 853   } | 
| 867 | 854 | 
| 868   LOperand* value() { return inputs_[0]; } | 855   LOperand* value() { return inputs_[0]; } | 
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1023  public: | 1010  public: | 
| 1024   explicit LIsObjectAndBranch(LOperand* value) { | 1011   explicit LIsObjectAndBranch(LOperand* value) { | 
| 1025     inputs_[0] = value; | 1012     inputs_[0] = value; | 
| 1026   } | 1013   } | 
| 1027 | 1014 | 
| 1028   LOperand* value() { return inputs_[0]; } | 1015   LOperand* value() { return inputs_[0]; } | 
| 1029 | 1016 | 
| 1030   DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") | 1017   DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") | 
| 1031   DECLARE_HYDROGEN_ACCESSOR(IsObjectAndBranch) | 1018   DECLARE_HYDROGEN_ACCESSOR(IsObjectAndBranch) | 
| 1032 | 1019 | 
| 1033   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1020   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1034 }; | 1021 }; | 
| 1035 | 1022 | 
| 1036 | 1023 | 
| 1037 class LIsStringAndBranch FINAL : public LControlInstruction<1, 1> { | 1024 class LIsStringAndBranch FINAL : public LControlInstruction<1, 1> { | 
| 1038  public: | 1025  public: | 
| 1039   explicit LIsStringAndBranch(LOperand* value, LOperand* temp) { | 1026   explicit LIsStringAndBranch(LOperand* value, LOperand* temp) { | 
| 1040     inputs_[0] = value; | 1027     inputs_[0] = value; | 
| 1041     temps_[0] = temp; | 1028     temps_[0] = temp; | 
| 1042   } | 1029   } | 
| 1043 | 1030 | 
| 1044   LOperand* value() { return inputs_[0]; } | 1031   LOperand* value() { return inputs_[0]; } | 
| 1045   LOperand* temp() { return temps_[0]; } | 1032   LOperand* temp() { return temps_[0]; } | 
| 1046 | 1033 | 
| 1047   DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch, "is-string-and-branch") | 1034   DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch, "is-string-and-branch") | 
| 1048   DECLARE_HYDROGEN_ACCESSOR(IsStringAndBranch) | 1035   DECLARE_HYDROGEN_ACCESSOR(IsStringAndBranch) | 
| 1049 | 1036 | 
| 1050   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1037   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1051 }; | 1038 }; | 
| 1052 | 1039 | 
| 1053 | 1040 | 
| 1054 class LIsSmiAndBranch FINAL : public LControlInstruction<1, 0> { | 1041 class LIsSmiAndBranch FINAL : public LControlInstruction<1, 0> { | 
| 1055  public: | 1042  public: | 
| 1056   explicit LIsSmiAndBranch(LOperand* value) { | 1043   explicit LIsSmiAndBranch(LOperand* value) { | 
| 1057     inputs_[0] = value; | 1044     inputs_[0] = value; | 
| 1058   } | 1045   } | 
| 1059 | 1046 | 
| 1060   LOperand* value() { return inputs_[0]; } | 1047   LOperand* value() { return inputs_[0]; } | 
| 1061 | 1048 | 
| 1062   DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") | 1049   DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") | 
| 1063   DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch) | 1050   DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch) | 
| 1064 | 1051 | 
| 1065   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1052   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1066 }; | 1053 }; | 
| 1067 | 1054 | 
| 1068 | 1055 | 
| 1069 class LIsUndetectableAndBranch FINAL : public LControlInstruction<1, 1> { | 1056 class LIsUndetectableAndBranch FINAL : public LControlInstruction<1, 1> { | 
| 1070  public: | 1057  public: | 
| 1071   explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) { | 1058   explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) { | 
| 1072     inputs_[0] = value; | 1059     inputs_[0] = value; | 
| 1073     temps_[0] = temp; | 1060     temps_[0] = temp; | 
| 1074   } | 1061   } | 
| 1075 | 1062 | 
| 1076   LOperand* value() { return inputs_[0]; } | 1063   LOperand* value() { return inputs_[0]; } | 
| 1077   LOperand* temp() { return temps_[0]; } | 1064   LOperand* temp() { return temps_[0]; } | 
| 1078 | 1065 | 
| 1079   DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, | 1066   DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, | 
| 1080                                "is-undetectable-and-branch") | 1067                                "is-undetectable-and-branch") | 
| 1081   DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch) | 1068   DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch) | 
| 1082 | 1069 | 
| 1083   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1070   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1084 }; | 1071 }; | 
| 1085 | 1072 | 
| 1086 | 1073 | 
| 1087 class LStringCompareAndBranch FINAL : public LControlInstruction<3, 0> { | 1074 class LStringCompareAndBranch FINAL : public LControlInstruction<3, 0> { | 
| 1088  public: | 1075  public: | 
| 1089   explicit LStringCompareAndBranch(LOperand* context, | 1076   explicit LStringCompareAndBranch(LOperand* context, | 
| 1090                                    LOperand* left, | 1077                                    LOperand* left, | 
| 1091                                    LOperand* right) { | 1078                                    LOperand* right) { | 
| 1092     inputs_[0] = context; | 1079     inputs_[0] = context; | 
| 1093     inputs_[1] = left; | 1080     inputs_[1] = left; | 
| 1094     inputs_[2] = right; | 1081     inputs_[2] = right; | 
| 1095   } | 1082   } | 
| 1096 | 1083 | 
| 1097   LOperand* context() { return inputs_[0]; } | 1084   LOperand* context() { return inputs_[0]; } | 
| 1098   LOperand* left() { return inputs_[1]; } | 1085   LOperand* left() { return inputs_[1]; } | 
| 1099   LOperand* right() { return inputs_[2]; } | 1086   LOperand* right() { return inputs_[2]; } | 
| 1100 | 1087 | 
| 1101   DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch, | 1088   DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch, | 
| 1102                                "string-compare-and-branch") | 1089                                "string-compare-and-branch") | 
| 1103   DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch) | 1090   DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch) | 
| 1104 | 1091 | 
| 1105   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1092   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1106 | 1093 | 
| 1107   Token::Value op() const { return hydrogen()->token(); } | 1094   Token::Value op() const { return hydrogen()->token(); } | 
| 1108 }; | 1095 }; | 
| 1109 | 1096 | 
| 1110 | 1097 | 
| 1111 class LHasInstanceTypeAndBranch FINAL : public LControlInstruction<1, 0> { | 1098 class LHasInstanceTypeAndBranch FINAL : public LControlInstruction<1, 0> { | 
| 1112  public: | 1099  public: | 
| 1113   explicit LHasInstanceTypeAndBranch(LOperand* value) { | 1100   explicit LHasInstanceTypeAndBranch(LOperand* value) { | 
| 1114     inputs_[0] = value; | 1101     inputs_[0] = value; | 
| 1115   } | 1102   } | 
| 1116 | 1103 | 
| 1117   LOperand* value() { return inputs_[0]; } | 1104   LOperand* value() { return inputs_[0]; } | 
| 1118 | 1105 | 
| 1119   DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, | 1106   DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, | 
| 1120                                "has-instance-type-and-branch") | 1107                                "has-instance-type-and-branch") | 
| 1121   DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch) | 1108   DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch) | 
| 1122 | 1109 | 
| 1123   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1110   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1124 }; | 1111 }; | 
| 1125 | 1112 | 
| 1126 | 1113 | 
| 1127 class LGetCachedArrayIndex FINAL : public LTemplateInstruction<1, 1, 0> { | 1114 class LGetCachedArrayIndex FINAL : public LTemplateInstruction<1, 1, 0> { | 
| 1128  public: | 1115  public: | 
| 1129   explicit LGetCachedArrayIndex(LOperand* value) { | 1116   explicit LGetCachedArrayIndex(LOperand* value) { | 
| 1130     inputs_[0] = value; | 1117     inputs_[0] = value; | 
| 1131   } | 1118   } | 
| 1132 | 1119 | 
| 1133   LOperand* value() { return inputs_[0]; } | 1120   LOperand* value() { return inputs_[0]; } | 
| 1134 | 1121 | 
| 1135   DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index") | 1122   DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index") | 
| 1136   DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex) | 1123   DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex) | 
| 1137 }; | 1124 }; | 
| 1138 | 1125 | 
| 1139 | 1126 | 
| 1140 class LHasCachedArrayIndexAndBranch FINAL | 1127 class LHasCachedArrayIndexAndBranch FINAL | 
| 1141     : public LControlInstruction<1, 0> { | 1128     : public LControlInstruction<1, 0> { | 
| 1142  public: | 1129  public: | 
| 1143   explicit LHasCachedArrayIndexAndBranch(LOperand* value) { | 1130   explicit LHasCachedArrayIndexAndBranch(LOperand* value) { | 
| 1144     inputs_[0] = value; | 1131     inputs_[0] = value; | 
| 1145   } | 1132   } | 
| 1146 | 1133 | 
| 1147   LOperand* value() { return inputs_[0]; } | 1134   LOperand* value() { return inputs_[0]; } | 
| 1148 | 1135 | 
| 1149   DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, | 1136   DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, | 
| 1150                                "has-cached-array-index-and-branch") | 1137                                "has-cached-array-index-and-branch") | 
| 1151   DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndexAndBranch) | 1138   DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndexAndBranch) | 
| 1152 | 1139 | 
| 1153   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1140   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1154 }; | 1141 }; | 
| 1155 | 1142 | 
| 1156 | 1143 | 
| 1157 class LClassOfTestAndBranch FINAL : public LControlInstruction<1, 2> { | 1144 class LClassOfTestAndBranch FINAL : public LControlInstruction<1, 2> { | 
| 1158  public: | 1145  public: | 
| 1159   LClassOfTestAndBranch(LOperand* value, LOperand* temp, LOperand* temp2) { | 1146   LClassOfTestAndBranch(LOperand* value, LOperand* temp, LOperand* temp2) { | 
| 1160     inputs_[0] = value; | 1147     inputs_[0] = value; | 
| 1161     temps_[0] = temp; | 1148     temps_[0] = temp; | 
| 1162     temps_[1] = temp2; | 1149     temps_[1] = temp2; | 
| 1163   } | 1150   } | 
| 1164 | 1151 | 
| 1165   LOperand* value() { return inputs_[0]; } | 1152   LOperand* value() { return inputs_[0]; } | 
| 1166   LOperand* temp() { return temps_[0]; } | 1153   LOperand* temp() { return temps_[0]; } | 
| 1167   LOperand* temp2() { return temps_[1]; } | 1154   LOperand* temp2() { return temps_[1]; } | 
| 1168 | 1155 | 
| 1169   DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, | 1156   DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, | 
| 1170                                "class-of-test-and-branch") | 1157                                "class-of-test-and-branch") | 
| 1171   DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch) | 1158   DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch) | 
| 1172 | 1159 | 
| 1173   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1160   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1174 }; | 1161 }; | 
| 1175 | 1162 | 
| 1176 | 1163 | 
| 1177 class LCmpT FINAL : public LTemplateInstruction<1, 3, 0> { | 1164 class LCmpT FINAL : public LTemplateInstruction<1, 3, 0> { | 
| 1178  public: | 1165  public: | 
| 1179   LCmpT(LOperand* context, LOperand* left, LOperand* right) { | 1166   LCmpT(LOperand* context, LOperand* left, LOperand* right) { | 
| 1180     inputs_[0] = context; | 1167     inputs_[0] = context; | 
| 1181     inputs_[1] = left; | 1168     inputs_[1] = left; | 
| 1182     inputs_[2] = right; | 1169     inputs_[2] = right; | 
| 1183   } | 1170   } | 
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1369  public: | 1356  public: | 
| 1370   explicit LBranch(LOperand* value) { | 1357   explicit LBranch(LOperand* value) { | 
| 1371     inputs_[0] = value; | 1358     inputs_[0] = value; | 
| 1372   } | 1359   } | 
| 1373 | 1360 | 
| 1374   LOperand* value() { return inputs_[0]; } | 1361   LOperand* value() { return inputs_[0]; } | 
| 1375 | 1362 | 
| 1376   DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") | 1363   DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") | 
| 1377   DECLARE_HYDROGEN_ACCESSOR(Branch) | 1364   DECLARE_HYDROGEN_ACCESSOR(Branch) | 
| 1378 | 1365 | 
| 1379   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1366   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1380 }; | 1367 }; | 
| 1381 | 1368 | 
| 1382 | 1369 | 
| 1383 class LDebugBreak FINAL : public LTemplateInstruction<0, 0, 0> { | 1370 class LDebugBreak FINAL : public LTemplateInstruction<0, 0, 0> { | 
| 1384  public: | 1371  public: | 
| 1385   DECLARE_CONCRETE_INSTRUCTION(DebugBreak, "break") | 1372   DECLARE_CONCRETE_INSTRUCTION(DebugBreak, "break") | 
| 1386 }; | 1373 }; | 
| 1387 | 1374 | 
| 1388 | 1375 | 
| 1389 class LCmpMapAndBranch FINAL : public LControlInstruction<1, 0> { | 1376 class LCmpMapAndBranch FINAL : public LControlInstruction<1, 0> { | 
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1521   LArithmeticD(Token::Value op, LOperand* left, LOperand* right) | 1508   LArithmeticD(Token::Value op, LOperand* left, LOperand* right) | 
| 1522       : op_(op) { | 1509       : op_(op) { | 
| 1523     inputs_[0] = left; | 1510     inputs_[0] = left; | 
| 1524     inputs_[1] = right; | 1511     inputs_[1] = right; | 
| 1525   } | 1512   } | 
| 1526 | 1513 | 
| 1527   Token::Value op() const { return op_; } | 1514   Token::Value op() const { return op_; } | 
| 1528   LOperand* left() { return inputs_[0]; } | 1515   LOperand* left() { return inputs_[0]; } | 
| 1529   LOperand* right() { return inputs_[1]; } | 1516   LOperand* right() { return inputs_[1]; } | 
| 1530 | 1517 | 
| 1531   virtual Opcode opcode() const OVERRIDE { | 1518   Opcode opcode() const OVERRIDE { return LInstruction::kArithmeticD; } | 
| 1532     return LInstruction::kArithmeticD; | 1519   void CompileToNative(LCodeGen* generator) OVERRIDE; | 
| 1533   } | 1520   const char* Mnemonic() const OVERRIDE; | 
| 1534   virtual void CompileToNative(LCodeGen* generator) OVERRIDE; |  | 
| 1535   virtual const char* Mnemonic() const OVERRIDE; |  | 
| 1536 | 1521 | 
| 1537  private: | 1522  private: | 
| 1538   Token::Value op_; | 1523   Token::Value op_; | 
| 1539 }; | 1524 }; | 
| 1540 | 1525 | 
| 1541 | 1526 | 
| 1542 class LArithmeticT FINAL : public LTemplateInstruction<1, 3, 0> { | 1527 class LArithmeticT FINAL : public LTemplateInstruction<1, 3, 0> { | 
| 1543  public: | 1528  public: | 
| 1544   LArithmeticT(Token::Value op, | 1529   LArithmeticT(Token::Value op, | 
| 1545                LOperand* context, | 1530                LOperand* context, | 
| 1546                LOperand* left, | 1531                LOperand* left, | 
| 1547                LOperand* right) | 1532                LOperand* right) | 
| 1548       : op_(op) { | 1533       : op_(op) { | 
| 1549     inputs_[0] = context; | 1534     inputs_[0] = context; | 
| 1550     inputs_[1] = left; | 1535     inputs_[1] = left; | 
| 1551     inputs_[2] = right; | 1536     inputs_[2] = right; | 
| 1552   } | 1537   } | 
| 1553 | 1538 | 
| 1554   Token::Value op() const { return op_; } | 1539   Token::Value op() const { return op_; } | 
| 1555   LOperand* context() { return inputs_[0]; } | 1540   LOperand* context() { return inputs_[0]; } | 
| 1556   LOperand* left() { return inputs_[1]; } | 1541   LOperand* left() { return inputs_[1]; } | 
| 1557   LOperand* right() { return inputs_[2]; } | 1542   LOperand* right() { return inputs_[2]; } | 
| 1558 | 1543 | 
| 1559   virtual Opcode opcode() const OVERRIDE { | 1544   Opcode opcode() const OVERRIDE { return LInstruction::kArithmeticT; } | 
| 1560     return LInstruction::kArithmeticT; | 1545   void CompileToNative(LCodeGen* generator) OVERRIDE; | 
| 1561   } | 1546   const char* Mnemonic() const OVERRIDE; | 
| 1562   virtual void CompileToNative(LCodeGen* generator) OVERRIDE; |  | 
| 1563   virtual const char* Mnemonic() const OVERRIDE; |  | 
| 1564 | 1547 | 
| 1565  private: | 1548  private: | 
| 1566   Token::Value op_; | 1549   Token::Value op_; | 
| 1567 }; | 1550 }; | 
| 1568 | 1551 | 
| 1569 | 1552 | 
| 1570 class LReturn FINAL : public LTemplateInstruction<0, 3, 0> { | 1553 class LReturn FINAL : public LTemplateInstruction<0, 3, 0> { | 
| 1571  public: | 1554  public: | 
| 1572   explicit LReturn(LOperand* value, | 1555   explicit LReturn(LOperand* value, | 
| 1573                    LOperand* context, | 1556                    LOperand* context, | 
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1679     return hydrogen()->is_external(); | 1662     return hydrogen()->is_external(); | 
| 1680   } | 1663   } | 
| 1681   bool is_fixed_typed_array() const { | 1664   bool is_fixed_typed_array() const { | 
| 1682     return hydrogen()->is_fixed_typed_array(); | 1665     return hydrogen()->is_fixed_typed_array(); | 
| 1683   } | 1666   } | 
| 1684   bool is_typed_elements() const { | 1667   bool is_typed_elements() const { | 
| 1685     return is_external() || is_fixed_typed_array(); | 1668     return is_external() || is_fixed_typed_array(); | 
| 1686   } | 1669   } | 
| 1687   LOperand* elements() { return inputs_[0]; } | 1670   LOperand* elements() { return inputs_[0]; } | 
| 1688   LOperand* key() { return inputs_[1]; } | 1671   LOperand* key() { return inputs_[1]; } | 
| 1689   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1672   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1690   uint32_t base_offset() const { return hydrogen()->base_offset(); } | 1673   uint32_t base_offset() const { return hydrogen()->base_offset(); } | 
| 1691   ElementsKind elements_kind() const { | 1674   ElementsKind elements_kind() const { | 
| 1692     return hydrogen()->elements_kind(); | 1675     return hydrogen()->elements_kind(); | 
| 1693   } | 1676   } | 
| 1694 }; | 1677 }; | 
| 1695 | 1678 | 
| 1696 | 1679 | 
| 1697 class LLoadKeyedGeneric FINAL : public LTemplateInstruction<1, 3, 1> { | 1680 class LLoadKeyedGeneric FINAL : public LTemplateInstruction<1, 3, 1> { | 
| 1698  public: | 1681  public: | 
| 1699   LLoadKeyedGeneric(LOperand* context, LOperand* obj, LOperand* key, | 1682   LLoadKeyedGeneric(LOperand* context, LOperand* obj, LOperand* key, | 
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1763     inputs_[0] = context; | 1746     inputs_[0] = context; | 
| 1764   } | 1747   } | 
| 1765 | 1748 | 
| 1766   LOperand* context() { return inputs_[0]; } | 1749   LOperand* context() { return inputs_[0]; } | 
| 1767 | 1750 | 
| 1768   DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot") | 1751   DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot") | 
| 1769   DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot) | 1752   DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot) | 
| 1770 | 1753 | 
| 1771   int slot_index() { return hydrogen()->slot_index(); } | 1754   int slot_index() { return hydrogen()->slot_index(); } | 
| 1772 | 1755 | 
| 1773   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1756   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1774 }; | 1757 }; | 
| 1775 | 1758 | 
| 1776 | 1759 | 
| 1777 class LStoreContextSlot FINAL : public LTemplateInstruction<0, 2, 1> { | 1760 class LStoreContextSlot FINAL : public LTemplateInstruction<0, 2, 1> { | 
| 1778  public: | 1761  public: | 
| 1779   LStoreContextSlot(LOperand* context, LOperand* value, LOperand* temp) { | 1762   LStoreContextSlot(LOperand* context, LOperand* value, LOperand* temp) { | 
| 1780     inputs_[0] = context; | 1763     inputs_[0] = context; | 
| 1781     inputs_[1] = value; | 1764     inputs_[1] = value; | 
| 1782     temps_[0] = temp; | 1765     temps_[0] = temp; | 
| 1783   } | 1766   } | 
| 1784 | 1767 | 
| 1785   LOperand* context() { return inputs_[0]; } | 1768   LOperand* context() { return inputs_[0]; } | 
| 1786   LOperand* value() { return inputs_[1]; } | 1769   LOperand* value() { return inputs_[1]; } | 
| 1787   LOperand* temp() { return temps_[0]; } | 1770   LOperand* temp() { return temps_[0]; } | 
| 1788 | 1771 | 
| 1789   DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store-context-slot") | 1772   DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store-context-slot") | 
| 1790   DECLARE_HYDROGEN_ACCESSOR(StoreContextSlot) | 1773   DECLARE_HYDROGEN_ACCESSOR(StoreContextSlot) | 
| 1791 | 1774 | 
| 1792   int slot_index() { return hydrogen()->slot_index(); } | 1775   int slot_index() { return hydrogen()->slot_index(); } | 
| 1793 | 1776 | 
| 1794   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1777   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1795 }; | 1778 }; | 
| 1796 | 1779 | 
| 1797 | 1780 | 
| 1798 class LPushArgument FINAL : public LTemplateInstruction<0, 1, 0> { | 1781 class LPushArgument FINAL : public LTemplateInstruction<0, 1, 0> { | 
| 1799  public: | 1782  public: | 
| 1800   explicit LPushArgument(LOperand* value) { | 1783   explicit LPushArgument(LOperand* value) { | 
| 1801     inputs_[0] = value; | 1784     inputs_[0] = value; | 
| 1802   } | 1785   } | 
| 1803 | 1786 | 
| 1804   LOperand* value() { return inputs_[0]; } | 1787   LOperand* value() { return inputs_[0]; } | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 1823 class LStoreCodeEntry FINAL: public LTemplateInstruction<0, 2, 0> { | 1806 class LStoreCodeEntry FINAL: public LTemplateInstruction<0, 2, 0> { | 
| 1824  public: | 1807  public: | 
| 1825   LStoreCodeEntry(LOperand* function, LOperand* code_object) { | 1808   LStoreCodeEntry(LOperand* function, LOperand* code_object) { | 
| 1826     inputs_[0] = function; | 1809     inputs_[0] = function; | 
| 1827     inputs_[1] = code_object; | 1810     inputs_[1] = code_object; | 
| 1828   } | 1811   } | 
| 1829 | 1812 | 
| 1830   LOperand* function() { return inputs_[0]; } | 1813   LOperand* function() { return inputs_[0]; } | 
| 1831   LOperand* code_object() { return inputs_[1]; } | 1814   LOperand* code_object() { return inputs_[1]; } | 
| 1832 | 1815 | 
| 1833   virtual void PrintDataTo(StringStream* stream); | 1816   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1834 | 1817 | 
| 1835   DECLARE_CONCRETE_INSTRUCTION(StoreCodeEntry, "store-code-entry") | 1818   DECLARE_CONCRETE_INSTRUCTION(StoreCodeEntry, "store-code-entry") | 
| 1836   DECLARE_HYDROGEN_ACCESSOR(StoreCodeEntry) | 1819   DECLARE_HYDROGEN_ACCESSOR(StoreCodeEntry) | 
| 1837 }; | 1820 }; | 
| 1838 | 1821 | 
| 1839 | 1822 | 
| 1840 class LInnerAllocatedObject FINAL: public LTemplateInstruction<1, 2, 0> { | 1823 class LInnerAllocatedObject FINAL: public LTemplateInstruction<1, 2, 0> { | 
| 1841  public: | 1824  public: | 
| 1842   LInnerAllocatedObject(LOperand* base_object, LOperand* offset) { | 1825   LInnerAllocatedObject(LOperand* base_object, LOperand* offset) { | 
| 1843     inputs_[0] = base_object; | 1826     inputs_[0] = base_object; | 
| 1844     inputs_[1] = offset; | 1827     inputs_[1] = offset; | 
| 1845   } | 1828   } | 
| 1846 | 1829 | 
| 1847   LOperand* base_object() const { return inputs_[0]; } | 1830   LOperand* base_object() const { return inputs_[0]; } | 
| 1848   LOperand* offset() const { return inputs_[1]; } | 1831   LOperand* offset() const { return inputs_[1]; } | 
| 1849 | 1832 | 
| 1850   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1833   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1851 | 1834 | 
| 1852   DECLARE_CONCRETE_INSTRUCTION(InnerAllocatedObject, "inner-allocated-object") | 1835   DECLARE_CONCRETE_INSTRUCTION(InnerAllocatedObject, "inner-allocated-object") | 
| 1853 }; | 1836 }; | 
| 1854 | 1837 | 
| 1855 | 1838 | 
| 1856 class LThisFunction FINAL : public LTemplateInstruction<1, 0, 0> { | 1839 class LThisFunction FINAL : public LTemplateInstruction<1, 0, 0> { | 
| 1857  public: | 1840  public: | 
| 1858   DECLARE_CONCRETE_INSTRUCTION(ThisFunction, "this-function") | 1841   DECLARE_CONCRETE_INSTRUCTION(ThisFunction, "this-function") | 
| 1859   DECLARE_HYDROGEN_ACCESSOR(ThisFunction) | 1842   DECLARE_HYDROGEN_ACCESSOR(ThisFunction) | 
| 1860 }; | 1843 }; | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
| 1884  public: | 1867  public: | 
| 1885   explicit LCallJSFunction(LOperand* function) { | 1868   explicit LCallJSFunction(LOperand* function) { | 
| 1886     inputs_[0] = function; | 1869     inputs_[0] = function; | 
| 1887   } | 1870   } | 
| 1888 | 1871 | 
| 1889   LOperand* function() { return inputs_[0]; } | 1872   LOperand* function() { return inputs_[0]; } | 
| 1890 | 1873 | 
| 1891   DECLARE_CONCRETE_INSTRUCTION(CallJSFunction, "call-js-function") | 1874   DECLARE_CONCRETE_INSTRUCTION(CallJSFunction, "call-js-function") | 
| 1892   DECLARE_HYDROGEN_ACCESSOR(CallJSFunction) | 1875   DECLARE_HYDROGEN_ACCESSOR(CallJSFunction) | 
| 1893 | 1876 | 
| 1894   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1877   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1895 | 1878 | 
| 1896   int arity() const { return hydrogen()->argument_count() - 1; } | 1879   int arity() const { return hydrogen()->argument_count() - 1; } | 
| 1897 }; | 1880 }; | 
| 1898 | 1881 | 
| 1899 | 1882 | 
| 1900 class LCallWithDescriptor FINAL : public LTemplateResultInstruction<1> { | 1883 class LCallWithDescriptor FINAL : public LTemplateResultInstruction<1> { | 
| 1901  public: | 1884  public: | 
| 1902   LCallWithDescriptor(CallInterfaceDescriptor descriptor, | 1885   LCallWithDescriptor(CallInterfaceDescriptor descriptor, | 
| 1903                       const ZoneList<LOperand*>& operands, Zone* zone) | 1886                       const ZoneList<LOperand*>& operands, Zone* zone) | 
| 1904       : inputs_(descriptor.GetRegisterParameterCount() + 1, zone) { | 1887       : inputs_(descriptor.GetRegisterParameterCount() + 1, zone) { | 
| 1905     DCHECK(descriptor.GetRegisterParameterCount() + 1 == operands.length()); | 1888     DCHECK(descriptor.GetRegisterParameterCount() + 1 == operands.length()); | 
| 1906     inputs_.AddAll(operands, zone); | 1889     inputs_.AddAll(operands, zone); | 
| 1907   } | 1890   } | 
| 1908 | 1891 | 
| 1909   LOperand* target() const { return inputs_[0]; } | 1892   LOperand* target() const { return inputs_[0]; } | 
| 1910 | 1893 | 
| 1911   DECLARE_HYDROGEN_ACCESSOR(CallWithDescriptor) | 1894   DECLARE_HYDROGEN_ACCESSOR(CallWithDescriptor) | 
| 1912 | 1895 | 
| 1913  private: | 1896  private: | 
| 1914   DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor, "call-with-descriptor") | 1897   DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor, "call-with-descriptor") | 
| 1915 | 1898 | 
| 1916   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1899   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1917 | 1900 | 
| 1918   int arity() const { return hydrogen()->argument_count() - 1; } | 1901   int arity() const { return hydrogen()->argument_count() - 1; } | 
| 1919 | 1902 | 
| 1920   ZoneList<LOperand*> inputs_; | 1903   ZoneList<LOperand*> inputs_; | 
| 1921 | 1904 | 
| 1922   // Iterator support. | 1905   // Iterator support. | 
| 1923   virtual int InputCount() FINAL OVERRIDE { return inputs_.length(); } | 1906   int InputCount() FINAL { return inputs_.length(); } | 
| 1924   virtual LOperand* InputAt(int i) FINAL OVERRIDE { return inputs_[i]; } | 1907   LOperand* InputAt(int i) FINAL { return inputs_[i]; } | 
| 1925 | 1908 | 
| 1926   virtual int TempCount() FINAL OVERRIDE { return 0; } | 1909   int TempCount() FINAL { return 0; } | 
| 1927   virtual LOperand* TempAt(int i) FINAL OVERRIDE { return NULL; } | 1910   LOperand* TempAt(int i) FINAL { return NULL; } | 
| 1928 }; | 1911 }; | 
| 1929 | 1912 | 
| 1930 | 1913 | 
| 1931 class LInvokeFunction FINAL : public LTemplateInstruction<1, 2, 0> { | 1914 class LInvokeFunction FINAL : public LTemplateInstruction<1, 2, 0> { | 
| 1932  public: | 1915  public: | 
| 1933   LInvokeFunction(LOperand* context, LOperand* function) { | 1916   LInvokeFunction(LOperand* context, LOperand* function) { | 
| 1934     inputs_[0] = context; | 1917     inputs_[0] = context; | 
| 1935     inputs_[1] = function; | 1918     inputs_[1] = function; | 
| 1936   } | 1919   } | 
| 1937 | 1920 | 
| 1938   LOperand* context() { return inputs_[0]; } | 1921   LOperand* context() { return inputs_[0]; } | 
| 1939   LOperand* function() { return inputs_[1]; } | 1922   LOperand* function() { return inputs_[1]; } | 
| 1940 | 1923 | 
| 1941   DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function") | 1924   DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function") | 
| 1942   DECLARE_HYDROGEN_ACCESSOR(InvokeFunction) | 1925   DECLARE_HYDROGEN_ACCESSOR(InvokeFunction) | 
| 1943 | 1926 | 
| 1944   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1927   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1945 | 1928 | 
| 1946   int arity() const { return hydrogen()->argument_count() - 1; } | 1929   int arity() const { return hydrogen()->argument_count() - 1; } | 
| 1947 }; | 1930 }; | 
| 1948 | 1931 | 
| 1949 | 1932 | 
| 1950 class LCallFunction FINAL : public LTemplateInstruction<1, 2, 0> { | 1933 class LCallFunction FINAL : public LTemplateInstruction<1, 2, 0> { | 
| 1951  public: | 1934  public: | 
| 1952   LCallFunction(LOperand* context, LOperand* function) { | 1935   LCallFunction(LOperand* context, LOperand* function) { | 
| 1953     inputs_[0] = context; | 1936     inputs_[0] = context; | 
| 1954     inputs_[1] = function; | 1937     inputs_[1] = function; | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 1969     inputs_[0] = context; | 1952     inputs_[0] = context; | 
| 1970     inputs_[1] = constructor; | 1953     inputs_[1] = constructor; | 
| 1971   } | 1954   } | 
| 1972 | 1955 | 
| 1973   LOperand* context() { return inputs_[0]; } | 1956   LOperand* context() { return inputs_[0]; } | 
| 1974   LOperand* constructor() { return inputs_[1]; } | 1957   LOperand* constructor() { return inputs_[1]; } | 
| 1975 | 1958 | 
| 1976   DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new") | 1959   DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new") | 
| 1977   DECLARE_HYDROGEN_ACCESSOR(CallNew) | 1960   DECLARE_HYDROGEN_ACCESSOR(CallNew) | 
| 1978 | 1961 | 
| 1979   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1962   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1980 | 1963 | 
| 1981   int arity() const { return hydrogen()->argument_count() - 1; } | 1964   int arity() const { return hydrogen()->argument_count() - 1; } | 
| 1982 }; | 1965 }; | 
| 1983 | 1966 | 
| 1984 | 1967 | 
| 1985 class LCallNewArray FINAL : public LTemplateInstruction<1, 2, 0> { | 1968 class LCallNewArray FINAL : public LTemplateInstruction<1, 2, 0> { | 
| 1986  public: | 1969  public: | 
| 1987   LCallNewArray(LOperand* context, LOperand* constructor) { | 1970   LCallNewArray(LOperand* context, LOperand* constructor) { | 
| 1988     inputs_[0] = context; | 1971     inputs_[0] = context; | 
| 1989     inputs_[1] = constructor; | 1972     inputs_[1] = constructor; | 
| 1990   } | 1973   } | 
| 1991 | 1974 | 
| 1992   LOperand* context() { return inputs_[0]; } | 1975   LOperand* context() { return inputs_[0]; } | 
| 1993   LOperand* constructor() { return inputs_[1]; } | 1976   LOperand* constructor() { return inputs_[1]; } | 
| 1994 | 1977 | 
| 1995   DECLARE_CONCRETE_INSTRUCTION(CallNewArray, "call-new-array") | 1978   DECLARE_CONCRETE_INSTRUCTION(CallNewArray, "call-new-array") | 
| 1996   DECLARE_HYDROGEN_ACCESSOR(CallNewArray) | 1979   DECLARE_HYDROGEN_ACCESSOR(CallNewArray) | 
| 1997 | 1980 | 
| 1998   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 1981   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 1999 | 1982 | 
| 2000   int arity() const { return hydrogen()->argument_count() - 1; } | 1983   int arity() const { return hydrogen()->argument_count() - 1; } | 
| 2001 }; | 1984 }; | 
| 2002 | 1985 | 
| 2003 | 1986 | 
| 2004 class LCallRuntime FINAL : public LTemplateInstruction<1, 1, 0> { | 1987 class LCallRuntime FINAL : public LTemplateInstruction<1, 1, 0> { | 
| 2005  public: | 1988  public: | 
| 2006   explicit LCallRuntime(LOperand* context) { | 1989   explicit LCallRuntime(LOperand* context) { | 
| 2007     inputs_[0] = context; | 1990     inputs_[0] = context; | 
| 2008   } | 1991   } | 
| 2009 | 1992 | 
| 2010   LOperand* context() { return inputs_[0]; } | 1993   LOperand* context() { return inputs_[0]; } | 
| 2011 | 1994 | 
| 2012   DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") | 1995   DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") | 
| 2013   DECLARE_HYDROGEN_ACCESSOR(CallRuntime) | 1996   DECLARE_HYDROGEN_ACCESSOR(CallRuntime) | 
| 2014 | 1997 | 
| 2015   virtual bool ClobbersDoubleRegisters(Isolate* isolate) const OVERRIDE { | 1998   bool ClobbersDoubleRegisters(Isolate* isolate) const OVERRIDE { | 
| 2016     return save_doubles() == kDontSaveFPRegs; | 1999     return save_doubles() == kDontSaveFPRegs; | 
| 2017   } | 2000   } | 
| 2018 | 2001 | 
| 2019   const Runtime::Function* function() const { return hydrogen()->function(); } | 2002   const Runtime::Function* function() const { return hydrogen()->function(); } | 
| 2020   int arity() const { return hydrogen()->argument_count(); } | 2003   int arity() const { return hydrogen()->argument_count(); } | 
| 2021   SaveFPRegsMode save_doubles() const { return hydrogen()->save_doubles(); } | 2004   SaveFPRegsMode save_doubles() const { return hydrogen()->save_doubles(); } | 
| 2022 }; | 2005 }; | 
| 2023 | 2006 | 
| 2024 | 2007 | 
| 2025 class LInteger32ToDouble FINAL : public LTemplateInstruction<1, 1, 0> { | 2008 class LInteger32ToDouble FINAL : public LTemplateInstruction<1, 1, 0> { | 
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2191     temps_[0] = temp; | 2174     temps_[0] = temp; | 
| 2192   } | 2175   } | 
| 2193 | 2176 | 
| 2194   LOperand* object() { return inputs_[0]; } | 2177   LOperand* object() { return inputs_[0]; } | 
| 2195   LOperand* value() { return inputs_[1]; } | 2178   LOperand* value() { return inputs_[1]; } | 
| 2196   LOperand* temp() { return temps_[0]; } | 2179   LOperand* temp() { return temps_[0]; } | 
| 2197 | 2180 | 
| 2198   DECLARE_CONCRETE_INSTRUCTION(StoreNamedField, "store-named-field") | 2181   DECLARE_CONCRETE_INSTRUCTION(StoreNamedField, "store-named-field") | 
| 2199   DECLARE_HYDROGEN_ACCESSOR(StoreNamedField) | 2182   DECLARE_HYDROGEN_ACCESSOR(StoreNamedField) | 
| 2200 | 2183 | 
| 2201   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 2184   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 2202 | 2185 | 
| 2203   Representation representation() const { | 2186   Representation representation() const { | 
| 2204     return hydrogen()->field_representation(); | 2187     return hydrogen()->field_representation(); | 
| 2205   } | 2188   } | 
| 2206 }; | 2189 }; | 
| 2207 | 2190 | 
| 2208 | 2191 | 
| 2209 class LStoreNamedGeneric FINAL : public LTemplateInstruction<0, 3, 0> { | 2192 class LStoreNamedGeneric FINAL : public LTemplateInstruction<0, 3, 0> { | 
| 2210  public: | 2193  public: | 
| 2211   LStoreNamedGeneric(LOperand* context, LOperand* object, LOperand* value) { | 2194   LStoreNamedGeneric(LOperand* context, LOperand* object, LOperand* value) { | 
| 2212     inputs_[0] = context; | 2195     inputs_[0] = context; | 
| 2213     inputs_[1] = object; | 2196     inputs_[1] = object; | 
| 2214     inputs_[2] = value; | 2197     inputs_[2] = value; | 
| 2215   } | 2198   } | 
| 2216 | 2199 | 
| 2217   LOperand* context() { return inputs_[0]; } | 2200   LOperand* context() { return inputs_[0]; } | 
| 2218   LOperand* object() { return inputs_[1]; } | 2201   LOperand* object() { return inputs_[1]; } | 
| 2219   LOperand* value() { return inputs_[2]; } | 2202   LOperand* value() { return inputs_[2]; } | 
| 2220 | 2203 | 
| 2221   DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic") | 2204   DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic") | 
| 2222   DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric) | 2205   DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric) | 
| 2223 | 2206 | 
| 2224   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 2207   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 2225 | 2208 | 
| 2226   Handle<Object> name() const { return hydrogen()->name(); } | 2209   Handle<Object> name() const { return hydrogen()->name(); } | 
| 2227   StrictMode strict_mode() { return hydrogen()->strict_mode(); } | 2210   StrictMode strict_mode() { return hydrogen()->strict_mode(); } | 
| 2228 }; | 2211 }; | 
| 2229 | 2212 | 
| 2230 | 2213 | 
| 2231 class LStoreKeyed FINAL : public LTemplateInstruction<0, 3, 0> { | 2214 class LStoreKeyed FINAL : public LTemplateInstruction<0, 3, 0> { | 
| 2232  public: | 2215  public: | 
| 2233   LStoreKeyed(LOperand* object, LOperand* key, LOperand* value) { | 2216   LStoreKeyed(LOperand* object, LOperand* key, LOperand* value) { | 
| 2234     inputs_[0] = object; | 2217     inputs_[0] = object; | 
| 2235     inputs_[1] = key; | 2218     inputs_[1] = key; | 
| 2236     inputs_[2] = value; | 2219     inputs_[2] = value; | 
| 2237   } | 2220   } | 
| 2238 | 2221 | 
| 2239   bool is_external() const { return hydrogen()->is_external(); } | 2222   bool is_external() const { return hydrogen()->is_external(); } | 
| 2240   bool is_fixed_typed_array() const { | 2223   bool is_fixed_typed_array() const { | 
| 2241     return hydrogen()->is_fixed_typed_array(); | 2224     return hydrogen()->is_fixed_typed_array(); | 
| 2242   } | 2225   } | 
| 2243   bool is_typed_elements() const { | 2226   bool is_typed_elements() const { | 
| 2244     return is_external() || is_fixed_typed_array(); | 2227     return is_external() || is_fixed_typed_array(); | 
| 2245   } | 2228   } | 
| 2246   LOperand* elements() { return inputs_[0]; } | 2229   LOperand* elements() { return inputs_[0]; } | 
| 2247   LOperand* key() { return inputs_[1]; } | 2230   LOperand* key() { return inputs_[1]; } | 
| 2248   LOperand* value() { return inputs_[2]; } | 2231   LOperand* value() { return inputs_[2]; } | 
| 2249   ElementsKind elements_kind() const { return hydrogen()->elements_kind(); } | 2232   ElementsKind elements_kind() const { return hydrogen()->elements_kind(); } | 
| 2250 | 2233 | 
| 2251   DECLARE_CONCRETE_INSTRUCTION(StoreKeyed, "store-keyed") | 2234   DECLARE_CONCRETE_INSTRUCTION(StoreKeyed, "store-keyed") | 
| 2252   DECLARE_HYDROGEN_ACCESSOR(StoreKeyed) | 2235   DECLARE_HYDROGEN_ACCESSOR(StoreKeyed) | 
| 2253 | 2236 | 
| 2254   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 2237   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 2255   bool NeedsCanonicalization() { return hydrogen()->NeedsCanonicalization(); } | 2238   bool NeedsCanonicalization() { return hydrogen()->NeedsCanonicalization(); } | 
| 2256   uint32_t base_offset() const { return hydrogen()->base_offset(); } | 2239   uint32_t base_offset() const { return hydrogen()->base_offset(); } | 
| 2257 }; | 2240 }; | 
| 2258 | 2241 | 
| 2259 | 2242 | 
| 2260 class LStoreKeyedGeneric FINAL : public LTemplateInstruction<0, 4, 0> { | 2243 class LStoreKeyedGeneric FINAL : public LTemplateInstruction<0, 4, 0> { | 
| 2261  public: | 2244  public: | 
| 2262   LStoreKeyedGeneric(LOperand* context, | 2245   LStoreKeyedGeneric(LOperand* context, | 
| 2263                      LOperand* object, | 2246                      LOperand* object, | 
| 2264                      LOperand* key, | 2247                      LOperand* key, | 
| 2265                      LOperand* value) { | 2248                      LOperand* value) { | 
| 2266     inputs_[0] = context; | 2249     inputs_[0] = context; | 
| 2267     inputs_[1] = object; | 2250     inputs_[1] = object; | 
| 2268     inputs_[2] = key; | 2251     inputs_[2] = key; | 
| 2269     inputs_[3] = value; | 2252     inputs_[3] = value; | 
| 2270   } | 2253   } | 
| 2271 | 2254 | 
| 2272   LOperand* context() { return inputs_[0]; } | 2255   LOperand* context() { return inputs_[0]; } | 
| 2273   LOperand* object() { return inputs_[1]; } | 2256   LOperand* object() { return inputs_[1]; } | 
| 2274   LOperand* key() { return inputs_[2]; } | 2257   LOperand* key() { return inputs_[2]; } | 
| 2275   LOperand* value() { return inputs_[3]; } | 2258   LOperand* value() { return inputs_[3]; } | 
| 2276 | 2259 | 
| 2277   DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") | 2260   DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") | 
| 2278   DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric) | 2261   DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric) | 
| 2279 | 2262 | 
| 2280   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 2263   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 2281 | 2264 | 
| 2282   StrictMode strict_mode() { return hydrogen()->strict_mode(); } | 2265   StrictMode strict_mode() { return hydrogen()->strict_mode(); } | 
| 2283 }; | 2266 }; | 
| 2284 | 2267 | 
| 2285 | 2268 | 
| 2286 class LTransitionElementsKind FINAL : public LTemplateInstruction<0, 2, 2> { | 2269 class LTransitionElementsKind FINAL : public LTemplateInstruction<0, 2, 2> { | 
| 2287  public: | 2270  public: | 
| 2288   LTransitionElementsKind(LOperand* object, | 2271   LTransitionElementsKind(LOperand* object, | 
| 2289                           LOperand* context, | 2272                           LOperand* context, | 
| 2290                           LOperand* new_map_temp, | 2273                           LOperand* new_map_temp, | 
| 2291                           LOperand* temp) { | 2274                           LOperand* temp) { | 
| 2292     inputs_[0] = object; | 2275     inputs_[0] = object; | 
| 2293     inputs_[1] = context; | 2276     inputs_[1] = context; | 
| 2294     temps_[0] = new_map_temp; | 2277     temps_[0] = new_map_temp; | 
| 2295     temps_[1] = temp; | 2278     temps_[1] = temp; | 
| 2296   } | 2279   } | 
| 2297 | 2280 | 
| 2298   LOperand* object() { return inputs_[0]; } | 2281   LOperand* object() { return inputs_[0]; } | 
| 2299   LOperand* context() { return inputs_[1]; } | 2282   LOperand* context() { return inputs_[1]; } | 
| 2300   LOperand* new_map_temp() { return temps_[0]; } | 2283   LOperand* new_map_temp() { return temps_[0]; } | 
| 2301   LOperand* temp() { return temps_[1]; } | 2284   LOperand* temp() { return temps_[1]; } | 
| 2302 | 2285 | 
| 2303   DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind, | 2286   DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind, | 
| 2304                                "transition-elements-kind") | 2287                                "transition-elements-kind") | 
| 2305   DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind) | 2288   DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind) | 
| 2306 | 2289 | 
| 2307   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 2290   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 2308 | 2291 | 
| 2309   Handle<Map> original_map() { return hydrogen()->original_map().handle(); } | 2292   Handle<Map> original_map() { return hydrogen()->original_map().handle(); } | 
| 2310   Handle<Map> transitioned_map() { | 2293   Handle<Map> transitioned_map() { | 
| 2311     return hydrogen()->transitioned_map().handle(); | 2294     return hydrogen()->transitioned_map().handle(); | 
| 2312   } | 2295   } | 
| 2313   ElementsKind from_kind() { return hydrogen()->from_kind(); } | 2296   ElementsKind from_kind() { return hydrogen()->from_kind(); } | 
| 2314   ElementsKind to_kind() { return hydrogen()->to_kind(); } | 2297   ElementsKind to_kind() { return hydrogen()->to_kind(); } | 
| 2315 }; | 2298 }; | 
| 2316 | 2299 | 
| 2317 | 2300 | 
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2586     inputs_[0] = value; | 2569     inputs_[0] = value; | 
| 2587   } | 2570   } | 
| 2588 | 2571 | 
| 2589   LOperand* value() { return inputs_[0]; } | 2572   LOperand* value() { return inputs_[0]; } | 
| 2590 | 2573 | 
| 2591   DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") | 2574   DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") | 
| 2592   DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch) | 2575   DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch) | 
| 2593 | 2576 | 
| 2594   Handle<String> type_literal() { return hydrogen()->type_literal(); } | 2577   Handle<String> type_literal() { return hydrogen()->type_literal(); } | 
| 2595 | 2578 | 
| 2596   virtual void PrintDataTo(StringStream* stream) OVERRIDE; | 2579   void PrintDataTo(StringStream* stream) OVERRIDE; | 
| 2597 }; | 2580 }; | 
| 2598 | 2581 | 
| 2599 | 2582 | 
| 2600 class LIsConstructCallAndBranch FINAL : public LControlInstruction<0, 1> { | 2583 class LIsConstructCallAndBranch FINAL : public LControlInstruction<0, 1> { | 
| 2601  public: | 2584  public: | 
| 2602   explicit LIsConstructCallAndBranch(LOperand* temp) { | 2585   explicit LIsConstructCallAndBranch(LOperand* temp) { | 
| 2603     temps_[0] = temp; | 2586     temps_[0] = temp; | 
| 2604   } | 2587   } | 
| 2605 | 2588 | 
| 2606   LOperand* temp() { return temps_[0]; } | 2589   LOperand* temp() { return temps_[0]; } | 
| 2607 | 2590 | 
| 2608   DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch, | 2591   DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch, | 
| 2609                                "is-construct-call-and-branch") | 2592                                "is-construct-call-and-branch") | 
| 2610   DECLARE_HYDROGEN_ACCESSOR(IsConstructCallAndBranch) | 2593   DECLARE_HYDROGEN_ACCESSOR(IsConstructCallAndBranch) | 
| 2611 }; | 2594 }; | 
| 2612 | 2595 | 
| 2613 | 2596 | 
| 2614 class LOsrEntry FINAL : public LTemplateInstruction<0, 0, 0> { | 2597 class LOsrEntry FINAL : public LTemplateInstruction<0, 0, 0> { | 
| 2615  public: | 2598  public: | 
| 2616   LOsrEntry() {} | 2599   LOsrEntry() {} | 
| 2617 | 2600 | 
| 2618   virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { | 2601   bool HasInterestingComment(LCodeGen* gen) const OVERRIDE { return false; } | 
| 2619     return false; |  | 
| 2620   } |  | 
| 2621   DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry") | 2602   DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry") | 
| 2622 }; | 2603 }; | 
| 2623 | 2604 | 
| 2624 | 2605 | 
| 2625 class LStackCheck FINAL : public LTemplateInstruction<0, 1, 0> { | 2606 class LStackCheck FINAL : public LTemplateInstruction<0, 1, 0> { | 
| 2626  public: | 2607  public: | 
| 2627   explicit LStackCheck(LOperand* context) { | 2608   explicit LStackCheck(LOperand* context) { | 
| 2628     inputs_[0] = context; | 2609     inputs_[0] = context; | 
| 2629   } | 2610   } | 
| 2630 | 2611 | 
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2820 | 2801 | 
| 2821   // An input operand in a register or a constant operand. | 2802   // An input operand in a register or a constant operand. | 
| 2822   MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value); | 2803   MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value); | 
| 2823   MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value); | 2804   MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value); | 
| 2824 | 2805 | 
| 2825   // An input operand in a constant operand. | 2806   // An input operand in a constant operand. | 
| 2826   MUST_USE_RESULT LOperand* UseConstant(HValue* value); | 2807   MUST_USE_RESULT LOperand* UseConstant(HValue* value); | 
| 2827 | 2808 | 
| 2828   // An input operand in register, stack slot or a constant operand. | 2809   // An input operand in register, stack slot or a constant operand. | 
| 2829   // Will not be moved to a register even if one is freely available. | 2810   // Will not be moved to a register even if one is freely available. | 
| 2830   virtual MUST_USE_RESULT LOperand* UseAny(HValue* value) OVERRIDE; | 2811   MUST_USE_RESULT LOperand* UseAny(HValue* value) OVERRIDE; | 
| 2831 | 2812 | 
| 2832   // Temporary operand that must be in a register. | 2813   // Temporary operand that must be in a register. | 
| 2833   MUST_USE_RESULT LUnallocated* TempRegister(); | 2814   MUST_USE_RESULT LUnallocated* TempRegister(); | 
| 2834   MUST_USE_RESULT LOperand* FixedTemp(Register reg); | 2815   MUST_USE_RESULT LOperand* FixedTemp(Register reg); | 
| 2835   MUST_USE_RESULT LOperand* FixedTemp(XMMRegister reg); | 2816   MUST_USE_RESULT LOperand* FixedTemp(XMMRegister reg); | 
| 2836 | 2817 | 
| 2837   // Methods for setting up define-use relationships. | 2818   // Methods for setting up define-use relationships. | 
| 2838   // Return the same instruction that they are passed. | 2819   // Return the same instruction that they are passed. | 
| 2839   LInstruction* Define(LTemplateResultInstruction<1>* instr, | 2820   LInstruction* Define(LTemplateResultInstruction<1>* instr, | 
| 2840                        LUnallocated* result); | 2821                        LUnallocated* result); | 
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2881 | 2862 | 
| 2882   DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); | 2863   DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); | 
| 2883 }; | 2864 }; | 
| 2884 | 2865 | 
| 2885 #undef DECLARE_HYDROGEN_ACCESSOR | 2866 #undef DECLARE_HYDROGEN_ACCESSOR | 
| 2886 #undef DECLARE_CONCRETE_INSTRUCTION | 2867 #undef DECLARE_CONCRETE_INSTRUCTION | 
| 2887 | 2868 | 
| 2888 } }  // namespace v8::int | 2869 } }  // namespace v8::int | 
| 2889 | 2870 | 
| 2890 #endif  // V8_X64_LITHIUM_X64_H_ | 2871 #endif  // V8_X64_LITHIUM_X64_H_ | 
| OLD | NEW | 
|---|