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

Unified Diff: src/frames.cc

Issue 194793002: [v8-dev] ARM: safepoints frame optimization (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 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 side-by-side diff with in-line comments
Download patch
« src/arm/assembler-arm.h ('K') | « src/frames.h ('k') | src/heap.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/frames.cc
diff --git a/src/frames.cc b/src/frames.cc
index 3b55c276cf3b4cfa6d4cb972f87370cd6bd7e5ee..e9df843e87102d2532712626b5e493f29b40ecba 100644
--- a/src/frames.cc
+++ b/src/frames.cc
@@ -652,6 +652,32 @@ void StandardFrame::IterateCompiledFrame(ObjectVisitor* v) const {
parameters_base += safepoint_entry.argument_count();
}
+#if V8_TARGET_ARCH_ARM
+ // The frame must have been generated within LCodegen::GeneratedCode where
+ // registers_mask and double_registers_mask are set.
+ ASSERT(code->registers_mask() != kRegListEmpty);
+ // Skip saved double registers.
+ if (safepoint_entry.has_doubles()) {
+ parameters_base +=
+ CompilerIntrinsics::CountSetBits(code->double_registers_mask()) *
+ kDoubleSize / kPointerSize;
+ }
+
+ // Visit the registers that contain pointers if any.
+ if (safepoint_entry.HasRegisters()) {
+ RegList registers_mask = code->registers_mask();
+ for (int i = 0; i < kNumSafepointRegisters; i++) {
+ if ((registers_mask & (1 << i)) != 0) {
+ if (safepoint_entry.HasRegisterAt(i)) {
+ v->VisitPointer(parameters_base);
+ }
+ parameters_base++;
+ } else {
+ ASSERT(!safepoint_entry.HasRegisterAt(i));
+ }
+ }
+ }
+#else
// Skip saved double registers.
if (safepoint_entry.has_doubles()) {
// Number of doubles not known at snapshot time.
@@ -671,6 +697,7 @@ void StandardFrame::IterateCompiledFrame(ObjectVisitor* v) const {
// Skip the words containing the register values.
parameters_base += kNumSafepointRegisters;
}
+#endif
// We're done dealing with the register bits.
uint8_t* safepoint_bits = safepoint_entry.bits();
« src/arm/assembler-arm.h ('K') | « src/frames.h ('k') | src/heap.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698