Revision: 22418
Author: [email protected]
Date: Wed Jul 16 07:11:05 2014 UTC
Log: Version 3.28.25 (based on bleeding_edge revision r22416)
Performance and stability improvements on all platforms.
http://code.google.com/p/v8/source/detail?r=22418
Modified:
/trunk/ChangeLog
/trunk/src/mips/codegen-mips.cc
/trunk/src/mips/stub-cache-mips.cc
/trunk/src/mips64/codegen-mips64.cc
/trunk/src/mips64/stub-cache-mips64.cc
/trunk/src/version.cc
/trunk/src/x87/ic-x87.cc
=======================================
--- /trunk/ChangeLog Wed Jul 16 00:04:33 2014 UTC
+++ /trunk/ChangeLog Wed Jul 16 07:11:05 2014 UTC
@@ -1,3 +1,8 @@
+2014-07-16: Version 3.28.25
+
+ Performance and stability improvements on all platforms.
+
+
2014-07-16: Version 3.28.24
Removed some copy-n-paste from StackFrame::Foo API entries (issue
3436).
=======================================
--- /trunk/src/mips/codegen-mips.cc Tue Jul 15 09:27:33 2014 UTC
+++ /trunk/src/mips/codegen-mips.cc Wed Jul 16 07:11:05 2014 UTC
@@ -786,7 +786,7 @@
HeapObject::kMapOffset,
target_map,
scratch2,
- kRAHasNotBeenSaved,
+ kRAHasBeenSaved,
kDontSaveFPRegs,
OMIT_REMEMBERED_SET,
OMIT_SMI_CHECK);
@@ -794,8 +794,9 @@
// Call into runtime if GC is required.
__ bind(&gc_required);
+ __ lw(ra, MemOperand(sp, 0));
__ Branch(USE_DELAY_SLOT, fail);
- __ pop(ra);
+ __ addiu(sp, sp, kPointerSize); // In delay slot.
// Convert and copy elements.
__ bind(&loop);
@@ -825,12 +826,12 @@
// exponent
__ sw(hole_upper, MemOperand(scratch3, Register::kExponentOffset));
__ bind(&entry);
- __ addiu(scratch3, scratch3, kDoubleSize); // In delay slot.
+ __ addiu(scratch3, scratch3, kDoubleSize);
__ Branch(&loop, lt, scratch3, Operand(array_end));
+ __ bind(&done);
__ pop(ra);
- __ bind(&done);
}
=======================================
--- /trunk/src/mips/stub-cache-mips.cc Wed Jul 16 00:04:33 2014 UTC
+++ /trunk/src/mips/stub-cache-mips.cc Wed Jul 16 07:11:05 2014 UTC
@@ -1384,12 +1384,12 @@
}
Label number_case;
- Register match = scratch1();
+ Register match = scratch2();
Label* smi_target = IncludesNumberType(types) ? &number_case : &miss;
__ JumpIfSmi(receiver(), smi_target, match); // Reg match is 0 if Smi.
// Polymorphic keyed stores may use the map register
- Register map_reg = scratch2();
+ Register map_reg = scratch1();
ASSERT(kind() != Code::KEYED_STORE_IC ||
map_reg.is(KeyedStoreIC::MapRegister()));
=======================================
--- /trunk/src/mips64/codegen-mips64.cc Tue Jul 15 09:27:33 2014 UTC
+++ /trunk/src/mips64/codegen-mips64.cc Wed Jul 16 07:11:05 2014 UTC
@@ -661,17 +661,17 @@
__ SmiScale(array_end, length, kDoubleSizeLog2);
__ Daddu(array_end, array_end, scratch3);
-// Repurpose registers no longer in use.
+ // Repurpose registers no longer in use.
Register hole_lower = elements;
Register hole_upper = length;
__ li(hole_lower, Operand(kHoleNanLower32));
- __ li(hole_upper, Operand(kHoleNanUpper32));
// scratch1: begin of source FixedArray element fields, not tagged
// hole_lower: kHoleNanLower32
// hole_upper: kHoleNanUpper32
// array_end: end of destination FixedDoubleArray, not tagged
// scratch3: begin of FixedDoubleArray element fields, not tagged
- __ Branch(&entry);
+ __ Branch(USE_DELAY_SLOT, &entry);
+ __ li(hole_upper, Operand(kHoleNanUpper32)); // In delay slot.
__ bind(&only_change_map);
__ sd(target_map, FieldMemOperand(receiver, HeapObject::kMapOffset));
@@ -679,7 +679,7 @@
HeapObject::kMapOffset,
target_map,
scratch2,
- kRAHasNotBeenSaved,
+ kRAHasBeenSaved,
kDontSaveFPRegs,
OMIT_REMEMBERED_SET,
OMIT_SMI_CHECK);
@@ -687,8 +687,9 @@
// Call into runtime if GC is required.
__ bind(&gc_required);
- __ pop(ra);
- __ Branch(fail);
+ __ ld(ra, MemOperand(sp, 0));
+ __ Branch(USE_DELAY_SLOT, fail);
+ __ daddiu(sp, sp, kPointerSize); // In delay slot.
// Convert and copy elements.
__ bind(&loop);
@@ -702,9 +703,8 @@
__ mtc1(scratch2, f0);
__ cvt_d_w(f0, f0);
__ sdc1(f0, MemOperand(scratch3));
- __ Daddu(scratch3, scratch3, kDoubleSize);
-
- __ Branch(&entry);
+ __ Branch(USE_DELAY_SLOT, &entry);
+ __ daddiu(scratch3, scratch3, kDoubleSize); // In delay slot.
// Hole found, store the-hole NaN.
__ bind(&convert_hole);
@@ -723,8 +723,8 @@
__ bind(&entry);
__ Branch(&loop, lt, scratch3, Operand(array_end));
+ __ bind(&done);
__ pop(ra);
- __ bind(&done);
}
=======================================
--- /trunk/src/mips64/stub-cache-mips64.cc Wed Jul 16 00:04:33 2014 UTC
+++ /trunk/src/mips64/stub-cache-mips64.cc Wed Jul 16 07:11:05 2014 UTC
@@ -1385,12 +1385,12 @@
}
Label number_case;
- Register match = scratch1();
+ Register match = scratch2();
Label* smi_target = IncludesNumberType(types) ? &number_case : &miss;
__ JumpIfSmi(receiver(), smi_target, match); // Reg match is 0 if Smi.
// Polymorphic keyed stores may use the map register
- Register map_reg = scratch2();
+ Register map_reg = scratch1();
ASSERT(kind() != Code::KEYED_STORE_IC ||
map_reg.is(KeyedStoreIC::MapRegister()));
=======================================
--- /trunk/src/version.cc Wed Jul 16 00:04:33 2014 UTC
+++ /trunk/src/version.cc Wed Jul 16 07:11:05 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 24
+#define BUILD_NUMBER 25
#define PATCH_LEVEL 0
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
=======================================
--- /trunk/src/x87/ic-x87.cc Wed Jul 16 00:04:33 2014 UTC
+++ /trunk/src/x87/ic-x87.cc Wed Jul 16 07:11:05 2014 UTC
@@ -33,45 +33,6 @@
__ cmp(type, JS_GLOBAL_PROXY_TYPE);
__ j(equal, global_object);
}
-
-
-// Generated code falls through if the receiver is a regular non-global
-// JS object with slow properties and no interceptors.
-static void GenerateNameDictionaryReceiverCheck(MacroAssembler* masm,
- Register receiver,
- Register r0,
- Register r1,
- Label* miss) {
- // Register usage:
- // receiver: holds the receiver on entry and is unchanged.
- // r0: used to hold receiver instance type.
- // Holds the property dictionary on fall through.
- // r1: used to hold receivers map.
-
- // Check that the receiver isn't a smi.
- __ JumpIfSmi(receiver, miss);
-
- // Check that the receiver is a valid JS object.
- __ mov(r1, FieldOperand(receiver, HeapObject::kMapOffset));
- __ movzx_b(r0, FieldOperand(r1, Map::kInstanceTypeOffset));
- __ cmp(r0, FIRST_SPEC_OBJECT_TYPE);
- __ j(below, miss);
-
- // If this assert fails, we have to check upper bound too.
- STATIC_ASSERT(LAST_TYPE == LAST_SPEC_OBJECT_TYPE);
-
- GenerateGlobalInstanceTypeCheck(masm, r0, miss);
-
- // Check for non-global object that requires access check.
- __ test_b(FieldOperand(r1, Map::kBitFieldOffset),
- (1 << Map::kIsAccessCheckNeeded) |
- (1 << Map::kHasNamedInterceptor));
- __ j(not_zero, miss);
-
- __ mov(r0, FieldOperand(receiver, JSObject::kPropertiesOffset));
- __ CheckMap(r0, masm->isolate()->factory()->hash_table_map(), miss,
- DONT_DO_SMI_CHECK);
-}
// Helper function used to load a property from a dictionary backing
@@ -942,30 +903,21 @@
void LoadIC::GenerateNormal(MacroAssembler* masm) {
- // ----------- S t a t e -------------
- // -- ecx : name
- // -- edx : receiver
- // -- esp[0] : return address
- // -----------------------------------
- ASSERT(edx.is(ReceiverRegister()));
- ASSERT(ecx.is(NameRegister()));
+ Register dictionary = eax;
+ ASSERT(!dictionary.is(ReceiverRegister()));
+ ASSERT(!dictionary.is(NameRegister()));
- Label miss, slow;
+ Label slow;
- GenerateNameDictionaryReceiverCheck(masm, edx, eax, ebx, &miss);
-
- // eax: elements
- // Search the dictionary placing the result in eax.
- GenerateDictionaryLoad(masm, &slow, eax, ecx, edi, ebx, eax);
+ __ mov(dictionary,
+ FieldOperand(ReceiverRegister(), JSObject::kPropertiesOffset));
+ GenerateDictionaryLoad(masm, &slow, dictionary, NameRegister(), edi, ebx,
+ eax);
__ ret(0);
// Dictionary load failed, go slow (but don't miss).
__ bind(&slow);
GenerateRuntimeGetProperty(masm);
-
- // Cache miss: Jump to runtime.
- __ bind(&miss);
- GenerateMiss(masm);
}
@@ -1094,19 +1046,20 @@
void StoreIC::GenerateNormal(MacroAssembler* masm) {
- // Return address is on the stack.
- Label miss, restore_miss;
+ Label restore_miss;
Register receiver = ReceiverRegister();
Register name = NameRegister();
Register value = ValueRegister();
+ Register dictionary = ebx;
- GenerateNameDictionaryReceiverCheck(masm, receiver, ebx, edi, &miss);
+ __ mov(dictionary, FieldOperand(receiver, JSObject::kPropertiesOffset));
// A lot of registers are needed for storing to slow case
// objects. Push and restore receiver but rely on
// GenerateDictionaryStore preserving the value and name.
__ push(receiver);
- GenerateDictionaryStore(masm, &restore_miss, ebx, name, value, receiver,
edi);
+ GenerateDictionaryStore(masm, &restore_miss, dictionary, name, value,
+ receiver, edi);
__ Drop(1);
Counters* counters = masm->isolate()->counters();
__ IncrementCounter(counters->store_normal_hit(), 1);
@@ -1114,8 +1067,6 @@
__ bind(&restore_miss);
__ pop(receiver);
-
- __ bind(&miss);
__ IncrementCounter(counters->store_normal_miss(), 1);
GenerateMiss(masm);
}
--
--
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.