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

Side by Side Diff: src/virtual-frame.h

Issue 48008: Simplify the construction of virtual frame elements in preparation for... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 9 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/virtual-frame-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 2008 the V8 project authors. All rights reserved. 1 // Copyright 2008 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 47
48 class FrameElement BASE_EMBEDDED { 48 class FrameElement BASE_EMBEDDED {
49 public: 49 public:
50 enum SyncFlag { 50 enum SyncFlag {
51 SYNCED, 51 SYNCED,
52 NOT_SYNCED 52 NOT_SYNCED
53 }; 53 };
54 54
55 // The default constructor creates an invalid frame element. 55 // The default constructor creates an invalid frame element.
56 FrameElement() { 56 FrameElement() {
57 type_ = TypeField::encode(INVALID) | SyncField::encode(NOT_SYNCED); 57 Initialize(INVALID, no_reg, NOT_SYNCED);
58 data_.reg_ = no_reg;
59 } 58 }
60 59
61 // Factory function to construct an invalid frame element. 60 // Factory function to construct an invalid frame element.
62 static FrameElement InvalidElement() { 61 static FrameElement InvalidElement() {
63 FrameElement result; 62 FrameElement result;
64 return result; 63 return result;
65 } 64 }
66 65
67 // Factory function to construct an in-memory frame element. 66 // Factory function to construct an in-memory frame element.
68 static FrameElement MemoryElement() { 67 static FrameElement MemoryElement() {
69 FrameElement result; 68 FrameElement result(MEMORY, no_reg, SYNCED);
70 result.type_ = TypeField::encode(MEMORY) | SyncField::encode(SYNCED);
71 // In-memory elements have no useful data.
72 result.data_.reg_ = no_reg;
73 return result; 69 return result;
74 } 70 }
75 71
76 // Factory function to construct an in-register frame element. 72 // Factory function to construct an in-register frame element.
77 static FrameElement RegisterElement(Register reg, SyncFlag is_synced) { 73 static FrameElement RegisterElement(Register reg, SyncFlag is_synced) {
78 FrameElement result; 74 FrameElement result(REGISTER, reg, is_synced);
79 result.type_ = TypeField::encode(REGISTER) | SyncField::encode(is_synced);
80 result.data_.reg_ = reg;
81 return result; 75 return result;
82 } 76 }
83 77
84 // Factory function to construct a frame element whose value is known at 78 // Factory function to construct a frame element whose value is known at
85 // compile time. 79 // compile time.
86 static FrameElement ConstantElement(Handle<Object> value, 80 static FrameElement ConstantElement(Handle<Object> value,
87 SyncFlag is_synced) { 81 SyncFlag is_synced) {
88 FrameElement result; 82 FrameElement result(value, is_synced);
89 result.type_ = TypeField::encode(CONSTANT) | SyncField::encode(is_synced);
90 result.data_.handle_ = value.location();
91 return result; 83 return result;
92 } 84 }
93 85
94 bool is_synced() const { return SyncField::decode(type_) == SYNCED; } 86 bool is_synced() const { return SyncField::decode(type_) == SYNCED; }
95 87
96 void set_sync() { 88 void set_sync() {
97 ASSERT(type() != MEMORY); 89 ASSERT(type() != MEMORY);
98 type_ = (type_ & ~SyncField::mask()) | SyncField::encode(SYNCED); 90 type_ = (type_ & ~SyncField::mask()) | SyncField::encode(SYNCED);
99 } 91 }
100 92
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 // for non-memory elements to indicate that the element agrees with 137 // for non-memory elements to indicate that the element agrees with
146 // the value in memory in the actual frame. 138 // the value in memory in the actual frame.
147 int type_; 139 int type_;
148 140
149 union { 141 union {
150 Register reg_; 142 Register reg_;
151 Object** handle_; 143 Object** handle_;
152 int index_; 144 int index_;
153 } data_; 145 } data_;
154 146
147 // The index of the next element in a list of copies, or the frame's
148 // illegal index if there is no next element.
149 int next_;
150
151 // Used to construct memory and register elements.
152 FrameElement(Type type, Register reg, SyncFlag is_synced) {
153 Initialize(type, reg, is_synced);
154 }
155
156 // Used to construct constant elements.
157 inline FrameElement(Handle<Object> value, SyncFlag is_synced);
158
159 // Used to initialize invalid, memory, and register elements.
160 inline void Initialize(Type type, Register reg, SyncFlag is_synced);
161
155 friend class VirtualFrame; 162 friend class VirtualFrame;
156 }; 163 };
157 164
158 165
159 } } // namespace v8::internal 166 } } // namespace v8::internal
160 167
161 #ifdef ARM 168 #ifdef ARM
162 #include "virtual-frame-arm.h" 169 #include "virtual-frame-arm.h"
163 #else // ia32 170 #else // ia32
164 #include "virtual-frame-ia32.h" 171 #include "virtual-frame-ia32.h"
165 #endif 172 #endif
166 173
174
175 namespace v8 { namespace internal {
176
177 FrameElement::FrameElement(Handle<Object> value, SyncFlag is_synced) {
178 type_ = TypeField::encode(CONSTANT) | SyncField::encode(is_synced);
179 data_.handle_ = value.location();
180 next_ = VirtualFrame::kIllegalIndex;
181 }
182
183
184 void FrameElement::Initialize(Type type, Register reg, SyncFlag is_synced) {
185 type_ = TypeField::encode(type) | SyncField::encode(is_synced);
186 data_.reg_ = reg;
187 next_ = VirtualFrame::kIllegalIndex;
188 }
189
190
191 } } // namespace v8::internal
192
167 #endif // V8_VIRTUAL_FRAME_H_ 193 #endif // V8_VIRTUAL_FRAME_H_
OLDNEW
« no previous file with comments | « no previous file | src/virtual-frame-arm.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698