Revision: 22263
Author: [email protected]
Date: Tue Jul 8 06:57:45 2014 UTC
Log: Version 3.28.17 (based on bleeding_edge revision r22261)
MIPS: Fix computed properties on object literals with a double as
propertyname (Chromium issue 390732).
Performance and stability improvements on all platforms.
http://code.google.com/p/v8/source/detail?r=22263
Modified:
/trunk/ChangeLog
/trunk/src/mips/full-codegen-mips.cc
/trunk/src/version.cc
/trunk/src/x87/code-stubs-x87.cc
/trunk/src/x87/full-codegen-x87.cc
/trunk/src/x87/lithium-x87.cc
/trunk/test/cctest/test-assembler-x87.cc
/trunk/test/cctest/test-disasm-x87.cc
=======================================
--- /trunk/ChangeLog Tue Jul 8 00:05:42 2014 UTC
+++ /trunk/ChangeLog Tue Jul 8 06:57:45 2014 UTC
@@ -1,3 +1,11 @@
+2014-07-08: Version 3.28.17
+
+ MIPS: Fix computed properties on object literals with a double as
+ propertyname (Chromium issue 390732).
+
+ Performance and stability improvements on all platforms.
+
+
2014-07-08: Version 3.28.16
Fix computed properties on object literals with a double as
propertyname
=======================================
--- /trunk/src/mips/full-codegen-mips.cc Fri Jul 4 16:46:28 2014 UTC
+++ /trunk/src/mips/full-codegen-mips.cc Tue Jul 8 06:57:45 2014 UTC
@@ -1705,9 +1705,9 @@
VisitForStackValue(key);
VisitForStackValue(value);
if (property->emit_store()) {
- __ li(a0, Operand(Smi::FromInt(NONE))); // PropertyAttributes.
+ __ li(a0, Operand(Smi::FromInt(SLOPPY))); // PropertyAttributes.
__ push(a0);
- __ CallRuntime(Runtime::kAddProperty, 4);
+ __ CallRuntime(Runtime::kSetProperty, 4);
} else {
__ Drop(3);
}
=======================================
--- /trunk/src/version.cc Tue Jul 8 00:05:42 2014 UTC
+++ /trunk/src/version.cc Tue Jul 8 06:57:45 2014 UTC
@@ -34,7 +34,7 @@
// system so their names cannot be changed without changing the scripts.
#define MAJOR_VERSION 3
#define MINOR_VERSION 28
-#define BUILD_NUMBER 16
+#define BUILD_NUMBER 17
#define PATCH_LEVEL 0
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
=======================================
--- /trunk/src/x87/code-stubs-x87.cc Mon Jul 7 00:05:07 2014 UTC
+++ /trunk/src/x87/code-stubs-x87.cc Tue Jul 8 06:57:45 2014 UTC
@@ -709,7 +709,7 @@
__ mov(Operand(esp, 2 * kPointerSize), edx);
// ebx = parameter count (tagged)
- // ecx = argument count (tagged)
+ // ecx = argument count (smi-tagged)
// esp[4] = parameter count (tagged)
// esp[8] = address of receiver argument
// Compute the mapped parameter count = min(ebx, ecx) in ebx.
@@ -742,47 +742,52 @@
__ Allocate(ebx, eax, edx, edi, &runtime, TAG_OBJECT);
// eax = address of new object(s) (tagged)
- // ecx = argument count (tagged)
+ // ecx = argument count (smi-tagged)
// esp[0] = mapped parameter count (tagged)
// esp[8] = parameter count (tagged)
// esp[12] = address of receiver argument
- // Get the arguments boilerplate from the current native context into
edi.
- Label has_mapped_parameters, copy;
+ // Get the arguments map from the current native context into edi.
+ Label has_mapped_parameters, instantiate;
__ mov(edi, Operand(esi,
Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX)));
__ mov(edi, FieldOperand(edi, GlobalObject::kNativeContextOffset));
__ mov(ebx, Operand(esp, 0 * kPointerSize));
__ test(ebx, ebx);
__ j(not_zero, &has_mapped_parameters, Label::kNear);
- __ mov(edi, Operand(edi,
-
Context::SlotOffset(Context::SLOPPY_ARGUMENTS_BOILERPLATE_INDEX)));
- __ jmp(©, Label::kNear);
+ __ mov(
+ edi,
+ Operand(edi,
Context::SlotOffset(Context::SLOPPY_ARGUMENTS_MAP_INDEX)));
+ __ jmp(&instantiate, Label::kNear);
__ bind(&has_mapped_parameters);
- __ mov(edi, Operand(edi,
-
Context::SlotOffset(Context::ALIASED_ARGUMENTS_BOILERPLATE_INDEX)));
- __ bind(©);
+ __ mov(
+ edi,
+ Operand(edi,
Context::SlotOffset(Context::ALIASED_ARGUMENTS_MAP_INDEX)));
+ __ bind(&instantiate);
// eax = address of new object (tagged)
// ebx = mapped parameter count (tagged)
- // ecx = argument count (tagged)
- // edi = address of boilerplate object (tagged)
+ // ecx = argument count (smi-tagged)
+ // edi = address of arguments map (tagged)
// esp[0] = mapped parameter count (tagged)
// esp[8] = parameter count (tagged)
// esp[12] = address of receiver argument
// Copy the JS object part.
- for (int i = 0; i < JSObject::kHeaderSize; i += kPointerSize) {
- __ mov(edx, FieldOperand(edi, i));
- __ mov(FieldOperand(eax, i), edx);
- }
+ __ mov(FieldOperand(eax, JSObject::kMapOffset), edi);
+ __ mov(FieldOperand(eax, JSObject::kPropertiesOffset),
+ masm->isolate()->factory()->empty_fixed_array());
+ __ mov(FieldOperand(eax, JSObject::kElementsOffset),
+ masm->isolate()->factory()->empty_fixed_array());
// Set up the callee in-object property.
STATIC_ASSERT(Heap::kArgumentsCalleeIndex == 1);
__ mov(edx, Operand(esp, 4 * kPointerSize));
+ __ AssertNotSmi(edx);
__ mov(FieldOperand(eax, JSObject::kHeaderSize +
Heap::kArgumentsCalleeIndex * kPointerSize),
edx);
// Use the length (smi tagged) and set that as an in-object property too.
+ __ AssertSmi(ecx);
STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0);
__ mov(FieldOperand(eax, JSObject::kHeaderSize +
Heap::kArgumentsLengthIndex * kPointerSize),
@@ -939,22 +944,22 @@
// Do the allocation of both objects in one go.
__ Allocate(ecx, eax, edx, ebx, &runtime, TAG_OBJECT);
- // Get the arguments boilerplate from the current native context.
+ // Get the arguments map from the current native context.
__ mov(edi, Operand(esi,
Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX)));
__ mov(edi, FieldOperand(edi, GlobalObject::kNativeContextOffset));
- const int offset =
- Context::SlotOffset(Context::STRICT_ARGUMENTS_BOILERPLATE_INDEX);
+ const int offset =
Context::SlotOffset(Context::STRICT_ARGUMENTS_MAP_INDEX);
__ mov(edi, Operand(edi, offset));
- // Copy the JS object part.
- for (int i = 0; i < JSObject::kHeaderSize; i += kPointerSize) {
- __ mov(ebx, FieldOperand(edi, i));
- __ mov(FieldOperand(eax, i), ebx);
- }
+ __ mov(FieldOperand(eax, JSObject::kMapOffset), edi);
+ __ mov(FieldOperand(eax, JSObject::kPropertiesOffset),
+ masm->isolate()->factory()->empty_fixed_array());
+ __ mov(FieldOperand(eax, JSObject::kElementsOffset),
+ masm->isolate()->factory()->empty_fixed_array());
// Get the length (smi tagged) and set that as an in-object property too.
STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0);
__ mov(ecx, Operand(esp, 1 * kPointerSize));
+ __ AssertSmi(ecx);
__ mov(FieldOperand(eax, JSObject::kHeaderSize +
Heap::kArgumentsLengthIndex * kPointerSize),
ecx);
=======================================
--- /trunk/src/x87/full-codegen-x87.cc Mon Jul 7 00:05:07 2014 UTC
+++ /trunk/src/x87/full-codegen-x87.cc Tue Jul 8 06:57:45 2014 UTC
@@ -1643,8 +1643,8 @@
VisitForStackValue(key);
VisitForStackValue(value);
if (property->emit_store()) {
- __ push(Immediate(Smi::FromInt(NONE))); // PropertyAttributes
- __ CallRuntime(Runtime::kAddProperty, 4);
+ __ push(Immediate(Smi::FromInt(SLOPPY))); // Strict mode
+ __ CallRuntime(Runtime::kSetProperty, 4);
} else {
__ Drop(3);
}
=======================================
--- /trunk/src/x87/lithium-x87.cc Wed Jul 2 00:04:59 2014 UTC
+++ /trunk/src/x87/lithium-x87.cc Tue Jul 8 06:57:45 2014 UTC
@@ -377,8 +377,9 @@
void LStoreNamedField::PrintDataTo(StringStream* stream) {
object()->PrintTo(stream);
- hydrogen()->access().PrintTo(stream);
- stream->Add(" <- ");
+ OStringStream os;
+ os << hydrogen()->access() << " <- ";
+ stream->Add(os.c_str());
value()->PrintTo(stream);
}
=======================================
--- /trunk/test/cctest/test-assembler-x87.cc Tue Jul 1 11:58:10 2014 UTC
+++ /trunk/test/cctest/test-assembler-x87.cc Tue Jul 8 06:57:45 2014 UTC
@@ -63,7 +63,8 @@
Handle<Code> code = isolate->factory()->NewCode(
desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
#ifdef OBJECT_PRINT
- code->Print();
+ OFStream os(stdout);
+ code->Print(os);
#endif
F2 f = FUNCTION_CAST<F2>(code->entry());
int res = f(3, 4);
@@ -99,7 +100,8 @@
Handle<Code> code = isolate->factory()->NewCode(
desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
#ifdef OBJECT_PRINT
- code->Print();
+ OFStream os(stdout);
+ code->Print(os);
#endif
F1 f = FUNCTION_CAST<F1>(code->entry());
int res = f(100);
@@ -139,7 +141,8 @@
Handle<Code> code = isolate->factory()->NewCode(
desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
#ifdef OBJECT_PRINT
- code->Print();
+ OFStream os(stdout);
+ code->Print(os);
#endif
F1 f = FUNCTION_CAST<F1>(code->entry());
int res = f(10);
@@ -217,7 +220,8 @@
Handle<Code> code = isolate->factory()->NewCode(
desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
#ifdef OBJECT_PRINT
- code->Print();
+ OFStream os(stdout);
+ code->Print(os);
#endif
F7 f = FUNCTION_CAST<F7>(code->entry());
=======================================
--- /trunk/test/cctest/test-disasm-x87.cc Wed Jun 4 00:06:13 2014 UTC
+++ /trunk/test/cctest/test-disasm-x87.cc Tue Jul 8 06:57:45 2014 UTC
@@ -375,7 +375,8 @@
desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
USE(code);
#ifdef OBJECT_PRINT
- code->Print();
+ OFStream os(stdout);
+ code->Print(os);
byte* begin = code->instruction_start();
byte* end = begin + code->instruction_size();
disasm::Disassembler::Disassemble(stdout, begin, end);
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.