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

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

Issue 526223002: Use Chrome compatible naming for compiler specifics. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: mips Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/mips/lithium-gap-resolver-mips.h ('k') | src/mips64/lithium-codegen-mips64.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_MIPS_LITHIUM_MIPS_H_ 5 #ifndef V8_MIPS_LITHIUM_MIPS_H_
6 #define V8_MIPS_LITHIUM_MIPS_H_ 6 #define V8_MIPS_LITHIUM_MIPS_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
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 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \ 165 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \
166 virtual Opcode opcode() const V8_FINAL V8_OVERRIDE { \ 166 virtual Opcode opcode() const FINAL OVERRIDE { \
167 return LInstruction::k##type; \ 167 return LInstruction::k##type; \
168 } \ 168 } \
169 virtual void CompileToNative(LCodeGen* generator) V8_FINAL V8_OVERRIDE; \ 169 virtual void CompileToNative(LCodeGen* generator) FINAL OVERRIDE; \
170 virtual const char* Mnemonic() const V8_FINAL V8_OVERRIDE { \ 170 virtual const char* Mnemonic() const FINAL OVERRIDE { \
171 return mnemonic; \ 171 return mnemonic; \
172 } \ 172 } \
173 static L##type* cast(LInstruction* instr) { \ 173 static L##type* cast(LInstruction* instr) { \
174 DCHECK(instr->Is##type()); \ 174 DCHECK(instr->Is##type()); \
175 return reinterpret_cast<L##type*>(instr); \ 175 return reinterpret_cast<L##type*>(instr); \
176 } 176 }
177 177
178 178
179 #define DECLARE_HYDROGEN_ACCESSOR(type) \ 179 #define DECLARE_HYDROGEN_ACCESSOR(type) \
180 H##type* hydrogen() const { \ 180 H##type* hydrogen() const { \
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 int bit_field_; 280 int bit_field_;
281 }; 281 };
282 282
283 283
284 // R = number of result operands (0 or 1). 284 // R = number of result operands (0 or 1).
285 template<int R> 285 template<int R>
286 class LTemplateResultInstruction : public LInstruction { 286 class LTemplateResultInstruction : public LInstruction {
287 public: 287 public:
288 // Allow 0 or 1 output operands. 288 // Allow 0 or 1 output operands.
289 STATIC_ASSERT(R == 0 || R == 1); 289 STATIC_ASSERT(R == 0 || R == 1);
290 virtual bool HasResult() const V8_FINAL V8_OVERRIDE { 290 virtual bool HasResult() const FINAL OVERRIDE {
291 return R != 0 && result() != NULL; 291 return R != 0 && result() != NULL;
292 } 292 }
293 void set_result(LOperand* operand) { results_[0] = operand; } 293 void set_result(LOperand* operand) { results_[0] = operand; }
294 LOperand* result() const { return results_[0]; } 294 LOperand* result() const { return results_[0]; }
295 295
296 protected: 296 protected:
297 EmbeddedContainer<LOperand*, R> results_; 297 EmbeddedContainer<LOperand*, R> results_;
298 }; 298 };
299 299
300 300
301 // R = number of result operands (0 or 1). 301 // R = number of result operands (0 or 1).
302 // I = number of input operands. 302 // I = number of input operands.
303 // T = number of temporary operands. 303 // T = number of temporary operands.
304 template<int R, int I, int T> 304 template<int R, int I, int T>
305 class LTemplateInstruction : public LTemplateResultInstruction<R> { 305 class LTemplateInstruction : public LTemplateResultInstruction<R> {
306 protected: 306 protected:
307 EmbeddedContainer<LOperand*, I> inputs_; 307 EmbeddedContainer<LOperand*, I> inputs_;
308 EmbeddedContainer<LOperand*, T> temps_; 308 EmbeddedContainer<LOperand*, T> temps_;
309 309
310 private: 310 private:
311 // Iterator support. 311 // Iterator support.
312 virtual int InputCount() V8_FINAL V8_OVERRIDE { return I; } 312 virtual int InputCount() FINAL OVERRIDE { return I; }
313 virtual LOperand* InputAt(int i) V8_FINAL V8_OVERRIDE { return inputs_[i]; } 313 virtual LOperand* InputAt(int i) FINAL OVERRIDE { return inputs_[i]; }
314 314
315 virtual int TempCount() V8_FINAL V8_OVERRIDE { return T; } 315 virtual int TempCount() FINAL OVERRIDE { return T; }
316 virtual LOperand* TempAt(int i) V8_FINAL V8_OVERRIDE { return temps_[i]; } 316 virtual LOperand* TempAt(int i) FINAL OVERRIDE { return temps_[i]; }
317 }; 317 };
318 318
319 319
320 class LGap : public LTemplateInstruction<0, 0, 0> { 320 class LGap : public LTemplateInstruction<0, 0, 0> {
321 public: 321 public:
322 explicit LGap(HBasicBlock* block) 322 explicit LGap(HBasicBlock* block)
323 : block_(block) { 323 : block_(block) {
324 parallel_moves_[BEFORE] = NULL; 324 parallel_moves_[BEFORE] = NULL;
325 parallel_moves_[START] = NULL; 325 parallel_moves_[START] = NULL;
326 parallel_moves_[END] = NULL; 326 parallel_moves_[END] = NULL;
327 parallel_moves_[AFTER] = NULL; 327 parallel_moves_[AFTER] = NULL;
328 } 328 }
329 329
330 // Can't use the DECLARE-macro here because of sub-classes. 330 // Can't use the DECLARE-macro here because of sub-classes.
331 virtual bool IsGap() const V8_FINAL V8_OVERRIDE { return true; } 331 virtual bool IsGap() const FINAL OVERRIDE { return true; }
332 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 332 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
333 static LGap* cast(LInstruction* instr) { 333 static LGap* cast(LInstruction* instr) {
334 DCHECK(instr->IsGap()); 334 DCHECK(instr->IsGap());
335 return reinterpret_cast<LGap*>(instr); 335 return reinterpret_cast<LGap*>(instr);
336 } 336 }
337 337
338 bool IsRedundant() const; 338 bool IsRedundant() const;
339 339
340 HBasicBlock* block() const { return block_; } 340 HBasicBlock* block() const { return block_; }
341 341
342 enum InnerPosition { 342 enum InnerPosition {
(...skipping 15 matching lines...) Expand all
358 LParallelMove* GetParallelMove(InnerPosition pos) { 358 LParallelMove* GetParallelMove(InnerPosition pos) {
359 return parallel_moves_[pos]; 359 return parallel_moves_[pos];
360 } 360 }
361 361
362 private: 362 private:
363 LParallelMove* parallel_moves_[LAST_INNER_POSITION + 1]; 363 LParallelMove* parallel_moves_[LAST_INNER_POSITION + 1];
364 HBasicBlock* block_; 364 HBasicBlock* block_;
365 }; 365 };
366 366
367 367
368 class LInstructionGap V8_FINAL : public LGap { 368 class LInstructionGap FINAL : public LGap {
369 public: 369 public:
370 explicit LInstructionGap(HBasicBlock* block) : LGap(block) { } 370 explicit LInstructionGap(HBasicBlock* block) : LGap(block) { }
371 371
372 virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE { 372 virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE {
373 return !IsRedundant(); 373 return !IsRedundant();
374 } 374 }
375 375
376 DECLARE_CONCRETE_INSTRUCTION(InstructionGap, "gap") 376 DECLARE_CONCRETE_INSTRUCTION(InstructionGap, "gap")
377 }; 377 };
378 378
379 379
380 class LGoto V8_FINAL : public LTemplateInstruction<0, 0, 0> { 380 class LGoto FINAL : public LTemplateInstruction<0, 0, 0> {
381 public: 381 public:
382 explicit LGoto(HBasicBlock* block) : block_(block) { } 382 explicit LGoto(HBasicBlock* block) : block_(block) { }
383 383
384 virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE; 384 virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE;
385 DECLARE_CONCRETE_INSTRUCTION(Goto, "goto") 385 DECLARE_CONCRETE_INSTRUCTION(Goto, "goto")
386 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 386 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
387 virtual bool IsControl() const V8_OVERRIDE { return true; } 387 virtual bool IsControl() const OVERRIDE { return true; }
388 388
389 int block_id() const { return block_->block_id(); } 389 int block_id() const { return block_->block_id(); }
390 390
391 private: 391 private:
392 HBasicBlock* block_; 392 HBasicBlock* block_;
393 }; 393 };
394 394
395 395
396 class LLazyBailout V8_FINAL : public LTemplateInstruction<0, 0, 0> { 396 class LLazyBailout FINAL : public LTemplateInstruction<0, 0, 0> {
397 public: 397 public:
398 LLazyBailout() : gap_instructions_size_(0) { } 398 LLazyBailout() : gap_instructions_size_(0) { }
399 399
400 DECLARE_CONCRETE_INSTRUCTION(LazyBailout, "lazy-bailout") 400 DECLARE_CONCRETE_INSTRUCTION(LazyBailout, "lazy-bailout")
401 401
402 void set_gap_instructions_size(int gap_instructions_size) { 402 void set_gap_instructions_size(int gap_instructions_size) {
403 gap_instructions_size_ = gap_instructions_size; 403 gap_instructions_size_ = gap_instructions_size;
404 } 404 }
405 int gap_instructions_size() { return gap_instructions_size_; } 405 int gap_instructions_size() { return gap_instructions_size_; }
406 406
407 private: 407 private:
408 int gap_instructions_size_; 408 int gap_instructions_size_;
409 }; 409 };
410 410
411 411
412 class LDummy V8_FINAL : public LTemplateInstruction<1, 0, 0> { 412 class LDummy FINAL : public LTemplateInstruction<1, 0, 0> {
413 public: 413 public:
414 LDummy() {} 414 LDummy() {}
415 DECLARE_CONCRETE_INSTRUCTION(Dummy, "dummy") 415 DECLARE_CONCRETE_INSTRUCTION(Dummy, "dummy")
416 }; 416 };
417 417
418 418
419 class LDummyUse V8_FINAL : public LTemplateInstruction<1, 1, 0> { 419 class LDummyUse FINAL : public LTemplateInstruction<1, 1, 0> {
420 public: 420 public:
421 explicit LDummyUse(LOperand* value) { 421 explicit LDummyUse(LOperand* value) {
422 inputs_[0] = value; 422 inputs_[0] = value;
423 } 423 }
424 DECLARE_CONCRETE_INSTRUCTION(DummyUse, "dummy-use") 424 DECLARE_CONCRETE_INSTRUCTION(DummyUse, "dummy-use")
425 }; 425 };
426 426
427 427
428 class LDeoptimize V8_FINAL : public LTemplateInstruction<0, 0, 0> { 428 class LDeoptimize FINAL : public LTemplateInstruction<0, 0, 0> {
429 public: 429 public:
430 virtual bool IsControl() const V8_OVERRIDE { return true; } 430 virtual bool IsControl() const OVERRIDE { return true; }
431 DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize") 431 DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize")
432 DECLARE_HYDROGEN_ACCESSOR(Deoptimize) 432 DECLARE_HYDROGEN_ACCESSOR(Deoptimize)
433 }; 433 };
434 434
435 435
436 class LLabel V8_FINAL : public LGap { 436 class LLabel FINAL : public LGap {
437 public: 437 public:
438 explicit LLabel(HBasicBlock* block) 438 explicit LLabel(HBasicBlock* block)
439 : LGap(block), replacement_(NULL) { } 439 : LGap(block), replacement_(NULL) { }
440 440
441 virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE { 441 virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE {
442 return false; 442 return false;
443 } 443 }
444 DECLARE_CONCRETE_INSTRUCTION(Label, "label") 444 DECLARE_CONCRETE_INSTRUCTION(Label, "label")
445 445
446 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 446 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
447 447
448 int block_id() const { return block()->block_id(); } 448 int block_id() const { return block()->block_id(); }
449 bool is_loop_header() const { return block()->IsLoopHeader(); } 449 bool is_loop_header() const { return block()->IsLoopHeader(); }
450 bool is_osr_entry() const { return block()->is_osr_entry(); } 450 bool is_osr_entry() const { return block()->is_osr_entry(); }
451 Label* label() { return &label_; } 451 Label* label() { return &label_; }
452 LLabel* replacement() const { return replacement_; } 452 LLabel* replacement() const { return replacement_; }
453 void set_replacement(LLabel* label) { replacement_ = label; } 453 void set_replacement(LLabel* label) { replacement_ = label; }
454 bool HasReplacement() const { return replacement_ != NULL; } 454 bool HasReplacement() const { return replacement_ != NULL; }
455 455
456 private: 456 private:
457 Label label_; 457 Label label_;
458 LLabel* replacement_; 458 LLabel* replacement_;
459 }; 459 };
460 460
461 461
462 class LParameter V8_FINAL : public LTemplateInstruction<1, 0, 0> { 462 class LParameter FINAL : public LTemplateInstruction<1, 0, 0> {
463 public: 463 public:
464 virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE { 464 virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE {
465 return false; 465 return false;
466 } 466 }
467 DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter") 467 DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter")
468 }; 468 };
469 469
470 470
471 class LCallStub V8_FINAL : public LTemplateInstruction<1, 1, 0> { 471 class LCallStub FINAL : public LTemplateInstruction<1, 1, 0> {
472 public: 472 public:
473 explicit LCallStub(LOperand* context) { 473 explicit LCallStub(LOperand* context) {
474 inputs_[0] = context; 474 inputs_[0] = context;
475 } 475 }
476 476
477 LOperand* context() { return inputs_[0]; } 477 LOperand* context() { return inputs_[0]; }
478 478
479 DECLARE_CONCRETE_INSTRUCTION(CallStub, "call-stub") 479 DECLARE_CONCRETE_INSTRUCTION(CallStub, "call-stub")
480 DECLARE_HYDROGEN_ACCESSOR(CallStub) 480 DECLARE_HYDROGEN_ACCESSOR(CallStub)
481 }; 481 };
482 482
483 483
484 class LUnknownOSRValue V8_FINAL : public LTemplateInstruction<1, 0, 0> { 484 class LUnknownOSRValue FINAL : public LTemplateInstruction<1, 0, 0> {
485 public: 485 public:
486 virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE { 486 virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE {
487 return false; 487 return false;
488 } 488 }
489 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") 489 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value")
490 }; 490 };
491 491
492 492
493 template<int I, int T> 493 template<int I, int T>
494 class LControlInstruction : public LTemplateInstruction<0, I, T> { 494 class LControlInstruction : public LTemplateInstruction<0, I, T> {
495 public: 495 public:
496 LControlInstruction() : false_label_(NULL), true_label_(NULL) { } 496 LControlInstruction() : false_label_(NULL), true_label_(NULL) { }
497 497
498 virtual bool IsControl() const V8_FINAL V8_OVERRIDE { return true; } 498 virtual bool IsControl() const FINAL OVERRIDE { return true; }
499 499
500 int SuccessorCount() { return hydrogen()->SuccessorCount(); } 500 int SuccessorCount() { return hydrogen()->SuccessorCount(); }
501 HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); } 501 HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); }
502 502
503 int TrueDestination(LChunk* chunk) { 503 int TrueDestination(LChunk* chunk) {
504 return chunk->LookupDestination(true_block_id()); 504 return chunk->LookupDestination(true_block_id());
505 } 505 }
506 int FalseDestination(LChunk* chunk) { 506 int FalseDestination(LChunk* chunk) {
507 return chunk->LookupDestination(false_block_id()); 507 return chunk->LookupDestination(false_block_id());
508 } 508 }
(...skipping 18 matching lines...) Expand all
527 private: 527 private:
528 HControlInstruction* hydrogen() { 528 HControlInstruction* hydrogen() {
529 return HControlInstruction::cast(this->hydrogen_value()); 529 return HControlInstruction::cast(this->hydrogen_value());
530 } 530 }
531 531
532 Label* false_label_; 532 Label* false_label_;
533 Label* true_label_; 533 Label* true_label_;
534 }; 534 };
535 535
536 536
537 class LWrapReceiver V8_FINAL : public LTemplateInstruction<1, 2, 0> { 537 class LWrapReceiver FINAL : public LTemplateInstruction<1, 2, 0> {
538 public: 538 public:
539 LWrapReceiver(LOperand* receiver, LOperand* function) { 539 LWrapReceiver(LOperand* receiver, LOperand* function) {
540 inputs_[0] = receiver; 540 inputs_[0] = receiver;
541 inputs_[1] = function; 541 inputs_[1] = function;
542 } 542 }
543 543
544 DECLARE_CONCRETE_INSTRUCTION(WrapReceiver, "wrap-receiver") 544 DECLARE_CONCRETE_INSTRUCTION(WrapReceiver, "wrap-receiver")
545 DECLARE_HYDROGEN_ACCESSOR(WrapReceiver) 545 DECLARE_HYDROGEN_ACCESSOR(WrapReceiver)
546 546
547 LOperand* receiver() { return inputs_[0]; } 547 LOperand* receiver() { return inputs_[0]; }
548 LOperand* function() { return inputs_[1]; } 548 LOperand* function() { return inputs_[1]; }
549 }; 549 };
550 550
551 551
552 class LApplyArguments V8_FINAL : public LTemplateInstruction<1, 4, 0> { 552 class LApplyArguments FINAL : public LTemplateInstruction<1, 4, 0> {
553 public: 553 public:
554 LApplyArguments(LOperand* function, 554 LApplyArguments(LOperand* function,
555 LOperand* receiver, 555 LOperand* receiver,
556 LOperand* length, 556 LOperand* length,
557 LOperand* elements) { 557 LOperand* elements) {
558 inputs_[0] = function; 558 inputs_[0] = function;
559 inputs_[1] = receiver; 559 inputs_[1] = receiver;
560 inputs_[2] = length; 560 inputs_[2] = length;
561 inputs_[3] = elements; 561 inputs_[3] = elements;
562 } 562 }
563 563
564 DECLARE_CONCRETE_INSTRUCTION(ApplyArguments, "apply-arguments") 564 DECLARE_CONCRETE_INSTRUCTION(ApplyArguments, "apply-arguments")
565 565
566 LOperand* function() { return inputs_[0]; } 566 LOperand* function() { return inputs_[0]; }
567 LOperand* receiver() { return inputs_[1]; } 567 LOperand* receiver() { return inputs_[1]; }
568 LOperand* length() { return inputs_[2]; } 568 LOperand* length() { return inputs_[2]; }
569 LOperand* elements() { return inputs_[3]; } 569 LOperand* elements() { return inputs_[3]; }
570 }; 570 };
571 571
572 572
573 class LAccessArgumentsAt V8_FINAL : public LTemplateInstruction<1, 3, 0> { 573 class LAccessArgumentsAt FINAL : public LTemplateInstruction<1, 3, 0> {
574 public: 574 public:
575 LAccessArgumentsAt(LOperand* arguments, LOperand* length, LOperand* index) { 575 LAccessArgumentsAt(LOperand* arguments, LOperand* length, LOperand* index) {
576 inputs_[0] = arguments; 576 inputs_[0] = arguments;
577 inputs_[1] = length; 577 inputs_[1] = length;
578 inputs_[2] = index; 578 inputs_[2] = index;
579 } 579 }
580 580
581 DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at") 581 DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at")
582 582
583 LOperand* arguments() { return inputs_[0]; } 583 LOperand* arguments() { return inputs_[0]; }
584 LOperand* length() { return inputs_[1]; } 584 LOperand* length() { return inputs_[1]; }
585 LOperand* index() { return inputs_[2]; } 585 LOperand* index() { return inputs_[2]; }
586 586
587 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 587 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
588 }; 588 };
589 589
590 590
591 class LArgumentsLength V8_FINAL : public LTemplateInstruction<1, 1, 0> { 591 class LArgumentsLength FINAL : public LTemplateInstruction<1, 1, 0> {
592 public: 592 public:
593 explicit LArgumentsLength(LOperand* elements) { 593 explicit LArgumentsLength(LOperand* elements) {
594 inputs_[0] = elements; 594 inputs_[0] = elements;
595 } 595 }
596 596
597 LOperand* elements() { return inputs_[0]; } 597 LOperand* elements() { return inputs_[0]; }
598 598
599 DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments-length") 599 DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments-length")
600 }; 600 };
601 601
602 602
603 class LArgumentsElements V8_FINAL : public LTemplateInstruction<1, 0, 0> { 603 class LArgumentsElements FINAL : public LTemplateInstruction<1, 0, 0> {
604 public: 604 public:
605 DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements, "arguments-elements") 605 DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements, "arguments-elements")
606 DECLARE_HYDROGEN_ACCESSOR(ArgumentsElements) 606 DECLARE_HYDROGEN_ACCESSOR(ArgumentsElements)
607 }; 607 };
608 608
609 609
610 class LModByPowerOf2I V8_FINAL : public LTemplateInstruction<1, 1, 0> { 610 class LModByPowerOf2I FINAL : public LTemplateInstruction<1, 1, 0> {
611 public: 611 public:
612 LModByPowerOf2I(LOperand* dividend, int32_t divisor) { 612 LModByPowerOf2I(LOperand* dividend, int32_t divisor) {
613 inputs_[0] = dividend; 613 inputs_[0] = dividend;
614 divisor_ = divisor; 614 divisor_ = divisor;
615 } 615 }
616 616
617 LOperand* dividend() { return inputs_[0]; } 617 LOperand* dividend() { return inputs_[0]; }
618 int32_t divisor() const { return divisor_; } 618 int32_t divisor() const { return divisor_; }
619 619
620 DECLARE_CONCRETE_INSTRUCTION(ModByPowerOf2I, "mod-by-power-of-2-i") 620 DECLARE_CONCRETE_INSTRUCTION(ModByPowerOf2I, "mod-by-power-of-2-i")
621 DECLARE_HYDROGEN_ACCESSOR(Mod) 621 DECLARE_HYDROGEN_ACCESSOR(Mod)
622 622
623 private: 623 private:
624 int32_t divisor_; 624 int32_t divisor_;
625 }; 625 };
626 626
627 627
628 class LModByConstI V8_FINAL : public LTemplateInstruction<1, 1, 0> { 628 class LModByConstI FINAL : public LTemplateInstruction<1, 1, 0> {
629 public: 629 public:
630 LModByConstI(LOperand* dividend, int32_t divisor) { 630 LModByConstI(LOperand* dividend, int32_t divisor) {
631 inputs_[0] = dividend; 631 inputs_[0] = dividend;
632 divisor_ = divisor; 632 divisor_ = divisor;
633 } 633 }
634 634
635 LOperand* dividend() { return inputs_[0]; } 635 LOperand* dividend() { return inputs_[0]; }
636 int32_t divisor() const { return divisor_; } 636 int32_t divisor() const { return divisor_; }
637 637
638 DECLARE_CONCRETE_INSTRUCTION(ModByConstI, "mod-by-const-i") 638 DECLARE_CONCRETE_INSTRUCTION(ModByConstI, "mod-by-const-i")
639 DECLARE_HYDROGEN_ACCESSOR(Mod) 639 DECLARE_HYDROGEN_ACCESSOR(Mod)
640 640
641 private: 641 private:
642 int32_t divisor_; 642 int32_t divisor_;
643 }; 643 };
644 644
645 645
646 class LModI V8_FINAL : public LTemplateInstruction<1, 2, 3> { 646 class LModI FINAL : public LTemplateInstruction<1, 2, 3> {
647 public: 647 public:
648 LModI(LOperand* left, 648 LModI(LOperand* left,
649 LOperand* right) { 649 LOperand* right) {
650 inputs_[0] = left; 650 inputs_[0] = left;
651 inputs_[1] = right; 651 inputs_[1] = right;
652 } 652 }
653 653
654 LOperand* left() { return inputs_[0]; } 654 LOperand* left() { return inputs_[0]; }
655 LOperand* right() { return inputs_[1]; } 655 LOperand* right() { return inputs_[1]; }
656 656
657 DECLARE_CONCRETE_INSTRUCTION(ModI, "mod-i") 657 DECLARE_CONCRETE_INSTRUCTION(ModI, "mod-i")
658 DECLARE_HYDROGEN_ACCESSOR(Mod) 658 DECLARE_HYDROGEN_ACCESSOR(Mod)
659 }; 659 };
660 660
661 661
662 class LDivByPowerOf2I V8_FINAL : public LTemplateInstruction<1, 1, 0> { 662 class LDivByPowerOf2I FINAL : public LTemplateInstruction<1, 1, 0> {
663 public: 663 public:
664 LDivByPowerOf2I(LOperand* dividend, int32_t divisor) { 664 LDivByPowerOf2I(LOperand* dividend, int32_t divisor) {
665 inputs_[0] = dividend; 665 inputs_[0] = dividend;
666 divisor_ = divisor; 666 divisor_ = divisor;
667 } 667 }
668 668
669 LOperand* dividend() { return inputs_[0]; } 669 LOperand* dividend() { return inputs_[0]; }
670 int32_t divisor() const { return divisor_; } 670 int32_t divisor() const { return divisor_; }
671 671
672 DECLARE_CONCRETE_INSTRUCTION(DivByPowerOf2I, "div-by-power-of-2-i") 672 DECLARE_CONCRETE_INSTRUCTION(DivByPowerOf2I, "div-by-power-of-2-i")
673 DECLARE_HYDROGEN_ACCESSOR(Div) 673 DECLARE_HYDROGEN_ACCESSOR(Div)
674 674
675 private: 675 private:
676 int32_t divisor_; 676 int32_t divisor_;
677 }; 677 };
678 678
679 679
680 class LDivByConstI V8_FINAL : public LTemplateInstruction<1, 1, 0> { 680 class LDivByConstI FINAL : public LTemplateInstruction<1, 1, 0> {
681 public: 681 public:
682 LDivByConstI(LOperand* dividend, int32_t divisor) { 682 LDivByConstI(LOperand* dividend, int32_t divisor) {
683 inputs_[0] = dividend; 683 inputs_[0] = dividend;
684 divisor_ = divisor; 684 divisor_ = divisor;
685 } 685 }
686 686
687 LOperand* dividend() { return inputs_[0]; } 687 LOperand* dividend() { return inputs_[0]; }
688 int32_t divisor() const { return divisor_; } 688 int32_t divisor() const { return divisor_; }
689 689
690 DECLARE_CONCRETE_INSTRUCTION(DivByConstI, "div-by-const-i") 690 DECLARE_CONCRETE_INSTRUCTION(DivByConstI, "div-by-const-i")
691 DECLARE_HYDROGEN_ACCESSOR(Div) 691 DECLARE_HYDROGEN_ACCESSOR(Div)
692 692
693 private: 693 private:
694 int32_t divisor_; 694 int32_t divisor_;
695 }; 695 };
696 696
697 697
698 class LDivI V8_FINAL : public LTemplateInstruction<1, 2, 1> { 698 class LDivI FINAL : public LTemplateInstruction<1, 2, 1> {
699 public: 699 public:
700 LDivI(LOperand* dividend, LOperand* divisor, LOperand* temp) { 700 LDivI(LOperand* dividend, LOperand* divisor, LOperand* temp) {
701 inputs_[0] = dividend; 701 inputs_[0] = dividend;
702 inputs_[1] = divisor; 702 inputs_[1] = divisor;
703 temps_[0] = temp; 703 temps_[0] = temp;
704 } 704 }
705 705
706 LOperand* dividend() { return inputs_[0]; } 706 LOperand* dividend() { return inputs_[0]; }
707 LOperand* divisor() { return inputs_[1]; } 707 LOperand* divisor() { return inputs_[1]; }
708 LOperand* temp() { return temps_[0]; } 708 LOperand* temp() { return temps_[0]; }
709 709
710 DECLARE_CONCRETE_INSTRUCTION(DivI, "div-i") 710 DECLARE_CONCRETE_INSTRUCTION(DivI, "div-i")
711 DECLARE_HYDROGEN_ACCESSOR(BinaryOperation) 711 DECLARE_HYDROGEN_ACCESSOR(BinaryOperation)
712 }; 712 };
713 713
714 714
715 class LFlooringDivByPowerOf2I V8_FINAL : public LTemplateInstruction<1, 1, 0> { 715 class LFlooringDivByPowerOf2I FINAL : public LTemplateInstruction<1, 1, 0> {
716 public: 716 public:
717 LFlooringDivByPowerOf2I(LOperand* dividend, int32_t divisor) { 717 LFlooringDivByPowerOf2I(LOperand* dividend, int32_t divisor) {
718 inputs_[0] = dividend; 718 inputs_[0] = dividend;
719 divisor_ = divisor; 719 divisor_ = divisor;
720 } 720 }
721 721
722 LOperand* dividend() { return inputs_[0]; } 722 LOperand* dividend() { return inputs_[0]; }
723 int32_t divisor() { return divisor_; } 723 int32_t divisor() { return divisor_; }
724 724
725 DECLARE_CONCRETE_INSTRUCTION(FlooringDivByPowerOf2I, 725 DECLARE_CONCRETE_INSTRUCTION(FlooringDivByPowerOf2I,
726 "flooring-div-by-power-of-2-i") 726 "flooring-div-by-power-of-2-i")
727 DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 727 DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv)
728 728
729 private: 729 private:
730 int32_t divisor_; 730 int32_t divisor_;
731 }; 731 };
732 732
733 733
734 class LFlooringDivByConstI V8_FINAL : public LTemplateInstruction<1, 1, 2> { 734 class LFlooringDivByConstI FINAL : public LTemplateInstruction<1, 1, 2> {
735 public: 735 public:
736 LFlooringDivByConstI(LOperand* dividend, int32_t divisor, LOperand* temp) { 736 LFlooringDivByConstI(LOperand* dividend, int32_t divisor, LOperand* temp) {
737 inputs_[0] = dividend; 737 inputs_[0] = dividend;
738 divisor_ = divisor; 738 divisor_ = divisor;
739 temps_[0] = temp; 739 temps_[0] = temp;
740 } 740 }
741 741
742 LOperand* dividend() { return inputs_[0]; } 742 LOperand* dividend() { return inputs_[0]; }
743 int32_t divisor() const { return divisor_; } 743 int32_t divisor() const { return divisor_; }
744 LOperand* temp() { return temps_[0]; } 744 LOperand* temp() { return temps_[0]; }
745 745
746 DECLARE_CONCRETE_INSTRUCTION(FlooringDivByConstI, "flooring-div-by-const-i") 746 DECLARE_CONCRETE_INSTRUCTION(FlooringDivByConstI, "flooring-div-by-const-i")
747 DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 747 DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv)
748 748
749 private: 749 private:
750 int32_t divisor_; 750 int32_t divisor_;
751 }; 751 };
752 752
753 753
754 class LFlooringDivI V8_FINAL : public LTemplateInstruction<1, 2, 0> { 754 class LFlooringDivI FINAL : public LTemplateInstruction<1, 2, 0> {
755 public: 755 public:
756 LFlooringDivI(LOperand* dividend, LOperand* divisor) { 756 LFlooringDivI(LOperand* dividend, LOperand* divisor) {
757 inputs_[0] = dividend; 757 inputs_[0] = dividend;
758 inputs_[1] = divisor; 758 inputs_[1] = divisor;
759 } 759 }
760 760
761 LOperand* dividend() { return inputs_[0]; } 761 LOperand* dividend() { return inputs_[0]; }
762 LOperand* divisor() { return inputs_[1]; } 762 LOperand* divisor() { return inputs_[1]; }
763 763
764 DECLARE_CONCRETE_INSTRUCTION(FlooringDivI, "flooring-div-i") 764 DECLARE_CONCRETE_INSTRUCTION(FlooringDivI, "flooring-div-i")
765 DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv) 765 DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv)
766 }; 766 };
767 767
768 768
769 class LMulI V8_FINAL : public LTemplateInstruction<1, 2, 0> { 769 class LMulI FINAL : public LTemplateInstruction<1, 2, 0> {
770 public: 770 public:
771 LMulI(LOperand* left, LOperand* right) { 771 LMulI(LOperand* left, LOperand* right) {
772 inputs_[0] = left; 772 inputs_[0] = left;
773 inputs_[1] = right; 773 inputs_[1] = right;
774 } 774 }
775 775
776 LOperand* left() { return inputs_[0]; } 776 LOperand* left() { return inputs_[0]; }
777 LOperand* right() { return inputs_[1]; } 777 LOperand* right() { return inputs_[1]; }
778 778
779 DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") 779 DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i")
780 DECLARE_HYDROGEN_ACCESSOR(Mul) 780 DECLARE_HYDROGEN_ACCESSOR(Mul)
781 }; 781 };
782 782
783 783
784 // Instruction for computing multiplier * multiplicand + addend. 784 // Instruction for computing multiplier * multiplicand + addend.
785 class LMultiplyAddD V8_FINAL : public LTemplateInstruction<1, 3, 0> { 785 class LMultiplyAddD FINAL : public LTemplateInstruction<1, 3, 0> {
786 public: 786 public:
787 LMultiplyAddD(LOperand* addend, LOperand* multiplier, 787 LMultiplyAddD(LOperand* addend, LOperand* multiplier,
788 LOperand* multiplicand) { 788 LOperand* multiplicand) {
789 inputs_[0] = addend; 789 inputs_[0] = addend;
790 inputs_[1] = multiplier; 790 inputs_[1] = multiplier;
791 inputs_[2] = multiplicand; 791 inputs_[2] = multiplicand;
792 } 792 }
793 793
794 LOperand* addend() { return inputs_[0]; } 794 LOperand* addend() { return inputs_[0]; }
795 LOperand* multiplier() { return inputs_[1]; } 795 LOperand* multiplier() { return inputs_[1]; }
796 LOperand* multiplicand() { return inputs_[2]; } 796 LOperand* multiplicand() { return inputs_[2]; }
797 797
798 DECLARE_CONCRETE_INSTRUCTION(MultiplyAddD, "multiply-add-d") 798 DECLARE_CONCRETE_INSTRUCTION(MultiplyAddD, "multiply-add-d")
799 }; 799 };
800 800
801 801
802 class LDebugBreak V8_FINAL : public LTemplateInstruction<0, 0, 0> { 802 class LDebugBreak FINAL : public LTemplateInstruction<0, 0, 0> {
803 public: 803 public:
804 DECLARE_CONCRETE_INSTRUCTION(DebugBreak, "break") 804 DECLARE_CONCRETE_INSTRUCTION(DebugBreak, "break")
805 }; 805 };
806 806
807 807
808 class LCompareNumericAndBranch V8_FINAL : public LControlInstruction<2, 0> { 808 class LCompareNumericAndBranch FINAL : public LControlInstruction<2, 0> {
809 public: 809 public:
810 LCompareNumericAndBranch(LOperand* left, LOperand* right) { 810 LCompareNumericAndBranch(LOperand* left, LOperand* right) {
811 inputs_[0] = left; 811 inputs_[0] = left;
812 inputs_[1] = right; 812 inputs_[1] = right;
813 } 813 }
814 814
815 LOperand* left() { return inputs_[0]; } 815 LOperand* left() { return inputs_[0]; }
816 LOperand* right() { return inputs_[1]; } 816 LOperand* right() { return inputs_[1]; }
817 817
818 DECLARE_CONCRETE_INSTRUCTION(CompareNumericAndBranch, 818 DECLARE_CONCRETE_INSTRUCTION(CompareNumericAndBranch,
819 "compare-numeric-and-branch") 819 "compare-numeric-and-branch")
820 DECLARE_HYDROGEN_ACCESSOR(CompareNumericAndBranch) 820 DECLARE_HYDROGEN_ACCESSOR(CompareNumericAndBranch)
821 821
822 Token::Value op() const { return hydrogen()->token(); } 822 Token::Value op() const { return hydrogen()->token(); }
823 bool is_double() const { 823 bool is_double() const {
824 return hydrogen()->representation().IsDouble(); 824 return hydrogen()->representation().IsDouble();
825 } 825 }
826 826
827 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 827 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
828 }; 828 };
829 829
830 830
831 class LMathFloor V8_FINAL : public LTemplateInstruction<1, 1, 1> { 831 class LMathFloor FINAL : public LTemplateInstruction<1, 1, 1> {
832 public: 832 public:
833 LMathFloor(LOperand* value, LOperand* temp) { 833 LMathFloor(LOperand* value, LOperand* temp) {
834 inputs_[0] = value; 834 inputs_[0] = value;
835 temps_[0] = temp; 835 temps_[0] = temp;
836 } 836 }
837 837
838 LOperand* value() { return inputs_[0]; } 838 LOperand* value() { return inputs_[0]; }
839 LOperand* temp() { return temps_[0]; } 839 LOperand* temp() { return temps_[0]; }
840 840
841 DECLARE_CONCRETE_INSTRUCTION(MathFloor, "math-floor") 841 DECLARE_CONCRETE_INSTRUCTION(MathFloor, "math-floor")
842 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 842 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
843 }; 843 };
844 844
845 845
846 class LMathRound V8_FINAL : public LTemplateInstruction<1, 1, 1> { 846 class LMathRound FINAL : public LTemplateInstruction<1, 1, 1> {
847 public: 847 public:
848 LMathRound(LOperand* value, LOperand* temp) { 848 LMathRound(LOperand* value, LOperand* temp) {
849 inputs_[0] = value; 849 inputs_[0] = value;
850 temps_[0] = temp; 850 temps_[0] = temp;
851 } 851 }
852 852
853 LOperand* value() { return inputs_[0]; } 853 LOperand* value() { return inputs_[0]; }
854 LOperand* temp() { return temps_[0]; } 854 LOperand* temp() { return temps_[0]; }
855 855
856 DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round") 856 DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round")
857 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 857 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
858 }; 858 };
859 859
860 860
861 class LMathFround V8_FINAL : public LTemplateInstruction<1, 1, 0> { 861 class LMathFround FINAL : public LTemplateInstruction<1, 1, 0> {
862 public: 862 public:
863 explicit LMathFround(LOperand* value) { inputs_[0] = value; } 863 explicit LMathFround(LOperand* value) { inputs_[0] = value; }
864 864
865 LOperand* value() { return inputs_[0]; } 865 LOperand* value() { return inputs_[0]; }
866 866
867 DECLARE_CONCRETE_INSTRUCTION(MathFround, "math-fround") 867 DECLARE_CONCRETE_INSTRUCTION(MathFround, "math-fround")
868 }; 868 };
869 869
870 870
871 class LMathAbs V8_FINAL : public LTemplateInstruction<1, 2, 0> { 871 class LMathAbs FINAL : public LTemplateInstruction<1, 2, 0> {
872 public: 872 public:
873 LMathAbs(LOperand* context, LOperand* value) { 873 LMathAbs(LOperand* context, LOperand* value) {
874 inputs_[1] = context; 874 inputs_[1] = context;
875 inputs_[0] = value; 875 inputs_[0] = value;
876 } 876 }
877 877
878 LOperand* context() { return inputs_[1]; } 878 LOperand* context() { return inputs_[1]; }
879 LOperand* value() { return inputs_[0]; } 879 LOperand* value() { return inputs_[0]; }
880 880
881 DECLARE_CONCRETE_INSTRUCTION(MathAbs, "math-abs") 881 DECLARE_CONCRETE_INSTRUCTION(MathAbs, "math-abs")
882 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 882 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
883 }; 883 };
884 884
885 885
886 class LMathLog V8_FINAL : public LTemplateInstruction<1, 1, 0> { 886 class LMathLog FINAL : public LTemplateInstruction<1, 1, 0> {
887 public: 887 public:
888 explicit LMathLog(LOperand* value) { 888 explicit LMathLog(LOperand* value) {
889 inputs_[0] = value; 889 inputs_[0] = value;
890 } 890 }
891 891
892 LOperand* value() { return inputs_[0]; } 892 LOperand* value() { return inputs_[0]; }
893 893
894 DECLARE_CONCRETE_INSTRUCTION(MathLog, "math-log") 894 DECLARE_CONCRETE_INSTRUCTION(MathLog, "math-log")
895 }; 895 };
896 896
897 897
898 class LMathClz32 V8_FINAL : public LTemplateInstruction<1, 1, 0> { 898 class LMathClz32 FINAL : public LTemplateInstruction<1, 1, 0> {
899 public: 899 public:
900 explicit LMathClz32(LOperand* value) { 900 explicit LMathClz32(LOperand* value) {
901 inputs_[0] = value; 901 inputs_[0] = value;
902 } 902 }
903 903
904 LOperand* value() { return inputs_[0]; } 904 LOperand* value() { return inputs_[0]; }
905 905
906 DECLARE_CONCRETE_INSTRUCTION(MathClz32, "math-clz32") 906 DECLARE_CONCRETE_INSTRUCTION(MathClz32, "math-clz32")
907 }; 907 };
908 908
909 909
910 class LMathExp V8_FINAL : public LTemplateInstruction<1, 1, 3> { 910 class LMathExp FINAL : public LTemplateInstruction<1, 1, 3> {
911 public: 911 public:
912 LMathExp(LOperand* value, 912 LMathExp(LOperand* value,
913 LOperand* double_temp, 913 LOperand* double_temp,
914 LOperand* temp1, 914 LOperand* temp1,
915 LOperand* temp2) { 915 LOperand* temp2) {
916 inputs_[0] = value; 916 inputs_[0] = value;
917 temps_[0] = temp1; 917 temps_[0] = temp1;
918 temps_[1] = temp2; 918 temps_[1] = temp2;
919 temps_[2] = double_temp; 919 temps_[2] = double_temp;
920 ExternalReference::InitializeMathExpData(); 920 ExternalReference::InitializeMathExpData();
921 } 921 }
922 922
923 LOperand* value() { return inputs_[0]; } 923 LOperand* value() { return inputs_[0]; }
924 LOperand* temp1() { return temps_[0]; } 924 LOperand* temp1() { return temps_[0]; }
925 LOperand* temp2() { return temps_[1]; } 925 LOperand* temp2() { return temps_[1]; }
926 LOperand* double_temp() { return temps_[2]; } 926 LOperand* double_temp() { return temps_[2]; }
927 927
928 DECLARE_CONCRETE_INSTRUCTION(MathExp, "math-exp") 928 DECLARE_CONCRETE_INSTRUCTION(MathExp, "math-exp")
929 }; 929 };
930 930
931 931
932 class LMathSqrt V8_FINAL : public LTemplateInstruction<1, 1, 0> { 932 class LMathSqrt FINAL : public LTemplateInstruction<1, 1, 0> {
933 public: 933 public:
934 explicit LMathSqrt(LOperand* value) { 934 explicit LMathSqrt(LOperand* value) {
935 inputs_[0] = value; 935 inputs_[0] = value;
936 } 936 }
937 937
938 LOperand* value() { return inputs_[0]; } 938 LOperand* value() { return inputs_[0]; }
939 939
940 DECLARE_CONCRETE_INSTRUCTION(MathSqrt, "math-sqrt") 940 DECLARE_CONCRETE_INSTRUCTION(MathSqrt, "math-sqrt")
941 }; 941 };
942 942
943 943
944 class LMathPowHalf V8_FINAL : public LTemplateInstruction<1, 1, 1> { 944 class LMathPowHalf FINAL : public LTemplateInstruction<1, 1, 1> {
945 public: 945 public:
946 LMathPowHalf(LOperand* value, LOperand* temp) { 946 LMathPowHalf(LOperand* value, LOperand* temp) {
947 inputs_[0] = value; 947 inputs_[0] = value;
948 temps_[0] = temp; 948 temps_[0] = temp;
949 } 949 }
950 950
951 LOperand* value() { return inputs_[0]; } 951 LOperand* value() { return inputs_[0]; }
952 LOperand* temp() { return temps_[0]; } 952 LOperand* temp() { return temps_[0]; }
953 953
954 DECLARE_CONCRETE_INSTRUCTION(MathPowHalf, "math-pow-half") 954 DECLARE_CONCRETE_INSTRUCTION(MathPowHalf, "math-pow-half")
955 }; 955 };
956 956
957 957
958 class LCmpObjectEqAndBranch V8_FINAL : public LControlInstruction<2, 0> { 958 class LCmpObjectEqAndBranch FINAL : public LControlInstruction<2, 0> {
959 public: 959 public:
960 LCmpObjectEqAndBranch(LOperand* left, LOperand* right) { 960 LCmpObjectEqAndBranch(LOperand* left, LOperand* right) {
961 inputs_[0] = left; 961 inputs_[0] = left;
962 inputs_[1] = right; 962 inputs_[1] = right;
963 } 963 }
964 964
965 LOperand* left() { return inputs_[0]; } 965 LOperand* left() { return inputs_[0]; }
966 LOperand* right() { return inputs_[1]; } 966 LOperand* right() { return inputs_[1]; }
967 967
968 DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch, "cmp-object-eq-and-branch") 968 DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch, "cmp-object-eq-and-branch")
969 DECLARE_HYDROGEN_ACCESSOR(CompareObjectEqAndBranch) 969 DECLARE_HYDROGEN_ACCESSOR(CompareObjectEqAndBranch)
970 }; 970 };
971 971
972 972
973 class LCmpHoleAndBranch V8_FINAL : public LControlInstruction<1, 0> { 973 class LCmpHoleAndBranch FINAL : public LControlInstruction<1, 0> {
974 public: 974 public:
975 explicit LCmpHoleAndBranch(LOperand* object) { 975 explicit LCmpHoleAndBranch(LOperand* object) {
976 inputs_[0] = object; 976 inputs_[0] = object;
977 } 977 }
978 978
979 LOperand* object() { return inputs_[0]; } 979 LOperand* object() { return inputs_[0]; }
980 980
981 DECLARE_CONCRETE_INSTRUCTION(CmpHoleAndBranch, "cmp-hole-and-branch") 981 DECLARE_CONCRETE_INSTRUCTION(CmpHoleAndBranch, "cmp-hole-and-branch")
982 DECLARE_HYDROGEN_ACCESSOR(CompareHoleAndBranch) 982 DECLARE_HYDROGEN_ACCESSOR(CompareHoleAndBranch)
983 }; 983 };
984 984
985 985
986 class LCompareMinusZeroAndBranch V8_FINAL : public LControlInstruction<1, 1> { 986 class LCompareMinusZeroAndBranch FINAL : public LControlInstruction<1, 1> {
987 public: 987 public:
988 LCompareMinusZeroAndBranch(LOperand* value, LOperand* temp) { 988 LCompareMinusZeroAndBranch(LOperand* value, LOperand* temp) {
989 inputs_[0] = value; 989 inputs_[0] = value;
990 temps_[0] = temp; 990 temps_[0] = temp;
991 } 991 }
992 992
993 LOperand* value() { return inputs_[0]; } 993 LOperand* value() { return inputs_[0]; }
994 LOperand* temp() { return temps_[0]; } 994 LOperand* temp() { return temps_[0]; }
995 995
996 DECLARE_CONCRETE_INSTRUCTION(CompareMinusZeroAndBranch, 996 DECLARE_CONCRETE_INSTRUCTION(CompareMinusZeroAndBranch,
997 "cmp-minus-zero-and-branch") 997 "cmp-minus-zero-and-branch")
998 DECLARE_HYDROGEN_ACCESSOR(CompareMinusZeroAndBranch) 998 DECLARE_HYDROGEN_ACCESSOR(CompareMinusZeroAndBranch)
999 }; 999 };
1000 1000
1001 1001
1002 class LIsObjectAndBranch V8_FINAL : public LControlInstruction<1, 1> { 1002 class LIsObjectAndBranch FINAL : public LControlInstruction<1, 1> {
1003 public: 1003 public:
1004 LIsObjectAndBranch(LOperand* value, LOperand* temp) { 1004 LIsObjectAndBranch(LOperand* value, LOperand* temp) {
1005 inputs_[0] = value; 1005 inputs_[0] = value;
1006 temps_[0] = temp; 1006 temps_[0] = temp;
1007 } 1007 }
1008 1008
1009 LOperand* value() { return inputs_[0]; } 1009 LOperand* value() { return inputs_[0]; }
1010 LOperand* temp() { return temps_[0]; } 1010 LOperand* temp() { return temps_[0]; }
1011 1011
1012 DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") 1012 DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch")
1013 DECLARE_HYDROGEN_ACCESSOR(IsObjectAndBranch) 1013 DECLARE_HYDROGEN_ACCESSOR(IsObjectAndBranch)
1014 1014
1015 virtual void PrintDataTo(StringStream* stream); 1015 virtual void PrintDataTo(StringStream* stream);
1016 }; 1016 };
1017 1017
1018 1018
1019 class LIsStringAndBranch V8_FINAL : public LControlInstruction<1, 1> { 1019 class LIsStringAndBranch FINAL : public LControlInstruction<1, 1> {
1020 public: 1020 public:
1021 LIsStringAndBranch(LOperand* value, LOperand* temp) { 1021 LIsStringAndBranch(LOperand* value, LOperand* temp) {
1022 inputs_[0] = value; 1022 inputs_[0] = value;
1023 temps_[0] = temp; 1023 temps_[0] = temp;
1024 } 1024 }
1025 1025
1026 LOperand* value() { return inputs_[0]; } 1026 LOperand* value() { return inputs_[0]; }
1027 LOperand* temp() { return temps_[0]; } 1027 LOperand* temp() { return temps_[0]; }
1028 1028
1029 DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch, "is-string-and-branch") 1029 DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch, "is-string-and-branch")
1030 DECLARE_HYDROGEN_ACCESSOR(IsStringAndBranch) 1030 DECLARE_HYDROGEN_ACCESSOR(IsStringAndBranch)
1031 1031
1032 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1032 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
1033 }; 1033 };
1034 1034
1035 1035
1036 class LIsSmiAndBranch V8_FINAL : public LControlInstruction<1, 0> { 1036 class LIsSmiAndBranch FINAL : public LControlInstruction<1, 0> {
1037 public: 1037 public:
1038 explicit LIsSmiAndBranch(LOperand* value) { 1038 explicit LIsSmiAndBranch(LOperand* value) {
1039 inputs_[0] = value; 1039 inputs_[0] = value;
1040 } 1040 }
1041 1041
1042 LOperand* value() { return inputs_[0]; } 1042 LOperand* value() { return inputs_[0]; }
1043 1043
1044 DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") 1044 DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch")
1045 DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch) 1045 DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch)
1046 1046
1047 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1047 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
1048 }; 1048 };
1049 1049
1050 1050
1051 class LIsUndetectableAndBranch V8_FINAL : public LControlInstruction<1, 1> { 1051 class LIsUndetectableAndBranch FINAL : public LControlInstruction<1, 1> {
1052 public: 1052 public:
1053 explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) { 1053 explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) {
1054 inputs_[0] = value; 1054 inputs_[0] = value;
1055 temps_[0] = temp; 1055 temps_[0] = temp;
1056 } 1056 }
1057 1057
1058 LOperand* value() { return inputs_[0]; } 1058 LOperand* value() { return inputs_[0]; }
1059 LOperand* temp() { return temps_[0]; } 1059 LOperand* temp() { return temps_[0]; }
1060 1060
1061 DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, 1061 DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch,
1062 "is-undetectable-and-branch") 1062 "is-undetectable-and-branch")
1063 DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch) 1063 DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch)
1064 1064
1065 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1065 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
1066 }; 1066 };
1067 1067
1068 1068
1069 class LStringCompareAndBranch V8_FINAL : public LControlInstruction<3, 0> { 1069 class LStringCompareAndBranch FINAL : public LControlInstruction<3, 0> {
1070 public: 1070 public:
1071 LStringCompareAndBranch(LOperand* context, LOperand* left, LOperand* right) { 1071 LStringCompareAndBranch(LOperand* context, LOperand* left, LOperand* right) {
1072 inputs_[0] = context; 1072 inputs_[0] = context;
1073 inputs_[1] = left; 1073 inputs_[1] = left;
1074 inputs_[2] = right; 1074 inputs_[2] = right;
1075 } 1075 }
1076 1076
1077 LOperand* context() { return inputs_[0]; } 1077 LOperand* context() { return inputs_[0]; }
1078 LOperand* left() { return inputs_[1]; } 1078 LOperand* left() { return inputs_[1]; }
1079 LOperand* right() { return inputs_[2]; } 1079 LOperand* right() { return inputs_[2]; }
1080 1080
1081 DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch, 1081 DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch,
1082 "string-compare-and-branch") 1082 "string-compare-and-branch")
1083 DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch) 1083 DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch)
1084 1084
1085 Token::Value op() const { return hydrogen()->token(); } 1085 Token::Value op() const { return hydrogen()->token(); }
1086 1086
1087 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1087 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
1088 }; 1088 };
1089 1089
1090 1090
1091 class LHasInstanceTypeAndBranch V8_FINAL : public LControlInstruction<1, 0> { 1091 class LHasInstanceTypeAndBranch FINAL : public LControlInstruction<1, 0> {
1092 public: 1092 public:
1093 explicit LHasInstanceTypeAndBranch(LOperand* value) { 1093 explicit LHasInstanceTypeAndBranch(LOperand* value) {
1094 inputs_[0] = value; 1094 inputs_[0] = value;
1095 } 1095 }
1096 1096
1097 LOperand* value() { return inputs_[0]; } 1097 LOperand* value() { return inputs_[0]; }
1098 1098
1099 DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, 1099 DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch,
1100 "has-instance-type-and-branch") 1100 "has-instance-type-and-branch")
1101 DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch) 1101 DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch)
1102 1102
1103 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1103 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
1104 }; 1104 };
1105 1105
1106 1106
1107 class LGetCachedArrayIndex V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1107 class LGetCachedArrayIndex FINAL : public LTemplateInstruction<1, 1, 0> {
1108 public: 1108 public:
1109 explicit LGetCachedArrayIndex(LOperand* value) { 1109 explicit LGetCachedArrayIndex(LOperand* value) {
1110 inputs_[0] = value; 1110 inputs_[0] = value;
1111 } 1111 }
1112 1112
1113 LOperand* value() { return inputs_[0]; } 1113 LOperand* value() { return inputs_[0]; }
1114 1114
1115 DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index") 1115 DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index")
1116 DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex) 1116 DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex)
1117 }; 1117 };
1118 1118
1119 1119
1120 class LHasCachedArrayIndexAndBranch V8_FINAL 1120 class LHasCachedArrayIndexAndBranch FINAL
1121 : public LControlInstruction<1, 0> { 1121 : public LControlInstruction<1, 0> {
1122 public: 1122 public:
1123 explicit LHasCachedArrayIndexAndBranch(LOperand* value) { 1123 explicit LHasCachedArrayIndexAndBranch(LOperand* value) {
1124 inputs_[0] = value; 1124 inputs_[0] = value;
1125 } 1125 }
1126 1126
1127 LOperand* value() { return inputs_[0]; } 1127 LOperand* value() { return inputs_[0]; }
1128 1128
1129 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, 1129 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch,
1130 "has-cached-array-index-and-branch") 1130 "has-cached-array-index-and-branch")
1131 DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndexAndBranch) 1131 DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndexAndBranch)
1132 1132
1133 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1133 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
1134 }; 1134 };
1135 1135
1136 1136
1137 class LClassOfTestAndBranch V8_FINAL : public LControlInstruction<1, 1> { 1137 class LClassOfTestAndBranch FINAL : public LControlInstruction<1, 1> {
1138 public: 1138 public:
1139 LClassOfTestAndBranch(LOperand* value, LOperand* temp) { 1139 LClassOfTestAndBranch(LOperand* value, LOperand* temp) {
1140 inputs_[0] = value; 1140 inputs_[0] = value;
1141 temps_[0] = temp; 1141 temps_[0] = temp;
1142 } 1142 }
1143 1143
1144 LOperand* value() { return inputs_[0]; } 1144 LOperand* value() { return inputs_[0]; }
1145 LOperand* temp() { return temps_[0]; } 1145 LOperand* temp() { return temps_[0]; }
1146 1146
1147 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, 1147 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch,
1148 "class-of-test-and-branch") 1148 "class-of-test-and-branch")
1149 DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch) 1149 DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch)
1150 1150
1151 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1151 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
1152 }; 1152 };
1153 1153
1154 1154
1155 class LCmpT V8_FINAL : public LTemplateInstruction<1, 3, 0> { 1155 class LCmpT FINAL : public LTemplateInstruction<1, 3, 0> {
1156 public: 1156 public:
1157 LCmpT(LOperand* context, LOperand* left, LOperand* right) { 1157 LCmpT(LOperand* context, LOperand* left, LOperand* right) {
1158 inputs_[0] = context; 1158 inputs_[0] = context;
1159 inputs_[1] = left; 1159 inputs_[1] = left;
1160 inputs_[2] = right; 1160 inputs_[2] = right;
1161 } 1161 }
1162 1162
1163 LOperand* context() { return inputs_[0]; } 1163 LOperand* context() { return inputs_[0]; }
1164 LOperand* left() { return inputs_[1]; } 1164 LOperand* left() { return inputs_[1]; }
1165 LOperand* right() { return inputs_[2]; } 1165 LOperand* right() { return inputs_[2]; }
1166 1166
1167 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") 1167 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t")
1168 DECLARE_HYDROGEN_ACCESSOR(CompareGeneric) 1168 DECLARE_HYDROGEN_ACCESSOR(CompareGeneric)
1169 1169
1170 Token::Value op() const { return hydrogen()->token(); } 1170 Token::Value op() const { return hydrogen()->token(); }
1171 }; 1171 };
1172 1172
1173 1173
1174 class LInstanceOf V8_FINAL : public LTemplateInstruction<1, 3, 0> { 1174 class LInstanceOf FINAL : public LTemplateInstruction<1, 3, 0> {
1175 public: 1175 public:
1176 LInstanceOf(LOperand* context, LOperand* left, LOperand* right) { 1176 LInstanceOf(LOperand* context, LOperand* left, LOperand* right) {
1177 inputs_[0] = context; 1177 inputs_[0] = context;
1178 inputs_[1] = left; 1178 inputs_[1] = left;
1179 inputs_[2] = right; 1179 inputs_[2] = right;
1180 } 1180 }
1181 1181
1182 LOperand* context() { return inputs_[0]; } 1182 LOperand* context() { return inputs_[0]; }
1183 LOperand* left() { return inputs_[1]; } 1183 LOperand* left() { return inputs_[1]; }
1184 LOperand* right() { return inputs_[2]; } 1184 LOperand* right() { return inputs_[2]; }
1185 1185
1186 DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of") 1186 DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of")
1187 }; 1187 };
1188 1188
1189 1189
1190 class LInstanceOfKnownGlobal V8_FINAL : public LTemplateInstruction<1, 2, 1> { 1190 class LInstanceOfKnownGlobal FINAL : public LTemplateInstruction<1, 2, 1> {
1191 public: 1191 public:
1192 LInstanceOfKnownGlobal(LOperand* context, LOperand* value, LOperand* temp) { 1192 LInstanceOfKnownGlobal(LOperand* context, LOperand* value, LOperand* temp) {
1193 inputs_[0] = context; 1193 inputs_[0] = context;
1194 inputs_[1] = value; 1194 inputs_[1] = value;
1195 temps_[0] = temp; 1195 temps_[0] = temp;
1196 } 1196 }
1197 1197
1198 LOperand* context() { return inputs_[0]; } 1198 LOperand* context() { return inputs_[0]; }
1199 LOperand* value() { return inputs_[1]; } 1199 LOperand* value() { return inputs_[1]; }
1200 LOperand* temp() { return temps_[0]; } 1200 LOperand* temp() { return temps_[0]; }
1201 1201
1202 DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal, 1202 DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal,
1203 "instance-of-known-global") 1203 "instance-of-known-global")
1204 DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal) 1204 DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal)
1205 1205
1206 Handle<JSFunction> function() const { return hydrogen()->function(); } 1206 Handle<JSFunction> function() const { return hydrogen()->function(); }
1207 LEnvironment* GetDeferredLazyDeoptimizationEnvironment() { 1207 LEnvironment* GetDeferredLazyDeoptimizationEnvironment() {
1208 return lazy_deopt_env_; 1208 return lazy_deopt_env_;
1209 } 1209 }
1210 virtual void SetDeferredLazyDeoptimizationEnvironment( 1210 virtual void SetDeferredLazyDeoptimizationEnvironment(
1211 LEnvironment* env) V8_OVERRIDE { 1211 LEnvironment* env) OVERRIDE {
1212 lazy_deopt_env_ = env; 1212 lazy_deopt_env_ = env;
1213 } 1213 }
1214 1214
1215 private: 1215 private:
1216 LEnvironment* lazy_deopt_env_; 1216 LEnvironment* lazy_deopt_env_;
1217 }; 1217 };
1218 1218
1219 1219
1220 class LBoundsCheck V8_FINAL : public LTemplateInstruction<0, 2, 0> { 1220 class LBoundsCheck FINAL : public LTemplateInstruction<0, 2, 0> {
1221 public: 1221 public:
1222 LBoundsCheck(LOperand* index, LOperand* length) { 1222 LBoundsCheck(LOperand* index, LOperand* length) {
1223 inputs_[0] = index; 1223 inputs_[0] = index;
1224 inputs_[1] = length; 1224 inputs_[1] = length;
1225 } 1225 }
1226 1226
1227 LOperand* index() { return inputs_[0]; } 1227 LOperand* index() { return inputs_[0]; }
1228 LOperand* length() { return inputs_[1]; } 1228 LOperand* length() { return inputs_[1]; }
1229 1229
1230 DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check") 1230 DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check")
1231 DECLARE_HYDROGEN_ACCESSOR(BoundsCheck) 1231 DECLARE_HYDROGEN_ACCESSOR(BoundsCheck)
1232 }; 1232 };
1233 1233
1234 1234
1235 class LBitI V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1235 class LBitI FINAL : public LTemplateInstruction<1, 2, 0> {
1236 public: 1236 public:
1237 LBitI(LOperand* left, LOperand* right) { 1237 LBitI(LOperand* left, LOperand* right) {
1238 inputs_[0] = left; 1238 inputs_[0] = left;
1239 inputs_[1] = right; 1239 inputs_[1] = right;
1240 } 1240 }
1241 1241
1242 LOperand* left() { return inputs_[0]; } 1242 LOperand* left() { return inputs_[0]; }
1243 LOperand* right() { return inputs_[1]; } 1243 LOperand* right() { return inputs_[1]; }
1244 1244
1245 Token::Value op() const { return hydrogen()->op(); } 1245 Token::Value op() const { return hydrogen()->op(); }
1246 1246
1247 DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i") 1247 DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i")
1248 DECLARE_HYDROGEN_ACCESSOR(Bitwise) 1248 DECLARE_HYDROGEN_ACCESSOR(Bitwise)
1249 }; 1249 };
1250 1250
1251 1251
1252 class LShiftI V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1252 class LShiftI FINAL : public LTemplateInstruction<1, 2, 0> {
1253 public: 1253 public:
1254 LShiftI(Token::Value op, LOperand* left, LOperand* right, bool can_deopt) 1254 LShiftI(Token::Value op, LOperand* left, LOperand* right, bool can_deopt)
1255 : op_(op), can_deopt_(can_deopt) { 1255 : op_(op), can_deopt_(can_deopt) {
1256 inputs_[0] = left; 1256 inputs_[0] = left;
1257 inputs_[1] = right; 1257 inputs_[1] = right;
1258 } 1258 }
1259 1259
1260 Token::Value op() const { return op_; } 1260 Token::Value op() const { return op_; }
1261 LOperand* left() { return inputs_[0]; } 1261 LOperand* left() { return inputs_[0]; }
1262 LOperand* right() { return inputs_[1]; } 1262 LOperand* right() { return inputs_[1]; }
1263 bool can_deopt() const { return can_deopt_; } 1263 bool can_deopt() const { return can_deopt_; }
1264 1264
1265 DECLARE_CONCRETE_INSTRUCTION(ShiftI, "shift-i") 1265 DECLARE_CONCRETE_INSTRUCTION(ShiftI, "shift-i")
1266 1266
1267 private: 1267 private:
1268 Token::Value op_; 1268 Token::Value op_;
1269 bool can_deopt_; 1269 bool can_deopt_;
1270 }; 1270 };
1271 1271
1272 1272
1273 class LSubI V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1273 class LSubI FINAL : public LTemplateInstruction<1, 2, 0> {
1274 public: 1274 public:
1275 LSubI(LOperand* left, LOperand* right) { 1275 LSubI(LOperand* left, LOperand* right) {
1276 inputs_[0] = left; 1276 inputs_[0] = left;
1277 inputs_[1] = right; 1277 inputs_[1] = right;
1278 } 1278 }
1279 1279
1280 LOperand* left() { return inputs_[0]; } 1280 LOperand* left() { return inputs_[0]; }
1281 LOperand* right() { return inputs_[1]; } 1281 LOperand* right() { return inputs_[1]; }
1282 1282
1283 DECLARE_CONCRETE_INSTRUCTION(SubI, "sub-i") 1283 DECLARE_CONCRETE_INSTRUCTION(SubI, "sub-i")
1284 DECLARE_HYDROGEN_ACCESSOR(Sub) 1284 DECLARE_HYDROGEN_ACCESSOR(Sub)
1285 }; 1285 };
1286 1286
1287 1287
1288 class LConstantI V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1288 class LConstantI FINAL : public LTemplateInstruction<1, 0, 0> {
1289 public: 1289 public:
1290 DECLARE_CONCRETE_INSTRUCTION(ConstantI, "constant-i") 1290 DECLARE_CONCRETE_INSTRUCTION(ConstantI, "constant-i")
1291 DECLARE_HYDROGEN_ACCESSOR(Constant) 1291 DECLARE_HYDROGEN_ACCESSOR(Constant)
1292 1292
1293 int32_t value() const { return hydrogen()->Integer32Value(); } 1293 int32_t value() const { return hydrogen()->Integer32Value(); }
1294 }; 1294 };
1295 1295
1296 1296
1297 class LConstantS V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1297 class LConstantS FINAL : public LTemplateInstruction<1, 0, 0> {
1298 public: 1298 public:
1299 DECLARE_CONCRETE_INSTRUCTION(ConstantS, "constant-s") 1299 DECLARE_CONCRETE_INSTRUCTION(ConstantS, "constant-s")
1300 DECLARE_HYDROGEN_ACCESSOR(Constant) 1300 DECLARE_HYDROGEN_ACCESSOR(Constant)
1301 1301
1302 Smi* value() const { return Smi::FromInt(hydrogen()->Integer32Value()); } 1302 Smi* value() const { return Smi::FromInt(hydrogen()->Integer32Value()); }
1303 }; 1303 };
1304 1304
1305 1305
1306 class LConstantD V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1306 class LConstantD FINAL : public LTemplateInstruction<1, 0, 0> {
1307 public: 1307 public:
1308 DECLARE_CONCRETE_INSTRUCTION(ConstantD, "constant-d") 1308 DECLARE_CONCRETE_INSTRUCTION(ConstantD, "constant-d")
1309 DECLARE_HYDROGEN_ACCESSOR(Constant) 1309 DECLARE_HYDROGEN_ACCESSOR(Constant)
1310 1310
1311 double value() const { return hydrogen()->DoubleValue(); } 1311 double value() const { return hydrogen()->DoubleValue(); }
1312 }; 1312 };
1313 1313
1314 1314
1315 class LConstantE V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1315 class LConstantE FINAL : public LTemplateInstruction<1, 0, 0> {
1316 public: 1316 public:
1317 DECLARE_CONCRETE_INSTRUCTION(ConstantE, "constant-e") 1317 DECLARE_CONCRETE_INSTRUCTION(ConstantE, "constant-e")
1318 DECLARE_HYDROGEN_ACCESSOR(Constant) 1318 DECLARE_HYDROGEN_ACCESSOR(Constant)
1319 1319
1320 ExternalReference value() const { 1320 ExternalReference value() const {
1321 return hydrogen()->ExternalReferenceValue(); 1321 return hydrogen()->ExternalReferenceValue();
1322 } 1322 }
1323 }; 1323 };
1324 1324
1325 1325
1326 class LConstantT V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1326 class LConstantT FINAL : public LTemplateInstruction<1, 0, 0> {
1327 public: 1327 public:
1328 DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t") 1328 DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t")
1329 DECLARE_HYDROGEN_ACCESSOR(Constant) 1329 DECLARE_HYDROGEN_ACCESSOR(Constant)
1330 1330
1331 Handle<Object> value(Isolate* isolate) const { 1331 Handle<Object> value(Isolate* isolate) const {
1332 return hydrogen()->handle(isolate); 1332 return hydrogen()->handle(isolate);
1333 } 1333 }
1334 }; 1334 };
1335 1335
1336 1336
1337 class LBranch V8_FINAL : public LControlInstruction<1, 0> { 1337 class LBranch FINAL : public LControlInstruction<1, 0> {
1338 public: 1338 public:
1339 explicit LBranch(LOperand* value) { 1339 explicit LBranch(LOperand* value) {
1340 inputs_[0] = value; 1340 inputs_[0] = value;
1341 } 1341 }
1342 1342
1343 LOperand* value() { return inputs_[0]; } 1343 LOperand* value() { return inputs_[0]; }
1344 1344
1345 DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") 1345 DECLARE_CONCRETE_INSTRUCTION(Branch, "branch")
1346 DECLARE_HYDROGEN_ACCESSOR(Branch) 1346 DECLARE_HYDROGEN_ACCESSOR(Branch)
1347 1347
1348 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1348 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
1349 }; 1349 };
1350 1350
1351 1351
1352 class LCmpMapAndBranch V8_FINAL : public LControlInstruction<1, 1> { 1352 class LCmpMapAndBranch FINAL : public LControlInstruction<1, 1> {
1353 public: 1353 public:
1354 LCmpMapAndBranch(LOperand* value, LOperand* temp) { 1354 LCmpMapAndBranch(LOperand* value, LOperand* temp) {
1355 inputs_[0] = value; 1355 inputs_[0] = value;
1356 temps_[0] = temp; 1356 temps_[0] = temp;
1357 } 1357 }
1358 1358
1359 LOperand* value() { return inputs_[0]; } 1359 LOperand* value() { return inputs_[0]; }
1360 LOperand* temp() { return temps_[0]; } 1360 LOperand* temp() { return temps_[0]; }
1361 1361
1362 DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch") 1362 DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch")
1363 DECLARE_HYDROGEN_ACCESSOR(CompareMap) 1363 DECLARE_HYDROGEN_ACCESSOR(CompareMap)
1364 1364
1365 Handle<Map> map() const { return hydrogen()->map().handle(); } 1365 Handle<Map> map() const { return hydrogen()->map().handle(); }
1366 }; 1366 };
1367 1367
1368 1368
1369 class LMapEnumLength V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1369 class LMapEnumLength FINAL : public LTemplateInstruction<1, 1, 0> {
1370 public: 1370 public:
1371 explicit LMapEnumLength(LOperand* value) { 1371 explicit LMapEnumLength(LOperand* value) {
1372 inputs_[0] = value; 1372 inputs_[0] = value;
1373 } 1373 }
1374 1374
1375 LOperand* value() { return inputs_[0]; } 1375 LOperand* value() { return inputs_[0]; }
1376 1376
1377 DECLARE_CONCRETE_INSTRUCTION(MapEnumLength, "map-enum-length") 1377 DECLARE_CONCRETE_INSTRUCTION(MapEnumLength, "map-enum-length")
1378 }; 1378 };
1379 1379
1380 1380
1381 class LDateField V8_FINAL : public LTemplateInstruction<1, 1, 1> { 1381 class LDateField FINAL : public LTemplateInstruction<1, 1, 1> {
1382 public: 1382 public:
1383 LDateField(LOperand* date, LOperand* temp, Smi* index) : index_(index) { 1383 LDateField(LOperand* date, LOperand* temp, Smi* index) : index_(index) {
1384 inputs_[0] = date; 1384 inputs_[0] = date;
1385 temps_[0] = temp; 1385 temps_[0] = temp;
1386 } 1386 }
1387 1387
1388 LOperand* date() { return inputs_[0]; } 1388 LOperand* date() { return inputs_[0]; }
1389 LOperand* temp() { return temps_[0]; } 1389 LOperand* temp() { return temps_[0]; }
1390 Smi* index() const { return index_; } 1390 Smi* index() const { return index_; }
1391 1391
1392 DECLARE_CONCRETE_INSTRUCTION(DateField, "date-field") 1392 DECLARE_CONCRETE_INSTRUCTION(DateField, "date-field")
1393 DECLARE_HYDROGEN_ACCESSOR(DateField) 1393 DECLARE_HYDROGEN_ACCESSOR(DateField)
1394 1394
1395 private: 1395 private:
1396 Smi* index_; 1396 Smi* index_;
1397 }; 1397 };
1398 1398
1399 1399
1400 class LSeqStringGetChar V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1400 class LSeqStringGetChar FINAL : public LTemplateInstruction<1, 2, 0> {
1401 public: 1401 public:
1402 LSeqStringGetChar(LOperand* string, LOperand* index) { 1402 LSeqStringGetChar(LOperand* string, LOperand* index) {
1403 inputs_[0] = string; 1403 inputs_[0] = string;
1404 inputs_[1] = index; 1404 inputs_[1] = index;
1405 } 1405 }
1406 1406
1407 LOperand* string() const { return inputs_[0]; } 1407 LOperand* string() const { return inputs_[0]; }
1408 LOperand* index() const { return inputs_[1]; } 1408 LOperand* index() const { return inputs_[1]; }
1409 1409
1410 DECLARE_CONCRETE_INSTRUCTION(SeqStringGetChar, "seq-string-get-char") 1410 DECLARE_CONCRETE_INSTRUCTION(SeqStringGetChar, "seq-string-get-char")
1411 DECLARE_HYDROGEN_ACCESSOR(SeqStringGetChar) 1411 DECLARE_HYDROGEN_ACCESSOR(SeqStringGetChar)
1412 }; 1412 };
1413 1413
1414 1414
1415 class LSeqStringSetChar V8_FINAL : public LTemplateInstruction<1, 4, 0> { 1415 class LSeqStringSetChar FINAL : public LTemplateInstruction<1, 4, 0> {
1416 public: 1416 public:
1417 LSeqStringSetChar(LOperand* context, 1417 LSeqStringSetChar(LOperand* context,
1418 LOperand* string, 1418 LOperand* string,
1419 LOperand* index, 1419 LOperand* index,
1420 LOperand* value) { 1420 LOperand* value) {
1421 inputs_[0] = context; 1421 inputs_[0] = context;
1422 inputs_[1] = string; 1422 inputs_[1] = string;
1423 inputs_[2] = index; 1423 inputs_[2] = index;
1424 inputs_[3] = value; 1424 inputs_[3] = value;
1425 } 1425 }
1426 1426
1427 LOperand* string() { return inputs_[1]; } 1427 LOperand* string() { return inputs_[1]; }
1428 LOperand* index() { return inputs_[2]; } 1428 LOperand* index() { return inputs_[2]; }
1429 LOperand* value() { return inputs_[3]; } 1429 LOperand* value() { return inputs_[3]; }
1430 1430
1431 DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar, "seq-string-set-char") 1431 DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar, "seq-string-set-char")
1432 DECLARE_HYDROGEN_ACCESSOR(SeqStringSetChar) 1432 DECLARE_HYDROGEN_ACCESSOR(SeqStringSetChar)
1433 }; 1433 };
1434 1434
1435 1435
1436 class LAddI V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1436 class LAddI FINAL : public LTemplateInstruction<1, 2, 0> {
1437 public: 1437 public:
1438 LAddI(LOperand* left, LOperand* right) { 1438 LAddI(LOperand* left, LOperand* right) {
1439 inputs_[0] = left; 1439 inputs_[0] = left;
1440 inputs_[1] = right; 1440 inputs_[1] = right;
1441 } 1441 }
1442 1442
1443 LOperand* left() { return inputs_[0]; } 1443 LOperand* left() { return inputs_[0]; }
1444 LOperand* right() { return inputs_[1]; } 1444 LOperand* right() { return inputs_[1]; }
1445 1445
1446 DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i") 1446 DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i")
1447 DECLARE_HYDROGEN_ACCESSOR(Add) 1447 DECLARE_HYDROGEN_ACCESSOR(Add)
1448 }; 1448 };
1449 1449
1450 1450
1451 class LMathMinMax V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1451 class LMathMinMax FINAL : public LTemplateInstruction<1, 2, 0> {
1452 public: 1452 public:
1453 LMathMinMax(LOperand* left, LOperand* right) { 1453 LMathMinMax(LOperand* left, LOperand* right) {
1454 inputs_[0] = left; 1454 inputs_[0] = left;
1455 inputs_[1] = right; 1455 inputs_[1] = right;
1456 } 1456 }
1457 1457
1458 LOperand* left() { return inputs_[0]; } 1458 LOperand* left() { return inputs_[0]; }
1459 LOperand* right() { return inputs_[1]; } 1459 LOperand* right() { return inputs_[1]; }
1460 1460
1461 DECLARE_CONCRETE_INSTRUCTION(MathMinMax, "math-min-max") 1461 DECLARE_CONCRETE_INSTRUCTION(MathMinMax, "math-min-max")
1462 DECLARE_HYDROGEN_ACCESSOR(MathMinMax) 1462 DECLARE_HYDROGEN_ACCESSOR(MathMinMax)
1463 }; 1463 };
1464 1464
1465 1465
1466 class LPower V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1466 class LPower FINAL : public LTemplateInstruction<1, 2, 0> {
1467 public: 1467 public:
1468 LPower(LOperand* left, LOperand* right) { 1468 LPower(LOperand* left, LOperand* right) {
1469 inputs_[0] = left; 1469 inputs_[0] = left;
1470 inputs_[1] = right; 1470 inputs_[1] = right;
1471 } 1471 }
1472 1472
1473 LOperand* left() { return inputs_[0]; } 1473 LOperand* left() { return inputs_[0]; }
1474 LOperand* right() { return inputs_[1]; } 1474 LOperand* right() { return inputs_[1]; }
1475 1475
1476 DECLARE_CONCRETE_INSTRUCTION(Power, "power") 1476 DECLARE_CONCRETE_INSTRUCTION(Power, "power")
1477 DECLARE_HYDROGEN_ACCESSOR(Power) 1477 DECLARE_HYDROGEN_ACCESSOR(Power)
1478 }; 1478 };
1479 1479
1480 1480
1481 class LArithmeticD V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1481 class LArithmeticD FINAL : public LTemplateInstruction<1, 2, 0> {
1482 public: 1482 public:
1483 LArithmeticD(Token::Value op, LOperand* left, LOperand* right) 1483 LArithmeticD(Token::Value op, LOperand* left, LOperand* right)
1484 : op_(op) { 1484 : op_(op) {
1485 inputs_[0] = left; 1485 inputs_[0] = left;
1486 inputs_[1] = right; 1486 inputs_[1] = right;
1487 } 1487 }
1488 1488
1489 Token::Value op() const { return op_; } 1489 Token::Value op() const { return op_; }
1490 LOperand* left() { return inputs_[0]; } 1490 LOperand* left() { return inputs_[0]; }
1491 LOperand* right() { return inputs_[1]; } 1491 LOperand* right() { return inputs_[1]; }
1492 1492
1493 virtual Opcode opcode() const V8_OVERRIDE { 1493 virtual Opcode opcode() const OVERRIDE {
1494 return LInstruction::kArithmeticD; 1494 return LInstruction::kArithmeticD;
1495 } 1495 }
1496 virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE; 1496 virtual void CompileToNative(LCodeGen* generator) OVERRIDE;
1497 virtual const char* Mnemonic() const V8_OVERRIDE; 1497 virtual const char* Mnemonic() const OVERRIDE;
1498 1498
1499 private: 1499 private:
1500 Token::Value op_; 1500 Token::Value op_;
1501 }; 1501 };
1502 1502
1503 1503
1504 class LArithmeticT V8_FINAL : public LTemplateInstruction<1, 3, 0> { 1504 class LArithmeticT FINAL : public LTemplateInstruction<1, 3, 0> {
1505 public: 1505 public:
1506 LArithmeticT(Token::Value op, 1506 LArithmeticT(Token::Value op,
1507 LOperand* context, 1507 LOperand* context,
1508 LOperand* left, 1508 LOperand* left,
1509 LOperand* right) 1509 LOperand* right)
1510 : op_(op) { 1510 : op_(op) {
1511 inputs_[0] = context; 1511 inputs_[0] = context;
1512 inputs_[1] = left; 1512 inputs_[1] = left;
1513 inputs_[2] = right; 1513 inputs_[2] = right;
1514 } 1514 }
1515 1515
1516 LOperand* context() { return inputs_[0]; } 1516 LOperand* context() { return inputs_[0]; }
1517 LOperand* left() { return inputs_[1]; } 1517 LOperand* left() { return inputs_[1]; }
1518 LOperand* right() { return inputs_[2]; } 1518 LOperand* right() { return inputs_[2]; }
1519 Token::Value op() const { return op_; } 1519 Token::Value op() const { return op_; }
1520 1520
1521 virtual Opcode opcode() const V8_FINAL { return LInstruction::kArithmeticT; } 1521 virtual Opcode opcode() const FINAL { return LInstruction::kArithmeticT; }
1522 virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE; 1522 virtual void CompileToNative(LCodeGen* generator) OVERRIDE;
1523 virtual const char* Mnemonic() const V8_OVERRIDE; 1523 virtual const char* Mnemonic() const OVERRIDE;
1524 1524
1525 private: 1525 private:
1526 Token::Value op_; 1526 Token::Value op_;
1527 }; 1527 };
1528 1528
1529 1529
1530 class LReturn V8_FINAL : public LTemplateInstruction<0, 3, 0> { 1530 class LReturn FINAL : public LTemplateInstruction<0, 3, 0> {
1531 public: 1531 public:
1532 LReturn(LOperand* value, LOperand* context, LOperand* parameter_count) { 1532 LReturn(LOperand* value, LOperand* context, LOperand* parameter_count) {
1533 inputs_[0] = value; 1533 inputs_[0] = value;
1534 inputs_[1] = context; 1534 inputs_[1] = context;
1535 inputs_[2] = parameter_count; 1535 inputs_[2] = parameter_count;
1536 } 1536 }
1537 1537
1538 LOperand* value() { return inputs_[0]; } 1538 LOperand* value() { return inputs_[0]; }
1539 1539
1540 bool has_constant_parameter_count() { 1540 bool has_constant_parameter_count() {
1541 return parameter_count()->IsConstantOperand(); 1541 return parameter_count()->IsConstantOperand();
1542 } 1542 }
1543 LConstantOperand* constant_parameter_count() { 1543 LConstantOperand* constant_parameter_count() {
1544 DCHECK(has_constant_parameter_count()); 1544 DCHECK(has_constant_parameter_count());
1545 return LConstantOperand::cast(parameter_count()); 1545 return LConstantOperand::cast(parameter_count());
1546 } 1546 }
1547 LOperand* parameter_count() { return inputs_[2]; } 1547 LOperand* parameter_count() { return inputs_[2]; }
1548 1548
1549 DECLARE_CONCRETE_INSTRUCTION(Return, "return") 1549 DECLARE_CONCRETE_INSTRUCTION(Return, "return")
1550 }; 1550 };
1551 1551
1552 1552
1553 class LLoadNamedField V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1553 class LLoadNamedField FINAL : public LTemplateInstruction<1, 1, 0> {
1554 public: 1554 public:
1555 explicit LLoadNamedField(LOperand* object) { 1555 explicit LLoadNamedField(LOperand* object) {
1556 inputs_[0] = object; 1556 inputs_[0] = object;
1557 } 1557 }
1558 1558
1559 LOperand* object() { return inputs_[0]; } 1559 LOperand* object() { return inputs_[0]; }
1560 1560
1561 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field") 1561 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field")
1562 DECLARE_HYDROGEN_ACCESSOR(LoadNamedField) 1562 DECLARE_HYDROGEN_ACCESSOR(LoadNamedField)
1563 }; 1563 };
1564 1564
1565 1565
1566 class LLoadNamedGeneric V8_FINAL : public LTemplateInstruction<1, 2, 1> { 1566 class LLoadNamedGeneric FINAL : public LTemplateInstruction<1, 2, 1> {
1567 public: 1567 public:
1568 LLoadNamedGeneric(LOperand* context, LOperand* object, LOperand* vector) { 1568 LLoadNamedGeneric(LOperand* context, LOperand* object, LOperand* vector) {
1569 inputs_[0] = context; 1569 inputs_[0] = context;
1570 inputs_[1] = object; 1570 inputs_[1] = object;
1571 temps_[0] = vector; 1571 temps_[0] = vector;
1572 } 1572 }
1573 1573
1574 LOperand* context() { return inputs_[0]; } 1574 LOperand* context() { return inputs_[0]; }
1575 LOperand* object() { return inputs_[1]; } 1575 LOperand* object() { return inputs_[1]; }
1576 LOperand* temp_vector() { return temps_[0]; } 1576 LOperand* temp_vector() { return temps_[0]; }
1577 1577
1578 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") 1578 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic")
1579 DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) 1579 DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric)
1580 1580
1581 Handle<Object> name() const { return hydrogen()->name(); } 1581 Handle<Object> name() const { return hydrogen()->name(); }
1582 }; 1582 };
1583 1583
1584 1584
1585 class LLoadFunctionPrototype V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1585 class LLoadFunctionPrototype FINAL : public LTemplateInstruction<1, 1, 0> {
1586 public: 1586 public:
1587 explicit LLoadFunctionPrototype(LOperand* function) { 1587 explicit LLoadFunctionPrototype(LOperand* function) {
1588 inputs_[0] = function; 1588 inputs_[0] = function;
1589 } 1589 }
1590 1590
1591 LOperand* function() { return inputs_[0]; } 1591 LOperand* function() { return inputs_[0]; }
1592 1592
1593 DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load-function-prototype") 1593 DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load-function-prototype")
1594 DECLARE_HYDROGEN_ACCESSOR(LoadFunctionPrototype) 1594 DECLARE_HYDROGEN_ACCESSOR(LoadFunctionPrototype)
1595 }; 1595 };
1596 1596
1597 1597
1598 class LLoadRoot V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1598 class LLoadRoot FINAL : public LTemplateInstruction<1, 0, 0> {
1599 public: 1599 public:
1600 DECLARE_CONCRETE_INSTRUCTION(LoadRoot, "load-root") 1600 DECLARE_CONCRETE_INSTRUCTION(LoadRoot, "load-root")
1601 DECLARE_HYDROGEN_ACCESSOR(LoadRoot) 1601 DECLARE_HYDROGEN_ACCESSOR(LoadRoot)
1602 1602
1603 Heap::RootListIndex index() const { return hydrogen()->index(); } 1603 Heap::RootListIndex index() const { return hydrogen()->index(); }
1604 }; 1604 };
1605 1605
1606 1606
1607 class LLoadKeyed V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1607 class LLoadKeyed FINAL : public LTemplateInstruction<1, 2, 0> {
1608 public: 1608 public:
1609 LLoadKeyed(LOperand* elements, LOperand* key) { 1609 LLoadKeyed(LOperand* elements, LOperand* key) {
1610 inputs_[0] = elements; 1610 inputs_[0] = elements;
1611 inputs_[1] = key; 1611 inputs_[1] = key;
1612 } 1612 }
1613 1613
1614 LOperand* elements() { return inputs_[0]; } 1614 LOperand* elements() { return inputs_[0]; }
1615 LOperand* key() { return inputs_[1]; } 1615 LOperand* key() { return inputs_[1]; }
1616 ElementsKind elements_kind() const { 1616 ElementsKind elements_kind() const {
1617 return hydrogen()->elements_kind(); 1617 return hydrogen()->elements_kind();
1618 } 1618 }
1619 bool is_external() const { 1619 bool is_external() const {
1620 return hydrogen()->is_external(); 1620 return hydrogen()->is_external();
1621 } 1621 }
1622 bool is_fixed_typed_array() const { 1622 bool is_fixed_typed_array() const {
1623 return hydrogen()->is_fixed_typed_array(); 1623 return hydrogen()->is_fixed_typed_array();
1624 } 1624 }
1625 bool is_typed_elements() const { 1625 bool is_typed_elements() const {
1626 return is_external() || is_fixed_typed_array(); 1626 return is_external() || is_fixed_typed_array();
1627 } 1627 }
1628 1628
1629 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed, "load-keyed") 1629 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed, "load-keyed")
1630 DECLARE_HYDROGEN_ACCESSOR(LoadKeyed) 1630 DECLARE_HYDROGEN_ACCESSOR(LoadKeyed)
1631 1631
1632 virtual void PrintDataTo(StringStream* stream); 1632 virtual void PrintDataTo(StringStream* stream);
1633 uint32_t base_offset() const { return hydrogen()->base_offset(); } 1633 uint32_t base_offset() const { return hydrogen()->base_offset(); }
1634 }; 1634 };
1635 1635
1636 1636
1637 class LLoadKeyedGeneric V8_FINAL : public LTemplateInstruction<1, 3, 1> { 1637 class LLoadKeyedGeneric FINAL : public LTemplateInstruction<1, 3, 1> {
1638 public: 1638 public:
1639 LLoadKeyedGeneric(LOperand* context, LOperand* object, LOperand* key, 1639 LLoadKeyedGeneric(LOperand* context, LOperand* object, LOperand* key,
1640 LOperand* vector) { 1640 LOperand* vector) {
1641 inputs_[0] = context; 1641 inputs_[0] = context;
1642 inputs_[1] = object; 1642 inputs_[1] = object;
1643 inputs_[2] = key; 1643 inputs_[2] = key;
1644 temps_[0] = vector; 1644 temps_[0] = vector;
1645 } 1645 }
1646 1646
1647 LOperand* context() { return inputs_[0]; } 1647 LOperand* context() { return inputs_[0]; }
1648 LOperand* object() { return inputs_[1]; } 1648 LOperand* object() { return inputs_[1]; }
1649 LOperand* key() { return inputs_[2]; } 1649 LOperand* key() { return inputs_[2]; }
1650 LOperand* temp_vector() { return temps_[0]; } 1650 LOperand* temp_vector() { return temps_[0]; }
1651 1651
1652 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") 1652 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic")
1653 DECLARE_HYDROGEN_ACCESSOR(LoadKeyedGeneric) 1653 DECLARE_HYDROGEN_ACCESSOR(LoadKeyedGeneric)
1654 }; 1654 };
1655 1655
1656 1656
1657 class LLoadGlobalCell V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1657 class LLoadGlobalCell FINAL : public LTemplateInstruction<1, 0, 0> {
1658 public: 1658 public:
1659 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell") 1659 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell")
1660 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell) 1660 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell)
1661 }; 1661 };
1662 1662
1663 1663
1664 class LLoadGlobalGeneric V8_FINAL : public LTemplateInstruction<1, 2, 1> { 1664 class LLoadGlobalGeneric FINAL : public LTemplateInstruction<1, 2, 1> {
1665 public: 1665 public:
1666 LLoadGlobalGeneric(LOperand* context, LOperand* global_object, 1666 LLoadGlobalGeneric(LOperand* context, LOperand* global_object,
1667 LOperand* vector) { 1667 LOperand* vector) {
1668 inputs_[0] = context; 1668 inputs_[0] = context;
1669 inputs_[1] = global_object; 1669 inputs_[1] = global_object;
1670 temps_[0] = vector; 1670 temps_[0] = vector;
1671 } 1671 }
1672 1672
1673 LOperand* context() { return inputs_[0]; } 1673 LOperand* context() { return inputs_[0]; }
1674 LOperand* global_object() { return inputs_[1]; } 1674 LOperand* global_object() { return inputs_[1]; }
1675 LOperand* temp_vector() { return temps_[0]; } 1675 LOperand* temp_vector() { return temps_[0]; }
1676 1676
1677 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic") 1677 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic")
1678 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric) 1678 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric)
1679 1679
1680 Handle<Object> name() const { return hydrogen()->name(); } 1680 Handle<Object> name() const { return hydrogen()->name(); }
1681 bool for_typeof() const { return hydrogen()->for_typeof(); } 1681 bool for_typeof() const { return hydrogen()->for_typeof(); }
1682 }; 1682 };
1683 1683
1684 1684
1685 class LStoreGlobalCell V8_FINAL : public LTemplateInstruction<0, 1, 1> { 1685 class LStoreGlobalCell FINAL : public LTemplateInstruction<0, 1, 1> {
1686 public: 1686 public:
1687 LStoreGlobalCell(LOperand* value, LOperand* temp) { 1687 LStoreGlobalCell(LOperand* value, LOperand* temp) {
1688 inputs_[0] = value; 1688 inputs_[0] = value;
1689 temps_[0] = temp; 1689 temps_[0] = temp;
1690 } 1690 }
1691 1691
1692 LOperand* value() { return inputs_[0]; } 1692 LOperand* value() { return inputs_[0]; }
1693 LOperand* temp() { return temps_[0]; } 1693 LOperand* temp() { return temps_[0]; }
1694 1694
1695 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell") 1695 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell")
1696 DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell) 1696 DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell)
1697 }; 1697 };
1698 1698
1699 1699
1700 class LLoadContextSlot V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1700 class LLoadContextSlot FINAL : public LTemplateInstruction<1, 1, 0> {
1701 public: 1701 public:
1702 explicit LLoadContextSlot(LOperand* context) { 1702 explicit LLoadContextSlot(LOperand* context) {
1703 inputs_[0] = context; 1703 inputs_[0] = context;
1704 } 1704 }
1705 1705
1706 LOperand* context() { return inputs_[0]; } 1706 LOperand* context() { return inputs_[0]; }
1707 1707
1708 DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot") 1708 DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot")
1709 DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot) 1709 DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot)
1710 1710
1711 int slot_index() { return hydrogen()->slot_index(); } 1711 int slot_index() { return hydrogen()->slot_index(); }
1712 1712
1713 virtual void PrintDataTo(StringStream* stream); 1713 virtual void PrintDataTo(StringStream* stream);
1714 }; 1714 };
1715 1715
1716 1716
1717 class LStoreContextSlot V8_FINAL : public LTemplateInstruction<0, 2, 0> { 1717 class LStoreContextSlot FINAL : public LTemplateInstruction<0, 2, 0> {
1718 public: 1718 public:
1719 LStoreContextSlot(LOperand* context, LOperand* value) { 1719 LStoreContextSlot(LOperand* context, LOperand* value) {
1720 inputs_[0] = context; 1720 inputs_[0] = context;
1721 inputs_[1] = value; 1721 inputs_[1] = value;
1722 } 1722 }
1723 1723
1724 LOperand* context() { return inputs_[0]; } 1724 LOperand* context() { return inputs_[0]; }
1725 LOperand* value() { return inputs_[1]; } 1725 LOperand* value() { return inputs_[1]; }
1726 1726
1727 DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store-context-slot") 1727 DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store-context-slot")
1728 DECLARE_HYDROGEN_ACCESSOR(StoreContextSlot) 1728 DECLARE_HYDROGEN_ACCESSOR(StoreContextSlot)
1729 1729
1730 int slot_index() { return hydrogen()->slot_index(); } 1730 int slot_index() { return hydrogen()->slot_index(); }
1731 1731
1732 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1732 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
1733 }; 1733 };
1734 1734
1735 1735
1736 class LPushArgument V8_FINAL : public LTemplateInstruction<0, 1, 0> { 1736 class LPushArgument FINAL : public LTemplateInstruction<0, 1, 0> {
1737 public: 1737 public:
1738 explicit LPushArgument(LOperand* value) { 1738 explicit LPushArgument(LOperand* value) {
1739 inputs_[0] = value; 1739 inputs_[0] = value;
1740 } 1740 }
1741 1741
1742 LOperand* value() { return inputs_[0]; } 1742 LOperand* value() { return inputs_[0]; }
1743 1743
1744 DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument") 1744 DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument")
1745 }; 1745 };
1746 1746
1747 1747
1748 class LDrop V8_FINAL : public LTemplateInstruction<0, 0, 0> { 1748 class LDrop FINAL : public LTemplateInstruction<0, 0, 0> {
1749 public: 1749 public:
1750 explicit LDrop(int count) : count_(count) { } 1750 explicit LDrop(int count) : count_(count) { }
1751 1751
1752 int count() const { return count_; } 1752 int count() const { return count_; }
1753 1753
1754 DECLARE_CONCRETE_INSTRUCTION(Drop, "drop") 1754 DECLARE_CONCRETE_INSTRUCTION(Drop, "drop")
1755 1755
1756 private: 1756 private:
1757 int count_; 1757 int count_;
1758 }; 1758 };
1759 1759
1760 1760
1761 class LStoreCodeEntry V8_FINAL: public LTemplateInstruction<0, 2, 0> { 1761 class LStoreCodeEntry FINAL: public LTemplateInstruction<0, 2, 0> {
1762 public: 1762 public:
1763 LStoreCodeEntry(LOperand* function, LOperand* code_object) { 1763 LStoreCodeEntry(LOperand* function, LOperand* code_object) {
1764 inputs_[0] = function; 1764 inputs_[0] = function;
1765 inputs_[1] = code_object; 1765 inputs_[1] = code_object;
1766 } 1766 }
1767 1767
1768 LOperand* function() { return inputs_[0]; } 1768 LOperand* function() { return inputs_[0]; }
1769 LOperand* code_object() { return inputs_[1]; } 1769 LOperand* code_object() { return inputs_[1]; }
1770 1770
1771 virtual void PrintDataTo(StringStream* stream); 1771 virtual void PrintDataTo(StringStream* stream);
1772 1772
1773 DECLARE_CONCRETE_INSTRUCTION(StoreCodeEntry, "store-code-entry") 1773 DECLARE_CONCRETE_INSTRUCTION(StoreCodeEntry, "store-code-entry")
1774 DECLARE_HYDROGEN_ACCESSOR(StoreCodeEntry) 1774 DECLARE_HYDROGEN_ACCESSOR(StoreCodeEntry)
1775 }; 1775 };
1776 1776
1777 1777
1778 class LInnerAllocatedObject V8_FINAL: public LTemplateInstruction<1, 2, 0> { 1778 class LInnerAllocatedObject FINAL: public LTemplateInstruction<1, 2, 0> {
1779 public: 1779 public:
1780 LInnerAllocatedObject(LOperand* base_object, LOperand* offset) { 1780 LInnerAllocatedObject(LOperand* base_object, LOperand* offset) {
1781 inputs_[0] = base_object; 1781 inputs_[0] = base_object;
1782 inputs_[1] = offset; 1782 inputs_[1] = offset;
1783 } 1783 }
1784 1784
1785 LOperand* base_object() const { return inputs_[0]; } 1785 LOperand* base_object() const { return inputs_[0]; }
1786 LOperand* offset() const { return inputs_[1]; } 1786 LOperand* offset() const { return inputs_[1]; }
1787 1787
1788 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1788 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
1789 1789
1790 DECLARE_CONCRETE_INSTRUCTION(InnerAllocatedObject, "inner-allocated-object") 1790 DECLARE_CONCRETE_INSTRUCTION(InnerAllocatedObject, "inner-allocated-object")
1791 }; 1791 };
1792 1792
1793 1793
1794 class LThisFunction V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1794 class LThisFunction FINAL : public LTemplateInstruction<1, 0, 0> {
1795 public: 1795 public:
1796 DECLARE_CONCRETE_INSTRUCTION(ThisFunction, "this-function") 1796 DECLARE_CONCRETE_INSTRUCTION(ThisFunction, "this-function")
1797 DECLARE_HYDROGEN_ACCESSOR(ThisFunction) 1797 DECLARE_HYDROGEN_ACCESSOR(ThisFunction)
1798 }; 1798 };
1799 1799
1800 1800
1801 class LContext V8_FINAL : public LTemplateInstruction<1, 0, 0> { 1801 class LContext FINAL : public LTemplateInstruction<1, 0, 0> {
1802 public: 1802 public:
1803 DECLARE_CONCRETE_INSTRUCTION(Context, "context") 1803 DECLARE_CONCRETE_INSTRUCTION(Context, "context")
1804 DECLARE_HYDROGEN_ACCESSOR(Context) 1804 DECLARE_HYDROGEN_ACCESSOR(Context)
1805 }; 1805 };
1806 1806
1807 1807
1808 class LDeclareGlobals V8_FINAL : public LTemplateInstruction<0, 1, 0> { 1808 class LDeclareGlobals FINAL : public LTemplateInstruction<0, 1, 0> {
1809 public: 1809 public:
1810 explicit LDeclareGlobals(LOperand* context) { 1810 explicit LDeclareGlobals(LOperand* context) {
1811 inputs_[0] = context; 1811 inputs_[0] = context;
1812 } 1812 }
1813 1813
1814 LOperand* context() { return inputs_[0]; } 1814 LOperand* context() { return inputs_[0]; }
1815 1815
1816 DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals") 1816 DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals")
1817 DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals) 1817 DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals)
1818 }; 1818 };
1819 1819
1820 1820
1821 class LCallJSFunction V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1821 class LCallJSFunction FINAL : public LTemplateInstruction<1, 1, 0> {
1822 public: 1822 public:
1823 explicit LCallJSFunction(LOperand* function) { 1823 explicit LCallJSFunction(LOperand* function) {
1824 inputs_[0] = function; 1824 inputs_[0] = function;
1825 } 1825 }
1826 1826
1827 LOperand* function() { return inputs_[0]; } 1827 LOperand* function() { return inputs_[0]; }
1828 1828
1829 DECLARE_CONCRETE_INSTRUCTION(CallJSFunction, "call-js-function") 1829 DECLARE_CONCRETE_INSTRUCTION(CallJSFunction, "call-js-function")
1830 DECLARE_HYDROGEN_ACCESSOR(CallJSFunction) 1830 DECLARE_HYDROGEN_ACCESSOR(CallJSFunction)
1831 1831
1832 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1832 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
1833 1833
1834 int arity() const { return hydrogen()->argument_count() - 1; } 1834 int arity() const { return hydrogen()->argument_count() - 1; }
1835 }; 1835 };
1836 1836
1837 1837
1838 class LCallWithDescriptor V8_FINAL : public LTemplateResultInstruction<1> { 1838 class LCallWithDescriptor FINAL : public LTemplateResultInstruction<1> {
1839 public: 1839 public:
1840 LCallWithDescriptor(const CallInterfaceDescriptor* descriptor, 1840 LCallWithDescriptor(const CallInterfaceDescriptor* descriptor,
1841 const ZoneList<LOperand*>& operands, Zone* zone) 1841 const ZoneList<LOperand*>& operands, Zone* zone)
1842 : descriptor_(descriptor), 1842 : descriptor_(descriptor),
1843 inputs_(descriptor->GetRegisterParameterCount() + 1, zone) { 1843 inputs_(descriptor->GetRegisterParameterCount() + 1, zone) {
1844 DCHECK(descriptor->GetRegisterParameterCount() + 1 == operands.length()); 1844 DCHECK(descriptor->GetRegisterParameterCount() + 1 == operands.length());
1845 inputs_.AddAll(operands, zone); 1845 inputs_.AddAll(operands, zone);
1846 } 1846 }
1847 1847
1848 LOperand* target() const { return inputs_[0]; } 1848 LOperand* target() const { return inputs_[0]; }
1849 1849
1850 const CallInterfaceDescriptor* descriptor() { return descriptor_; } 1850 const CallInterfaceDescriptor* descriptor() { return descriptor_; }
1851 1851
1852 private: 1852 private:
1853 DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor, "call-with-descriptor") 1853 DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor, "call-with-descriptor")
1854 DECLARE_HYDROGEN_ACCESSOR(CallWithDescriptor) 1854 DECLARE_HYDROGEN_ACCESSOR(CallWithDescriptor)
1855 1855
1856 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1856 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
1857 1857
1858 int arity() const { return hydrogen()->argument_count() - 1; } 1858 int arity() const { return hydrogen()->argument_count() - 1; }
1859 1859
1860 const CallInterfaceDescriptor* descriptor_; 1860 const CallInterfaceDescriptor* descriptor_;
1861 ZoneList<LOperand*> inputs_; 1861 ZoneList<LOperand*> inputs_;
1862 1862
1863 // Iterator support. 1863 // Iterator support.
1864 virtual int InputCount() V8_FINAL V8_OVERRIDE { return inputs_.length(); } 1864 virtual int InputCount() FINAL OVERRIDE { return inputs_.length(); }
1865 virtual LOperand* InputAt(int i) V8_FINAL V8_OVERRIDE { return inputs_[i]; } 1865 virtual LOperand* InputAt(int i) FINAL OVERRIDE { return inputs_[i]; }
1866 1866
1867 virtual int TempCount() V8_FINAL V8_OVERRIDE { return 0; } 1867 virtual int TempCount() FINAL OVERRIDE { return 0; }
1868 virtual LOperand* TempAt(int i) V8_FINAL V8_OVERRIDE { return NULL; } 1868 virtual LOperand* TempAt(int i) FINAL OVERRIDE { return NULL; }
1869 }; 1869 };
1870 1870
1871 1871
1872 class LInvokeFunction V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1872 class LInvokeFunction FINAL : public LTemplateInstruction<1, 2, 0> {
1873 public: 1873 public:
1874 LInvokeFunction(LOperand* context, LOperand* function) { 1874 LInvokeFunction(LOperand* context, LOperand* function) {
1875 inputs_[0] = context; 1875 inputs_[0] = context;
1876 inputs_[1] = function; 1876 inputs_[1] = function;
1877 } 1877 }
1878 1878
1879 LOperand* context() { return inputs_[0]; } 1879 LOperand* context() { return inputs_[0]; }
1880 LOperand* function() { return inputs_[1]; } 1880 LOperand* function() { return inputs_[1]; }
1881 1881
1882 DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function") 1882 DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function")
1883 DECLARE_HYDROGEN_ACCESSOR(InvokeFunction) 1883 DECLARE_HYDROGEN_ACCESSOR(InvokeFunction)
1884 1884
1885 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1885 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
1886 1886
1887 int arity() const { return hydrogen()->argument_count() - 1; } 1887 int arity() const { return hydrogen()->argument_count() - 1; }
1888 }; 1888 };
1889 1889
1890 1890
1891 class LCallFunction V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1891 class LCallFunction FINAL : public LTemplateInstruction<1, 2, 0> {
1892 public: 1892 public:
1893 LCallFunction(LOperand* context, LOperand* function) { 1893 LCallFunction(LOperand* context, LOperand* function) {
1894 inputs_[0] = context; 1894 inputs_[0] = context;
1895 inputs_[1] = function; 1895 inputs_[1] = function;
1896 } 1896 }
1897 1897
1898 LOperand* context() { return inputs_[0]; } 1898 LOperand* context() { return inputs_[0]; }
1899 LOperand* function() { return inputs_[1]; } 1899 LOperand* function() { return inputs_[1]; }
1900 1900
1901 DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call-function") 1901 DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call-function")
1902 DECLARE_HYDROGEN_ACCESSOR(CallFunction) 1902 DECLARE_HYDROGEN_ACCESSOR(CallFunction)
1903 1903
1904 int arity() const { return hydrogen()->argument_count() - 1; } 1904 int arity() const { return hydrogen()->argument_count() - 1; }
1905 }; 1905 };
1906 1906
1907 1907
1908 class LCallNew V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1908 class LCallNew FINAL : public LTemplateInstruction<1, 2, 0> {
1909 public: 1909 public:
1910 LCallNew(LOperand* context, LOperand* constructor) { 1910 LCallNew(LOperand* context, LOperand* constructor) {
1911 inputs_[0] = context; 1911 inputs_[0] = context;
1912 inputs_[1] = constructor; 1912 inputs_[1] = constructor;
1913 } 1913 }
1914 1914
1915 LOperand* context() { return inputs_[0]; } 1915 LOperand* context() { return inputs_[0]; }
1916 LOperand* constructor() { return inputs_[1]; } 1916 LOperand* constructor() { return inputs_[1]; }
1917 1917
1918 DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new") 1918 DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new")
1919 DECLARE_HYDROGEN_ACCESSOR(CallNew) 1919 DECLARE_HYDROGEN_ACCESSOR(CallNew)
1920 1920
1921 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1921 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
1922 1922
1923 int arity() const { return hydrogen()->argument_count() - 1; } 1923 int arity() const { return hydrogen()->argument_count() - 1; }
1924 }; 1924 };
1925 1925
1926 1926
1927 class LCallNewArray V8_FINAL : public LTemplateInstruction<1, 2, 0> { 1927 class LCallNewArray FINAL : public LTemplateInstruction<1, 2, 0> {
1928 public: 1928 public:
1929 LCallNewArray(LOperand* context, LOperand* constructor) { 1929 LCallNewArray(LOperand* context, LOperand* constructor) {
1930 inputs_[0] = context; 1930 inputs_[0] = context;
1931 inputs_[1] = constructor; 1931 inputs_[1] = constructor;
1932 } 1932 }
1933 1933
1934 LOperand* context() { return inputs_[0]; } 1934 LOperand* context() { return inputs_[0]; }
1935 LOperand* constructor() { return inputs_[1]; } 1935 LOperand* constructor() { return inputs_[1]; }
1936 1936
1937 DECLARE_CONCRETE_INSTRUCTION(CallNewArray, "call-new-array") 1937 DECLARE_CONCRETE_INSTRUCTION(CallNewArray, "call-new-array")
1938 DECLARE_HYDROGEN_ACCESSOR(CallNewArray) 1938 DECLARE_HYDROGEN_ACCESSOR(CallNewArray)
1939 1939
1940 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 1940 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
1941 1941
1942 int arity() const { return hydrogen()->argument_count() - 1; } 1942 int arity() const { return hydrogen()->argument_count() - 1; }
1943 }; 1943 };
1944 1944
1945 1945
1946 class LCallRuntime V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1946 class LCallRuntime FINAL : public LTemplateInstruction<1, 1, 0> {
1947 public: 1947 public:
1948 explicit LCallRuntime(LOperand* context) { 1948 explicit LCallRuntime(LOperand* context) {
1949 inputs_[0] = context; 1949 inputs_[0] = context;
1950 } 1950 }
1951 1951
1952 LOperand* context() { return inputs_[0]; } 1952 LOperand* context() { return inputs_[0]; }
1953 1953
1954 DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") 1954 DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime")
1955 DECLARE_HYDROGEN_ACCESSOR(CallRuntime) 1955 DECLARE_HYDROGEN_ACCESSOR(CallRuntime)
1956 1956
1957 virtual bool ClobbersDoubleRegisters(Isolate* isolate) const V8_OVERRIDE { 1957 virtual bool ClobbersDoubleRegisters(Isolate* isolate) const OVERRIDE {
1958 return save_doubles() == kDontSaveFPRegs; 1958 return save_doubles() == kDontSaveFPRegs;
1959 } 1959 }
1960 1960
1961 const Runtime::Function* function() const { return hydrogen()->function(); } 1961 const Runtime::Function* function() const { return hydrogen()->function(); }
1962 int arity() const { return hydrogen()->argument_count(); } 1962 int arity() const { return hydrogen()->argument_count(); }
1963 SaveFPRegsMode save_doubles() const { return hydrogen()->save_doubles(); } 1963 SaveFPRegsMode save_doubles() const { return hydrogen()->save_doubles(); }
1964 }; 1964 };
1965 1965
1966 1966
1967 class LInteger32ToDouble V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1967 class LInteger32ToDouble FINAL : public LTemplateInstruction<1, 1, 0> {
1968 public: 1968 public:
1969 explicit LInteger32ToDouble(LOperand* value) { 1969 explicit LInteger32ToDouble(LOperand* value) {
1970 inputs_[0] = value; 1970 inputs_[0] = value;
1971 } 1971 }
1972 1972
1973 LOperand* value() { return inputs_[0]; } 1973 LOperand* value() { return inputs_[0]; }
1974 1974
1975 DECLARE_CONCRETE_INSTRUCTION(Integer32ToDouble, "int32-to-double") 1975 DECLARE_CONCRETE_INSTRUCTION(Integer32ToDouble, "int32-to-double")
1976 }; 1976 };
1977 1977
1978 1978
1979 class LUint32ToDouble V8_FINAL : public LTemplateInstruction<1, 1, 0> { 1979 class LUint32ToDouble FINAL : public LTemplateInstruction<1, 1, 0> {
1980 public: 1980 public:
1981 explicit LUint32ToDouble(LOperand* value) { 1981 explicit LUint32ToDouble(LOperand* value) {
1982 inputs_[0] = value; 1982 inputs_[0] = value;
1983 } 1983 }
1984 1984
1985 LOperand* value() { return inputs_[0]; } 1985 LOperand* value() { return inputs_[0]; }
1986 1986
1987 DECLARE_CONCRETE_INSTRUCTION(Uint32ToDouble, "uint32-to-double") 1987 DECLARE_CONCRETE_INSTRUCTION(Uint32ToDouble, "uint32-to-double")
1988 }; 1988 };
1989 1989
1990 1990
1991 class LNumberTagI V8_FINAL : public LTemplateInstruction<1, 1, 2> { 1991 class LNumberTagI FINAL : public LTemplateInstruction<1, 1, 2> {
1992 public: 1992 public:
1993 LNumberTagI(LOperand* value, LOperand* temp1, LOperand* temp2) { 1993 LNumberTagI(LOperand* value, LOperand* temp1, LOperand* temp2) {
1994 inputs_[0] = value; 1994 inputs_[0] = value;
1995 temps_[0] = temp1; 1995 temps_[0] = temp1;
1996 temps_[1] = temp2; 1996 temps_[1] = temp2;
1997 } 1997 }
1998 1998
1999 LOperand* value() { return inputs_[0]; } 1999 LOperand* value() { return inputs_[0]; }
2000 LOperand* temp1() { return temps_[0]; } 2000 LOperand* temp1() { return temps_[0]; }
2001 LOperand* temp2() { return temps_[1]; } 2001 LOperand* temp2() { return temps_[1]; }
2002 2002
2003 DECLARE_CONCRETE_INSTRUCTION(NumberTagI, "number-tag-i") 2003 DECLARE_CONCRETE_INSTRUCTION(NumberTagI, "number-tag-i")
2004 }; 2004 };
2005 2005
2006 2006
2007 class LNumberTagU V8_FINAL : public LTemplateInstruction<1, 1, 2> { 2007 class LNumberTagU FINAL : public LTemplateInstruction<1, 1, 2> {
2008 public: 2008 public:
2009 LNumberTagU(LOperand* value, LOperand* temp1, LOperand* temp2) { 2009 LNumberTagU(LOperand* value, LOperand* temp1, LOperand* temp2) {
2010 inputs_[0] = value; 2010 inputs_[0] = value;
2011 temps_[0] = temp1; 2011 temps_[0] = temp1;
2012 temps_[1] = temp2; 2012 temps_[1] = temp2;
2013 } 2013 }
2014 2014
2015 LOperand* value() { return inputs_[0]; } 2015 LOperand* value() { return inputs_[0]; }
2016 LOperand* temp1() { return temps_[0]; } 2016 LOperand* temp1() { return temps_[0]; }
2017 LOperand* temp2() { return temps_[1]; } 2017 LOperand* temp2() { return temps_[1]; }
2018 2018
2019 DECLARE_CONCRETE_INSTRUCTION(NumberTagU, "number-tag-u") 2019 DECLARE_CONCRETE_INSTRUCTION(NumberTagU, "number-tag-u")
2020 }; 2020 };
2021 2021
2022 2022
2023 class LNumberTagD V8_FINAL : public LTemplateInstruction<1, 1, 2> { 2023 class LNumberTagD FINAL : public LTemplateInstruction<1, 1, 2> {
2024 public: 2024 public:
2025 LNumberTagD(LOperand* value, LOperand* temp, LOperand* temp2) { 2025 LNumberTagD(LOperand* value, LOperand* temp, LOperand* temp2) {
2026 inputs_[0] = value; 2026 inputs_[0] = value;
2027 temps_[0] = temp; 2027 temps_[0] = temp;
2028 temps_[1] = temp2; 2028 temps_[1] = temp2;
2029 } 2029 }
2030 2030
2031 LOperand* value() { return inputs_[0]; } 2031 LOperand* value() { return inputs_[0]; }
2032 LOperand* temp() { return temps_[0]; } 2032 LOperand* temp() { return temps_[0]; }
2033 LOperand* temp2() { return temps_[1]; } 2033 LOperand* temp2() { return temps_[1]; }
2034 2034
2035 DECLARE_CONCRETE_INSTRUCTION(NumberTagD, "number-tag-d") 2035 DECLARE_CONCRETE_INSTRUCTION(NumberTagD, "number-tag-d")
2036 DECLARE_HYDROGEN_ACCESSOR(Change) 2036 DECLARE_HYDROGEN_ACCESSOR(Change)
2037 }; 2037 };
2038 2038
2039 2039
2040 class LDoubleToSmi V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2040 class LDoubleToSmi FINAL : public LTemplateInstruction<1, 1, 0> {
2041 public: 2041 public:
2042 explicit LDoubleToSmi(LOperand* value) { 2042 explicit LDoubleToSmi(LOperand* value) {
2043 inputs_[0] = value; 2043 inputs_[0] = value;
2044 } 2044 }
2045 2045
2046 LOperand* value() { return inputs_[0]; } 2046 LOperand* value() { return inputs_[0]; }
2047 2047
2048 DECLARE_CONCRETE_INSTRUCTION(DoubleToSmi, "double-to-smi") 2048 DECLARE_CONCRETE_INSTRUCTION(DoubleToSmi, "double-to-smi")
2049 DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) 2049 DECLARE_HYDROGEN_ACCESSOR(UnaryOperation)
2050 2050
2051 bool truncating() { return hydrogen()->CanTruncateToInt32(); } 2051 bool truncating() { return hydrogen()->CanTruncateToInt32(); }
2052 }; 2052 };
2053 2053
2054 2054
2055 // Sometimes truncating conversion from a tagged value to an int32. 2055 // Sometimes truncating conversion from a tagged value to an int32.
2056 class LDoubleToI V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2056 class LDoubleToI FINAL : public LTemplateInstruction<1, 1, 0> {
2057 public: 2057 public:
2058 explicit LDoubleToI(LOperand* value) { 2058 explicit LDoubleToI(LOperand* value) {
2059 inputs_[0] = value; 2059 inputs_[0] = value;
2060 } 2060 }
2061 2061
2062 LOperand* value() { return inputs_[0]; } 2062 LOperand* value() { return inputs_[0]; }
2063 2063
2064 DECLARE_CONCRETE_INSTRUCTION(DoubleToI, "double-to-i") 2064 DECLARE_CONCRETE_INSTRUCTION(DoubleToI, "double-to-i")
2065 DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) 2065 DECLARE_HYDROGEN_ACCESSOR(UnaryOperation)
2066 2066
2067 bool truncating() { return hydrogen()->CanTruncateToInt32(); } 2067 bool truncating() { return hydrogen()->CanTruncateToInt32(); }
2068 }; 2068 };
2069 2069
2070 2070
2071 // Truncating conversion from a tagged value to an int32. 2071 // Truncating conversion from a tagged value to an int32.
2072 class LTaggedToI V8_FINAL : public LTemplateInstruction<1, 1, 2> { 2072 class LTaggedToI FINAL : public LTemplateInstruction<1, 1, 2> {
2073 public: 2073 public:
2074 LTaggedToI(LOperand* value, 2074 LTaggedToI(LOperand* value,
2075 LOperand* temp, 2075 LOperand* temp,
2076 LOperand* temp2) { 2076 LOperand* temp2) {
2077 inputs_[0] = value; 2077 inputs_[0] = value;
2078 temps_[0] = temp; 2078 temps_[0] = temp;
2079 temps_[1] = temp2; 2079 temps_[1] = temp2;
2080 } 2080 }
2081 2081
2082 LOperand* value() { return inputs_[0]; } 2082 LOperand* value() { return inputs_[0]; }
2083 LOperand* temp() { return temps_[0]; } 2083 LOperand* temp() { return temps_[0]; }
2084 LOperand* temp2() { return temps_[1]; } 2084 LOperand* temp2() { return temps_[1]; }
2085 2085
2086 DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i") 2086 DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i")
2087 DECLARE_HYDROGEN_ACCESSOR(Change) 2087 DECLARE_HYDROGEN_ACCESSOR(Change)
2088 2088
2089 bool truncating() { return hydrogen()->CanTruncateToInt32(); } 2089 bool truncating() { return hydrogen()->CanTruncateToInt32(); }
2090 }; 2090 };
2091 2091
2092 2092
2093 class LSmiTag V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2093 class LSmiTag FINAL : public LTemplateInstruction<1, 1, 0> {
2094 public: 2094 public:
2095 explicit LSmiTag(LOperand* value) { 2095 explicit LSmiTag(LOperand* value) {
2096 inputs_[0] = value; 2096 inputs_[0] = value;
2097 } 2097 }
2098 2098
2099 LOperand* value() { return inputs_[0]; } 2099 LOperand* value() { return inputs_[0]; }
2100 2100
2101 DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag") 2101 DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag")
2102 DECLARE_HYDROGEN_ACCESSOR(Change) 2102 DECLARE_HYDROGEN_ACCESSOR(Change)
2103 }; 2103 };
2104 2104
2105 2105
2106 class LNumberUntagD V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2106 class LNumberUntagD FINAL : public LTemplateInstruction<1, 1, 0> {
2107 public: 2107 public:
2108 explicit LNumberUntagD(LOperand* value) { 2108 explicit LNumberUntagD(LOperand* value) {
2109 inputs_[0] = value; 2109 inputs_[0] = value;
2110 } 2110 }
2111 2111
2112 LOperand* value() { return inputs_[0]; } 2112 LOperand* value() { return inputs_[0]; }
2113 2113
2114 DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag") 2114 DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag")
2115 DECLARE_HYDROGEN_ACCESSOR(Change) 2115 DECLARE_HYDROGEN_ACCESSOR(Change)
2116 }; 2116 };
2117 2117
2118 2118
2119 class LSmiUntag V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2119 class LSmiUntag FINAL : public LTemplateInstruction<1, 1, 0> {
2120 public: 2120 public:
2121 LSmiUntag(LOperand* value, bool needs_check) 2121 LSmiUntag(LOperand* value, bool needs_check)
2122 : needs_check_(needs_check) { 2122 : needs_check_(needs_check) {
2123 inputs_[0] = value; 2123 inputs_[0] = value;
2124 } 2124 }
2125 2125
2126 LOperand* value() { return inputs_[0]; } 2126 LOperand* value() { return inputs_[0]; }
2127 bool needs_check() const { return needs_check_; } 2127 bool needs_check() const { return needs_check_; }
2128 2128
2129 DECLARE_CONCRETE_INSTRUCTION(SmiUntag, "smi-untag") 2129 DECLARE_CONCRETE_INSTRUCTION(SmiUntag, "smi-untag")
2130 2130
2131 private: 2131 private:
2132 bool needs_check_; 2132 bool needs_check_;
2133 }; 2133 };
2134 2134
2135 2135
2136 class LStoreNamedField V8_FINAL : public LTemplateInstruction<0, 2, 1> { 2136 class LStoreNamedField FINAL : public LTemplateInstruction<0, 2, 1> {
2137 public: 2137 public:
2138 LStoreNamedField(LOperand* object, LOperand* value, LOperand* temp) { 2138 LStoreNamedField(LOperand* object, LOperand* value, LOperand* temp) {
2139 inputs_[0] = object; 2139 inputs_[0] = object;
2140 inputs_[1] = value; 2140 inputs_[1] = value;
2141 temps_[0] = temp; 2141 temps_[0] = temp;
2142 } 2142 }
2143 2143
2144 LOperand* object() { return inputs_[0]; } 2144 LOperand* object() { return inputs_[0]; }
2145 LOperand* value() { return inputs_[1]; } 2145 LOperand* value() { return inputs_[1]; }
2146 LOperand* temp() { return temps_[0]; } 2146 LOperand* temp() { return temps_[0]; }
2147 2147
2148 DECLARE_CONCRETE_INSTRUCTION(StoreNamedField, "store-named-field") 2148 DECLARE_CONCRETE_INSTRUCTION(StoreNamedField, "store-named-field")
2149 DECLARE_HYDROGEN_ACCESSOR(StoreNamedField) 2149 DECLARE_HYDROGEN_ACCESSOR(StoreNamedField)
2150 2150
2151 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2151 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
2152 2152
2153 Representation representation() const { 2153 Representation representation() const {
2154 return hydrogen()->field_representation(); 2154 return hydrogen()->field_representation();
2155 } 2155 }
2156 }; 2156 };
2157 2157
2158 2158
2159 class LStoreNamedGeneric V8_FINAL : public LTemplateInstruction<0, 3, 0> { 2159 class LStoreNamedGeneric FINAL : public LTemplateInstruction<0, 3, 0> {
2160 public: 2160 public:
2161 LStoreNamedGeneric(LOperand* context, LOperand* object, LOperand* value) { 2161 LStoreNamedGeneric(LOperand* context, LOperand* object, LOperand* value) {
2162 inputs_[0] = context; 2162 inputs_[0] = context;
2163 inputs_[1] = object; 2163 inputs_[1] = object;
2164 inputs_[2] = value; 2164 inputs_[2] = value;
2165 } 2165 }
2166 2166
2167 LOperand* context() { return inputs_[0]; } 2167 LOperand* context() { return inputs_[0]; }
2168 LOperand* object() { return inputs_[1]; } 2168 LOperand* object() { return inputs_[1]; }
2169 LOperand* value() { return inputs_[2]; } 2169 LOperand* value() { return inputs_[2]; }
2170 2170
2171 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic") 2171 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic")
2172 DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric) 2172 DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric)
2173 2173
2174 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2174 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
2175 2175
2176 Handle<Object> name() const { return hydrogen()->name(); } 2176 Handle<Object> name() const { return hydrogen()->name(); }
2177 StrictMode strict_mode() { return hydrogen()->strict_mode(); } 2177 StrictMode strict_mode() { return hydrogen()->strict_mode(); }
2178 }; 2178 };
2179 2179
2180 2180
2181 class LStoreKeyed V8_FINAL : public LTemplateInstruction<0, 3, 0> { 2181 class LStoreKeyed FINAL : public LTemplateInstruction<0, 3, 0> {
2182 public: 2182 public:
2183 LStoreKeyed(LOperand* object, LOperand* key, LOperand* value) { 2183 LStoreKeyed(LOperand* object, LOperand* key, LOperand* value) {
2184 inputs_[0] = object; 2184 inputs_[0] = object;
2185 inputs_[1] = key; 2185 inputs_[1] = key;
2186 inputs_[2] = value; 2186 inputs_[2] = value;
2187 } 2187 }
2188 2188
2189 bool is_external() const { return hydrogen()->is_external(); } 2189 bool is_external() const { return hydrogen()->is_external(); }
2190 bool is_fixed_typed_array() const { 2190 bool is_fixed_typed_array() const {
2191 return hydrogen()->is_fixed_typed_array(); 2191 return hydrogen()->is_fixed_typed_array();
2192 } 2192 }
2193 bool is_typed_elements() const { 2193 bool is_typed_elements() const {
2194 return is_external() || is_fixed_typed_array(); 2194 return is_external() || is_fixed_typed_array();
2195 } 2195 }
2196 LOperand* elements() { return inputs_[0]; } 2196 LOperand* elements() { return inputs_[0]; }
2197 LOperand* key() { return inputs_[1]; } 2197 LOperand* key() { return inputs_[1]; }
2198 LOperand* value() { return inputs_[2]; } 2198 LOperand* value() { return inputs_[2]; }
2199 ElementsKind elements_kind() const { 2199 ElementsKind elements_kind() const {
2200 return hydrogen()->elements_kind(); 2200 return hydrogen()->elements_kind();
2201 } 2201 }
2202 2202
2203 DECLARE_CONCRETE_INSTRUCTION(StoreKeyed, "store-keyed") 2203 DECLARE_CONCRETE_INSTRUCTION(StoreKeyed, "store-keyed")
2204 DECLARE_HYDROGEN_ACCESSOR(StoreKeyed) 2204 DECLARE_HYDROGEN_ACCESSOR(StoreKeyed)
2205 2205
2206 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2206 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
2207 bool NeedsCanonicalization() { return hydrogen()->NeedsCanonicalization(); } 2207 bool NeedsCanonicalization() { return hydrogen()->NeedsCanonicalization(); }
2208 uint32_t base_offset() const { return hydrogen()->base_offset(); } 2208 uint32_t base_offset() const { return hydrogen()->base_offset(); }
2209 }; 2209 };
2210 2210
2211 2211
2212 class LStoreKeyedGeneric V8_FINAL : public LTemplateInstruction<0, 4, 0> { 2212 class LStoreKeyedGeneric FINAL : public LTemplateInstruction<0, 4, 0> {
2213 public: 2213 public:
2214 LStoreKeyedGeneric(LOperand* context, 2214 LStoreKeyedGeneric(LOperand* context,
2215 LOperand* obj, 2215 LOperand* obj,
2216 LOperand* key, 2216 LOperand* key,
2217 LOperand* value) { 2217 LOperand* value) {
2218 inputs_[0] = context; 2218 inputs_[0] = context;
2219 inputs_[1] = obj; 2219 inputs_[1] = obj;
2220 inputs_[2] = key; 2220 inputs_[2] = key;
2221 inputs_[3] = value; 2221 inputs_[3] = value;
2222 } 2222 }
2223 2223
2224 LOperand* context() { return inputs_[0]; } 2224 LOperand* context() { return inputs_[0]; }
2225 LOperand* object() { return inputs_[1]; } 2225 LOperand* object() { return inputs_[1]; }
2226 LOperand* key() { return inputs_[2]; } 2226 LOperand* key() { return inputs_[2]; }
2227 LOperand* value() { return inputs_[3]; } 2227 LOperand* value() { return inputs_[3]; }
2228 2228
2229 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") 2229 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic")
2230 DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric) 2230 DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric)
2231 2231
2232 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2232 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
2233 2233
2234 StrictMode strict_mode() { return hydrogen()->strict_mode(); } 2234 StrictMode strict_mode() { return hydrogen()->strict_mode(); }
2235 }; 2235 };
2236 2236
2237 2237
2238 class LTransitionElementsKind V8_FINAL : public LTemplateInstruction<0, 2, 1> { 2238 class LTransitionElementsKind FINAL : public LTemplateInstruction<0, 2, 1> {
2239 public: 2239 public:
2240 LTransitionElementsKind(LOperand* object, 2240 LTransitionElementsKind(LOperand* object,
2241 LOperand* context, 2241 LOperand* context,
2242 LOperand* new_map_temp) { 2242 LOperand* new_map_temp) {
2243 inputs_[0] = object; 2243 inputs_[0] = object;
2244 inputs_[1] = context; 2244 inputs_[1] = context;
2245 temps_[0] = new_map_temp; 2245 temps_[0] = new_map_temp;
2246 } 2246 }
2247 2247
2248 LOperand* context() { return inputs_[1]; } 2248 LOperand* context() { return inputs_[1]; }
2249 LOperand* object() { return inputs_[0]; } 2249 LOperand* object() { return inputs_[0]; }
2250 LOperand* new_map_temp() { return temps_[0]; } 2250 LOperand* new_map_temp() { return temps_[0]; }
2251 2251
2252 DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind, 2252 DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind,
2253 "transition-elements-kind") 2253 "transition-elements-kind")
2254 DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind) 2254 DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind)
2255 2255
2256 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2256 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
2257 2257
2258 Handle<Map> original_map() { return hydrogen()->original_map().handle(); } 2258 Handle<Map> original_map() { return hydrogen()->original_map().handle(); }
2259 Handle<Map> transitioned_map() { 2259 Handle<Map> transitioned_map() {
2260 return hydrogen()->transitioned_map().handle(); 2260 return hydrogen()->transitioned_map().handle();
2261 } 2261 }
2262 ElementsKind from_kind() { return hydrogen()->from_kind(); } 2262 ElementsKind from_kind() { return hydrogen()->from_kind(); }
2263 ElementsKind to_kind() { return hydrogen()->to_kind(); } 2263 ElementsKind to_kind() { return hydrogen()->to_kind(); }
2264 }; 2264 };
2265 2265
2266 2266
2267 class LTrapAllocationMemento V8_FINAL : public LTemplateInstruction<0, 1, 1> { 2267 class LTrapAllocationMemento FINAL : public LTemplateInstruction<0, 1, 1> {
2268 public: 2268 public:
2269 LTrapAllocationMemento(LOperand* object, 2269 LTrapAllocationMemento(LOperand* object,
2270 LOperand* temp) { 2270 LOperand* temp) {
2271 inputs_[0] = object; 2271 inputs_[0] = object;
2272 temps_[0] = temp; 2272 temps_[0] = temp;
2273 } 2273 }
2274 2274
2275 LOperand* object() { return inputs_[0]; } 2275 LOperand* object() { return inputs_[0]; }
2276 LOperand* temp() { return temps_[0]; } 2276 LOperand* temp() { return temps_[0]; }
2277 2277
2278 DECLARE_CONCRETE_INSTRUCTION(TrapAllocationMemento, 2278 DECLARE_CONCRETE_INSTRUCTION(TrapAllocationMemento,
2279 "trap-allocation-memento") 2279 "trap-allocation-memento")
2280 }; 2280 };
2281 2281
2282 2282
2283 class LStringAdd V8_FINAL : public LTemplateInstruction<1, 3, 0> { 2283 class LStringAdd FINAL : public LTemplateInstruction<1, 3, 0> {
2284 public: 2284 public:
2285 LStringAdd(LOperand* context, LOperand* left, LOperand* right) { 2285 LStringAdd(LOperand* context, LOperand* left, LOperand* right) {
2286 inputs_[0] = context; 2286 inputs_[0] = context;
2287 inputs_[1] = left; 2287 inputs_[1] = left;
2288 inputs_[2] = right; 2288 inputs_[2] = right;
2289 } 2289 }
2290 2290
2291 LOperand* context() { return inputs_[0]; } 2291 LOperand* context() { return inputs_[0]; }
2292 LOperand* left() { return inputs_[1]; } 2292 LOperand* left() { return inputs_[1]; }
2293 LOperand* right() { return inputs_[2]; } 2293 LOperand* right() { return inputs_[2]; }
2294 2294
2295 DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add") 2295 DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add")
2296 DECLARE_HYDROGEN_ACCESSOR(StringAdd) 2296 DECLARE_HYDROGEN_ACCESSOR(StringAdd)
2297 }; 2297 };
2298 2298
2299 2299
2300 2300
2301 class LStringCharCodeAt V8_FINAL : public LTemplateInstruction<1, 3, 0> { 2301 class LStringCharCodeAt FINAL : public LTemplateInstruction<1, 3, 0> {
2302 public: 2302 public:
2303 LStringCharCodeAt(LOperand* context, LOperand* string, LOperand* index) { 2303 LStringCharCodeAt(LOperand* context, LOperand* string, LOperand* index) {
2304 inputs_[0] = context; 2304 inputs_[0] = context;
2305 inputs_[1] = string; 2305 inputs_[1] = string;
2306 inputs_[2] = index; 2306 inputs_[2] = index;
2307 } 2307 }
2308 2308
2309 LOperand* context() { return inputs_[0]; } 2309 LOperand* context() { return inputs_[0]; }
2310 LOperand* string() { return inputs_[1]; } 2310 LOperand* string() { return inputs_[1]; }
2311 LOperand* index() { return inputs_[2]; } 2311 LOperand* index() { return inputs_[2]; }
2312 2312
2313 DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at") 2313 DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at")
2314 DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt) 2314 DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt)
2315 }; 2315 };
2316 2316
2317 2317
2318 class LStringCharFromCode V8_FINAL : public LTemplateInstruction<1, 2, 0> { 2318 class LStringCharFromCode FINAL : public LTemplateInstruction<1, 2, 0> {
2319 public: 2319 public:
2320 explicit LStringCharFromCode(LOperand* context, LOperand* char_code) { 2320 explicit LStringCharFromCode(LOperand* context, LOperand* char_code) {
2321 inputs_[0] = context; 2321 inputs_[0] = context;
2322 inputs_[1] = char_code; 2322 inputs_[1] = char_code;
2323 } 2323 }
2324 2324
2325 LOperand* context() { return inputs_[0]; } 2325 LOperand* context() { return inputs_[0]; }
2326 LOperand* char_code() { return inputs_[1]; } 2326 LOperand* char_code() { return inputs_[1]; }
2327 2327
2328 DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code") 2328 DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code")
2329 DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode) 2329 DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode)
2330 }; 2330 };
2331 2331
2332 2332
2333 class LCheckValue V8_FINAL : public LTemplateInstruction<0, 1, 0> { 2333 class LCheckValue FINAL : public LTemplateInstruction<0, 1, 0> {
2334 public: 2334 public:
2335 explicit LCheckValue(LOperand* value) { 2335 explicit LCheckValue(LOperand* value) {
2336 inputs_[0] = value; 2336 inputs_[0] = value;
2337 } 2337 }
2338 2338
2339 LOperand* value() { return inputs_[0]; } 2339 LOperand* value() { return inputs_[0]; }
2340 2340
2341 DECLARE_CONCRETE_INSTRUCTION(CheckValue, "check-value") 2341 DECLARE_CONCRETE_INSTRUCTION(CheckValue, "check-value")
2342 DECLARE_HYDROGEN_ACCESSOR(CheckValue) 2342 DECLARE_HYDROGEN_ACCESSOR(CheckValue)
2343 }; 2343 };
2344 2344
2345 2345
2346 class LCheckInstanceType V8_FINAL : public LTemplateInstruction<0, 1, 0> { 2346 class LCheckInstanceType FINAL : public LTemplateInstruction<0, 1, 0> {
2347 public: 2347 public:
2348 explicit LCheckInstanceType(LOperand* value) { 2348 explicit LCheckInstanceType(LOperand* value) {
2349 inputs_[0] = value; 2349 inputs_[0] = value;
2350 } 2350 }
2351 2351
2352 LOperand* value() { return inputs_[0]; } 2352 LOperand* value() { return inputs_[0]; }
2353 2353
2354 DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type") 2354 DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type")
2355 DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType) 2355 DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType)
2356 }; 2356 };
2357 2357
2358 2358
2359 class LCheckMaps V8_FINAL : public LTemplateInstruction<0, 1, 0> { 2359 class LCheckMaps FINAL : public LTemplateInstruction<0, 1, 0> {
2360 public: 2360 public:
2361 explicit LCheckMaps(LOperand* value = NULL) { 2361 explicit LCheckMaps(LOperand* value = NULL) {
2362 inputs_[0] = value; 2362 inputs_[0] = value;
2363 } 2363 }
2364 2364
2365 LOperand* value() { return inputs_[0]; } 2365 LOperand* value() { return inputs_[0]; }
2366 2366
2367 DECLARE_CONCRETE_INSTRUCTION(CheckMaps, "check-maps") 2367 DECLARE_CONCRETE_INSTRUCTION(CheckMaps, "check-maps")
2368 DECLARE_HYDROGEN_ACCESSOR(CheckMaps) 2368 DECLARE_HYDROGEN_ACCESSOR(CheckMaps)
2369 }; 2369 };
2370 2370
2371 2371
2372 class LCheckSmi V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2372 class LCheckSmi FINAL : public LTemplateInstruction<1, 1, 0> {
2373 public: 2373 public:
2374 explicit LCheckSmi(LOperand* value) { 2374 explicit LCheckSmi(LOperand* value) {
2375 inputs_[0] = value; 2375 inputs_[0] = value;
2376 } 2376 }
2377 2377
2378 LOperand* value() { return inputs_[0]; } 2378 LOperand* value() { return inputs_[0]; }
2379 2379
2380 DECLARE_CONCRETE_INSTRUCTION(CheckSmi, "check-smi") 2380 DECLARE_CONCRETE_INSTRUCTION(CheckSmi, "check-smi")
2381 }; 2381 };
2382 2382
2383 2383
2384 class LCheckNonSmi V8_FINAL : public LTemplateInstruction<0, 1, 0> { 2384 class LCheckNonSmi FINAL : public LTemplateInstruction<0, 1, 0> {
2385 public: 2385 public:
2386 explicit LCheckNonSmi(LOperand* value) { 2386 explicit LCheckNonSmi(LOperand* value) {
2387 inputs_[0] = value; 2387 inputs_[0] = value;
2388 } 2388 }
2389 2389
2390 LOperand* value() { return inputs_[0]; } 2390 LOperand* value() { return inputs_[0]; }
2391 2391
2392 DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi") 2392 DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi")
2393 DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject) 2393 DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject)
2394 }; 2394 };
2395 2395
2396 2396
2397 class LClampDToUint8 V8_FINAL : public LTemplateInstruction<1, 1, 1> { 2397 class LClampDToUint8 FINAL : public LTemplateInstruction<1, 1, 1> {
2398 public: 2398 public:
2399 LClampDToUint8(LOperand* unclamped, LOperand* temp) { 2399 LClampDToUint8(LOperand* unclamped, LOperand* temp) {
2400 inputs_[0] = unclamped; 2400 inputs_[0] = unclamped;
2401 temps_[0] = temp; 2401 temps_[0] = temp;
2402 } 2402 }
2403 2403
2404 LOperand* unclamped() { return inputs_[0]; } 2404 LOperand* unclamped() { return inputs_[0]; }
2405 LOperand* temp() { return temps_[0]; } 2405 LOperand* temp() { return temps_[0]; }
2406 2406
2407 DECLARE_CONCRETE_INSTRUCTION(ClampDToUint8, "clamp-d-to-uint8") 2407 DECLARE_CONCRETE_INSTRUCTION(ClampDToUint8, "clamp-d-to-uint8")
2408 }; 2408 };
2409 2409
2410 2410
2411 class LClampIToUint8 V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2411 class LClampIToUint8 FINAL : public LTemplateInstruction<1, 1, 0> {
2412 public: 2412 public:
2413 explicit LClampIToUint8(LOperand* unclamped) { 2413 explicit LClampIToUint8(LOperand* unclamped) {
2414 inputs_[0] = unclamped; 2414 inputs_[0] = unclamped;
2415 } 2415 }
2416 2416
2417 LOperand* unclamped() { return inputs_[0]; } 2417 LOperand* unclamped() { return inputs_[0]; }
2418 2418
2419 DECLARE_CONCRETE_INSTRUCTION(ClampIToUint8, "clamp-i-to-uint8") 2419 DECLARE_CONCRETE_INSTRUCTION(ClampIToUint8, "clamp-i-to-uint8")
2420 }; 2420 };
2421 2421
2422 2422
2423 class LClampTToUint8 V8_FINAL : public LTemplateInstruction<1, 1, 1> { 2423 class LClampTToUint8 FINAL : public LTemplateInstruction<1, 1, 1> {
2424 public: 2424 public:
2425 LClampTToUint8(LOperand* unclamped, LOperand* temp) { 2425 LClampTToUint8(LOperand* unclamped, LOperand* temp) {
2426 inputs_[0] = unclamped; 2426 inputs_[0] = unclamped;
2427 temps_[0] = temp; 2427 temps_[0] = temp;
2428 } 2428 }
2429 2429
2430 LOperand* unclamped() { return inputs_[0]; } 2430 LOperand* unclamped() { return inputs_[0]; }
2431 LOperand* temp() { return temps_[0]; } 2431 LOperand* temp() { return temps_[0]; }
2432 2432
2433 DECLARE_CONCRETE_INSTRUCTION(ClampTToUint8, "clamp-t-to-uint8") 2433 DECLARE_CONCRETE_INSTRUCTION(ClampTToUint8, "clamp-t-to-uint8")
2434 }; 2434 };
2435 2435
2436 2436
2437 class LDoubleBits V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2437 class LDoubleBits FINAL : public LTemplateInstruction<1, 1, 0> {
2438 public: 2438 public:
2439 explicit LDoubleBits(LOperand* value) { 2439 explicit LDoubleBits(LOperand* value) {
2440 inputs_[0] = value; 2440 inputs_[0] = value;
2441 } 2441 }
2442 2442
2443 LOperand* value() { return inputs_[0]; } 2443 LOperand* value() { return inputs_[0]; }
2444 2444
2445 DECLARE_CONCRETE_INSTRUCTION(DoubleBits, "double-bits") 2445 DECLARE_CONCRETE_INSTRUCTION(DoubleBits, "double-bits")
2446 DECLARE_HYDROGEN_ACCESSOR(DoubleBits) 2446 DECLARE_HYDROGEN_ACCESSOR(DoubleBits)
2447 }; 2447 };
2448 2448
2449 2449
2450 class LConstructDouble V8_FINAL : public LTemplateInstruction<1, 2, 0> { 2450 class LConstructDouble FINAL : public LTemplateInstruction<1, 2, 0> {
2451 public: 2451 public:
2452 LConstructDouble(LOperand* hi, LOperand* lo) { 2452 LConstructDouble(LOperand* hi, LOperand* lo) {
2453 inputs_[0] = hi; 2453 inputs_[0] = hi;
2454 inputs_[1] = lo; 2454 inputs_[1] = lo;
2455 } 2455 }
2456 2456
2457 LOperand* hi() { return inputs_[0]; } 2457 LOperand* hi() { return inputs_[0]; }
2458 LOperand* lo() { return inputs_[1]; } 2458 LOperand* lo() { return inputs_[1]; }
2459 2459
2460 DECLARE_CONCRETE_INSTRUCTION(ConstructDouble, "construct-double") 2460 DECLARE_CONCRETE_INSTRUCTION(ConstructDouble, "construct-double")
2461 }; 2461 };
2462 2462
2463 2463
2464 class LAllocate V8_FINAL : public LTemplateInstruction<1, 2, 2> { 2464 class LAllocate FINAL : public LTemplateInstruction<1, 2, 2> {
2465 public: 2465 public:
2466 LAllocate(LOperand* context, 2466 LAllocate(LOperand* context,
2467 LOperand* size, 2467 LOperand* size,
2468 LOperand* temp1, 2468 LOperand* temp1,
2469 LOperand* temp2) { 2469 LOperand* temp2) {
2470 inputs_[0] = context; 2470 inputs_[0] = context;
2471 inputs_[1] = size; 2471 inputs_[1] = size;
2472 temps_[0] = temp1; 2472 temps_[0] = temp1;
2473 temps_[1] = temp2; 2473 temps_[1] = temp2;
2474 } 2474 }
2475 2475
2476 LOperand* context() { return inputs_[0]; } 2476 LOperand* context() { return inputs_[0]; }
2477 LOperand* size() { return inputs_[1]; } 2477 LOperand* size() { return inputs_[1]; }
2478 LOperand* temp1() { return temps_[0]; } 2478 LOperand* temp1() { return temps_[0]; }
2479 LOperand* temp2() { return temps_[1]; } 2479 LOperand* temp2() { return temps_[1]; }
2480 2480
2481 DECLARE_CONCRETE_INSTRUCTION(Allocate, "allocate") 2481 DECLARE_CONCRETE_INSTRUCTION(Allocate, "allocate")
2482 DECLARE_HYDROGEN_ACCESSOR(Allocate) 2482 DECLARE_HYDROGEN_ACCESSOR(Allocate)
2483 }; 2483 };
2484 2484
2485 2485
2486 class LRegExpLiteral V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2486 class LRegExpLiteral FINAL : public LTemplateInstruction<1, 1, 0> {
2487 public: 2487 public:
2488 explicit LRegExpLiteral(LOperand* context) { 2488 explicit LRegExpLiteral(LOperand* context) {
2489 inputs_[0] = context; 2489 inputs_[0] = context;
2490 } 2490 }
2491 2491
2492 LOperand* context() { return inputs_[0]; } 2492 LOperand* context() { return inputs_[0]; }
2493 2493
2494 DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal") 2494 DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal")
2495 DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral) 2495 DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral)
2496 }; 2496 };
2497 2497
2498 2498
2499 class LFunctionLiteral V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2499 class LFunctionLiteral FINAL : public LTemplateInstruction<1, 1, 0> {
2500 public: 2500 public:
2501 explicit LFunctionLiteral(LOperand* context) { 2501 explicit LFunctionLiteral(LOperand* context) {
2502 inputs_[0] = context; 2502 inputs_[0] = context;
2503 } 2503 }
2504 2504
2505 LOperand* context() { return inputs_[0]; } 2505 LOperand* context() { return inputs_[0]; }
2506 2506
2507 DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal") 2507 DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal")
2508 DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral) 2508 DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral)
2509 }; 2509 };
2510 2510
2511 2511
2512 class LToFastProperties V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2512 class LToFastProperties FINAL : public LTemplateInstruction<1, 1, 0> {
2513 public: 2513 public:
2514 explicit LToFastProperties(LOperand* value) { 2514 explicit LToFastProperties(LOperand* value) {
2515 inputs_[0] = value; 2515 inputs_[0] = value;
2516 } 2516 }
2517 2517
2518 LOperand* value() { return inputs_[0]; } 2518 LOperand* value() { return inputs_[0]; }
2519 2519
2520 DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties") 2520 DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties")
2521 DECLARE_HYDROGEN_ACCESSOR(ToFastProperties) 2521 DECLARE_HYDROGEN_ACCESSOR(ToFastProperties)
2522 }; 2522 };
2523 2523
2524 2524
2525 class LTypeof V8_FINAL : public LTemplateInstruction<1, 2, 0> { 2525 class LTypeof FINAL : public LTemplateInstruction<1, 2, 0> {
2526 public: 2526 public:
2527 LTypeof(LOperand* context, LOperand* value) { 2527 LTypeof(LOperand* context, LOperand* value) {
2528 inputs_[0] = context; 2528 inputs_[0] = context;
2529 inputs_[1] = value; 2529 inputs_[1] = value;
2530 } 2530 }
2531 2531
2532 LOperand* context() { return inputs_[0]; } 2532 LOperand* context() { return inputs_[0]; }
2533 LOperand* value() { return inputs_[1]; } 2533 LOperand* value() { return inputs_[1]; }
2534 2534
2535 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") 2535 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof")
2536 }; 2536 };
2537 2537
2538 2538
2539 class LTypeofIsAndBranch V8_FINAL : public LControlInstruction<1, 0> { 2539 class LTypeofIsAndBranch FINAL : public LControlInstruction<1, 0> {
2540 public: 2540 public:
2541 explicit LTypeofIsAndBranch(LOperand* value) { 2541 explicit LTypeofIsAndBranch(LOperand* value) {
2542 inputs_[0] = value; 2542 inputs_[0] = value;
2543 } 2543 }
2544 2544
2545 LOperand* value() { return inputs_[0]; } 2545 LOperand* value() { return inputs_[0]; }
2546 2546
2547 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") 2547 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch")
2548 DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch) 2548 DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch)
2549 2549
2550 Handle<String> type_literal() { return hydrogen()->type_literal(); } 2550 Handle<String> type_literal() { return hydrogen()->type_literal(); }
2551 2551
2552 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2552 virtual void PrintDataTo(StringStream* stream) OVERRIDE;
2553 }; 2553 };
2554 2554
2555 2555
2556 class LIsConstructCallAndBranch V8_FINAL : public LControlInstruction<0, 1> { 2556 class LIsConstructCallAndBranch FINAL : public LControlInstruction<0, 1> {
2557 public: 2557 public:
2558 explicit LIsConstructCallAndBranch(LOperand* temp) { 2558 explicit LIsConstructCallAndBranch(LOperand* temp) {
2559 temps_[0] = temp; 2559 temps_[0] = temp;
2560 } 2560 }
2561 2561
2562 LOperand* temp() { return temps_[0]; } 2562 LOperand* temp() { return temps_[0]; }
2563 2563
2564 DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch, 2564 DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch,
2565 "is-construct-call-and-branch") 2565 "is-construct-call-and-branch")
2566 }; 2566 };
2567 2567
2568 2568
2569 class LOsrEntry V8_FINAL : public LTemplateInstruction<0, 0, 0> { 2569 class LOsrEntry FINAL : public LTemplateInstruction<0, 0, 0> {
2570 public: 2570 public:
2571 LOsrEntry() {} 2571 LOsrEntry() {}
2572 2572
2573 virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE { 2573 virtual bool HasInterestingComment(LCodeGen* gen) const OVERRIDE {
2574 return false; 2574 return false;
2575 } 2575 }
2576 DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry") 2576 DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry")
2577 }; 2577 };
2578 2578
2579 2579
2580 class LStackCheck V8_FINAL : public LTemplateInstruction<0, 1, 0> { 2580 class LStackCheck FINAL : public LTemplateInstruction<0, 1, 0> {
2581 public: 2581 public:
2582 explicit LStackCheck(LOperand* context) { 2582 explicit LStackCheck(LOperand* context) {
2583 inputs_[0] = context; 2583 inputs_[0] = context;
2584 } 2584 }
2585 2585
2586 LOperand* context() { return inputs_[0]; } 2586 LOperand* context() { return inputs_[0]; }
2587 2587
2588 DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check") 2588 DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check")
2589 DECLARE_HYDROGEN_ACCESSOR(StackCheck) 2589 DECLARE_HYDROGEN_ACCESSOR(StackCheck)
2590 2590
2591 Label* done_label() { return &done_label_; } 2591 Label* done_label() { return &done_label_; }
2592 2592
2593 private: 2593 private:
2594 Label done_label_; 2594 Label done_label_;
2595 }; 2595 };
2596 2596
2597 2597
2598 class LForInPrepareMap V8_FINAL : public LTemplateInstruction<1, 2, 0> { 2598 class LForInPrepareMap FINAL : public LTemplateInstruction<1, 2, 0> {
2599 public: 2599 public:
2600 LForInPrepareMap(LOperand* context, LOperand* object) { 2600 LForInPrepareMap(LOperand* context, LOperand* object) {
2601 inputs_[0] = context; 2601 inputs_[0] = context;
2602 inputs_[1] = object; 2602 inputs_[1] = object;
2603 } 2603 }
2604 2604
2605 LOperand* context() { return inputs_[0]; } 2605 LOperand* context() { return inputs_[0]; }
2606 LOperand* object() { return inputs_[1]; } 2606 LOperand* object() { return inputs_[1]; }
2607 2607
2608 DECLARE_CONCRETE_INSTRUCTION(ForInPrepareMap, "for-in-prepare-map") 2608 DECLARE_CONCRETE_INSTRUCTION(ForInPrepareMap, "for-in-prepare-map")
2609 }; 2609 };
2610 2610
2611 2611
2612 class LForInCacheArray V8_FINAL : public LTemplateInstruction<1, 1, 0> { 2612 class LForInCacheArray FINAL : public LTemplateInstruction<1, 1, 0> {
2613 public: 2613 public:
2614 explicit LForInCacheArray(LOperand* map) { 2614 explicit LForInCacheArray(LOperand* map) {
2615 inputs_[0] = map; 2615 inputs_[0] = map;
2616 } 2616 }
2617 2617
2618 LOperand* map() { return inputs_[0]; } 2618 LOperand* map() { return inputs_[0]; }
2619 2619
2620 DECLARE_CONCRETE_INSTRUCTION(ForInCacheArray, "for-in-cache-array") 2620 DECLARE_CONCRETE_INSTRUCTION(ForInCacheArray, "for-in-cache-array")
2621 2621
2622 int idx() { 2622 int idx() {
2623 return HForInCacheArray::cast(this->hydrogen_value())->idx(); 2623 return HForInCacheArray::cast(this->hydrogen_value())->idx();
2624 } 2624 }
2625 }; 2625 };
2626 2626
2627 2627
2628 class LCheckMapValue V8_FINAL : public LTemplateInstruction<0, 2, 0> { 2628 class LCheckMapValue FINAL : public LTemplateInstruction<0, 2, 0> {
2629 public: 2629 public:
2630 LCheckMapValue(LOperand* value, LOperand* map) { 2630 LCheckMapValue(LOperand* value, LOperand* map) {
2631 inputs_[0] = value; 2631 inputs_[0] = value;
2632 inputs_[1] = map; 2632 inputs_[1] = map;
2633 } 2633 }
2634 2634
2635 LOperand* value() { return inputs_[0]; } 2635 LOperand* value() { return inputs_[0]; }
2636 LOperand* map() { return inputs_[1]; } 2636 LOperand* map() { return inputs_[1]; }
2637 2637
2638 DECLARE_CONCRETE_INSTRUCTION(CheckMapValue, "check-map-value") 2638 DECLARE_CONCRETE_INSTRUCTION(CheckMapValue, "check-map-value")
2639 }; 2639 };
2640 2640
2641 2641
2642 class LLoadFieldByIndex V8_FINAL : public LTemplateInstruction<1, 2, 0> { 2642 class LLoadFieldByIndex FINAL : public LTemplateInstruction<1, 2, 0> {
2643 public: 2643 public:
2644 LLoadFieldByIndex(LOperand* object, LOperand* index) { 2644 LLoadFieldByIndex(LOperand* object, LOperand* index) {
2645 inputs_[0] = object; 2645 inputs_[0] = object;
2646 inputs_[1] = index; 2646 inputs_[1] = index;
2647 } 2647 }
2648 2648
2649 LOperand* object() { return inputs_[0]; } 2649 LOperand* object() { return inputs_[0]; }
2650 LOperand* index() { return inputs_[1]; } 2650 LOperand* index() { return inputs_[1]; }
2651 2651
2652 DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex, "load-field-by-index") 2652 DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex, "load-field-by-index")
(...skipping 23 matching lines...) Expand all
2676 LOperand* function() { return inputs_[1]; } 2676 LOperand* function() { return inputs_[1]; }
2677 2677
2678 Handle<ScopeInfo> scope_info() { return hydrogen()->scope_info(); } 2678 Handle<ScopeInfo> scope_info() { return hydrogen()->scope_info(); }
2679 2679
2680 DECLARE_CONCRETE_INSTRUCTION(AllocateBlockContext, "allocate-block-context") 2680 DECLARE_CONCRETE_INSTRUCTION(AllocateBlockContext, "allocate-block-context")
2681 DECLARE_HYDROGEN_ACCESSOR(AllocateBlockContext) 2681 DECLARE_HYDROGEN_ACCESSOR(AllocateBlockContext)
2682 }; 2682 };
2683 2683
2684 2684
2685 class LChunkBuilder; 2685 class LChunkBuilder;
2686 class LPlatformChunk V8_FINAL : public LChunk { 2686 class LPlatformChunk FINAL : public LChunk {
2687 public: 2687 public:
2688 LPlatformChunk(CompilationInfo* info, HGraph* graph) 2688 LPlatformChunk(CompilationInfo* info, HGraph* graph)
2689 : LChunk(info, graph) { } 2689 : LChunk(info, graph) { }
2690 2690
2691 int GetNextSpillIndex(RegisterKind kind); 2691 int GetNextSpillIndex(RegisterKind kind);
2692 LOperand* GetNextSpillSlot(RegisterKind kind); 2692 LOperand* GetNextSpillSlot(RegisterKind kind);
2693 }; 2693 };
2694 2694
2695 2695
2696 class LChunkBuilder V8_FINAL : public LChunkBuilderBase { 2696 class LChunkBuilder FINAL : public LChunkBuilderBase {
2697 public: 2697 public:
2698 LChunkBuilder(CompilationInfo* info, HGraph* graph, LAllocator* allocator) 2698 LChunkBuilder(CompilationInfo* info, HGraph* graph, LAllocator* allocator)
2699 : LChunkBuilderBase(graph->zone()), 2699 : LChunkBuilderBase(graph->zone()),
2700 chunk_(NULL), 2700 chunk_(NULL),
2701 info_(info), 2701 info_(info),
2702 graph_(graph), 2702 graph_(graph),
2703 status_(UNUSED), 2703 status_(UNUSED),
2704 current_instruction_(NULL), 2704 current_instruction_(NULL),
2705 current_block_(NULL), 2705 current_block_(NULL),
2706 next_block_(NULL), 2706 next_block_(NULL),
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
2792 2792
2793 // An input operand in a register or a constant operand. 2793 // An input operand in a register or a constant operand.
2794 MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value); 2794 MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value);
2795 MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value); 2795 MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value);
2796 2796
2797 // An input operand in a constant operand. 2797 // An input operand in a constant operand.
2798 MUST_USE_RESULT LOperand* UseConstant(HValue* value); 2798 MUST_USE_RESULT LOperand* UseConstant(HValue* value);
2799 2799
2800 // An input operand in register, stack slot or a constant operand. 2800 // An input operand in register, stack slot or a constant operand.
2801 // Will not be moved to a register even if one is freely available. 2801 // Will not be moved to a register even if one is freely available.
2802 virtual MUST_USE_RESULT LOperand* UseAny(HValue* value) V8_OVERRIDE; 2802 virtual MUST_USE_RESULT LOperand* UseAny(HValue* value) OVERRIDE;
2803 2803
2804 // Temporary operand that must be in a register. 2804 // Temporary operand that must be in a register.
2805 MUST_USE_RESULT LUnallocated* TempRegister(); 2805 MUST_USE_RESULT LUnallocated* TempRegister();
2806 MUST_USE_RESULT LUnallocated* TempDoubleRegister(); 2806 MUST_USE_RESULT LUnallocated* TempDoubleRegister();
2807 MUST_USE_RESULT LOperand* FixedTemp(Register reg); 2807 MUST_USE_RESULT LOperand* FixedTemp(Register reg);
2808 MUST_USE_RESULT LOperand* FixedTemp(DoubleRegister reg); 2808 MUST_USE_RESULT LOperand* FixedTemp(DoubleRegister reg);
2809 2809
2810 // Methods for setting up define-use relationships. 2810 // Methods for setting up define-use relationships.
2811 // Return the same instruction that they are passed. 2811 // Return the same instruction that they are passed.
2812 LInstruction* Define(LTemplateResultInstruction<1>* instr, 2812 LInstruction* Define(LTemplateResultInstruction<1>* instr,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
2854 2854
2855 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); 2855 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder);
2856 }; 2856 };
2857 2857
2858 #undef DECLARE_HYDROGEN_ACCESSOR 2858 #undef DECLARE_HYDROGEN_ACCESSOR
2859 #undef DECLARE_CONCRETE_INSTRUCTION 2859 #undef DECLARE_CONCRETE_INSTRUCTION
2860 2860
2861 } } // namespace v8::internal 2861 } } // namespace v8::internal
2862 2862
2863 #endif // V8_MIPS_LITHIUM_MIPS_H_ 2863 #endif // V8_MIPS_LITHIUM_MIPS_H_
OLDNEW
« no previous file with comments | « src/mips/lithium-gap-resolver-mips.h ('k') | src/mips64/lithium-codegen-mips64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698