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

Side by Side Diff: src/deoptimizer.h

Issue 10778029: Allow uint32 value on optimized frames if they are consumed by safe operations. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: arm and x64 ports Created 8 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
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 544 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 555
556 class Translation BASE_EMBEDDED { 556 class Translation BASE_EMBEDDED {
557 public: 557 public:
558 enum Opcode { 558 enum Opcode {
559 BEGIN, 559 BEGIN,
560 JS_FRAME, 560 JS_FRAME,
561 CONSTRUCT_STUB_FRAME, 561 CONSTRUCT_STUB_FRAME,
562 ARGUMENTS_ADAPTOR_FRAME, 562 ARGUMENTS_ADAPTOR_FRAME,
563 REGISTER, 563 REGISTER,
564 INT32_REGISTER, 564 INT32_REGISTER,
565 UINT32_REGISTER,
565 DOUBLE_REGISTER, 566 DOUBLE_REGISTER,
566 STACK_SLOT, 567 STACK_SLOT,
567 INT32_STACK_SLOT, 568 INT32_STACK_SLOT,
569 UINT32_STACK_SLOT,
568 DOUBLE_STACK_SLOT, 570 DOUBLE_STACK_SLOT,
569 LITERAL, 571 LITERAL,
570 ARGUMENTS_OBJECT, 572 ARGUMENTS_OBJECT,
571 573
572 // A prefix indicating that the next command is a duplicate of the one 574 // A prefix indicating that the next command is a duplicate of the one
573 // that follows it. 575 // that follows it.
574 DUPLICATE 576 DUPLICATE
575 }; 577 };
576 578
577 Translation(TranslationBuffer* buffer, int frame_count, int jsframe_count, 579 Translation(TranslationBuffer* buffer, int frame_count, int jsframe_count,
578 Zone* zone) 580 Zone* zone)
579 : buffer_(buffer), 581 : buffer_(buffer),
580 index_(buffer->CurrentIndex()), 582 index_(buffer->CurrentIndex()),
581 zone_(zone) { 583 zone_(zone) {
582 buffer_->Add(BEGIN, zone); 584 buffer_->Add(BEGIN, zone);
583 buffer_->Add(frame_count, zone); 585 buffer_->Add(frame_count, zone);
584 buffer_->Add(jsframe_count, zone); 586 buffer_->Add(jsframe_count, zone);
585 } 587 }
586 588
587 int index() const { return index_; } 589 int index() const { return index_; }
588 590
589 // Commands. 591 // Commands.
590 void BeginJSFrame(BailoutId node_id, int literal_id, unsigned height); 592 void BeginJSFrame(BailoutId node_id, int literal_id, unsigned height);
591 void BeginArgumentsAdaptorFrame(int literal_id, unsigned height); 593 void BeginArgumentsAdaptorFrame(int literal_id, unsigned height);
592 void BeginConstructStubFrame(int literal_id, unsigned height); 594 void BeginConstructStubFrame(int literal_id, unsigned height);
593 void StoreRegister(Register reg); 595 void StoreRegister(Register reg);
594 void StoreInt32Register(Register reg); 596 void StoreInt32Register(Register reg);
597 void StoreUint32Register(Register reg);
595 void StoreDoubleRegister(DoubleRegister reg); 598 void StoreDoubleRegister(DoubleRegister reg);
596 void StoreStackSlot(int index); 599 void StoreStackSlot(int index);
597 void StoreInt32StackSlot(int index); 600 void StoreInt32StackSlot(int index);
601 void StoreUint32StackSlot(int index);
598 void StoreDoubleStackSlot(int index); 602 void StoreDoubleStackSlot(int index);
599 void StoreLiteral(int literal_id); 603 void StoreLiteral(int literal_id);
600 void StoreArgumentsObject(); 604 void StoreArgumentsObject();
601 void MarkDuplicate(); 605 void MarkDuplicate();
602 606
603 Zone* zone() const { return zone_; } 607 Zone* zone() const { return zone_; }
604 608
605 static int NumberOfOperandsFor(Opcode opcode); 609 static int NumberOfOperandsFor(Opcode opcode);
606 610
607 #if defined(OBJECT_PRINT) || defined(ENABLE_DISASSEMBLER) 611 #if defined(OBJECT_PRINT) || defined(ENABLE_DISASSEMBLER)
(...skipping 29 matching lines...) Expand all
637 DeoptimizingCodeListNode* next_; 641 DeoptimizingCodeListNode* next_;
638 }; 642 };
639 643
640 644
641 class SlotRef BASE_EMBEDDED { 645 class SlotRef BASE_EMBEDDED {
642 public: 646 public:
643 enum SlotRepresentation { 647 enum SlotRepresentation {
644 UNKNOWN, 648 UNKNOWN,
645 TAGGED, 649 TAGGED,
646 INT32, 650 INT32,
651 UINT32,
647 DOUBLE, 652 DOUBLE,
648 LITERAL 653 LITERAL
649 }; 654 };
650 655
651 SlotRef() 656 SlotRef()
652 : addr_(NULL), representation_(UNKNOWN) { } 657 : addr_(NULL), representation_(UNKNOWN) { }
653 658
654 SlotRef(Address addr, SlotRepresentation representation) 659 SlotRef(Address addr, SlotRepresentation representation)
655 : addr_(addr), representation_(representation) { } 660 : addr_(addr), representation_(representation) { }
656 661
657 explicit SlotRef(Object* literal) 662 explicit SlotRef(Object* literal)
658 : literal_(literal), representation_(LITERAL) { } 663 : literal_(literal), representation_(LITERAL) { }
659 664
660 Handle<Object> GetValue() { 665 Handle<Object> GetValue() {
661 switch (representation_) { 666 switch (representation_) {
662 case TAGGED: 667 case TAGGED:
663 return Handle<Object>(Memory::Object_at(addr_)); 668 return Handle<Object>(Memory::Object_at(addr_));
664 669
665 case INT32: { 670 case INT32: {
666 int value = Memory::int32_at(addr_); 671 int value = Memory::int32_at(addr_);
667 if (Smi::IsValid(value)) { 672 if (Smi::IsValid(value)) {
668 return Handle<Object>(Smi::FromInt(value)); 673 return Handle<Object>(Smi::FromInt(value));
669 } else { 674 } else {
670 return Isolate::Current()->factory()->NewNumberFromInt(value); 675 return Isolate::Current()->factory()->NewNumberFromInt(value);
671 } 676 }
672 } 677 }
673 678
679 case UINT32: {
680 uint32_t value = Memory::uint32_at(addr_);
681 if (value <= static_cast<uint32_t>(Smi::kMaxValue)) {
Massi 2012/08/16 13:57:55 Maybe having a Smi::IsValidUint(uint32_t value) me
682 return Handle<Object>(Smi::FromInt(static_cast<int>(value)));
683 } else {
684 return Isolate::Current()->factory()->NewNumber(
685 static_cast<double>(value));
686 }
687 }
688
674 case DOUBLE: { 689 case DOUBLE: {
675 double value = Memory::double_at(addr_); 690 double value = Memory::double_at(addr_);
676 return Isolate::Current()->factory()->NewNumber(value); 691 return Isolate::Current()->factory()->NewNumber(value);
677 } 692 }
678 693
679 case LITERAL: 694 case LITERAL:
680 return literal_; 695 return literal_;
681 696
682 default: 697 default:
683 UNREACHABLE(); 698 UNREACHABLE();
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 Object** expression_stack_; 804 Object** expression_stack_;
790 int source_position_; 805 int source_position_;
791 806
792 friend class Deoptimizer; 807 friend class Deoptimizer;
793 }; 808 };
794 #endif 809 #endif
795 810
796 } } // namespace v8::internal 811 } } // namespace v8::internal
797 812
798 #endif // V8_DEOPTIMIZER_H_ 813 #endif // V8_DEOPTIMIZER_H_
OLDNEW
« no previous file with comments | « src/arm/simulator-arm.cc ('k') | src/deoptimizer.cc » ('j') | test/mjsunit/compiler/uint32.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698