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