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

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

Issue 1961004: First step towards making JumpTarget work on ARM. Instead... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 10 years, 7 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
« src/x64/codegen-x64.h ('K') | « src/x64/codegen-x64.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2009 the V8 project authors. All rights reserved. 1 // Copyright 2009 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 12 matching lines...) Expand all
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 #ifndef V8_X64_VIRTUAL_FRAME_X64_H_ 28 #ifndef V8_X64_VIRTUAL_FRAME_X64_H_
29 #define V8_X64_VIRTUAL_FRAME_X64_H_ 29 #define V8_X64_VIRTUAL_FRAME_X64_H_
30 30
31 #include "type-info.h" 31 #include "type-info.h"
32 #include "register-allocator.h" 32 #include "register-allocator.h"
33 #include "scopes.h" 33 #include "scopes.h"
Søren Thygesen Gjesse 2010/05/06 07:48:11 Sort includes.
34 #include "codegen.h"
34 35
35 namespace v8 { 36 namespace v8 {
36 namespace internal { 37 namespace internal {
37 38
38 // ------------------------------------------------------------------------- 39 // -------------------------------------------------------------------------
39 // Virtual frames 40 // Virtual frames
40 // 41 //
41 // The virtual frame is an abstraction of the physical stack frame. It 42 // The virtual frame is an abstraction of the physical stack frame. It
42 // encapsulates the parameters, frame-allocated locals, and the expression 43 // encapsulates the parameters, frame-allocated locals, and the expression
43 // stack. It supports push/pop operations on the expression stack, as well 44 // stack. It supports push/pop operations on the expression stack, as well
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 // The height of the virtual expression stack. 92 // The height of the virtual expression stack.
92 int height() { 93 int height() {
93 return element_count() - expression_base_index(); 94 return element_count() - expression_base_index();
94 } 95 }
95 96
96 int register_location(int num) { 97 int register_location(int num) {
97 ASSERT(num >= 0 && num < RegisterAllocator::kNumRegisters); 98 ASSERT(num >= 0 && num < RegisterAllocator::kNumRegisters);
98 return register_locations_[num]; 99 return register_locations_[num];
99 } 100 }
100 101
101 int register_location(Register reg) { 102 inline int register_location(Register reg);
102 return register_locations_[RegisterAllocator::ToNumber(reg)];
103 }
104 103
105 void set_register_location(Register reg, int index) { 104 inline void set_register_location(Register reg, int index);
106 register_locations_[RegisterAllocator::ToNumber(reg)] = index;
107 }
108 105
109 bool is_used(int num) { 106 bool is_used(int num) {
110 ASSERT(num >= 0 && num < RegisterAllocator::kNumRegisters); 107 ASSERT(num >= 0 && num < RegisterAllocator::kNumRegisters);
111 return register_locations_[num] != kIllegalIndex; 108 return register_locations_[num] != kIllegalIndex;
112 } 109 }
113 110
114 bool is_used(Register reg) { 111 inline bool is_used(Register reg);
115 return register_locations_[RegisterAllocator::ToNumber(reg)]
116 != kIllegalIndex;
117 }
118 112
119 // Add extra in-memory elements to the top of the frame to match an actual 113 // Add extra in-memory elements to the top of the frame to match an actual
120 // frame (eg, the frame after an exception handler is pushed). No code is 114 // frame (eg, the frame after an exception handler is pushed). No code is
121 // emitted. 115 // emitted.
122 void Adjust(int count); 116 void Adjust(int count);
123 117
124 // Forget count elements from the top of the frame all in-memory 118 // Forget count elements from the top of the frame all in-memory
125 // (including synced) and adjust the stack pointer downward, to 119 // (including synced) and adjust the stack pointer downward, to
126 // match an external frame effect (examples include a call removing 120 // match an external frame effect (examples include a call removing
127 // its arguments, and exiting a try/catch removing an exception 121 // its arguments, and exiting a try/catch removing an exception
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 // An element of the expression stack as an assembly operand. 205 // An element of the expression stack as an assembly operand.
212 Operand ElementAt(int index) const { 206 Operand ElementAt(int index) const {
213 return Operand(rsp, index * kPointerSize); 207 return Operand(rsp, index * kPointerSize);
214 } 208 }
215 209
216 // Random-access store to a frame-top relative frame element. The result 210 // Random-access store to a frame-top relative frame element. The result
217 // becomes owned by the frame and is invalidated. 211 // becomes owned by the frame and is invalidated.
218 void SetElementAt(int index, Result* value); 212 void SetElementAt(int index, Result* value);
219 213
220 // Set a frame element to a constant. The index is frame-top relative. 214 // Set a frame element to a constant. The index is frame-top relative.
221 void SetElementAt(int index, Handle<Object> value) { 215 inline void SetElementAt(int index, Handle<Object> value);
222 Result temp(value);
223 SetElementAt(index, &temp);
224 }
225 216
226 void PushElementAt(int index) { 217 void PushElementAt(int index) {
227 PushFrameSlotAt(element_count() - index - 1); 218 PushFrameSlotAt(element_count() - index - 1);
228 } 219 }
229 220
230 void StoreToElementAt(int index) { 221 void StoreToElementAt(int index) {
231 StoreToFrameSlotAt(element_count() - index - 1); 222 StoreToFrameSlotAt(element_count() - index - 1);
232 } 223 }
233 224
234 // A frame-allocated local as an assembly operand. 225 // A frame-allocated local as an assembly operand.
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 } 286 }
296 287
297 // The receiver frame slot. 288 // The receiver frame slot.
298 Operand Receiver() { return ParameterAt(-1); } 289 Operand Receiver() { return ParameterAt(-1); }
299 290
300 // Push a try-catch or try-finally handler on top of the virtual frame. 291 // Push a try-catch or try-finally handler on top of the virtual frame.
301 void PushTryHandler(HandlerType type); 292 void PushTryHandler(HandlerType type);
302 293
303 // Call stub given the number of arguments it expects on (and 294 // Call stub given the number of arguments it expects on (and
304 // removes from) the stack. 295 // removes from) the stack.
305 Result CallStub(CodeStub* stub, int arg_count) { 296 inline Result CallStub(CodeStub* stub, int arg_count);
306 PrepareForCall(arg_count, arg_count);
307 return RawCallStub(stub);
308 }
309 297
310 // Call stub that takes a single argument passed in eax. The 298 // Call stub that takes a single argument passed in eax. The
311 // argument is given as a result which does not have to be eax or 299 // argument is given as a result which does not have to be eax or
312 // even a register. The argument is consumed by the call. 300 // even a register. The argument is consumed by the call.
313 Result CallStub(CodeStub* stub, Result* arg); 301 Result CallStub(CodeStub* stub, Result* arg);
314 302
315 // Call stub that takes a pair of arguments passed in edx (arg0, rdx) and 303 // Call stub that takes a pair of arguments passed in edx (arg0, rdx) and
316 // eax (arg1, rax). The arguments are given as results which do not have 304 // eax (arg1, rax). The arguments are given as results which do not have
317 // to be in the proper registers or even in registers. The 305 // to be in the proper registers or even in registers. The
318 // arguments are consumed by the call. 306 // arguments are consumed by the call.
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 427
440 // The index of the element that is at the processor's stack pointer 428 // The index of the element that is at the processor's stack pointer
441 // (the esp register). 429 // (the esp register).
442 int stack_pointer_; 430 int stack_pointer_;
443 431
444 // The index of the register frame element using each register, or 432 // The index of the register frame element using each register, or
445 // kIllegalIndex if a register is not on the frame. 433 // kIllegalIndex if a register is not on the frame.
446 int register_locations_[RegisterAllocator::kNumRegisters]; 434 int register_locations_[RegisterAllocator::kNumRegisters];
447 435
448 // The number of frame-allocated locals and parameters respectively. 436 // The number of frame-allocated locals and parameters respectively.
449 int parameter_count() { return cgen()->scope()->num_parameters(); } 437 inline int parameter_count();
450 int local_count() { return cgen()->scope()->num_stack_slots(); } 438 inline int local_count();
451 439
452 // The index of the element that is at the processor's frame pointer 440 // The index of the element that is at the processor's frame pointer
453 // (the ebp register). The parameters, receiver, and return address 441 // (the ebp register). The parameters, receiver, and return address
454 // are below the frame pointer. 442 // are below the frame pointer.
455 int frame_pointer() { return parameter_count() + 2; } 443 int frame_pointer() { return parameter_count() + 2; }
456 444
457 // The index of the first parameter. The receiver lies below the first 445 // The index of the first parameter. The receiver lies below the first
458 // parameter. 446 // parameter.
459 int param0_index() { return 1; } 447 int param0_index() { return 1; }
460 448
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 560
573 // Classes that need raw access to the elements_ array. 561 // Classes that need raw access to the elements_ array.
574 friend class DeferredCode; 562 friend class DeferredCode;
575 friend class JumpTarget; 563 friend class JumpTarget;
576 }; 564 };
577 565
578 566
579 } } // namespace v8::internal 567 } } // namespace v8::internal
580 568
581 #endif // V8_X64_VIRTUAL_FRAME_X64_H_ 569 #endif // V8_X64_VIRTUAL_FRAME_X64_H_
OLDNEW
« src/x64/codegen-x64.h ('K') | « src/x64/codegen-x64.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698