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

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

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

Powered by Google App Engine
This is Rietveld 408576698