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

Side by Side Diff: runtime/vm/stack_frame.h

Issue 1858283002: Initial SIMDBC interpreter. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Address comments Created 4 years, 8 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
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_STACK_FRAME_H_ 5 #ifndef VM_STACK_FRAME_H_
6 #define VM_STACK_FRAME_H_ 6 #define VM_STACK_FRAME_H_
7 7
8 #include "vm/allocation.h" 8 #include "vm/allocation.h"
9 #include "vm/object.h" 9 #include "vm/object.h"
10 #include "vm/stub_code.h" 10 #include "vm/stub_code.h"
11 11
12 #if defined(TARGET_ARCH_IA32) 12 #if defined(TARGET_ARCH_IA32)
13 #include "vm/stack_frame_ia32.h" 13 #include "vm/stack_frame_ia32.h"
14 #elif defined(TARGET_ARCH_X64) 14 #elif defined(TARGET_ARCH_X64)
15 #include "vm/stack_frame_x64.h" 15 #include "vm/stack_frame_x64.h"
16 #elif defined(TARGET_ARCH_ARM) 16 #elif defined(TARGET_ARCH_ARM)
17 #include "vm/stack_frame_arm.h" 17 #include "vm/stack_frame_arm.h"
18 #elif defined(TARGET_ARCH_ARM64) 18 #elif defined(TARGET_ARCH_ARM64)
19 #include "vm/stack_frame_arm64.h" 19 #include "vm/stack_frame_arm64.h"
20 #elif defined(TARGET_ARCH_MIPS) 20 #elif defined(TARGET_ARCH_MIPS)
21 #include "vm/stack_frame_mips.h" 21 #include "vm/stack_frame_mips.h"
22 #elif defined(TARGET_ARCH_DBC)
23 #include "vm/stack_frame_dbc.h"
22 #else 24 #else
23 #error Unknown architecture. 25 #error Unknown architecture.
24 #endif 26 #endif
25 27
26 namespace dart { 28 namespace dart {
27 29
28 // Forward declarations. 30 // Forward declarations.
29 class ObjectPointerVisitor; 31 class ObjectPointerVisitor;
30 class RawContext; 32 class RawContext;
31 33
(...skipping 10 matching lines...) Expand all
42 44
43 // The pool pointer is not implemented on all architectures. 45 // The pool pointer is not implemented on all architectures.
44 static int SavedCallerPpSlotFromFp() { 46 static int SavedCallerPpSlotFromFp() {
45 if (kSavedCallerPpSlotFromFp != kSavedCallerFpSlotFromFp) { 47 if (kSavedCallerPpSlotFromFp != kSavedCallerFpSlotFromFp) {
46 return kSavedCallerPpSlotFromFp; 48 return kSavedCallerPpSlotFromFp;
47 } 49 }
48 UNREACHABLE(); 50 UNREACHABLE();
49 return 0; 51 return 0;
50 } 52 }
51 53
54 #if !defined(TARGET_ARCH_DBC)
52 void set_pc(uword value) { 55 void set_pc(uword value) {
53 *reinterpret_cast<uword*>(sp() + (kSavedPcSlotFromSp * kWordSize)) = value; 56 *reinterpret_cast<uword*>(sp() + (kSavedPcSlotFromSp * kWordSize)) = value;
54 } 57 }
55 58
56 void set_pc_marker(RawCode* code) { 59 void set_pc_marker(RawCode* code) {
57 *reinterpret_cast<RawCode**>(fp() + (kPcMarkerSlotFromFp * kWordSize)) = 60 *reinterpret_cast<RawCode**>(fp() + (kPcMarkerSlotFromFp * kWordSize)) =
58 code; 61 code;
59 } 62 }
63 #endif
60 64
61 // Visit objects in the frame. 65 // Visit objects in the frame.
62 virtual void VisitObjectPointers(ObjectPointerVisitor* visitor); 66 virtual void VisitObjectPointers(ObjectPointerVisitor* visitor);
63 67
64 const char* ToCString() const; 68 const char* ToCString() const;
65 69
66 // Check validity of a frame, used for assertion purposes. 70 // Check validity of a frame, used for assertion purposes.
67 virtual bool IsValid() const; 71 virtual bool IsValid() const;
68 72
69 // Frame type. 73 // Frame type.
(...skipping 24 matching lines...) Expand all
94 Isolate* isolate() const { return thread_->isolate(); } 98 Isolate* isolate() const { return thread_->isolate(); }
95 99
96 Thread* thread() const { return thread_; } 100 Thread* thread() const { return thread_; }
97 101
98 private: 102 private:
99 RawCode* GetCodeObject() const; 103 RawCode* GetCodeObject() const;
100 104
101 uword GetCallerSp() const { 105 uword GetCallerSp() const {
102 return fp() + (kCallerSpSlotFromFp * kWordSize); 106 return fp() + (kCallerSpSlotFromFp * kWordSize);
103 } 107 }
108
104 uword GetCallerFp() const { 109 uword GetCallerFp() const {
105 return *(reinterpret_cast<uword*>( 110 return *(reinterpret_cast<uword*>(
106 fp() + (kSavedCallerFpSlotFromFp * kWordSize))); 111 fp() + (kSavedCallerFpSlotFromFp * kWordSize)));
107 } 112 }
113
108 uword GetCallerPc() const { 114 uword GetCallerPc() const {
109 return *(reinterpret_cast<uword*>( 115 return *(reinterpret_cast<uword*>(
110 fp() + (kSavedCallerPcSlotFromFp * kWordSize))); 116 fp() + (kSavedCallerPcSlotFromFp * kWordSize)));
111 } 117 }
112 118
113 uword fp_; 119 uword fp_;
114 uword sp_; 120 uword sp_;
115 uword pc_; 121 uword pc_;
116 Thread* thread_; 122 Thread* thread_;
117 123
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 static const bool kValidateFrames = true; 187 static const bool kValidateFrames = true;
182 static const bool kDontValidateFrames = false; 188 static const bool kDontValidateFrames = false;
183 189
184 // Iterators for iterating over all frames from the last ExitFrame to the 190 // Iterators for iterating over all frames from the last ExitFrame to the
185 // first EntryFrame. 191 // first EntryFrame.
186 StackFrameIterator(bool validate, 192 StackFrameIterator(bool validate,
187 Thread* thread = Thread::Current()); 193 Thread* thread = Thread::Current());
188 StackFrameIterator(uword last_fp, bool validate, 194 StackFrameIterator(uword last_fp, bool validate,
189 Thread* thread = Thread::Current()); 195 Thread* thread = Thread::Current());
190 196
197 #if !defined(TARGET_ARCH_DBC)
191 // Iterator for iterating over all frames from the current frame (given by its 198 // Iterator for iterating over all frames from the current frame (given by its
192 // fp, sp, and pc) to the first EntryFrame. 199 // fp, sp, and pc) to the first EntryFrame.
193 StackFrameIterator(uword fp, uword sp, uword pc, bool validate, 200 StackFrameIterator(uword fp, uword sp, uword pc, bool validate,
194 Thread* thread = Thread::Current()); 201 Thread* thread = Thread::Current());
202 #endif
195 203
196 // Checks if a next frame exists. 204 // Checks if a next frame exists.
197 bool HasNextFrame() const { return frames_.fp_ != 0; } 205 bool HasNextFrame() const { return frames_.fp_ != 0; }
198 206
199 // Get next frame. 207 // Get next frame.
200 StackFrame* NextFrame(); 208 StackFrame* NextFrame();
201 209
202 bool validate() const { return validate_; } 210 bool validate() const { return validate_; }
203 211
204 private: 212 private:
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 // it is only allowed on Windows- where it is needed for the profiler. 273 // it is only allowed on Windows- where it is needed for the profiler.
266 // It is the responsibility of users of DartFrameIterator to ensure that the 274 // It is the responsibility of users of DartFrameIterator to ensure that the
267 // isolate given is not running concurrently on another thread. 275 // isolate given is not running concurrently on another thread.
268 class DartFrameIterator : public ValueObject { 276 class DartFrameIterator : public ValueObject {
269 public: 277 public:
270 explicit DartFrameIterator(Thread* thread = Thread::Current()) 278 explicit DartFrameIterator(Thread* thread = Thread::Current())
271 : frames_(StackFrameIterator::kDontValidateFrames, thread) { } 279 : frames_(StackFrameIterator::kDontValidateFrames, thread) { }
272 DartFrameIterator(uword last_fp, 280 DartFrameIterator(uword last_fp,
273 Thread* thread = Thread::Current()) 281 Thread* thread = Thread::Current())
274 : frames_(last_fp, StackFrameIterator::kDontValidateFrames, thread) { } 282 : frames_(last_fp, StackFrameIterator::kDontValidateFrames, thread) { }
283
284 #if !defined(TARGET_ARCH_DBC)
275 DartFrameIterator(uword fp, 285 DartFrameIterator(uword fp,
276 uword sp, 286 uword sp,
277 uword pc, 287 uword pc,
278 Thread* thread = Thread::Current()) 288 Thread* thread = Thread::Current())
279 : frames_(fp, sp, pc, 289 : frames_(fp, sp, pc,
280 StackFrameIterator::kDontValidateFrames, thread) { 290 StackFrameIterator::kDontValidateFrames, thread) {
281 } 291 }
292 #endif
293
282 // Get next dart frame. 294 // Get next dart frame.
283 StackFrame* NextFrame() { 295 StackFrame* NextFrame() {
284 StackFrame* frame = frames_.NextFrame(); 296 StackFrame* frame = frames_.NextFrame();
285 while (frame != NULL && !frame->IsDartFrame(frames_.validate())) { 297 while (frame != NULL && !frame->IsDartFrame(frames_.validate())) {
286 frame = frames_.NextFrame(); 298 frame = frames_.NextFrame();
287 } 299 }
288 return frame; 300 return frame;
289 } 301 }
290 302
291 private: 303 private:
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 Code& code_; 341 Code& code_;
330 TypedData& deopt_info_; 342 TypedData& deopt_info_;
331 Function& function_; 343 Function& function_;
332 uword pc_; 344 uword pc_;
333 GrowableArray<DeoptInstr*> deopt_instructions_; 345 GrowableArray<DeoptInstr*> deopt_instructions_;
334 ObjectPool& object_table_; 346 ObjectPool& object_table_;
335 347
336 DISALLOW_COPY_AND_ASSIGN(InlinedFunctionsIterator); 348 DISALLOW_COPY_AND_ASSIGN(InlinedFunctionsIterator);
337 }; 349 };
338 350
351 #if !defined(TARGET_ARCH_DBC)
352 DART_FORCE_INLINE static uword LocalVarAddress(uword fp, intptr_t index) {
353 return fp + ((kFirstLocalSlotFromFp - index) * kWordSize);
354 }
355
356
357 DART_FORCE_INLINE static uword ParamAddress(uword fp, intptr_t reverse_index) {
358 return fp + (kParamEndSlotFromFp * kWordSize) + (reverse_index * kWordSize);
359 }
360
361
362 DART_FORCE_INLINE static bool IsCalleeFrameOf(uword fp, uword other_fp) {
363 return other_fp < fp;
364 }
365 #endif
366
339 } // namespace dart 367 } // namespace dart
340 368
341 #endif // VM_STACK_FRAME_H_ 369 #endif // VM_STACK_FRAME_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698