Author: [EMAIL PROTECTED]
Date: Tue Oct 21 15:40:14 2008
New Revision: 545
Modified:
branches/bleeding_edge/src/bootstrapper.cc
branches/bleeding_edge/src/macro-assembler-arm.cc
branches/bleeding_edge/src/macro-assembler-ia32.cc
Log:
- ip register cannot be used when accessing large constants in the
instruction
stream. Enhance the debug code to save and restore the unused holder_reg
at these points.
- Fix lint issues.
Review URL: http://codereview.chromium.org/8039
Modified: branches/bleeding_edge/src/bootstrapper.cc
==============================================================================
--- branches/bleeding_edge/src/bootstrapper.cc (original)
+++ branches/bleeding_edge/src/bootstrapper.cc Tue Oct 21 15:40:14 2008
@@ -526,7 +526,6 @@
}
{ // --- G l o b a l ---
-
// Step 1: create a fresh inner JSGlobalObject
Handle<JSGlobalObject> object;
{
Modified: branches/bleeding_edge/src/macro-assembler-arm.cc
==============================================================================
--- branches/bleeding_edge/src/macro-assembler-arm.cc (original)
+++ branches/bleeding_edge/src/macro-assembler-arm.cc Tue Oct 21 15:40:14
2008
@@ -648,8 +648,8 @@
void MacroAssembler::CheckAccessGlobalProxy(Register holder_reg,
- Register scratch,
- Label* miss) {
+ Register scratch,
+ Label* miss) {
Label same_contexts;
ASSERT(!holder_reg.is(scratch));
@@ -671,10 +671,15 @@
// Check the context is a global context.
if (FLAG_debug_code) {
+ // TODO(119): avoid push(holder_reg)/pop(holder_reg)
+ // Cannot use ip as a temporary in this verification code. Due to the
fact
+ // that ip is clobbered as part of cmp with an object Operand.
+ push(holder_reg); // Temporarily save holder on the stack.
// Read the first word and compare to the global_context_map.
- ldr(ip, FieldMemOperand(scratch, HeapObject::kMapOffset));
- cmp(ip, Operand(Factory::global_context_map()));
+ ldr(holder_reg, FieldMemOperand(scratch, HeapObject::kMapOffset));
+ cmp(holder_reg, Operand(Factory::global_context_map()));
Check(eq, "JSGlobalObject::global_context should be a global
context.");
+ pop(holder_reg); // Restore holder.
}
// Check if both contexts are the same.
@@ -684,12 +689,19 @@
// Check the context is a global context.
if (FLAG_debug_code) {
- cmp(ip, Operand(Factory::null_value()));
+ // TODO(119): avoid push(holder_reg)/pop(holder_reg)
+ // Cannot use ip as a temporary in this verification code. Due to the
fact
+ // that ip is clobbered as part of cmp with an object Operand.
+ push(holder_reg); // Temporarily save holder on the stack.
+ mov(holder_reg, ip); // Move ip to its holding place.
+ cmp(holder_reg, Operand(Factory::null_value()));
Check(ne, "JSGlobalProxy::context() should not be null.");
- ldr(ip, FieldMemOperand(ip, HeapObject::kMapOffset));
- cmp(ip, Operand(Factory::global_context_map()));
+ ldr(holder_reg, FieldMemOperand(holder_reg, HeapObject::kMapOffset));
+ cmp(holder_reg, Operand(Factory::global_context_map()));
Check(eq, "JSGlobalObject::global_context should be a global
context.");
+ // Restore ip is not needed. ip is reloaded below.
+ pop(holder_reg); // Restore holder.
// Restore ip to holder's context.
ldr(ip, FieldMemOperand(holder_reg, JSGlobalProxy::kContextOffset));
}
Modified: branches/bleeding_edge/src/macro-assembler-ia32.cc
==============================================================================
--- branches/bleeding_edge/src/macro-assembler-ia32.cc (original)
+++ branches/bleeding_edge/src/macro-assembler-ia32.cc Tue Oct 21 15:40:14
2008
@@ -560,7 +560,7 @@
mov(scratch, FieldOperand(scratch, HeapObject::kMapOffset));
cmp(scratch, Factory::global_context_map());
Check(equal, "JSGlobalObject::global_context should be a global
context.");
- pop(scratch);
+ pop(scratch);
}
// Check if both contexts are the same.
--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---