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 |