Author: [email protected]
Date: Tue Feb 24 02:55:32 2009
New Revision: 1345

Modified:
    branches/experimental/toiger/src/virtual-frame-arm.cc
    branches/experimental/toiger/src/virtual-frame-ia32.cc

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

Review URL: http://codereview.chromium.org/28065

Modified: branches/experimental/toiger/src/virtual-frame-arm.cc
==============================================================================
--- branches/experimental/toiger/src/virtual-frame-arm.cc       (original)
+++ branches/experimental/toiger/src/virtual-frame-arm.cc       Tue Feb 24  
02:55:32 2009
@@ -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

Modified: branches/experimental/toiger/src/virtual-frame-ia32.cc
==============================================================================
--- branches/experimental/toiger/src/virtual-frame-ia32.cc      (original)
+++ branches/experimental/toiger/src/virtual-frame-ia32.cc      Tue Feb 24  
02:55:32 2009
@@ -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_;

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

Reply via email to