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