diff options
author | isaacs <i@izs.me> | 2012-03-29 21:05:14 +0400 |
---|---|---|
committer | isaacs <i@izs.me> | 2012-03-30 03:04:48 +0400 |
commit | 6ebe9e0c1d28e82c5b49a9c8bbd166f6f296fd56 (patch) | |
tree | f3a435e8f7a72c873cbf9413d38bd1b11e12d5d0 /deps | |
parent | 304f1fcf86f38552d483eb69f6ccef331e691753 (diff) |
Upgrade V8 to 3.9.24.7
Diffstat (limited to 'deps')
-rw-r--r-- | deps/v8/src/mips/lithium-codegen-mips.cc | 57 | ||||
-rw-r--r-- | deps/v8/src/version.cc | 2 |
2 files changed, 38 insertions, 21 deletions
diff --git a/deps/v8/src/mips/lithium-codegen-mips.cc b/deps/v8/src/mips/lithium-codegen-mips.cc index 94e8979ba3a..6628d8e1efd 100644 --- a/deps/v8/src/mips/lithium-codegen-mips.cc +++ b/deps/v8/src/mips/lithium-codegen-mips.cc @@ -4505,34 +4505,51 @@ void LCodeGen::EmitDeepCopy(Handle<JSObject> object, } - // Copy elements backing store header. - ASSERT(!has_elements || elements->IsFixedArray()); if (has_elements) { + // Copy elements backing store header. __ LoadHeapObject(source, elements); for (int i = 0; i < FixedArray::kHeaderSize; i += kPointerSize) { __ lw(a2, FieldMemOperand(source, i)); __ sw(a2, FieldMemOperand(result, elements_offset + i)); } - } - // Copy elements backing store content. - ASSERT(!has_elements || elements->IsFixedArray()); - int elements_length = has_elements ? elements->length() : 0; - for (int i = 0; i < elements_length; i++) { - int total_offset = elements_offset + FixedArray::OffsetOfElementAt(i); - Handle<Object> value = JSObject::GetElement(object, i); - if (value->IsJSObject()) { - Handle<JSObject> value_object = Handle<JSObject>::cast(value); - __ Addu(a2, result, Operand(*offset)); - __ sw(a2, FieldMemOperand(result, total_offset)); - __ LoadHeapObject(source, value_object); - EmitDeepCopy(value_object, result, source, offset); - } else if (value->IsHeapObject()) { - __ LoadHeapObject(a2, Handle<HeapObject>::cast(value)); - __ sw(a2, FieldMemOperand(result, total_offset)); + // Copy elements backing store content. + int elements_length = has_elements ? elements->length() : 0; + if (elements->IsFixedDoubleArray()) { + Handle<FixedDoubleArray> double_array = + Handle<FixedDoubleArray>::cast(elements); + for (int i = 0; i < elements_length; i++) { + int64_t value = double_array->get_representation(i); + // We only support little endian mode... + int32_t value_low = value & 0xFFFFFFFF; + int32_t value_high = value >> 32; + int total_offset = + elements_offset + FixedDoubleArray::OffsetOfElementAt(i); + __ li(a2, Operand(value_low)); + __ sw(a2, FieldMemOperand(result, total_offset)); + __ li(a2, Operand(value_high)); + __ sw(a2, FieldMemOperand(result, total_offset + 4)); + } + } else if (elements->IsFixedArray()) { + for (int i = 0; i < elements_length; i++) { + int total_offset = elements_offset + FixedArray::OffsetOfElementAt(i); + Handle<Object> value = JSObject::GetElement(object, i); + if (value->IsJSObject()) { + Handle<JSObject> value_object = Handle<JSObject>::cast(value); + __ Addu(a2, result, Operand(*offset)); + __ sw(a2, FieldMemOperand(result, total_offset)); + __ LoadHeapObject(source, value_object); + EmitDeepCopy(value_object, result, source, offset); + } else if (value->IsHeapObject()) { + __ LoadHeapObject(a2, Handle<HeapObject>::cast(value)); + __ sw(a2, FieldMemOperand(result, total_offset)); + } else { + __ li(a2, Operand(value)); + __ sw(a2, FieldMemOperand(result, total_offset)); + } + } } else { - __ li(a2, Operand(value)); - __ sw(a2, FieldMemOperand(result, total_offset)); + UNREACHABLE(); } } } diff --git a/deps/v8/src/version.cc b/deps/v8/src/version.cc index 78c78742dd9..81681f28b8a 100644 --- a/deps/v8/src/version.cc +++ b/deps/v8/src/version.cc @@ -35,7 +35,7 @@ #define MAJOR_VERSION 3 #define MINOR_VERSION 9 #define BUILD_NUMBER 24 -#define PATCH_LEVEL 6 +#define PATCH_LEVEL 7 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) #define IS_CANDIDATE_VERSION 0 |