Revision: 15829
Author: [email protected]
Date: Tue Jul 23 06:46:10 2013
Log: Introduce kRegisterSize, kPCOnStackSize and kFPOnStackSize
constants
BUG=None
[email protected]
Review URL: https://codereview.chromium.org/19802002
http://code.google.com/p/v8/source/detail?r=15829
Modified:
/branches/bleeding_edge/src/arm/deoptimizer-arm.cc
/branches/bleeding_edge/src/deoptimizer.cc
/branches/bleeding_edge/src/deoptimizer.h
/branches/bleeding_edge/src/frames.cc
/branches/bleeding_edge/src/frames.h
/branches/bleeding_edge/src/globals.h
/branches/bleeding_edge/src/ia32/deoptimizer-ia32.cc
/branches/bleeding_edge/src/lithium.cc
/branches/bleeding_edge/src/mips/deoptimizer-mips.cc
/branches/bleeding_edge/src/x64/deoptimizer-x64.cc
=======================================
--- /branches/bleeding_edge/src/arm/deoptimizer-arm.cc Tue Jul 23 06:30:44
2013
+++ /branches/bleeding_edge/src/arm/deoptimizer-arm.cc Tue Jul 23 06:46:10
2013
@@ -634,6 +634,17 @@
}
__ bind(&done);
}
+
+
+void FrameDescription::SetCallerPc(unsigned offset, intptr_t value) {
+ SetFrameSlot(offset, value);
+}
+
+
+void FrameDescription::SetCallerFp(unsigned offset, intptr_t value) {
+ SetFrameSlot(offset, value);
+}
+
#undef __
=======================================
--- /branches/bleeding_edge/src/deoptimizer.cc Tue Jul 23 06:30:44 2013
+++ /branches/bleeding_edge/src/deoptimizer.cc Tue Jul 23 06:46:10 2013
@@ -900,15 +900,15 @@
// input frame. For all subsequent output frames, it can be read from
the
// previous one. This frame's pc can be computed from the non-optimized
// function code and AST id of the bailout.
- output_offset -= kPointerSize;
- input_offset -= kPointerSize;
+ output_offset -= kPCOnStackSize;
+ input_offset -= kPCOnStackSize;
intptr_t value;
if (is_bottommost) {
value = input_->GetFrameSlot(input_offset);
} else {
value = output_[frame_index - 1]->GetPc();
}
- output_frame->SetFrameSlot(output_offset, value);
+ output_frame->SetCallerPc(output_offset, value);
if (trace_) {
PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
V8PRIxPTR " ; caller's pc\n",
@@ -919,14 +919,14 @@
// as in the input frame. For all subsequent output frames, it can be
// read from the previous one. Also compute and set this frame's frame
// pointer.
- output_offset -= kPointerSize;
- input_offset -= kPointerSize;
+ output_offset -= kFPOnStackSize;
+ input_offset -= kFPOnStackSize;
if (is_bottommost) {
value = input_->GetFrameSlot(input_offset);
} else {
value = output_[frame_index - 1]->GetFp();
}
- output_frame->SetFrameSlot(output_offset, value);
+ output_frame->SetCallerFp(output_offset, value);
intptr_t fp_value = top_address + output_offset;
ASSERT(!is_bottommost || (input_->GetRegister(fp_reg.code()) +
has_alignment_padding_ * kPointerSize) == fp_value);
@@ -1049,9 +1049,9 @@
}
// Read caller's PC from the previous frame.
- output_offset -= kPointerSize;
+ output_offset -= kPCOnStackSize;
intptr_t callers_pc = output_[frame_index - 1]->GetPc();
- output_frame->SetFrameSlot(output_offset, callers_pc);
+ output_frame->SetCallerPc(output_offset, callers_pc);
if (trace_) {
PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
V8PRIxPTR " ; caller's pc\n",
@@ -1059,9 +1059,9 @@
}
// Read caller's FP from the previous frame, and set this frame's FP.
- output_offset -= kPointerSize;
+ output_offset -= kFPOnStackSize;
intptr_t value = output_[frame_index - 1]->GetFp();
- output_frame->SetFrameSlot(output_offset, value);
+ output_frame->SetCallerFp(output_offset, value);
intptr_t fp_value = top_address + output_offset;
output_frame->SetFp(fp_value);
if (trace_) {
@@ -1152,9 +1152,9 @@
}
// Read caller's PC from the previous frame.
- output_offset -= kPointerSize;
+ output_offset -= kPCOnStackSize;
intptr_t callers_pc = output_[frame_index - 1]->GetPc();
- output_frame->SetFrameSlot(output_offset, callers_pc);
+ output_frame->SetCallerPc(output_offset, callers_pc);
if (trace_) {
PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
V8PRIxPTR " ; caller's pc\n",
@@ -1162,9 +1162,9 @@
}
// Read caller's FP from the previous frame, and set this frame's FP.
- output_offset -= kPointerSize;
+ output_offset -= kFPOnStackSize;
intptr_t value = output_[frame_index - 1]->GetFp();
- output_frame->SetFrameSlot(output_offset, value);
+ output_frame->SetCallerFp(output_offset, value);
intptr_t fp_value = top_address + output_offset;
output_frame->SetFp(fp_value);
if (trace_) {
@@ -1265,7 +1265,9 @@
// MacroAssembler::EnterFrame). For a setter stub frame we need one
additional
// entry for the implicit return value, see
// StoreStubCompiler::CompileStoreViaSetter.
- unsigned fixed_frame_entries = 1 + 4 + (is_setter_stub_frame ? 1 : 0);
+ unsigned fixed_frame_entries = (kPCOnStackSize / kPointerSize) +
+ (kFPOnStackSize / kPointerSize) + 3 +
+ (is_setter_stub_frame ? 1 : 0);
unsigned fixed_frame_size = fixed_frame_entries * kPointerSize;
unsigned output_frame_size = height_in_bytes + fixed_frame_size;
@@ -1287,9 +1289,9 @@
unsigned output_offset = output_frame_size;
// Read caller's PC from the previous frame.
- output_offset -= kPointerSize;
+ output_offset -= kPCOnStackSize;
intptr_t callers_pc = output_[frame_index - 1]->GetPc();
- output_frame->SetFrameSlot(output_offset, callers_pc);
+ output_frame->SetCallerPc(output_offset, callers_pc);
if (trace_) {
PrintF(" 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR
" ; caller's pc\n",
@@ -1297,9 +1299,9 @@
}
// Read caller's FP from the previous frame, and set this frame's FP.
- output_offset -= kPointerSize;
+ output_offset -= kFPOnStackSize;
intptr_t value = output_[frame_index - 1]->GetFp();
- output_frame->SetFrameSlot(output_offset, value);
+ output_frame->SetCallerFp(output_offset, value);
intptr_t fp_value = top_address + output_offset;
output_frame->SetFp(fp_value);
if (trace_) {
@@ -1435,10 +1437,10 @@
output_frame->SetTop(top_address);
// Read caller's PC (JSFunction continuation) from the input frame.
- unsigned input_frame_offset = input_frame_size - kPointerSize;
- unsigned output_frame_offset = output_frame_size - kPointerSize;
+ unsigned input_frame_offset = input_frame_size - kPCOnStackSize;
+ unsigned output_frame_offset = output_frame_size - kFPOnStackSize;
intptr_t value = input_->GetFrameSlot(input_frame_offset);
- output_frame->SetFrameSlot(output_frame_offset, value);
+ output_frame->SetCallerPc(output_frame_offset, value);
if (trace_) {
PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
V8PRIxPTR " ; caller's pc\n",
@@ -1446,10 +1448,10 @@
}
// Read caller's FP from the input frame, and set this frame's FP.
- input_frame_offset -= kPointerSize;
+ input_frame_offset -= kFPOnStackSize;
value = input_->GetFrameSlot(input_frame_offset);
- output_frame_offset -= kPointerSize;
- output_frame->SetFrameSlot(output_frame_offset, value);
+ output_frame_offset -= kFPOnStackSize;
+ output_frame->SetCallerFp(output_frame_offset, value);
intptr_t frame_ptr = input_->GetRegister(fp_reg.code());
output_frame->SetRegister(fp_reg.code(), frame_ptr);
output_frame->SetFp(frame_ptr);
=======================================
--- /branches/bleeding_edge/src/deoptimizer.h Tue Jul 23 06:30:44 2013
+++ /branches/bleeding_edge/src/deoptimizer.h Tue Jul 23 06:46:10 2013
@@ -509,6 +509,10 @@
void SetFrameSlot(unsigned offset, intptr_t value) {
*GetFrameSlotPointer(offset) = value;
}
+
+ void SetCallerPc(unsigned offset, intptr_t value);
+
+ void SetCallerFp(unsigned offset, intptr_t value);
intptr_t GetRegister(unsigned n) const {
ASSERT(n < ARRAY_SIZE(registers_));
=======================================
--- /branches/bleeding_edge/src/frames.cc Tue Jul 23 06:30:44 2013
+++ /branches/bleeding_edge/src/frames.cc Tue Jul 23 06:46:10 2013
@@ -540,7 +540,7 @@
state->sp = sp;
state->fp = fp;
state->pc_address = ResolveReturnAddressLocation(
- reinterpret_cast<Address*>(sp - 1 * kPointerSize));
+ reinterpret_cast<Address*>(sp - 1 * kPCOnStackSize));
}
=======================================
--- /branches/bleeding_edge/src/frames.h Tue Jul 23 06:30:44 2013
+++ /branches/bleeding_edge/src/frames.h Tue Jul 23 06:46:10 2013
@@ -92,7 +92,7 @@
static const int kContextOffset = 3 * kPointerSize;
static const int kFPOffset = 4 * kPointerSize;
- static const int kSize = kFPOffset + kPointerSize;
+ static const int kSize = kFPOffset + kFPOnStackSize;
static const int kSlotCount = kSize >> kPointerSizeLog2;
};
@@ -168,13 +168,14 @@
// context and function.
// StandardFrame::IterateExpressions assumes that kContextOffset is the
last
// object pointer.
- static const int kFixedFrameSize = 4 * kPointerSize;
+ static const int kFixedFrameSize = kPCOnStackSize + kFPOnStackSize +
+ 2 * kPointerSize;
static const int kExpressionsOffset = -3 * kPointerSize;
static const int kMarkerOffset = -2 * kPointerSize;
static const int kContextOffset = -1 * kPointerSize;
static const int kCallerFPOffset = 0 * kPointerSize;
- static const int kCallerPCOffset = +1 * kPointerSize;
- static const int kCallerSPOffset = +2 * kPointerSize;
+ static const int kCallerPCOffset = +1 * kFPOnStackSize;
+ static const int kCallerSPOffset = +2 * kPCOnStackSize;
};
=======================================
--- /branches/bleeding_edge/src/globals.h Tue Jul 23 06:30:44 2013
+++ /branches/bleeding_edge/src/globals.h Tue Jul 23 06:46:10 2013
@@ -239,12 +239,15 @@
const uint32_t kMaxUInt32 = 0xFFFFFFFFu;
-const int kCharSize = sizeof(char); // NOLINT
-const int kShortSize = sizeof(short); // NOLINT
-const int kIntSize = sizeof(int); // NOLINT
-const int kDoubleSize = sizeof(double); // NOLINT
-const int kIntptrSize = sizeof(intptr_t); // NOLINT
-const int kPointerSize = sizeof(void*); // NOLINT
+const int kCharSize = sizeof(char); // NOLINT
+const int kShortSize = sizeof(short); // NOLINT
+const int kIntSize = sizeof(int); // NOLINT
+const int kDoubleSize = sizeof(double); // NOLINT
+const int kIntptrSize = sizeof(intptr_t); // NOLINT
+const int kPointerSize = sizeof(void*); // NOLINT
+const int kRegisterSize = kPointerSize;
+const int kPCOnStackSize = kRegisterSize;
+const int kFPOnStackSize = kRegisterSize;
const int kDoubleSizeLog2 = 3;
=======================================
--- /branches/bleeding_edge/src/ia32/deoptimizer-ia32.cc Tue Jul 23
06:30:44 2013
+++ /branches/bleeding_edge/src/ia32/deoptimizer-ia32.cc Tue Jul 23
06:46:10 2013
@@ -740,6 +740,17 @@
}
__ bind(&done);
}
+
+
+void FrameDescription::SetCallerPc(unsigned offset, intptr_t value) {
+ SetFrameSlot(offset, value);
+}
+
+
+void FrameDescription::SetCallerFp(unsigned offset, intptr_t value) {
+ SetFrameSlot(offset, value);
+}
+
#undef __
=======================================
--- /branches/bleeding_edge/src/lithium.cc Tue Jul 23 06:30:44 2013
+++ /branches/bleeding_edge/src/lithium.cc Tue Jul 23 06:46:10 2013
@@ -270,7 +270,7 @@
return -(index + 3) * kPointerSize;
} else {
// Incoming parameter. Skip the return address.
- return -(index - 1) * kPointerSize;
+ return -(index + 1) * kPointerSize + kFPOnStackSize + kPCOnStackSize;
}
}
=======================================
--- /branches/bleeding_edge/src/mips/deoptimizer-mips.cc Tue Jul 23
06:30:44 2013
+++ /branches/bleeding_edge/src/mips/deoptimizer-mips.cc Tue Jul 23
06:46:10 2013
@@ -647,6 +647,17 @@
ASSERT_EQ(masm()->SizeOfCodeGeneratedSince(&table_start),
count() * table_entry_size_);
}
+
+
+void FrameDescription::SetCallerPc(unsigned offset, intptr_t value) {
+ SetFrameSlot(offset, value);
+}
+
+
+void FrameDescription::SetCallerFp(unsigned offset, intptr_t value) {
+ SetFrameSlot(offset, value);
+}
+
#undef __
=======================================
--- /branches/bleeding_edge/src/x64/deoptimizer-x64.cc Tue Jul 23 06:30:44
2013
+++ /branches/bleeding_edge/src/x64/deoptimizer-x64.cc Tue Jul 23 06:46:10
2013
@@ -609,6 +609,17 @@
}
__ bind(&done);
}
+
+
+void FrameDescription::SetCallerPc(unsigned offset, intptr_t value) {
+ SetFrameSlot(offset, value);
+}
+
+
+void FrameDescription::SetCallerFp(unsigned offset, intptr_t value) {
+ SetFrameSlot(offset, value);
+}
+
#undef __
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.