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

Side by Side Diff: src/deoptimizer.h

Issue 90643003: Experimental implementation: Exposing SIMD instructions into JavaScript Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/d8.js ('k') | src/deoptimizer.cc » ('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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 union conversion { 48 union conversion {
49 double d; 49 double d;
50 uint32_t u[2]; 50 uint32_t u[2];
51 } c; 51 } c;
52 c.u[0] = *reinterpret_cast<uint32_t*>(p); 52 c.u[0] = *reinterpret_cast<uint32_t*>(p);
53 c.u[1] = *reinterpret_cast<uint32_t*>(p + 4); 53 c.u[1] = *reinterpret_cast<uint32_t*>(p + 4);
54 return c.d; 54 return c.d;
55 #endif // V8_HOST_CAN_READ_UNALIGNED 55 #endif // V8_HOST_CAN_READ_UNALIGNED
56 } 56 }
57 57
58 static inline float32x4_value_t read_float32x4_value(Address p) {
59 return Memory::float32x4_at(p);
60 }
61
62 static inline int32x4_value_t read_int32x4_value(Address p) {
63 return Memory::int32x4_at(p);
64 }
58 65
59 class FrameDescription; 66 class FrameDescription;
60 class TranslationIterator; 67 class TranslationIterator;
61 class DeoptimizedFrameInfo; 68 class DeoptimizedFrameInfo;
62 69
63 template<typename T> 70 template<typename T>
64 class HeapNumberMaterializationDescriptor BASE_EMBEDDED { 71 class HeapNumberMaterializationDescriptor BASE_EMBEDDED {
65 public: 72 public:
66 HeapNumberMaterializationDescriptor(T destination, double value) 73 HeapNumberMaterializationDescriptor(T destination, double value)
67 : destination_(destination), value_(value) { } 74 : destination_(destination), value_(value) { }
68 75
69 T destination() const { return destination_; } 76 T destination() const { return destination_; }
70 double value() const { return value_; } 77 double value() const { return value_; }
71 78
72 private: 79 private:
73 T destination_; 80 T destination_;
74 double value_; 81 double value_;
75 }; 82 };
76 83
77 84
85 template<typename T>
86 class Float32x4MaterializationDescriptor BASE_EMBEDDED {
87 public:
88 Float32x4MaterializationDescriptor(T destination, float32x4_value_t value)
89 : destination_(destination), value_(value) { }
90
91 T destination() const { return destination_; }
92 float32x4_value_t value() const { return value_; }
93
94 private:
95 T destination_;
96 float32x4_value_t value_;
97 };
98
99
100 template<typename T>
101 class Int32x4MaterializationDescriptor BASE_EMBEDDED {
102 public:
103 Int32x4MaterializationDescriptor(T destination, int32x4_value_t value)
104 : destination_(destination), value_(value) { }
105
106 T destination() const { return destination_; }
107 int32x4_value_t value() const { return value_; }
108
109 private:
110 T destination_;
111 int32x4_value_t value_;
112 };
113
114
78 class ObjectMaterializationDescriptor BASE_EMBEDDED { 115 class ObjectMaterializationDescriptor BASE_EMBEDDED {
79 public: 116 public:
80 ObjectMaterializationDescriptor( 117 ObjectMaterializationDescriptor(
81 Address slot_address, int frame, int length, int duplicate, bool is_args) 118 Address slot_address, int frame, int length, int duplicate, bool is_args)
82 : slot_address_(slot_address), 119 : slot_address_(slot_address),
83 jsframe_index_(frame), 120 jsframe_index_(frame),
84 object_length_(length), 121 object_length_(length),
85 duplicate_object_(duplicate), 122 duplicate_object_(duplicate),
86 is_arguments_(is_args) { } 123 is_arguments_(is_args) { }
87 124
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 379
343 unsigned ComputeIncomingArgumentSize(JSFunction* function) const; 380 unsigned ComputeIncomingArgumentSize(JSFunction* function) const;
344 unsigned ComputeOutgoingArgumentSize() const; 381 unsigned ComputeOutgoingArgumentSize() const;
345 382
346 Object* ComputeLiteral(int index) const; 383 Object* ComputeLiteral(int index) const;
347 384
348 void AddObjectStart(intptr_t slot_address, int argc, bool is_arguments); 385 void AddObjectStart(intptr_t slot_address, int argc, bool is_arguments);
349 void AddObjectDuplication(intptr_t slot, int object_index); 386 void AddObjectDuplication(intptr_t slot, int object_index);
350 void AddObjectTaggedValue(intptr_t value); 387 void AddObjectTaggedValue(intptr_t value);
351 void AddObjectDoubleValue(double value); 388 void AddObjectDoubleValue(double value);
389 void AddObjectFloat32x4Value(float32x4_value_t value);
390 void AddObjectInt32x4Value(int32x4_value_t value);
352 void AddDoubleValue(intptr_t slot_address, double value); 391 void AddDoubleValue(intptr_t slot_address, double value);
392 void AddFloat32x4Value(intptr_t slot_address, float32x4_value_t value);
393 void AddInt32x4Value(intptr_t slot_address, int32x4_value_t value);
353 394
354 bool ArgumentsObjectIsAdapted(int object_index) { 395 bool ArgumentsObjectIsAdapted(int object_index) {
355 ObjectMaterializationDescriptor desc = deferred_objects_.at(object_index); 396 ObjectMaterializationDescriptor desc = deferred_objects_.at(object_index);
356 int reverse_jsframe_index = jsframe_count_ - desc.jsframe_index() - 1; 397 int reverse_jsframe_index = jsframe_count_ - desc.jsframe_index() - 1;
357 return jsframe_has_adapted_arguments_[reverse_jsframe_index]; 398 return jsframe_has_adapted_arguments_[reverse_jsframe_index];
358 } 399 }
359 400
360 Handle<JSFunction> ArgumentsObjectFunction(int object_index) { 401 Handle<JSFunction> ArgumentsObjectFunction(int object_index) {
361 ObjectMaterializationDescriptor desc = deferred_objects_.at(object_index); 402 ObjectMaterializationDescriptor desc = deferred_objects_.at(object_index);
362 int reverse_jsframe_index = jsframe_count_ - desc.jsframe_index() - 1; 403 int reverse_jsframe_index = jsframe_count_ - desc.jsframe_index() - 1;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 int output_count_; 466 int output_count_;
426 // Number of output js frames. 467 // Number of output js frames.
427 int jsframe_count_; 468 int jsframe_count_;
428 // Array of output frame descriptions. 469 // Array of output frame descriptions.
429 FrameDescription** output_; 470 FrameDescription** output_;
430 471
431 // Deferred values to be materialized. 472 // Deferred values to be materialized.
432 List<Object*> deferred_objects_tagged_values_; 473 List<Object*> deferred_objects_tagged_values_;
433 List<HeapNumberMaterializationDescriptor<int> > 474 List<HeapNumberMaterializationDescriptor<int> >
434 deferred_objects_double_values_; 475 deferred_objects_double_values_;
476 List<Float32x4MaterializationDescriptor<int> >
477 deferred_objects_float32x4_values_;
478 List<Int32x4MaterializationDescriptor<int> >
479 deferred_objects_int32x4_values_;
435 List<ObjectMaterializationDescriptor> deferred_objects_; 480 List<ObjectMaterializationDescriptor> deferred_objects_;
436 List<HeapNumberMaterializationDescriptor<Address> > deferred_heap_numbers_; 481 List<HeapNumberMaterializationDescriptor<Address> > deferred_heap_numbers_;
482 List<Float32x4MaterializationDescriptor<Address> > deferred_float32x4s_;
483 List<Int32x4MaterializationDescriptor<Address> > deferred_int32x4s_;
437 484
438 // Output frame information. Only used during heap object materialization. 485 // Output frame information. Only used during heap object materialization.
439 List<Handle<JSFunction> > jsframe_functions_; 486 List<Handle<JSFunction> > jsframe_functions_;
440 List<bool> jsframe_has_adapted_arguments_; 487 List<bool> jsframe_has_adapted_arguments_;
441 488
442 // Materialized objects. Only used during heap object materialization. 489 // Materialized objects. Only used during heap object materialization.
443 List<Handle<Object> >* materialized_values_; 490 List<Handle<Object> >* materialized_values_;
444 List<Handle<Object> >* materialized_objects_; 491 List<Handle<Object> >* materialized_objects_;
445 int materialization_value_index_; 492 int materialization_value_index_;
446 int materialization_object_index_; 493 int materialization_object_index_;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 535
489 intptr_t GetFrameSlot(unsigned offset) { 536 intptr_t GetFrameSlot(unsigned offset) {
490 return *GetFrameSlotPointer(offset); 537 return *GetFrameSlotPointer(offset);
491 } 538 }
492 539
493 double GetDoubleFrameSlot(unsigned offset) { 540 double GetDoubleFrameSlot(unsigned offset) {
494 intptr_t* ptr = GetFrameSlotPointer(offset); 541 intptr_t* ptr = GetFrameSlotPointer(offset);
495 return read_double_value(reinterpret_cast<Address>(ptr)); 542 return read_double_value(reinterpret_cast<Address>(ptr));
496 } 543 }
497 544
545 float32x4_value_t GetFloat32x4FrameSlot(unsigned offset) {
546 intptr_t* ptr = GetFrameSlotPointer(offset);
547 return read_float32x4_value(reinterpret_cast<Address>(ptr));
548 }
549
550 int32x4_value_t GetInt32x4FrameSlot(unsigned offset) {
551 intptr_t* ptr = GetFrameSlotPointer(offset);
552 return read_int32x4_value(reinterpret_cast<Address>(ptr));
553 }
554
498 void SetFrameSlot(unsigned offset, intptr_t value) { 555 void SetFrameSlot(unsigned offset, intptr_t value) {
499 *GetFrameSlotPointer(offset) = value; 556 *GetFrameSlotPointer(offset) = value;
500 } 557 }
501 558
502 void SetCallerPc(unsigned offset, intptr_t value); 559 void SetCallerPc(unsigned offset, intptr_t value);
503 560
504 void SetCallerFp(unsigned offset, intptr_t value); 561 void SetCallerFp(unsigned offset, intptr_t value);
505 562
506 intptr_t GetRegister(unsigned n) const { 563 intptr_t GetRegister(unsigned n) const {
507 #if DEBUG 564 #if DEBUG
508 // This convoluted ASSERT is needed to work around a gcc problem that 565 // This convoluted ASSERT is needed to work around a gcc problem that
509 // improperly detects an array bounds overflow in optimized debug builds 566 // improperly detects an array bounds overflow in optimized debug builds
510 // when using a plain ASSERT. 567 // when using a plain ASSERT.
511 if (n >= ARRAY_SIZE(registers_)) { 568 if (n >= ARRAY_SIZE(registers_)) {
512 ASSERT(false); 569 ASSERT(false);
513 return 0; 570 return 0;
514 } 571 }
515 #endif 572 #endif
516 return registers_[n]; 573 return registers_[n];
517 } 574 }
518 575
519 double GetDoubleRegister(unsigned n) const { 576 double GetDoubleRegister(unsigned n) const {
520 ASSERT(n < ARRAY_SIZE(double_registers_)); 577 ASSERT(n < ARRAY_SIZE(xmm_registers_));
521 return double_registers_[n]; 578 return xmm_registers_[n].d[0];
579 }
580
581 float32x4_value_t GetFloat32x4Register(unsigned n) const {
582 ASSERT(n < ARRAY_SIZE(xmm_registers_));
583 return xmm_registers_[n].f;
584 }
585
586 int32x4_value_t GetInt32x4Register(unsigned n) const {
587 ASSERT(n < ARRAY_SIZE(xmm_registers_));
588 return xmm_registers_[n].u;
589 }
590
591 xmm_value_t GetXMMRegister(unsigned n) const {
592 ASSERT(n < ARRAY_SIZE(xmm_registers_));
593 return xmm_registers_[n];
522 } 594 }
523 595
524 void SetRegister(unsigned n, intptr_t value) { 596 void SetRegister(unsigned n, intptr_t value) {
525 ASSERT(n < ARRAY_SIZE(registers_)); 597 ASSERT(n < ARRAY_SIZE(registers_));
526 registers_[n] = value; 598 registers_[n] = value;
527 } 599 }
528 600
529 void SetDoubleRegister(unsigned n, double value) { 601 void SetDoubleRegister(unsigned n, double value) {
530 ASSERT(n < ARRAY_SIZE(double_registers_)); 602 ASSERT(n < ARRAY_SIZE(xmm_registers_));
531 double_registers_[n] = value; 603 xmm_registers_[n].d[0] = value;
604 }
605
606 void SetXMMRegister(unsigned n, xmm_value_t value) {
607 ASSERT(n < ARRAY_SIZE(xmm_registers_));
608 xmm_registers_[n] = value;
532 } 609 }
533 610
534 intptr_t GetTop() const { return top_; } 611 intptr_t GetTop() const { return top_; }
535 void SetTop(intptr_t top) { top_ = top; } 612 void SetTop(intptr_t top) { top_ = top; }
536 613
537 intptr_t GetPc() const { return pc_; } 614 intptr_t GetPc() const { return pc_; }
538 void SetPc(intptr_t pc) { pc_ = pc; } 615 void SetPc(intptr_t pc) { pc_ = pc; }
539 616
540 intptr_t GetFp() const { return fp_; } 617 intptr_t GetFp() const { return fp_; }
541 void SetFp(intptr_t fp) { fp_ = fp; } 618 void SetFp(intptr_t fp) { fp_ = fp; }
(...skipping 18 matching lines...) Expand all
560 // Get the expression stack height for a unoptimized frame. 637 // Get the expression stack height for a unoptimized frame.
561 unsigned GetExpressionCount(); 638 unsigned GetExpressionCount();
562 639
563 // Get the expression stack value for an unoptimized frame. 640 // Get the expression stack value for an unoptimized frame.
564 Object* GetExpression(int index); 641 Object* GetExpression(int index);
565 642
566 static int registers_offset() { 643 static int registers_offset() {
567 return OFFSET_OF(FrameDescription, registers_); 644 return OFFSET_OF(FrameDescription, registers_);
568 } 645 }
569 646
570 static int double_registers_offset() { 647 static int xmm_registers_offset() {
571 return OFFSET_OF(FrameDescription, double_registers_); 648 return OFFSET_OF(FrameDescription, xmm_registers_);
572 } 649 }
573 650
574 static int frame_size_offset() { 651 static int frame_size_offset() {
575 return OFFSET_OF(FrameDescription, frame_size_); 652 return OFFSET_OF(FrameDescription, frame_size_);
576 } 653 }
577 654
578 static int pc_offset() { 655 static int pc_offset() {
579 return OFFSET_OF(FrameDescription, pc_); 656 return OFFSET_OF(FrameDescription, pc_);
580 } 657 }
581 658
(...skipping 11 matching lines...) Expand all
593 670
594 private: 671 private:
595 static const uint32_t kZapUint32 = 0xbeeddead; 672 static const uint32_t kZapUint32 = 0xbeeddead;
596 673
597 // Frame_size_ must hold a uint32_t value. It is only a uintptr_t to 674 // Frame_size_ must hold a uint32_t value. It is only a uintptr_t to
598 // keep the variable-size array frame_content_ of type intptr_t at 675 // keep the variable-size array frame_content_ of type intptr_t at
599 // the end of the structure aligned. 676 // the end of the structure aligned.
600 uintptr_t frame_size_; // Number of bytes. 677 uintptr_t frame_size_; // Number of bytes.
601 JSFunction* function_; 678 JSFunction* function_;
602 intptr_t registers_[Register::kNumRegisters]; 679 intptr_t registers_[Register::kNumRegisters];
603 double double_registers_[DoubleRegister::kMaxNumRegisters]; 680 xmm_value_t xmm_registers_[XMMRegister::kMaxNumRegisters];
604 intptr_t top_; 681 intptr_t top_;
605 intptr_t pc_; 682 intptr_t pc_;
606 intptr_t fp_; 683 intptr_t fp_;
607 intptr_t context_; 684 intptr_t context_;
608 StackFrame::Type type_; 685 StackFrame::Type type_;
609 Smi* state_; 686 Smi* state_;
610 687
611 // Continuation is the PC where the execution continues after 688 // Continuation is the PC where the execution continues after
612 // deoptimizing. 689 // deoptimizing.
613 intptr_t continuation_; 690 intptr_t continuation_;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 V(SETTER_STUB_FRAME) \ 772 V(SETTER_STUB_FRAME) \
696 V(ARGUMENTS_ADAPTOR_FRAME) \ 773 V(ARGUMENTS_ADAPTOR_FRAME) \
697 V(COMPILED_STUB_FRAME) \ 774 V(COMPILED_STUB_FRAME) \
698 V(DUPLICATED_OBJECT) \ 775 V(DUPLICATED_OBJECT) \
699 V(ARGUMENTS_OBJECT) \ 776 V(ARGUMENTS_OBJECT) \
700 V(CAPTURED_OBJECT) \ 777 V(CAPTURED_OBJECT) \
701 V(REGISTER) \ 778 V(REGISTER) \
702 V(INT32_REGISTER) \ 779 V(INT32_REGISTER) \
703 V(UINT32_REGISTER) \ 780 V(UINT32_REGISTER) \
704 V(DOUBLE_REGISTER) \ 781 V(DOUBLE_REGISTER) \
782 V(FLOAT32x4_REGISTER) \
783 V(INT32x4_REGISTER) \
705 V(STACK_SLOT) \ 784 V(STACK_SLOT) \
706 V(INT32_STACK_SLOT) \ 785 V(INT32_STACK_SLOT) \
707 V(UINT32_STACK_SLOT) \ 786 V(UINT32_STACK_SLOT) \
708 V(DOUBLE_STACK_SLOT) \ 787 V(DOUBLE_STACK_SLOT) \
788 V(FLOAT32x4_STACK_SLOT) \
789 V(INT32x4_STACK_SLOT) \
709 V(LITERAL) 790 V(LITERAL)
710 791
711 792
712 class Translation BASE_EMBEDDED { 793 class Translation BASE_EMBEDDED {
713 public: 794 public:
714 #define DECLARE_TRANSLATION_OPCODE_ENUM(item) item, 795 #define DECLARE_TRANSLATION_OPCODE_ENUM(item) item,
715 enum Opcode { 796 enum Opcode {
716 TRANSLATION_OPCODE_LIST(DECLARE_TRANSLATION_OPCODE_ENUM) 797 TRANSLATION_OPCODE_LIST(DECLARE_TRANSLATION_OPCODE_ENUM)
717 LAST = LITERAL 798 LAST = LITERAL
718 }; 799 };
(...skipping 18 matching lines...) Expand all
737 void BeginConstructStubFrame(int literal_id, unsigned height); 818 void BeginConstructStubFrame(int literal_id, unsigned height);
738 void BeginGetterStubFrame(int literal_id); 819 void BeginGetterStubFrame(int literal_id);
739 void BeginSetterStubFrame(int literal_id); 820 void BeginSetterStubFrame(int literal_id);
740 void BeginArgumentsObject(int args_length); 821 void BeginArgumentsObject(int args_length);
741 void BeginCapturedObject(int length); 822 void BeginCapturedObject(int length);
742 void DuplicateObject(int object_index); 823 void DuplicateObject(int object_index);
743 void StoreRegister(Register reg); 824 void StoreRegister(Register reg);
744 void StoreInt32Register(Register reg); 825 void StoreInt32Register(Register reg);
745 void StoreUint32Register(Register reg); 826 void StoreUint32Register(Register reg);
746 void StoreDoubleRegister(DoubleRegister reg); 827 void StoreDoubleRegister(DoubleRegister reg);
828 void StoreFloat32x4Register(Float32x4Register reg);
829 void StoreInt32x4Register(Float32x4Register reg);
747 void StoreStackSlot(int index); 830 void StoreStackSlot(int index);
748 void StoreInt32StackSlot(int index); 831 void StoreInt32StackSlot(int index);
749 void StoreUint32StackSlot(int index); 832 void StoreUint32StackSlot(int index);
750 void StoreDoubleStackSlot(int index); 833 void StoreDoubleStackSlot(int index);
834 void StoreFloat32x4StackSlot(int index);
835 void StoreInt32x4StackSlot(int index);
751 void StoreLiteral(int literal_id); 836 void StoreLiteral(int literal_id);
752 void StoreArgumentsObject(bool args_known, int args_index, int args_length); 837 void StoreArgumentsObject(bool args_known, int args_index, int args_length);
753 838
754 Zone* zone() const { return zone_; } 839 Zone* zone() const { return zone_; }
755 840
756 static int NumberOfOperandsFor(Opcode opcode); 841 static int NumberOfOperandsFor(Opcode opcode);
757 842
758 #if defined(OBJECT_PRINT) || defined(ENABLE_DISASSEMBLER) 843 #if defined(OBJECT_PRINT) || defined(ENABLE_DISASSEMBLER)
759 static const char* StringFor(Opcode opcode); 844 static const char* StringFor(Opcode opcode);
760 #endif 845 #endif
761 846
762 // A literal id which refers to the JSFunction itself. 847 // A literal id which refers to the JSFunction itself.
763 static const int kSelfLiteralId = -239; 848 static const int kSelfLiteralId = -239;
764 849
765 private: 850 private:
766 TranslationBuffer* buffer_; 851 TranslationBuffer* buffer_;
767 int index_; 852 int index_;
768 Zone* zone_; 853 Zone* zone_;
769 }; 854 };
770 855
771 856
772 class SlotRef BASE_EMBEDDED { 857 class SlotRef BASE_EMBEDDED {
773 public: 858 public:
774 enum SlotRepresentation { 859 enum SlotRepresentation {
775 UNKNOWN, 860 UNKNOWN,
776 TAGGED, 861 TAGGED,
777 INT32, 862 INT32,
778 UINT32, 863 UINT32,
779 DOUBLE, 864 DOUBLE,
865 FLOAT32x4,
866 INT32x4,
780 LITERAL 867 LITERAL
781 }; 868 };
782 869
783 SlotRef() 870 SlotRef()
784 : addr_(NULL), representation_(UNKNOWN) { } 871 : addr_(NULL), representation_(UNKNOWN) { }
785 872
786 SlotRef(Address addr, SlotRepresentation representation) 873 SlotRef(Address addr, SlotRepresentation representation)
787 : addr_(addr), representation_(representation) { } 874 : addr_(addr), representation_(representation) { }
788 875
789 SlotRef(Isolate* isolate, Object* literal) 876 SlotRef(Isolate* isolate, Object* literal)
(...skipping 20 matching lines...) Expand all
810 } else { 897 } else {
811 return isolate->factory()->NewNumber(static_cast<double>(value)); 898 return isolate->factory()->NewNumber(static_cast<double>(value));
812 } 899 }
813 } 900 }
814 901
815 case DOUBLE: { 902 case DOUBLE: {
816 double value = read_double_value(addr_); 903 double value = read_double_value(addr_);
817 return isolate->factory()->NewNumber(value); 904 return isolate->factory()->NewNumber(value);
818 } 905 }
819 906
907 case FLOAT32x4: {
908 float32x4_value_t value = read_float32x4_value(addr_);
909 return isolate->factory()->NewFloat32x4(value);
910 }
911
912 case INT32x4: {
913 int32x4_value_t value = read_int32x4_value(addr_);
914 return isolate->factory()->NewInt32x4(value);
915 }
916
820 case LITERAL: 917 case LITERAL:
821 return literal_; 918 return literal_;
822 919
823 default: 920 default:
824 UNREACHABLE(); 921 UNREACHABLE();
825 return Handle<Object>::null(); 922 return Handle<Object>::null();
826 } 923 }
827 } 924 }
828 925
829 static Vector<SlotRef> ComputeSlotMappingForArguments( 926 static Vector<SlotRef> ComputeSlotMappingForArguments(
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
930 Object** expression_stack_; 1027 Object** expression_stack_;
931 int source_position_; 1028 int source_position_;
932 1029
933 friend class Deoptimizer; 1030 friend class Deoptimizer;
934 }; 1031 };
935 #endif 1032 #endif
936 1033
937 } } // namespace v8::internal 1034 } } // namespace v8::internal
938 1035
939 #endif // V8_DEOPTIMIZER_H_ 1036 #endif // V8_DEOPTIMIZER_H_
OLDNEW
« no previous file with comments | « src/d8.js ('k') | src/deoptimizer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698