Reviewers: danno, Michael Starzinger, paul.l..., dusmil.imgtec, akos.palfi.imgtec, gergely.kis.imgtec,

Description:
MIPS: Remove code object from StackHandler.

Port e0aa8ebf933b4c659e1c4a01ba244c5de452ff1c

Original commit message:
This reduces the size of the StackHandler by one word. We no longer
need to keep track of the code object, as the stack walk finds it.

BUG=

Please review this at https://codereview.chromium.org/990903008/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+16, -19 lines):
  M src/mips/macro-assembler-mips.cc
  M src/mips64/macro-assembler-mips64.cc


Index: src/mips/macro-assembler-mips.cc
diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc index 99a8e8e4837a94d5649816a75aaa78b55c86d6a2..10932e65d73c6421502288ffdfc8a306171b6557 100644
--- a/src/mips/macro-assembler-mips.cc
+++ b/src/mips/macro-assembler-mips.cc
@@ -3238,32 +3238,30 @@ void MacroAssembler::DebugBreak() {
 void MacroAssembler::PushTryHandler(StackHandler::Kind kind,
                                     int handler_index) {
   // Adjust this code if not the case.
-  STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize);
+  STATIC_ASSERT(StackHandlerConstants::kSize == 4 * kPointerSize);
   STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0 * kPointerSize);
-  STATIC_ASSERT(StackHandlerConstants::kCodeOffset == 1 * kPointerSize);
-  STATIC_ASSERT(StackHandlerConstants::kStateOffset == 2 * kPointerSize);
-  STATIC_ASSERT(StackHandlerConstants::kContextOffset == 3 * kPointerSize);
-  STATIC_ASSERT(StackHandlerConstants::kFPOffset == 4 * kPointerSize);
+  STATIC_ASSERT(StackHandlerConstants::kStateOffset == 1 * kPointerSize);
+  STATIC_ASSERT(StackHandlerConstants::kContextOffset == 2 * kPointerSize);
+  STATIC_ASSERT(StackHandlerConstants::kFPOffset == 3 * kPointerSize);

   // For the JSEntry handler, we must preserve a0-a3 and s0.
   // t1-t3 are available. We will build up the handler from the bottom by
   // pushing on the stack.
-  // Set up the code object (t1) and the state (t2) for pushing.
+  // Set up the the state (t2) for pushing.
   unsigned state =
       StackHandler::IndexField::encode(handler_index) |
       StackHandler::KindField::encode(kind);
-  li(t1, Operand(CodeObject()), CONSTANT_SIZE);
   li(t2, Operand(state));

-  // Push the frame pointer, context, state, and code object.
+  // Push the frame pointer, context, and state.
   if (kind == StackHandler::JS_ENTRY) {
     DCHECK_EQ(static_cast<Smi*>(0), Smi::FromInt(0));
     // The second zero_reg indicates no context.
     // The first zero_reg is the NULL frame pointer.
     // The operands are reversed to match the order of MultiPush/Pop.
-    Push(zero_reg, zero_reg, t2, t1);
+    Push(zero_reg, zero_reg, t2);
   } else {
-    MultiPush(t1.bit() | t2.bit() | cp.bit() | fp.bit());
+    MultiPush(t2.bit() | cp.bit() | fp.bit());
   }

   // Link the current handler as the next handler.
Index: src/mips64/macro-assembler-mips64.cc
diff --git a/src/mips64/macro-assembler-mips64.cc b/src/mips64/macro-assembler-mips64.cc index 893a253e9ddbea6440d90597fbe78d87c2149c65..d6398f24c8da27d680002c1d8fd9f3c2c3967cc3 100644
--- a/src/mips64/macro-assembler-mips64.cc
+++ b/src/mips64/macro-assembler-mips64.cc
@@ -3225,32 +3225,31 @@ void MacroAssembler::DebugBreak() {
 void MacroAssembler::PushTryHandler(StackHandler::Kind kind,
                                     int handler_index) {
   // Adjust this code if not the case.
-  STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize);
+  STATIC_ASSERT(StackHandlerConstants::kSize == 4 * kPointerSize);
   STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0 * kPointerSize);
-  STATIC_ASSERT(StackHandlerConstants::kCodeOffset == 1 * kPointerSize);
-  STATIC_ASSERT(StackHandlerConstants::kStateOffset == 2 * kPointerSize);
-  STATIC_ASSERT(StackHandlerConstants::kContextOffset == 3 * kPointerSize);
-  STATIC_ASSERT(StackHandlerConstants::kFPOffset == 4 * kPointerSize);
+  STATIC_ASSERT(StackHandlerConstants::kStateOffset == 1 * kPointerSize);
+  STATIC_ASSERT(StackHandlerConstants::kContextOffset == 2 * kPointerSize);
+  STATIC_ASSERT(StackHandlerConstants::kFPOffset == 3 * kPointerSize);

   // For the JSEntry handler, we must preserve a0-a3 and s0.
   // a5-a7 are available. We will build up the handler from the bottom by
   // pushing on the stack.
-  // Set up the code object (a5) and the state (a6) for pushing.
+  // Set up the the state (r6) for pushing.
   unsigned state =
       StackHandler::IndexField::encode(handler_index) |
       StackHandler::KindField::encode(kind);
   li(a5, Operand(CodeObject()), CONSTANT_SIZE);
   li(a6, Operand(state));

-  // Push the frame pointer, context, state, and code object.
+  // Push the frame pointer, context, and state.
   if (kind == StackHandler::JS_ENTRY) {
     DCHECK_EQ(static_cast<Smi*>(0), Smi::FromInt(0));
     // The second zero_reg indicates no context.
     // The first zero_reg is the NULL frame pointer.
     // The operands are reversed to match the order of MultiPush/Pop.
-    Push(zero_reg, zero_reg, a6, a5);
+    Push(zero_reg, zero_reg, a6);
   } else {
-    MultiPush(a5.bit() | a6.bit() | cp.bit() | fp.bit());
+    MultiPush(a6.bit() | cp.bit() | fp.bit());
   }

   // Link the current handler as the next handler.


--
--
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/d/optout.

Reply via email to