Revision: 10308
Author:   [email protected]
Date:     Thu Dec 29 04:19:34 2011
Log:      Add InternalArrayCodeGeneric

[email protected]
BUG=none
TEST=none

Review URL: http://codereview.chromium.org/9006051
http://code.google.com/p/v8/source/detail?r=10308

Modified:
 /branches/bleeding_edge/src/arm/builtins-arm.cc
 /branches/bleeding_edge/src/builtins.cc
 /branches/bleeding_edge/src/builtins.h
 /branches/bleeding_edge/src/ia32/builtins-ia32.cc
 /branches/bleeding_edge/src/x64/builtins-x64.cc

=======================================
--- /branches/bleeding_edge/src/arm/builtins-arm.cc     Tue Dec 27 07:12:12 2011
+++ /branches/bleeding_edge/src/arm/builtins-arm.cc     Thu Dec 29 04:19:34 2011
@@ -463,7 +463,7 @@
   __ bind(&generic_array_code);

   Handle<Code> array_code =
-      masm->isolate()->builtins()->ArrayCodeGeneric();
+      masm->isolate()->builtins()->InternalArrayCodeGeneric();
   __ Jump(array_code, RelocInfo::CODE_TARGET);
 }

=======================================
--- /branches/bleeding_edge/src/builtins.cc     Fri Dec  9 00:50:19 2011
+++ /branches/bleeding_edge/src/builtins.cc     Thu Dec 29 04:19:34 2011
@@ -184,31 +184,28 @@
 }


-BUILTIN(ArrayCodeGeneric) {
+static MaybeObject* ArrayCodeGenericCommon(Arguments* args,
+                                           Isolate* isolate,
+                                           JSFunction* constructor) {
   Heap* heap = isolate->heap();
   isolate->counters()->array_function_runtime()->Increment();

   JSArray* array;
   if (CalledAsConstructor(isolate)) {
-    array = JSArray::cast(*args.receiver());
+    array = JSArray::cast((*args)[0]);
   } else {
     // Allocate the JS Array
-    JSFunction* constructor =
-        isolate->context()->global_context()->array_function();
     Object* obj;
     { MaybeObject* maybe_obj = heap->AllocateJSObject(constructor);
       if (!maybe_obj->ToObject(&obj)) return maybe_obj;
     }
     array = JSArray::cast(obj);
   }
-
-  // 'array' now contains the JSArray we should initialize.
-  ASSERT(array->HasFastTypeElements());

   // Optimize the case where there is one argument and the argument is a
   // small smi.
-  if (args.length() == 2) {
-    Object* obj = args[1];
+  if (args->length() == 2) {
+    Object* obj = (*args)[1];
     if (obj->IsSmi()) {
       int len = Smi::cast(obj)->value();
       if (len >= 0 && len < JSObject::kInitialMaxFastElementArray) {
@@ -225,18 +222,18 @@
     { MaybeObject* maybe_obj = array->Initialize(0);
       if (!maybe_obj->ToObject(&obj)) return maybe_obj;
     }
-    return array->SetElementsLength(args[1]);
+    return array->SetElementsLength((*args)[1]);
   }

   // Optimize the case where there are no parameters passed.
-  if (args.length() == 1) {
+  if (args->length() == 1) {
     return array->Initialize(JSArray::kPreallocatedArrayElements);
   }

   // Set length and elements on the array.
-  int number_of_elements = args.length() - 1;
+  int number_of_elements = args->length() - 1;
   MaybeObject* maybe_object =
-      array->EnsureCanContainElements(&args, 1, number_of_elements,
+      array->EnsureCanContainElements(args, 1, number_of_elements,
                                       ALLOW_CONVERTED_DOUBLE_ELEMENTS);
   if (maybe_object->IsFailure()) return maybe_object;

@@ -257,7 +254,7 @@
     case FAST_SMI_ONLY_ELEMENTS: {
       FixedArray* smi_elms = FixedArray::cast(elms);
       for (int index = 0; index < number_of_elements; index++) {
-        smi_elms->set(index, args[index+1], SKIP_WRITE_BARRIER);
+        smi_elms->set(index, (*args)[index+1], SKIP_WRITE_BARRIER);
       }
       break;
     }
@@ -266,14 +263,14 @@
       WriteBarrierMode mode = elms->GetWriteBarrierMode(no_gc);
       FixedArray* object_elms = FixedArray::cast(elms);
       for (int index = 0; index < number_of_elements; index++) {
-        object_elms->set(index, args[index+1], mode);
+        object_elms->set(index, (*args)[index+1], mode);
       }
       break;
     }
     case FAST_DOUBLE_ELEMENTS: {
       FixedDoubleArray* double_elms = FixedDoubleArray::cast(elms);
       for (int index = 0; index < number_of_elements; index++) {
-        double_elms->set(index, args[index+1]->Number());
+        double_elms->set(index, (*args)[index+1]->Number());
       }
       break;
     }
@@ -286,6 +283,22 @@
   array->set_length(Smi::FromInt(number_of_elements));
   return array;
 }
+
+
+BUILTIN(InternalArrayCodeGeneric) {
+  return ArrayCodeGenericCommon(
+      &args,
+      isolate,
+      isolate->context()->global_context()->internal_array_function());
+}
+
+
+BUILTIN(ArrayCodeGeneric) {
+  return ArrayCodeGenericCommon(
+      &args,
+      isolate,
+      isolate->context()->global_context()->array_function());
+}


 MUST_USE_RESULT static MaybeObject* AllocateJSArray(Heap* heap) {
=======================================
--- /branches/bleeding_edge/src/builtins.h      Tue Dec 27 07:12:12 2011
+++ /branches/bleeding_edge/src/builtins.h      Thu Dec 29 04:19:34 2011
@@ -44,6 +44,7 @@
                                                                     \
   V(EmptyFunction, NO_EXTRA_ARGUMENTS)                              \
                                                                     \
+  V(InternalArrayCodeGeneric, NO_EXTRA_ARGUMENTS)                   \
   V(ArrayCodeGeneric, NO_EXTRA_ARGUMENTS)                           \
                                                                     \
   V(ArrayPush, NO_EXTRA_ARGUMENTS)                                  \
=======================================
--- /branches/bleeding_edge/src/ia32/builtins-ia32.cc Tue Dec 27 07:12:12 2011 +++ /branches/bleeding_edge/src/ia32/builtins-ia32.cc Thu Dec 29 04:19:34 2011
@@ -1337,7 +1337,7 @@
   // the construction.
   __ bind(&generic_array_code);
   Handle<Code> array_code =
-      masm->isolate()->builtins()->ArrayCodeGeneric();
+      masm->isolate()->builtins()->InternalArrayCodeGeneric();
   __ jmp(array_code, RelocInfo::CODE_TARGET);
 }

=======================================
--- /branches/bleeding_edge/src/x64/builtins-x64.cc     Tue Dec 27 07:12:12 2011
+++ /branches/bleeding_edge/src/x64/builtins-x64.cc     Thu Dec 29 04:19:34 2011
@@ -1357,7 +1357,7 @@
   // the construction.
   __ bind(&generic_array_code);
   Handle<Code> array_code =
-      masm->isolate()->builtins()->ArrayCodeGeneric();
+      masm->isolate()->builtins()->InternalArrayCodeGeneric();
   __ Jump(array_code, RelocInfo::CODE_TARGET);
 }

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

Reply via email to