Reviewers: iposva,

Description:
Experimental: port the JS function check at function entry from ARM to
IA32.  Update the ARM message string.


Please review this at http://codereview.chromium.org/28065

SVN Base: http://v8.googlecode.com/svn/branches/experimental/toiger/

Affected files:
   M     src/virtual-frame-arm.cc
   M     src/virtual-frame-ia32.cc


Index: src/virtual-frame-ia32.cc
===================================================================
--- src/virtual-frame-ia32.cc   (revision 1343)
+++ src/virtual-frame-ia32.cc   (working copy)
@@ -389,6 +389,20 @@
  void VirtualFrame::Enter() {
    // Registers live on entry: esp, ebp, esi, edi.
    Comment cmnt(masm_, "[ Enter JS frame");
+
+#ifdef DEBUG
+  // Verify that edi contains a JS function.  The following code
+  // relies on eax being available for use.
+  __ test(edi, Immediate(kSmiTagMask));
+  __ Check(not_zero,
+           "VirtualFrame::Enter - edi is not a function (smi check).");
+  __ mov(eax, FieldOperand(edi, HeapObject::kMapOffset));
+  __ movzx_b(eax, FieldOperand(eax, Map::kInstanceTypeOffset));
+  __ cmp(eax, JS_FUNCTION_TYPE);
+  __ Check(equal,
+           "VirtualFrame::Enter - edi is not a function (map check).");
+#endif
+
    EmitPush(ebp);

    frame_pointer_ = stack_pointer_;
Index: src/virtual-frame-arm.cc
===================================================================
--- src/virtual-frame-arm.cc    (revision 1343)
+++ src/virtual-frame-arm.cc    (working copy)
@@ -221,16 +221,20 @@

  void VirtualFrame::Enter() {
    Comment cmnt(masm_, "[ Enter JS frame");
+
  #ifdef DEBUG
-  { Label done, fail;
+  // Verify that r1 contains a JS function.  The following code relies
+  // on r2 being available for use.
+  { Label map_check, done;
      __ tst(r1, Operand(kSmiTagMask));
-    __ b(eq, &fail);
+    __ b(ne, &map_check);
+    __ stop("VirtualFrame::Enter - r1 is not a function (smi check).");
+    __ bind(&map_check);
      __ ldr(r2, FieldMemOperand(r1, HeapObject::kMapOffset));
      __ ldrb(r2, FieldMemOperand(r2, Map::kInstanceTypeOffset));
      __ cmp(r2, Operand(JS_FUNCTION_TYPE));
      __ b(eq, &done);
-    __ bind(&fail);
-    __ stop("CodeGenerator::EnterJSFrame - r1 not a function");
+    __ stop("VirtualFrame::Enter - r1 is not a function (map check).");
      __ bind(&done);
    }
  #endif  // DEBUG



--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to