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

Reply via email to