Revision: 2556
Author: [email protected]
Date: Tue Jul 28 05:46:08 2009
Log: Fix pixel array support for x64 and make the fast Array functions
that use JSARRAY_HAS_FAST_ELEMENTS_CHECK a bit safer in the presence
of pixel arrays.
Review URL: http://codereview.chromium.org/159500
http://code.google.com/p/v8/source/detail?r=2556

Modified:
  /branches/bleeding_edge/src/arm/stub-cache-arm.cc
  /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc
  /branches/bleeding_edge/src/x64/ic-x64.cc
  /branches/bleeding_edge/src/x64/stub-cache-x64.cc

=======================================
--- /branches/bleeding_edge/src/arm/stub-cache-arm.cc   Tue Jul 28 04:42:18  
2009
+++ /branches/bleeding_edge/src/arm/stub-cache-arm.cc   Tue Jul 28 05:46:08  
2009
@@ -678,13 +678,13 @@

      case JSARRAY_HAS_FAST_ELEMENTS_CHECK:
        CheckPrototypes(JSObject::cast(object), r1, holder, r3, r2, name,  
&miss);
-      // Make sure object->elements()->map() != Heap::hash_table_map()
+      // Make sure object->HasFastElements().
        // Get the elements array of the object.
        __ ldr(r3, FieldMemOperand(r1, JSObject::kElementsOffset));
        // Check that the object is in fast mode (not dictionary).
        __ ldr(r2, FieldMemOperand(r3, HeapObject::kMapOffset));
-      __ cmp(r2, Operand(Factory::hash_table_map()));
-      __ b(eq, &miss);
+      __ cmp(r2, Operand(Factory::fixed_array_map()));
+      __ b(ne, &miss);
        break;

      default:
=======================================
--- /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Tue Jul 28 04:42:18  
2009
+++ /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Tue Jul 28 05:46:08  
2009
@@ -680,13 +680,13 @@
      case JSARRAY_HAS_FAST_ELEMENTS_CHECK:
        CheckPrototypes(JSObject::cast(object), edx, holder,
                        ebx, ecx, name, &miss);
-      // Make sure object->elements()->map() !=  
Heap::dictionary_array_map()
+      // Make sure object->HasFastElements().
        // Get the elements array of the object.
        __ mov(ebx, FieldOperand(edx, JSObject::kElementsOffset));
        // Check that the object is in fast mode (not dictionary).
        __ cmp(FieldOperand(ebx, HeapObject::kMapOffset),
-             Immediate(Factory::hash_table_map()));
-      __ j(equal, &miss, not_taken);
+             Immediate(Factory::fixed_array_map()));
+      __ j(not_equal, &miss, not_taken);
        break;

      default:
=======================================
--- /branches/bleeding_edge/src/x64/ic-x64.cc   Tue Jul 28 01:22:48 2009
+++ /branches/bleeding_edge/src/x64/ic-x64.cc   Tue Jul 28 05:46:08 2009
@@ -87,8 +87,7 @@

    // Check that the properties array is a dictionary.
    __ movq(r0, FieldOperand(r1, JSObject::kPropertiesOffset));
-  __ Cmp(FieldOperand(r0, HeapObject::kMapOffset),
-         Factory::hash_table_map());
+  __ Cmp(FieldOperand(r0, HeapObject::kMapOffset),  
Factory::hash_table_map());
    __ j(not_equal, miss_label);

    // Compute the capacity mask.
@@ -243,8 +242,8 @@
    __ bind(&index_int);
    __ movq(rcx, FieldOperand(rcx, JSObject::kElementsOffset));
    // Check that the object is in fast mode (not dictionary).
-  __ Cmp(FieldOperand(rcx, HeapObject::kMapOffset),  
Factory::hash_table_map());
-  __ j(equal, &slow);
+  __ Cmp(FieldOperand(rcx, HeapObject::kMapOffset),  
Factory::fixed_array_map());
+  __ j(not_equal, &slow);
    // Check that the key (index) is within bounds.
    __ cmpl(rax, FieldOperand(rcx, FixedArray::kLengthOffset));
    __ j(below, &fast);  // Unsigned comparison rejects negative indices.
@@ -387,8 +386,8 @@
    // rbx: index (as a smi)
    __ movq(rcx, FieldOperand(rdx, JSObject::kElementsOffset));
    // Check that the object is in fast mode (not dictionary).
-  __ Cmp(FieldOperand(rcx, HeapObject::kMapOffset),  
Factory::hash_table_map());
-  __ j(equal, &slow);
+  __ Cmp(FieldOperand(rcx, HeapObject::kMapOffset),  
Factory::fixed_array_map());
+  __ j(not_equal, &slow);
    // Untag the key (for checking against untagged length in the fixed  
array).
    __ movl(rdx, rbx);
    __ sarl(rdx, Immediate(kSmiTagSize));
@@ -438,8 +437,8 @@
    // rdx: JSArray
    // rbx: index (as a smi)
    __ movq(rcx, FieldOperand(rdx, JSObject::kElementsOffset));
-  __ Cmp(FieldOperand(rcx, HeapObject::kMapOffset),  
Factory::hash_table_map());
-  __ j(equal, &slow);
+  __ Cmp(FieldOperand(rcx, HeapObject::kMapOffset),  
Factory::fixed_array_map());
+  __ j(not_equal, &slow);

    // Check the key against the length in the array, compute the
    // address to store into and fall through to fast case.
=======================================
--- /branches/bleeding_edge/src/x64/stub-cache-x64.cc   Tue Jul 28 04:42:18  
2009
+++ /branches/bleeding_edge/src/x64/stub-cache-x64.cc   Tue Jul 28 05:46:08  
2009
@@ -133,13 +133,13 @@
      case JSARRAY_HAS_FAST_ELEMENTS_CHECK:
        CheckPrototypes(JSObject::cast(object), rdx, holder,
                        rbx, rcx, name, &miss);
-      // Make sure object->elements()->map() !=  
Heap::dictionary_array_map()
+      // Make sure object->HasFastElements().
        // Get the elements array of the object.
        __ movq(rbx, FieldOperand(rdx, JSObject::kElementsOffset));
        // Check that the object is in fast mode (not dictionary).
        __ Cmp(FieldOperand(rbx, HeapObject::kMapOffset),
-             Factory::hash_table_map());
-      __ j(equal, &miss);
+             Factory::fixed_array_map());
+      __ j(not_equal, &miss);
        break;

      default:

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

Reply via email to