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

Unified Diff: runtime/vm/stack_frame.cc

Issue 1858283002: Initial SIMDBC interpreter. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: 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 side-by-side diff with in-line comments
Download patch
Index: runtime/vm/stack_frame.cc
diff --git a/runtime/vm/stack_frame.cc b/runtime/vm/stack_frame.cc
index 4eb3da7e0d6b94b8b256e9f66d641093e2f3fd6a..6081cb6ed5d910e27e7ef1a86a7348c4d0144a61 100644
--- a/runtime/vm/stack_frame.cc
+++ b/runtime/vm/stack_frame.cc
@@ -68,6 +68,7 @@ void ExitFrame::VisitObjectPointers(ObjectPointerVisitor* visitor) {
void EntryFrame::VisitObjectPointers(ObjectPointerVisitor* visitor) {
+#if !defined(TARGET_ARCH_DBC)
ASSERT(thread() == Thread::Current());
// Visit objects between SP and (FP - callee_save_area).
ASSERT(visitor != NULL);
@@ -75,10 +76,16 @@ void EntryFrame::VisitObjectPointers(ObjectPointerVisitor* visitor) {
RawObject** last = reinterpret_cast<RawObject**>(
fp() + (kExitLinkSlotFromEntryFp - 1) * kWordSize);
visitor->VisitPointers(first, last);
+#else
+ RawObject** first = reinterpret_cast<RawObject**>(fp());
+ RawObject** last = reinterpret_cast<RawObject**>(sp());
+ visitor->VisitPointers(first, last);
+#endif
}
void StackFrame::VisitObjectPointers(ObjectPointerVisitor* visitor) {
+#if !defined(TARGET_ARCH_DBC)
// NOTE: This code runs while GC is in progress and runs within
// a NoHandleScope block. Hence it is not ok to use regular Zone or
// Scope handles. We use direct stack handles, the raw pointers in
@@ -157,6 +164,12 @@ void StackFrame::VisitObjectPointers(ObjectPointerVisitor* visitor) {
RawObject** last = reinterpret_cast<RawObject**>(
fp() + (kFirstObjectSlotFromFp * kWordSize));
visitor->VisitPointers(first, last);
+#else
+ RawObject** first = reinterpret_cast<RawObject**>(sp());
+ RawObject** last = reinterpret_cast<RawObject**>(
+ fp() + (kFirstObjectSlotFromFp * kWordSize));
+ visitor->VisitPointers(last, first);
+#endif
}
@@ -317,6 +330,7 @@ StackFrameIterator::StackFrameIterator(uword last_fp, bool validate,
}
+#if !defined(TARGET_ARCH_DBC)
StackFrameIterator::StackFrameIterator(uword fp, uword sp, uword pc,
bool validate, Thread* thread)
: validate_(validate),
@@ -331,6 +345,7 @@ StackFrameIterator::StackFrameIterator(uword fp, uword sp, uword pc,
frames_.sp_ = sp;
frames_.pc_ = pc;
}
+#endif
StackFrame* StackFrameIterator::NextFrame() {
@@ -351,6 +366,7 @@ StackFrame* StackFrameIterator::NextFrame() {
return NULL;
}
UnpoisonStack(frames_.fp_);
+#if !defined(TARGET_ARCH_DBC)
if (frames_.pc_ == 0) {
// Iteration starts from an exit frame given by its fp.
current_frame_ = NextExitFrame();
@@ -362,6 +378,9 @@ StackFrame* StackFrameIterator::NextFrame() {
// Iteration starts from a Dart or stub frame given by its fp, sp, and pc.
current_frame_ = frames_.NextFrame(validate_);
}
+#else
+ current_frame_ = NextExitFrame();
+#endif
return current_frame_;
}
ASSERT((validate_ == kDontValidateFrames) || current_frame_->IsValid());

Powered by Google App Engine
This is Rietveld 408576698