The stack layout is mixed up somewhere. I've not got a real fix, but this diff
gets it a little farther:

diff --git a/src/mips/builtins-mips.cc b/src/mips/builtins-mips.cc
index e7ba9f1..adc4fb5 100644
--- a/src/mips/builtins-mips.cc
+++ b/src/mips/builtins-mips.cc
@@ -646,6 +646,8 @@ static void Generate_JSConstructStubHelper(MacroAssembler*
masm,
       __ bind(&count_incremented);
     }

+    __ Pop(a1);
+
     // Retrieve smi-tagged arguments count from the stack.
     __ lw(a0, MemOperand(sp, 0));
     __ SmiUntag(a0);
@@ -654,7 +656,6 @@ static void Generate_JSConstructStubHelper(MacroAssembler*
masm,
     if (use_new_target) {
       __ Pop(a3);  // new.target
     }
-    __ Pop(a1);

     if (use_new_target) {
       __ Push(a3, t4, t4);

a0 was getting a tagged pointer, rather than the smi argument count you wanted.

I have to leave now for an appointment, I will be back in ~1.5 hours, and can
look more.

If you want to look further, build mipsel.debug with snapshot=off, then start up
the shell with --trace-sim flag. You can see where it fails, and watch the
loads/stores to the stack.

With the above patch it now fails where it is trying to offset the stack by some integer value, and is again loading a tagged pointer from stack into a1, rather
than an Smi.

  0x26727d14  8fa20000       lw      v0, 0(sp)               00000002 <--
[f53cae60]    (65888)
  0x26727d18  8fa50004       lw      a1, 4(sp)               26727941 <--
[f53cae64] (65889) <<--- this gets left-shifted an added to sp, as if it
was smi.



https://codereview.chromium.org/1203813002/

--
--
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