Revision: 23469
Author: machenb...@chromium.org
Date: Thu Aug 28 00:05:02 2014 UTC
Log: Version 3.29.23 (based on bleeding_edge revision r23435)
Performance and stability improvements on all platforms.
https://code.google.com/p/v8/source/detail?r=23469
Added:
/trunk/src/base/sys-info.cc
/trunk/src/base/sys-info.h
/trunk/src/ic/x87/ic-conventions-x87.cc
/trunk/test/base-unittests/sys-info-unittest.cc
Modified:
/trunk/BUILD.gn
/trunk/ChangeLog
/trunk/src/base/platform/platform-posix.cc
/trunk/src/base/platform/platform-win32.cc
/trunk/src/base/platform/platform.h
/trunk/src/compiler/arm/code-generator-arm.cc
/trunk/src/compiler/arm/instruction-codes-arm.h
/trunk/src/compiler/arm/instruction-selector-arm.cc
/trunk/src/compiler/arm64/code-generator-arm64.cc
/trunk/src/compiler/arm64/instruction-codes-arm64.h
/trunk/src/compiler/arm64/instruction-selector-arm64.cc
/trunk/src/compiler/generic-algorithm.h
/trunk/src/compiler/ia32/code-generator-ia32.cc
/trunk/src/compiler/ia32/instruction-codes-ia32.h
/trunk/src/compiler/ia32/instruction-selector-ia32.cc
/trunk/src/compiler/instruction-codes.h
/trunk/src/compiler/x64/code-generator-x64.cc
/trunk/src/compiler/x64/instruction-codes-x64.h
/trunk/src/compiler/x64/instruction-selector-x64.cc
/trunk/src/d8.cc
/trunk/src/ic/x87/access-compiler-x87.cc
/trunk/src/ic/x87/handler-compiler-x87.cc
/trunk/src/ic/x87/ic-compiler-x87.cc
/trunk/src/ic/x87/ic-x87.cc
/trunk/src/isolate.cc
/trunk/src/libplatform/default-platform.cc
/trunk/src/mips/code-stubs-mips.cc
/trunk/src/mips64/code-stubs-mips64.cc
/trunk/src/version.cc
/trunk/src/x87/builtins-x87.cc
/trunk/src/x87/code-stubs-x87.cc
/trunk/src/x87/debug-x87.cc
/trunk/src/x87/full-codegen-x87.cc
/trunk/src/x87/lithium-codegen-x87.cc
/trunk/src/x87/lithium-x87.cc
/trunk/src/zone-containers.h
/trunk/test/base-unittests/base-unittests.gyp
/trunk/test/base-unittests/platform/platform-unittest.cc
/trunk/tools/gyp/v8.gyp
/trunk/tools/whitespace.txt
=======================================
--- /dev/null
+++ /trunk/src/base/sys-info.cc Thu Aug 28 00:05:02 2014 UTC
@@ -0,0 +1,122 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "src/base/sys-info.h"
+
+#if V8_OS_POSIX
+#include <sys/resource.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#endif
+
+#if V8_OS_BSD
+#include <sys/sysctl.h>
+#endif
+
+#include <limits>
+
+#include "src/base/logging.h"
+#include "src/base/macros.h"
+#if V8_OS_WIN
+#include "src/base/win32-headers.h"
+#endif
+
+namespace v8 {
+namespace base {
+
+// static
+int SysInfo::NumberOfProcessors() {
+#if V8_OS_OPENBSD
+ int mib[2] = {CTL_HW, HW_NCPU};
+ int ncpu = 0;
+ size_t len = sizeof(ncpu);
+ if (sysctl(mib, arraysize(mib), &ncpu, &len, NULL, 0) != 0) {
+ UNREACHABLE();
+ return 1;
+ }
+ return ncpu;
+#elif V8_OS_POSIX
+ long result = sysconf(_SC_NPROCESSORS_ONLN); // NOLINT(runtime/int)
+ if (result == -1) {
+ UNREACHABLE();
+ return 1;
+ }
+ return static_cast<int>(result);
+#elif V8_OS_WIN
+ SYSTEM_INFO system_info = {0};
+ ::GetNativeSystemInfo(&system_info);
+ return static_cast<int>(system_info.dwNumberOfProcessors);
+#endif
+}
+
+
+// static
+int64_t SysInfo::AmountOfPhysicalMemory() {
+#if V8_OS_MACOSX
+ int mib[2] = {CTL_HW, HW_MEMSIZE};
+ int64_t memsize = 0;
+ size_t len = sizeof(memsize);
+ if (sysctl(mib, arraysize(mib), &memsize, &len, NULL, 0) != 0) {
+ UNREACHABLE();
+ return 0;
+ }
+ return memsize;
+#elif V8_OS_FREEBSD
+ int pages, page_size;
+ size_t size = sizeof(pages);
+ sysctlbyname("vm.stats.vm.v_page_count", &pages, &size, NULL, 0);
+ sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
+ if (pages == -1 || page_size == -1) {
+ UNREACHABLE();
+ return 0;
+ }
+ return static_cast<int64_t>(pages) * page_size;
+#elif V8_OS_CYGWIN || V8_OS_WIN
+ MEMORYSTATUSEX memory_info;
+ memory_info.dwLength = sizeof(memory_info);
+ if (!GlobalMemoryStatusEx(&memory_info)) {
+ UNREACHABLE();
+ return 0;
+ }
+ int64_t result = static_cast<int64_t>(memory_info.ullTotalPhys);
+ if (result < 0) result = std::numeric_limits<int64_t>::max();
+ return result;
+#elif V8_OS_QNX
+ struct stat stat_buf;
+ if (stat("/proc", &stat_buf) != 0) {
+ UNREACHABLE();
+ return 0;
+ }
+ return static_cast<int64_t>(stat_buf.st_size);
+#elif V8_OS_POSIX
+ long pages = sysconf(_SC_PHYS_PAGES); // NOLINT(runtime/int)
+ long page_size = sysconf(_SC_PAGESIZE); // NOLINT(runtime/int)
+ if (pages == -1 || page_size == -1) {
+ UNREACHABLE();
+ return 0;
+ }
+ return static_cast<int64_t>(pages) * page_size;
+#endif
+}
+
+
+// static
+int64_t SysInfo::AmountOfVirtualMemory() {
+#if V8_OS_NACL || V8_OS_WIN
+ return 0;
+#elif V8_OS_POSIX
+ struct rlimit rlim;
+ int result = getrlimit(RLIMIT_DATA, &rlim);
+ if (result != 0) {
+ UNREACHABLE();
+ return 0;
+ }
+ return (rlim.rlim_cur == RLIM_INFINITY) ? 0 : rlim.rlim_cur;
+#endif
+}
+
+} // namespace base
+} // namespace v8
=======================================
--- /dev/null
+++ /trunk/src/base/sys-info.h Thu Aug 28 00:05:02 2014 UTC
@@ -0,0 +1,30 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef V8_BASE_SYS_INFO_H_
+#define V8_BASE_SYS_INFO_H_
+
+#include "include/v8stdint.h"
+#include "src/base/build_config.h"
+
+namespace v8 {
+namespace base {
+
+class SysInfo V8_FINAL {
+ public:
+ // Returns the number of logical processors/core on the current machine.
+ static int NumberOfProcessors();
+
+ // Returns the number of bytes of physical memory on the current machine.
+ static int64_t AmountOfPhysicalMemory();
+
+ // Returns the number of bytes of virtual memory of this process. A
return
+ // value of zero means that there is no limit on the available virtual
memory.
+ static int64_t AmountOfVirtualMemory();
+};
+
+} // namespace base
+} // namespace v8
+
+#endif // V8_BASE_SYS_INFO_H_
=======================================
--- /dev/null
+++ /trunk/src/ic/x87/ic-conventions-x87.cc Thu Aug 28 00:05:02 2014 UTC
@@ -0,0 +1,40 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "src/v8.h"
+
+#if V8_TARGET_ARCH_X87
+
+#include "src/codegen.h"
+#include "src/ic/ic-conventions.h"
+
+namespace v8 {
+namespace internal {
+
+// IC register specifications
+
+const Register LoadConvention::ReceiverRegister() { return edx; }
+const Register LoadConvention::NameRegister() { return ecx; }
+
+
+const Register VectorLoadConvention::SlotRegister() {
+ DCHECK(FLAG_vector_ics);
+ return eax;
+}
+
+
+const Register FullVectorLoadConvention::VectorRegister() {
+ DCHECK(FLAG_vector_ics);
+ return ebx;
+}
+
+
+const Register StoreConvention::ReceiverRegister() { return edx; }
+const Register StoreConvention::NameRegister() { return ecx; }
+const Register StoreConvention::ValueRegister() { return eax; }
+const Register StoreConvention::MapRegister() { return ebx; }
+}
+} // namespace v8::internal
+
+#endif // V8_TARGET_ARCH_X87
=======================================
--- /dev/null
+++ /trunk/test/base-unittests/sys-info-unittest.cc Thu Aug 28 00:05:02
2014 UTC
@@ -0,0 +1,26 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "src/base/sys-info.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace v8 {
+namespace base {
+
+TEST(SysInfoTest, NumberOfProcessors) {
+ EXPECT_LT(0, SysInfo::NumberOfProcessors());
+}
+
+
+TEST(SysInfoTest, AmountOfPhysicalMemory) {
+ EXPECT_LT(0, SysInfo::AmountOfPhysicalMemory());
+}
+
+
+TEST(SysInfoTest, AmountOfVirtualMemory) {
+ EXPECT_LE(0, SysInfo::AmountOfVirtualMemory());
+}
+
+} // namespace base
+} // namespace v8
=======================================
--- /trunk/BUILD.gn Wed Aug 27 00:06:40 2014 UTC
+++ /trunk/BUILD.gn Thu Aug 28 00:05:02 2014 UTC
@@ -1183,6 +1183,8 @@
"src/base/safe_conversions_impl.h",
"src/base/safe_math.h",
"src/base/safe_math_impl.h",
+ "src/base/sys-info.cc",
+ "src/base/sys-info.h",
"src/base/utils/random-number-generator.cc",
"src/base/utils/random-number-generator.h",
]
=======================================
--- /trunk/ChangeLog Wed Aug 27 00:06:40 2014 UTC
+++ /trunk/ChangeLog Thu Aug 28 00:05:02 2014 UTC
@@ -1,3 +1,8 @@
+2014-08-28: Version 3.29.23
+
+ Performance and stability improvements on all platforms.
+
+
2014-08-27: Version 3.29.20
Handle empty allocation list in CodeRange properly (issue 3540,
Chromium
=======================================
--- /trunk/src/base/platform/platform-posix.cc Wed Aug 6 00:06:29 2014 UTC
+++ /trunk/src/base/platform/platform-posix.cc Thu Aug 28 00:05:02 2014 UTC
@@ -70,77 +70,6 @@
} // namespace
-int OS::NumberOfProcessorsOnline() {
- return static_cast<int>(sysconf(_SC_NPROCESSORS_ONLN));
-}
-
-
-// Maximum size of the virtual memory. 0 means there is no artificial
-// limit.
-
-intptr_t OS::MaxVirtualMemory() {
- struct rlimit limit;
- int result = getrlimit(RLIMIT_DATA, &limit);
- if (result != 0) return 0;
-#if V8_OS_NACL
- // The NaCl compiler doesn't like resource.h constants.
- if (static_cast<int>(limit.rlim_cur) == -1) return 0;
-#else
- if (limit.rlim_cur == RLIM_INFINITY) return 0;
-#endif
- return limit.rlim_cur;
-}
-
-
-uint64_t OS::TotalPhysicalMemory() {
-#if V8_OS_MACOSX
- int mib[2];
- mib[0] = CTL_HW;
- mib[1] = HW_MEMSIZE;
- int64_t size = 0;
- size_t len = sizeof(size);
- if (sysctl(mib, 2, &size, &len, NULL, 0) != 0) {
- UNREACHABLE();
- return 0;
- }
- return static_cast<uint64_t>(size);
-#elif V8_OS_FREEBSD
- int pages, page_size;
- size_t size = sizeof(pages);
- sysctlbyname("vm.stats.vm.v_page_count", &pages, &size, NULL, 0);
- sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
- if (pages == -1 || page_size == -1) {
- UNREACHABLE();
- return 0;
- }
- return static_cast<uint64_t>(pages) * page_size;
-#elif V8_OS_CYGWIN
- MEMORYSTATUS memory_info;
- memory_info.dwLength = sizeof(memory_info);
- if (!GlobalMemoryStatus(&memory_info)) {
- UNREACHABLE();
- return 0;
- }
- return static_cast<uint64_t>(memory_info.dwTotalPhys);
-#elif V8_OS_QNX
- struct stat stat_buf;
- if (stat("/proc", &stat_buf) != 0) {
- UNREACHABLE();
- return 0;
- }
- return static_cast<uint64_t>(stat_buf.st_size);
-#else
- intptr_t pages = sysconf(_SC_PHYS_PAGES);
- intptr_t page_size = sysconf(_SC_PAGESIZE);
- if (pages == -1 || page_size == -1) {
- UNREACHABLE();
- return 0;
- }
- return static_cast<uint64_t>(pages) * page_size;
-#endif
-}
-
-
int OS::ActivationFrameAlignment() {
#if V8_TARGET_ARCH_ARM
// On EABI ARM targets this is required for fp correctness in the
=======================================
--- /trunk/src/base/platform/platform-win32.cc Tue Aug 5 00:05:55 2014 UTC
+++ /trunk/src/base/platform/platform-win32.cc Thu Aug 28 00:05:02 2014 UTC
@@ -113,11 +113,6 @@
} // namespace
-intptr_t OS::MaxVirtualMemory() {
- return 0;
-}
-
-
class TimezoneCache {
public:
TimezoneCache() : initialized_(false) { }
@@ -1166,18 +1161,6 @@
void OS::SignalCodeMovingGC() {
}
-
-
-uint64_t OS::TotalPhysicalMemory() {
- MEMORYSTATUSEX memory_info;
- memory_info.dwLength = sizeof(memory_info);
- if (!GlobalMemoryStatusEx(&memory_info)) {
- UNREACHABLE();
- return 0;
- }
-
- return static_cast<uint64_t>(memory_info.ullTotalPhys);
-}
#else // __MINGW32__
@@ -1190,13 +1173,6 @@
#endif // __MINGW32__
-int OS::NumberOfProcessorsOnline() {
- SYSTEM_INFO info;
- GetSystemInfo(&info);
- return info.dwNumberOfProcessors;
-}
-
-
double OS::nan_value() {
#ifdef _MSC_VER
return std::numeric_limits<double>::quiet_NaN();
=======================================
--- /trunk/src/base/platform/platform.h Wed Aug 20 00:06:26 2014 UTC
+++ /trunk/src/base/platform/platform.h Thu Aug 28 00:05:02 2014 UTC
@@ -284,16 +284,6 @@
// using --never-compact) if accurate profiling is desired.
static void SignalCodeMovingGC();
- // Returns the number of processors online.
- static int NumberOfProcessorsOnline();
-
- // The total amount of physical memory available on the current system.
- static uint64_t TotalPhysicalMemory();
-
- // Maximum size of the virtual memory. 0 means there is no artificial
- // limit.
- static intptr_t MaxVirtualMemory();
-
// Returns the double constant NAN
static double nan_value();
=======================================
--- /trunk/src/compiler/arm/code-generator-arm.cc Wed Aug 27 00:06:40 2014
UTC
+++ /trunk/src/compiler/arm/code-generator-arm.cc Thu Aug 28 00:05:02 2014
UTC
@@ -136,28 +136,63 @@
ArmOperandConverter i(this, instr);
switch (ArchOpcodeField::decode(instr->opcode())) {
- case kArchJmp:
- __ b(code_->GetLabel(i.InputBlock(0)));
+ case kArchCallAddress: {
+ DirectCEntryStub stub(isolate());
+ stub.GenerateCall(masm(), i.InputRegister(0));
DCHECK_EQ(LeaveCC, i.OutputSBit());
break;
- case kArchNop:
- // don't emit code for nops.
+ }
+ case kArchCallCodeObject: {
+ if (instr->InputAt(0)->IsImmediate()) {
+ __ Call(Handle<Code>::cast(i.InputHeapObject(0)),
+ RelocInfo::CODE_TARGET);
+ } else {
+ __ add(ip, i.InputRegister(0),
+ Operand(Code::kHeaderSize - kHeapObjectTag));
+ __ Call(ip);
+ }
+ AddSafepointAndDeopt(instr);
DCHECK_EQ(LeaveCC, i.OutputSBit());
break;
- case kArchRet:
- AssembleReturn();
+ }
+ case kArchCallJSFunction: {
+ // TODO(jarin) The load of the context should be separated from the
call.
+ Register func = i.InputRegister(0);
+ __ ldr(cp, FieldMemOperand(func, JSFunction::kContextOffset));
+ __ ldr(ip, FieldMemOperand(func, JSFunction::kCodeEntryOffset));
+ __ Call(ip);
+ AddSafepointAndDeopt(instr);
DCHECK_EQ(LeaveCC, i.OutputSBit());
break;
+ }
case kArchDeoptimize: {
int deoptimization_id = MiscField::decode(instr->opcode());
BuildTranslation(instr, 0, deoptimization_id);
-
Address deopt_entry = Deoptimizer::GetDeoptimizationEntry(
isolate(), deoptimization_id, Deoptimizer::LAZY);
__ Call(deopt_entry, RelocInfo::RUNTIME_ENTRY);
DCHECK_EQ(LeaveCC, i.OutputSBit());
break;
}
+ case kArchDrop: {
+ int words = MiscField::decode(instr->opcode());
+ __ Drop(words);
+ DCHECK_LT(0, words);
+ DCHECK_EQ(LeaveCC, i.OutputSBit());
+ break;
+ }
+ case kArchJmp:
+ __ b(code_->GetLabel(i.InputBlock(0)));
+ DCHECK_EQ(LeaveCC, i.OutputSBit());
+ break;
+ case kArchNop:
+ // don't emit code for nops.
+ DCHECK_EQ(LeaveCC, i.OutputSBit());
+ break;
+ case kArchRet:
+ AssembleReturn();
+ DCHECK_EQ(LeaveCC, i.OutputSBit());
+ break;
case kArchTruncateDoubleToI:
__ TruncateDoubleToI(i.OutputRegister(), i.InputDoubleRegister(0));
DCHECK_EQ(LeaveCC, i.OutputSBit());
@@ -236,51 +271,6 @@
DCHECK_EQ(LeaveCC, i.OutputSBit());
break;
}
- case kArmCallCodeObject: {
- if (instr->InputAt(0)->IsImmediate()) {
- Handle<Code> code = Handle<Code>::cast(i.InputHeapObject(0));
- __ Call(code, RelocInfo::CODE_TARGET);
- } else {
- Register reg = i.InputRegister(0);
- int entry = Code::kHeaderSize - kHeapObjectTag;
- __ ldr(reg, MemOperand(reg, entry));
- __ Call(reg);
- }
-
- AddSafepointAndDeopt(instr);
-
- DCHECK_EQ(LeaveCC, i.OutputSBit());
- break;
- }
- case kArmCallJSFunction: {
- Register func = i.InputRegister(0);
-
- // TODO(jarin) The load of the context should be separated from the
call.
- __ ldr(cp, FieldMemOperand(func, JSFunction::kContextOffset));
- __ ldr(ip, FieldMemOperand(func, JSFunction::kCodeEntryOffset));
- __ Call(ip);
-
- AddSafepointAndDeopt(instr);
-
- DCHECK_EQ(LeaveCC, i.OutputSBit());
- break;
- }
- case kArmCallAddress: {
- DirectCEntryStub stub(isolate());
- stub.GenerateCall(masm(), i.InputRegister(0));
- DCHECK_EQ(LeaveCC, i.OutputSBit());
- break;
- }
- case kArmPush:
- __ Push(i.InputRegister(0));
- DCHECK_EQ(LeaveCC, i.OutputSBit());
- break;
- case kArmDrop: {
- int words = MiscField::decode(instr->opcode());
- __ Drop(words);
- DCHECK_EQ(LeaveCC, i.OutputSBit());
- break;
- }
case kArmCmp:
__ cmp(i.InputRegister(0), i.InputOperand2(1));
DCHECK_EQ(SetCC, i.OutputSBit());
@@ -442,6 +432,10 @@
DCHECK_EQ(LeaveCC, i.OutputSBit());
break;
}
+ case kArmPush:
+ __ Push(i.InputRegister(0));
+ DCHECK_EQ(LeaveCC, i.OutputSBit());
+ break;
case kArmStoreWriteBarrier: {
Register object = i.InputRegister(0);
Register index = i.InputRegister(1);
=======================================
--- /trunk/src/compiler/arm/instruction-codes-arm.h Wed Aug 27 00:06:40
2014 UTC
+++ /trunk/src/compiler/arm/instruction-codes-arm.h Thu Aug 28 00:05:02
2014 UTC
@@ -32,11 +32,6 @@
V(ArmMvn) \
V(ArmBfc) \
V(ArmUbfx) \
- V(ArmCallCodeObject) \
- V(ArmCallJSFunction) \
- V(ArmCallAddress) \
- V(ArmPush) \
- V(ArmDrop) \
V(ArmVcmpF64) \
V(ArmVaddF64) \
V(ArmVsubF64) \
@@ -62,6 +57,7 @@
V(ArmStrh) \
V(ArmLdr) \
V(ArmStr) \
+ V(ArmPush) \
V(ArmStoreWriteBarrier)
=======================================
--- /trunk/src/compiler/arm/instruction-selector-arm.cc Wed Aug 27 00:06:40
2014 UTC
+++ /trunk/src/compiler/arm/instruction-selector-arm.cc Thu Aug 28 00:05:02
2014 UTC
@@ -74,10 +74,14 @@
case kArmStrh:
return value >= -255 && value <= 255;
+ case kArchCallAddress:
+ case kArchCallCodeObject:
+ case kArchCallJSFunction:
+ case kArchDeoptimize:
+ case kArchDrop:
case kArchJmp:
case kArchNop:
case kArchRet:
- case kArchDeoptimize:
case kArchTruncateDoubleToI:
case kArmMul:
case kArmMla:
@@ -86,11 +90,6 @@
case kArmUdiv:
case kArmBfc:
case kArmUbfx:
- case kArmCallCodeObject:
- case kArmCallJSFunction:
- case kArmCallAddress:
- case kArmPush:
- case kArmDrop:
case kArmVcmpF64:
case kArmVaddF64:
case kArmVsubF64:
@@ -104,6 +103,7 @@
case kArmVcvtF64U32:
case kArmVcvtS32F64:
case kArmVcvtU32F64:
+ case kArmPush:
return false;
}
UNREACHABLE();
@@ -808,14 +808,14 @@
InstructionCode opcode;
switch (descriptor->kind()) {
case CallDescriptor::kCallCodeObject: {
- opcode = kArmCallCodeObject;
+ opcode = kArchCallCodeObject;
break;
}
case CallDescriptor::kCallAddress:
- opcode = kArmCallAddress;
+ opcode = kArchCallAddress;
break;
case CallDescriptor::kCallJSFunction:
- opcode = kArmCallJSFunction;
+ opcode = kArchCallJSFunction;
break;
default:
UNREACHABLE();
@@ -838,7 +838,7 @@
if (descriptor->kind() == CallDescriptor::kCallAddress &&
!buffer.pushed_nodes.empty()) {
DCHECK(deoptimization == NULL && continuation == NULL);
- Emit(kArmDrop | MiscField::encode(buffer.pushed_nodes.size()), NULL);
+ Emit(kArchDrop | MiscField::encode(buffer.pushed_nodes.size()), NULL);
}
}
=======================================
--- /trunk/src/compiler/arm64/code-generator-arm64.cc Wed Aug 27 00:06:40
2014 UTC
+++ /trunk/src/compiler/arm64/code-generator-arm64.cc Thu Aug 28 00:05:02
2014 UTC
@@ -131,24 +131,56 @@
Arm64OperandConverter i(this, instr);
InstructionCode opcode = instr->opcode();
switch (ArchOpcodeField::decode(opcode)) {
- case kArchJmp:
- __ B(code_->GetLabel(i.InputBlock(0)));
+ case kArchCallAddress: {
+ DirectCEntryStub stub(isolate());
+ stub.GenerateCall(masm(), i.InputRegister(0));
break;
- case kArchNop:
- // don't emit code for nops.
+ }
+ case kArchCallCodeObject: {
+ if (instr->InputAt(0)->IsImmediate()) {
+ __ Call(Handle<Code>::cast(i.InputHeapObject(0)),
+ RelocInfo::CODE_TARGET);
+ } else {
+ Register target = i.InputRegister(0);
+ __ Add(target, target, Code::kHeaderSize - kHeapObjectTag);
+ __ Call(target);
+ }
+ AddSafepointAndDeopt(instr);
+ // Meaningless instruction for ICs to overwrite.
+ AddNopForSmiCodeInlining();
break;
- case kArchRet:
- AssembleReturn();
+ }
+ case kArchCallJSFunction: {
+ // TODO(jarin) The load of the context should be separated from the
call.
+ Register func = i.InputRegister(0);
+ __ Ldr(cp, FieldMemOperand(func, JSFunction::kContextOffset));
+ __ Ldr(x10, FieldMemOperand(func, JSFunction::kCodeEntryOffset));
+ __ Call(x10);
+ AddSafepointAndDeopt(instr);
break;
+ }
case kArchDeoptimize: {
int deoptimization_id = MiscField::decode(instr->opcode());
BuildTranslation(instr, 0, deoptimization_id);
-
Address deopt_entry = Deoptimizer::GetDeoptimizationEntry(
isolate(), deoptimization_id, Deoptimizer::LAZY);
__ Call(deopt_entry, RelocInfo::RUNTIME_ENTRY);
break;
}
+ case kArchDrop: {
+ int words = MiscField::decode(instr->opcode());
+ __ Drop(words);
+ break;
+ }
+ case kArchJmp:
+ __ B(code_->GetLabel(i.InputBlock(0)));
+ break;
+ case kArchNop:
+ // don't emit code for nops.
+ break;
+ case kArchRet:
+ AssembleReturn();
+ break;
case kArchTruncateDoubleToI:
__ TruncateDoubleToI(i.OutputRegister(), i.InputDoubleRegister(0));
break;
@@ -283,38 +315,6 @@
case kArm64Sxtw:
__ Sxtw(i.OutputRegister(), i.InputRegister32(0));
break;
- case kArm64CallCodeObject: {
- if (instr->InputAt(0)->IsImmediate()) {
- Handle<Code> code = Handle<Code>::cast(i.InputHeapObject(0));
- __ Call(code, RelocInfo::CODE_TARGET);
- } else {
- Register reg = i.InputRegister(0);
- int entry = Code::kHeaderSize - kHeapObjectTag;
- __ Ldr(reg, MemOperand(reg, entry));
- __ Call(reg);
- }
-
- AddSafepointAndDeopt(instr);
- // Meaningless instruction for ICs to overwrite.
- AddNopForSmiCodeInlining();
- break;
- }
- case kArm64CallJSFunction: {
- Register func = i.InputRegister(0);
-
- // TODO(jarin) The load of the context should be separated from the
call.
- __ Ldr(cp, FieldMemOperand(func, JSFunction::kContextOffset));
- __ Ldr(x10, FieldMemOperand(func, JSFunction::kCodeEntryOffset));
- __ Call(x10);
-
- AddSafepointAndDeopt(instr);
- break;
- }
- case kArm64CallAddress: {
- DirectCEntryStub stub(isolate());
- stub.GenerateCall(masm(), i.InputRegister(0));
- break;
- }
case kArm64Claim: {
int words = MiscField::decode(instr->opcode());
__ Claim(words);
@@ -337,11 +337,6 @@
__ PokePair(i.InputRegister(1), i.InputRegister(0), slot *
kPointerSize);
break;
}
- case kArm64Drop: {
- int words = MiscField::decode(instr->opcode());
- __ Drop(words);
- break;
- }
case kArm64Cmp:
__ Cmp(i.InputRegister(0), i.InputOperand(1));
break;
=======================================
--- /trunk/src/compiler/arm64/instruction-codes-arm64.h Wed Aug 27 00:06:40
2014 UTC
+++ /trunk/src/compiler/arm64/instruction-codes-arm64.h Thu Aug 28 00:05:02
2014 UTC
@@ -50,14 +50,10 @@
V(Arm64Ror32) \
V(Arm64Mov32) \
V(Arm64Sxtw) \
- V(Arm64CallCodeObject) \
- V(Arm64CallJSFunction) \
- V(Arm64CallAddress) \
V(Arm64Claim) \
V(Arm64Poke) \
V(Arm64PokePairZero) \
V(Arm64PokePair) \
- V(Arm64Drop) \
V(Arm64Float64Cmp) \
V(Arm64Float64Add) \
V(Arm64Float64Sub) \
=======================================
--- /trunk/src/compiler/arm64/instruction-selector-arm64.cc Wed Aug 27
00:06:40 2014 UTC
+++ /trunk/src/compiler/arm64/instruction-selector-arm64.cc Thu Aug 28
00:05:02 2014 UTC
@@ -638,14 +638,14 @@
InstructionCode opcode;
switch (descriptor->kind()) {
case CallDescriptor::kCallCodeObject: {
- opcode = kArm64CallCodeObject;
+ opcode = kArchCallCodeObject;
break;
}
case CallDescriptor::kCallAddress:
- opcode = kArm64CallAddress;
+ opcode = kArchCallAddress;
break;
case CallDescriptor::kCallJSFunction:
- opcode = kArm64CallJSFunction;
+ opcode = kArchCallJSFunction;
break;
default:
UNREACHABLE();
@@ -667,7 +667,7 @@
// Caller clean up of stack for C-style calls.
if (is_c_frame && aligned_push_count > 0) {
DCHECK(deoptimization == NULL && continuation == NULL);
- Emit(kArm64Drop | MiscField::encode(aligned_push_count), NULL);
+ Emit(kArchDrop | MiscField::encode(aligned_push_count), NULL);
}
}
=======================================
--- /trunk/src/compiler/generic-algorithm.h Wed Aug 27 15:14:54 2014 UTC
+++ /trunk/src/compiler/generic-algorithm.h Thu Aug 28 00:05:02 2014 UTC
@@ -43,7 +43,7 @@
typedef typename Traits::Node Node;
typedef typename Traits::Iterator Iterator;
typedef std::pair<Iterator, Iterator> NodeState;
- typedef std::stack<NodeState, ZoneDeque<NodeState> > NodeStateStack;
+ typedef std::stack<NodeState, ZoneDeque<NodeState>> NodeStateStack;
NodeStateStack stack((ZoneDeque<NodeState>(zone)));
BoolVector visited(Traits::max_id(graph), false, zone);
Node* current = *root_begin;
=======================================
--- /trunk/src/compiler/ia32/code-generator-ia32.cc Wed Aug 27 00:06:40
2014 UTC
+++ /trunk/src/compiler/ia32/code-generator-ia32.cc Thu Aug 28 00:05:02
2014 UTC
@@ -111,15 +111,35 @@
IA32OperandConverter i(this, instr);
switch (ArchOpcodeField::decode(instr->opcode())) {
- case kArchJmp:
- __ jmp(code()->GetLabel(i.InputBlock(0)));
+ case kArchCallAddress:
+ if (HasImmediateInput(instr, 0)) {
+ // TODO(dcarney): wire up EXTERNAL_REFERENCE instead of
RUNTIME_ENTRY.
+ __ call(reinterpret_cast<byte*>(i.InputInt32(0)),
+ RelocInfo::RUNTIME_ENTRY);
+ } else {
+ __ call(i.InputRegister(0));
+ }
break;
- case kArchNop:
- // don't emit code for nops.
+ case kArchCallCodeObject: {
+ if (HasImmediateInput(instr, 0)) {
+ Handle<Code> code = Handle<Code>::cast(i.InputHeapObject(0));
+ __ call(code, RelocInfo::CODE_TARGET);
+ } else {
+ Register reg = i.InputRegister(0);
+ __ call(Operand(reg, Code::kHeaderSize - kHeapObjectTag));
+ }
+ AddSafepointAndDeopt(instr);
+ AddNopForSmiCodeInlining();
break;
- case kArchRet:
- AssembleReturn();
+ }
+ case kArchCallJSFunction: {
+ // TODO(jarin) The load of the context should be separated from the
call.
+ Register func = i.InputRegister(0);
+ __ mov(esi, FieldOperand(func, JSFunction::kContextOffset));
+ __ call(FieldOperand(func, JSFunction::kCodeEntryOffset));
+ AddSafepointAndDeopt(instr);
break;
+ }
case kArchDeoptimize: {
int deoptimization_id = MiscField::decode(instr->opcode());
BuildTranslation(instr, 0, deoptimization_id);
@@ -129,6 +149,20 @@
__ call(deopt_entry, RelocInfo::RUNTIME_ENTRY);
break;
}
+ case kArchDrop: {
+ int words = MiscField::decode(instr->opcode());
+ __ add(esp, Immediate(kPointerSize * words));
+ break;
+ }
+ case kArchJmp:
+ __ jmp(code()->GetLabel(i.InputBlock(0)));
+ break;
+ case kArchNop:
+ // don't emit code for nops.
+ break;
+ case kArchRet:
+ AssembleReturn();
+ break;
case kArchTruncateDoubleToI:
__ TruncateDoubleToI(i.OutputRegister(), i.InputDoubleRegister(0));
break;
@@ -230,52 +264,6 @@
__ ror_cl(i.OutputRegister());
}
break;
- case kIA32Push:
- if (HasImmediateInput(instr, 0)) {
- __ push(i.InputImmediate(0));
- } else {
- __ push(i.InputOperand(0));
- }
- break;
- case kIA32CallCodeObject: {
- if (HasImmediateInput(instr, 0)) {
- Handle<Code> code = Handle<Code>::cast(i.InputHeapObject(0));
- __ call(code, RelocInfo::CODE_TARGET);
- } else {
- Register reg = i.InputRegister(0);
- int entry = Code::kHeaderSize - kHeapObjectTag;
- __ call(Operand(reg, entry));
- }
-
- AddSafepointAndDeopt(instr);
-
- AddNopForSmiCodeInlining();
- break;
- }
- case kIA32CallAddress:
- if (HasImmediateInput(instr, 0)) {
- // TODO(dcarney): wire up EXTERNAL_REFERENCE instead of
RUNTIME_ENTRY.
- __ call(reinterpret_cast<byte*>(i.InputInt32(0)),
- RelocInfo::RUNTIME_ENTRY);
- } else {
- __ call(i.InputRegister(0));
- }
- break;
- case kPopStack: {
- int words = MiscField::decode(instr->opcode());
- __ add(esp, Immediate(kPointerSize * words));
- break;
- }
- case kIA32CallJSFunction: {
- Register func = i.InputRegister(0);
-
- // TODO(jarin) The load of the context should be separated from the
call.
- __ mov(esi, FieldOperand(func, JSFunction::kContextOffset));
- __ call(FieldOperand(func, JSFunction::kCodeEntryOffset));
-
- AddSafepointAndDeopt(instr);
- break;
- }
case kSSEFloat64Cmp:
__ ucomisd(i.InputDoubleRegister(0), i.InputOperand(1));
break;
@@ -399,6 +387,13 @@
__ cvtsd2ss(xmm0, i.InputDoubleRegister(index));
__ movss(operand, xmm0);
}
+ break;
+ case kIA32Push:
+ if (HasImmediateInput(instr, 0)) {
+ __ push(i.InputImmediate(0));
+ } else {
+ __ push(i.InputOperand(0));
+ }
break;
case kIA32StoreWriteBarrier: {
Register object = i.InputRegister(0);
=======================================
--- /trunk/src/compiler/ia32/instruction-codes-ia32.h Wed Aug 27 00:06:40
2014 UTC
+++ /trunk/src/compiler/ia32/instruction-codes-ia32.h Thu Aug 28 00:05:02
2014 UTC
@@ -28,11 +28,6 @@
V(IA32Shr) \
V(IA32Sar) \
V(IA32Ror) \
- V(IA32Push) \
- V(IA32CallCodeObject) \
- V(IA32CallAddress) \
- V(PopStack) \
- V(IA32CallJSFunction) \
V(SSEFloat64Cmp) \
V(SSEFloat64Add) \
V(SSEFloat64Sub) \
@@ -52,6 +47,7 @@
V(IA32Movl) \
V(IA32Movss) \
V(IA32Movsd) \
+ V(IA32Push) \
V(IA32StoreWriteBarrier)
=======================================
--- /trunk/src/compiler/ia32/instruction-selector-ia32.cc Wed Aug 27
00:06:40 2014 UTC
+++ /trunk/src/compiler/ia32/instruction-selector-ia32.cc Thu Aug 28
00:05:02 2014 UTC
@@ -530,14 +530,14 @@
InstructionCode opcode;
switch (descriptor->kind()) {
case CallDescriptor::kCallCodeObject: {
- opcode = kIA32CallCodeObject;
+ opcode = kArchCallCodeObject;
break;
}
case CallDescriptor::kCallAddress:
- opcode = kIA32CallAddress;
+ opcode = kArchCallAddress;
break;
case CallDescriptor::kCallJSFunction:
- opcode = kIA32CallJSFunction;
+ opcode = kArchCallJSFunction;
break;
default:
UNREACHABLE();
@@ -560,7 +560,7 @@
if (descriptor->kind() == CallDescriptor::kCallAddress &&
buffer.pushed_nodes.size() > 0) {
DCHECK(deoptimization == NULL && continuation == NULL);
- Emit(kPopStack | MiscField::encode(buffer.pushed_nodes.size()), NULL);
+ Emit(kArchDrop | MiscField::encode(buffer.pushed_nodes.size()), NULL);
}
}
=======================================
--- /trunk/src/compiler/instruction-codes.h Thu Aug 21 00:04:56 2014 UTC
+++ /trunk/src/compiler/instruction-codes.h Thu Aug 28 00:05:02 2014 UTC
@@ -29,7 +29,11 @@
// Target-specific opcodes that specify which assembly sequence to emit.
// Most opcodes specify a single instruction.
#define ARCH_OPCODE_LIST(V) \
+ V(ArchCallAddress) \
+ V(ArchCallCodeObject) \
+ V(ArchCallJSFunction) \
V(ArchDeoptimize) \
+ V(ArchDrop) \
V(ArchJmp) \
V(ArchNop) \
V(ArchRet) \
=======================================
--- /trunk/src/compiler/x64/code-generator-x64.cc Wed Aug 27 00:06:40 2014
UTC
+++ /trunk/src/compiler/x64/code-generator-x64.cc Thu Aug 28 00:05:02 2014
UTC
@@ -204,24 +204,58 @@
X64OperandConverter i(this, instr);
switch (ArchOpcodeField::decode(instr->opcode())) {
- case kArchJmp:
- __ jmp(code_->GetLabel(i.InputBlock(0)));
+ case kArchCallCodeObject: {
+ if (HasImmediateInput(instr, 0)) {
+ Handle<Code> code = Handle<Code>::cast(i.InputHeapObject(0));
+ __ Call(code, RelocInfo::CODE_TARGET);
+ } else {
+ Register reg = i.InputRegister(0);
+ int entry = Code::kHeaderSize - kHeapObjectTag;
+ __ Call(Operand(reg, entry));
+ }
+ AddSafepointAndDeopt(instr);
+ AddNopForSmiCodeInlining();
break;
- case kArchNop:
- // don't emit code for nops.
+ }
+ case kArchCallAddress:
+ if (HasImmediateInput(instr, 0)) {
+ Immediate64 imm = i.InputImmediate64(0);
+ DCHECK_EQ(kImm64Value, imm.type);
+ __ Call(reinterpret_cast<byte*>(imm.value), RelocInfo::NONE64);
+ } else {
+ __ call(i.InputRegister(0));
+ }
break;
- case kArchRet:
- AssembleReturn();
+ case kArchCallJSFunction: {
+ // TODO(jarin) The load of the context should be separated from the
call.
+ Register func = i.InputRegister(0);
+ __ movp(rsi, FieldOperand(func, JSFunction::kContextOffset));
+ __ Call(FieldOperand(func, JSFunction::kCodeEntryOffset));
+ AddSafepointAndDeopt(instr);
break;
+ }
case kArchDeoptimize: {
int deoptimization_id = MiscField::decode(instr->opcode());
BuildTranslation(instr, 0, deoptimization_id);
-
Address deopt_entry = Deoptimizer::GetDeoptimizationEntry(
isolate(), deoptimization_id, Deoptimizer::LAZY);
__ call(deopt_entry, RelocInfo::RUNTIME_ENTRY);
break;
}
+ case kArchDrop: {
+ int words = MiscField::decode(instr->opcode());
+ __ addq(rsp, Immediate(kPointerSize * words));
+ break;
+ }
+ case kArchJmp:
+ __ jmp(code_->GetLabel(i.InputBlock(0)));
+ break;
+ case kArchNop:
+ // don't emit code for nops.
+ break;
+ case kArchRet:
+ AssembleReturn();
+ break;
case kArchTruncateDoubleToI:
__ TruncateDoubleToI(i.OutputRegister(), i.InputDoubleRegister(0));
break;
@@ -379,57 +413,6 @@
case kX64Ror:
ASSEMBLE_SHIFT(rorq, 6);
break;
- case kX64Push: {
- RegisterOrOperand input = i.InputRegisterOrOperand(0);
- if (input.type == kRegister) {
- __ pushq(input.reg);
- } else {
- __ pushq(input.operand);
- }
- break;
- }
- case kX64PushI:
- __ pushq(i.InputImmediate(0));
- break;
- case kX64CallCodeObject: {
- if (HasImmediateInput(instr, 0)) {
- Handle<Code> code = Handle<Code>::cast(i.InputHeapObject(0));
- __ Call(code, RelocInfo::CODE_TARGET);
- } else {
- Register reg = i.InputRegister(0);
- int entry = Code::kHeaderSize - kHeapObjectTag;
- __ Call(Operand(reg, entry));
- }
-
- AddSafepointAndDeopt(instr);
-
- AddNopForSmiCodeInlining();
- break;
- }
- case kX64CallAddress:
- if (HasImmediateInput(instr, 0)) {
- Immediate64 imm = i.InputImmediate64(0);
- DCHECK_EQ(kImm64Value, imm.type);
- __ Call(reinterpret_cast<byte*>(imm.value), RelocInfo::NONE64);
- } else {
- __ call(i.InputRegister(0));
- }
- break;
- case kPopStack: {
- int words = MiscField::decode(instr->opcode());
- __ addq(rsp, Immediate(kPointerSize * words));
- break;
- }
- case kX64CallJSFunction: {
- Register func = i.InputRegister(0);
-
- // TODO(jarin) The load of the context should be separated from the
call.
- __ movp(rsi, FieldOperand(func, JSFunction::kContextOffset));
- __ Call(FieldOperand(func, JSFunction::kCodeEntryOffset));
-
- AddSafepointAndDeopt(instr);
- break;
- }
case kSSEFloat64Cmp: {
RegisterOrOperand input = i.InputRegisterOrOperand(1);
if (input.type == kDoubleRegister) {
@@ -513,7 +496,6 @@
__ cvtqsi2sd(i.OutputDoubleRegister(), i.InputRegister(0));
break;
}
-
case kX64Movsxbl:
__ movsxbl(i.OutputRegister(), i.MemoryOperand());
break;
@@ -609,6 +591,18 @@
Operand operand = i.MemoryOperand(&index);
__ movsd(operand, i.InputDoubleRegister(index));
}
+ break;
+ case kX64Push:
+ if (HasImmediateInput(instr, 0)) {
+ __ pushq(i.InputImmediate(0));
+ } else {
+ RegisterOrOperand input = i.InputRegisterOrOperand(0);
+ if (input.type == kRegister) {
+ __ pushq(input.reg);
+ } else {
+ __ pushq(input.operand);
+ }
+ }
break;
case kX64StoreWriteBarrier: {
Register object = i.InputRegister(0);
=======================================
--- /trunk/src/compiler/x64/instruction-codes-x64.h Wed Aug 27 00:06:40
2014 UTC
+++ /trunk/src/compiler/x64/instruction-codes-x64.h Thu Aug 28 00:05:02
2014 UTC
@@ -44,12 +44,6 @@
V(X64Sar32) \
V(X64Ror) \
V(X64Ror32) \
- V(X64Push) \
- V(X64PushI) \
- V(X64CallCodeObject) \
- V(X64CallAddress) \
- V(PopStack) \
- V(X64CallJSFunction) \
V(SSEFloat64Cmp) \
V(SSEFloat64Add) \
V(SSEFloat64Sub) \
@@ -71,6 +65,7 @@
V(X64Movq) \
V(X64Movsd) \
V(X64Movss) \
+ V(X64Push) \
V(X64StoreWriteBarrier)
=======================================
--- /trunk/src/compiler/x64/instruction-selector-x64.cc Wed Aug 27 00:06:40
2014 UTC
+++ /trunk/src/compiler/x64/instruction-selector-x64.cc Thu Aug 28 00:05:02
2014 UTC
@@ -686,25 +686,22 @@
for (NodeVectorRIter input = buffer.pushed_nodes.rbegin();
input != buffer.pushed_nodes.rend(); input++) {
// TODO(titzer): handle pushing double parameters.
- if (g.CanBeImmediate(*input)) {
- Emit(kX64PushI, NULL, g.UseImmediate(*input));
- } else {
- Emit(kX64Push, NULL, g.Use(*input));
- }
+ Emit(kX64Push, NULL,
+ g.CanBeImmediate(*input) ? g.UseImmediate(*input) :
g.Use(*input));
}
// Select the appropriate opcode based on the call type.
InstructionCode opcode;
switch (descriptor->kind()) {
case CallDescriptor::kCallCodeObject: {
- opcode = kX64CallCodeObject;
+ opcode = kArchCallCodeObject;
break;
}
case CallDescriptor::kCallAddress:
- opcode = kX64CallAddress;
+ opcode = kArchCallAddress;
break;
case CallDescriptor::kCallJSFunction:
- opcode = kX64CallJSFunction;
+ opcode = kArchCallJSFunction;
break;
default:
UNREACHABLE();
@@ -727,7 +724,7 @@
if (descriptor->kind() == CallDescriptor::kCallAddress &&
!buffer.pushed_nodes.empty()) {
DCHECK(deoptimization == NULL && continuation == NULL);
- Emit(kPopStack |
+ Emit(kArchDrop |
MiscField::encode(static_cast<int>(buffer.pushed_nodes.size())),
NULL);
}
=======================================
--- /trunk/src/d8.cc Wed Aug 20 00:06:26 2014 UTC
+++ /trunk/src/d8.cc Thu Aug 28 00:05:02 2014 UTC
@@ -45,6 +45,7 @@
#include "src/base/cpu.h"
#include "src/base/logging.h"
#include "src/base/platform/platform.h"
+#include "src/base/sys-info.h"
#include "src/d8-debug.h"
#include "src/debug.h"
#include "src/natives.h"
@@ -1614,9 +1615,9 @@
Isolate* isolate = Isolate::New();
#ifndef V8_SHARED
v8::ResourceConstraints constraints;
- constraints.ConfigureDefaults(base::OS::TotalPhysicalMemory(),
- base::OS::MaxVirtualMemory(),
- base::OS::NumberOfProcessorsOnline());
+ constraints.ConfigureDefaults(base::SysInfo::AmountOfPhysicalMemory(),
+ base::SysInfo::AmountOfVirtualMemory(),
+ base::SysInfo::NumberOfProcessors());
v8::SetResourceConstraints(isolate, &constraints);
#endif
DumbLineEditor dumb_line_editor(isolate);
=======================================
--- /trunk/src/ic/x87/access-compiler-x87.cc Mon Aug 25 19:57:56 2014 UTC
+++ /trunk/src/ic/x87/access-compiler-x87.cc Thu Aug 28 00:05:02 2014 UTC
@@ -21,8 +21,8 @@
Register* PropertyAccessCompiler::load_calling_convention() {
// receiver, name, scratch1, scratch2, scratch3, scratch4.
- Register receiver = LoadIC::ReceiverRegister();
- Register name = LoadIC::NameRegister();
+ Register receiver = LoadConvention::ReceiverRegister();
+ Register name = LoadConvention::NameRegister();
static Register registers[] = {receiver, name, ebx, eax, edi, no_reg};
return registers;
}
@@ -30,9 +30,9 @@
Register* PropertyAccessCompiler::store_calling_convention() {
// receiver, name, scratch1, scratch2, scratch3.
- Register receiver = StoreIC::ReceiverRegister();
- Register name = StoreIC::NameRegister();
- DCHECK(ebx.is(KeyedStoreIC::MapRegister()));
+ Register receiver = StoreConvention::ReceiverRegister();
+ Register name = StoreConvention::NameRegister();
+ DCHECK(ebx.is(StoreConvention::MapRegister()));
static Register registers[] = {receiver, name, ebx, edi, no_reg};
return registers;
}
=======================================
--- /trunk/src/ic/x87/handler-compiler-x87.cc Wed Aug 27 00:06:40 2014 UTC
+++ /trunk/src/ic/x87/handler-compiler-x87.cc Thu Aug 28 00:05:02 2014 UTC
@@ -22,8 +22,8 @@
// -- edx : receiver
// -- esp[0] : return address
// -----------------------------------
- DCHECK(edx.is(LoadIC::ReceiverRegister()));
- DCHECK(ecx.is(LoadIC::NameRegister()));
+ DCHECK(edx.is(LoadConvention::ReceiverRegister()));
+ DCHECK(ecx.is(LoadConvention::NameRegister()));
Label slow, miss;
// This stub is meant to be tail-jumped to, the receiver must already
@@ -327,9 +327,9 @@
static void StoreIC_PushArgs(MacroAssembler* masm) {
- Register receiver = StoreIC::ReceiverRegister();
- Register name = StoreIC::NameRegister();
- Register value = StoreIC::ValueRegister();
+ Register receiver = StoreConvention::ReceiverRegister();
+ Register name = StoreConvention::NameRegister();
+ Register value = StoreConvention::ValueRegister();
DCHECK(!ebx.is(receiver) && !ebx.is(name) && !ebx.is(value));
@@ -854,7 +854,9 @@
}
-Register NamedStoreHandlerCompiler::value() { return
StoreIC::ValueRegister(); }
+Register NamedStoreHandlerCompiler::value() {
+ return StoreConvention::ValueRegister();
+}
Handle<Code> NamedLoadHandlerCompiler::CompileLoadGlobal(
@@ -863,7 +865,7 @@
FrontendHeader(receiver(), name, &miss);
// Get the value from the cell.
- Register result = StoreIC::ValueRegister();
+ Register result = StoreConvention::ValueRegister();
if (masm()->serializer_enabled()) {
__ mov(result, Immediate(cell));
__ mov(result, FieldOperand(result, PropertyCell::kValueOffset));
=======================================
--- /trunk/src/ic/x87/ic-compiler-x87.cc Wed Aug 27 00:06:40 2014 UTC
+++ /trunk/src/ic/x87/ic-compiler-x87.cc Thu Aug 28 00:05:02 2014 UTC
@@ -17,12 +17,13 @@
void PropertyICCompiler::GenerateRuntimeSetProperty(MacroAssembler* masm,
StrictMode
strict_mode) {
// Return address is on the stack.
- DCHECK(!ebx.is(StoreIC::ReceiverRegister()) &&
- !ebx.is(StoreIC::NameRegister())
&& !ebx.is(StoreIC::ValueRegister()));
+ DCHECK(!ebx.is(StoreConvention::ReceiverRegister()) &&
+ !ebx.is(StoreConvention::NameRegister()) &&
+ !ebx.is(StoreConvention::ValueRegister()));
__ pop(ebx);
- __ push(StoreIC::ReceiverRegister());
- __ push(StoreIC::NameRegister());
- __ push(StoreIC::ValueRegister());
+ __ push(StoreConvention::ReceiverRegister());
+ __ push(StoreConvention::NameRegister());
+ __ push(StoreConvention::ValueRegister());
__ push(Immediate(Smi::FromInt(strict_mode)));
__ push(ebx); // return address
@@ -60,7 +61,7 @@
// Polymorphic keyed stores may use the map register
Register map_reg = scratch1();
DCHECK(kind() != Code::KEYED_STORE_IC ||
- map_reg.is(KeyedStoreIC::MapRegister()));
+ map_reg.is(StoreConvention::MapRegister()));
__ mov(map_reg, FieldOperand(receiver(), HeapObject::kMapOffset));
int receiver_count = types->length();
int number_of_handled_maps = 0;
=======================================
--- /trunk/src/ic/x87/ic-x87.cc Wed Aug 27 00:06:40 2014 UTC
+++ /trunk/src/ic/x87/ic-x87.cc Thu Aug 28 00:05:02 2014 UTC
@@ -312,8 +312,8 @@
Label slow, check_name, index_smi, index_name, property_array_property;
Label probe_dictionary, check_number_dictionary;
- Register receiver = ReceiverRegister();
- Register key = NameRegister();
+ Register receiver = LoadConvention::ReceiverRegister();
+ Register key = LoadConvention::NameRegister();
DCHECK(receiver.is(edx));
DCHECK(key.is(ecx));
@@ -482,8 +482,8 @@
// Return address is on the stack.
Label miss;
- Register receiver = ReceiverRegister();
- Register index = NameRegister();
+ Register receiver = LoadConvention::ReceiverRegister();
+ Register index = LoadConvention::NameRegister();
Register scratch = ebx;
DCHECK(!scratch.is(receiver) && !scratch.is(index));
Register result = eax;
@@ -509,8 +509,8 @@
// Return address is on the stack.
Label slow;
- Register receiver = ReceiverRegister();
- Register key = NameRegister();
+ Register receiver = LoadConvention::ReceiverRegister();
+ Register key = LoadConvention::NameRegister();
Register scratch = eax;
DCHECK(!scratch.is(receiver) && !scratch.is(key));
@@ -549,8 +549,8 @@
void KeyedLoadIC::GenerateSloppyArguments(MacroAssembler* masm) {
// The return address is on the stack.
- Register receiver = ReceiverRegister();
- Register key = NameRegister();
+ Register receiver = LoadConvention::ReceiverRegister();
+ Register key = LoadConvention::NameRegister();
DCHECK(receiver.is(edx));
DCHECK(key.is(ecx));
@@ -576,9 +576,9 @@
void KeyedStoreIC::GenerateSloppyArguments(MacroAssembler* masm) {
// Return address is on the stack.
Label slow, notin;
- Register receiver = ReceiverRegister();
- Register name = NameRegister();
- Register value = ValueRegister();
+ Register receiver = StoreConvention::ReceiverRegister();
+ Register name = StoreConvention::NameRegister();
+ Register value = StoreConvention::ValueRegister();
DCHECK(receiver.is(edx));
DCHECK(name.is(ecx));
DCHECK(value.is(eax));
@@ -610,9 +610,9 @@
Label transition_smi_elements;
Label finish_object_store, non_double_value, transition_double_elements;
Label fast_double_without_map_check;
- Register receiver = KeyedStoreIC::ReceiverRegister();
- Register key = KeyedStoreIC::NameRegister();
- Register value = KeyedStoreIC::ValueRegister();
+ Register receiver = StoreConvention::ReceiverRegister();
+ Register key = StoreConvention::NameRegister();
+ Register value = StoreConvention::ValueRegister();
DCHECK(receiver.is(edx));
DCHECK(key.is(ecx));
DCHECK(value.is(eax));
@@ -747,8 +747,8 @@
Label slow, fast_object, fast_object_grow;
Label fast_double, fast_double_grow;
Label array, extra, check_if_double_array;
- Register receiver = ReceiverRegister();
- Register key = NameRegister();
+ Register receiver = StoreConvention::ReceiverRegister();
+ Register key = StoreConvention::NameRegister();
DCHECK(receiver.is(edx));
DCHECK(key.is(ecx));
@@ -827,8 +827,8 @@
void LoadIC::GenerateMegamorphic(MacroAssembler* masm) {
// The return address is on the stack.
- Register receiver = ReceiverRegister();
- Register name = NameRegister();
+ Register receiver = LoadConvention::ReceiverRegister();
+ Register name = LoadConvention::NameRegister();
DCHECK(receiver.is(edx));
DCHECK(name.is(ecx));
@@ -845,15 +845,15 @@
void LoadIC::GenerateNormal(MacroAssembler* masm) {
Register dictionary = eax;
- DCHECK(!dictionary.is(ReceiverRegister()));
- DCHECK(!dictionary.is(NameRegister()));
+ DCHECK(!dictionary.is(LoadConvention::ReceiverRegister()));
+ DCHECK(!dictionary.is(LoadConvention::NameRegister()));
Label slow;
- __ mov(dictionary,
- FieldOperand(ReceiverRegister(), JSObject::kPropertiesOffset));
- GenerateDictionaryLoad(masm, &slow, dictionary, NameRegister(), edi, ebx,
- eax);
+ __ mov(dictionary, FieldOperand(LoadConvention::ReceiverRegister(),
+ JSObject::kPropertiesOffset));
+ GenerateDictionaryLoad(masm, &slow, dictionary,
+ LoadConvention::NameRegister(), edi, ebx, eax);
__ ret(0);
// Dictionary load failed, go slow (but don't miss).
@@ -863,8 +863,8 @@
static void LoadIC_PushArgs(MacroAssembler* masm) {
- Register receiver = LoadIC::ReceiverRegister();
- Register name = LoadIC::NameRegister();
+ Register receiver = LoadConvention::ReceiverRegister();
+ Register name = LoadConvention::NameRegister();
DCHECK(!ebx.is(receiver) && !ebx.is(name));
__ pop(ebx);
@@ -907,31 +907,6 @@
ExternalReference(IC_Utility(kKeyedLoadIC_Miss), masm->isolate());
__ TailCallExternalReference(ref, 2, 1);
}
-
-
-// IC register specifications
-const Register LoadIC::ReceiverRegister() { return edx; }
-const Register LoadIC::NameRegister() { return ecx; }
-
-
-const Register LoadIC::SlotRegister() {
- DCHECK(FLAG_vector_ics);
- return eax;
-}
-
-
-const Register LoadIC::VectorRegister() {
- DCHECK(FLAG_vector_ics);
- return ebx;
-}
-
-
-const Register StoreIC::ReceiverRegister() { return edx; }
-const Register StoreIC::NameRegister() { return ecx; }
-const Register StoreIC::ValueRegister() { return eax; }
-
-
-const Register KeyedStoreIC::MapRegister() { return ebx; }
void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
@@ -947,8 +922,9 @@
// Return address is on the stack.
Code::Flags flags = Code::RemoveTypeAndHolderFromFlags(
Code::ComputeHandlerFlags(Code::STORE_IC));
- masm->isolate()->stub_cache()->GenerateProbe(masm, flags,
ReceiverRegister(),
- NameRegister(), ebx,
no_reg);
+ masm->isolate()->stub_cache()->GenerateProbe(
+ masm, flags, StoreConvention::ReceiverRegister(),
+ StoreConvention::NameRegister(), ebx, no_reg);
// Cache miss: Jump to runtime.
GenerateMiss(masm);
@@ -956,9 +932,9 @@
static void StoreIC_PushArgs(MacroAssembler* masm) {
- Register receiver = StoreIC::ReceiverRegister();
- Register name = StoreIC::NameRegister();
- Register value = StoreIC::ValueRegister();
+ Register receiver = StoreConvention::ReceiverRegister();
+ Register name = StoreConvention::NameRegister();
+ Register value = StoreConvention::ValueRegister();
DCHECK(!ebx.is(receiver) && !ebx.is(name) && !ebx.is(value));
@@ -983,9 +959,9 @@
void StoreIC::GenerateNormal(MacroAssembler* masm) {
Label restore_miss;
- Register receiver = ReceiverRegister();
- Register name = NameRegister();
- Register value = ValueRegister();
+ Register receiver = StoreConvention::ReceiverRegister();
+ Register name = StoreConvention::NameRegister();
+ Register value = StoreConvention::ValueRegister();
Register dictionary = ebx;
__ mov(dictionary, FieldOperand(receiver, JSObject::kPropertiesOffset));
=======================================
--- /trunk/src/isolate.cc Wed Aug 27 00:06:40 2014 UTC
+++ /trunk/src/isolate.cc Thu Aug 28 00:05:02 2014 UTC
@@ -8,6 +8,7 @@
#include "src/ast.h"
#include "src/base/platform/platform.h"
+#include "src/base/sys-info.h"
#include "src/base/utils/random-number-generator.h"
#include "src/bootstrapper.h"
#include "src/codegen.h"
@@ -1947,7 +1948,7 @@
if (max_available_threads_ < 1) {
// Choose the default between 1 and 4.
max_available_threads_ =
- Max(Min(base::OS::NumberOfProcessorsOnline(), 4), 1);
+ Max(Min(base::SysInfo::NumberOfProcessors(), 4), 1);
}
if (!FLAG_job_based_sweeping) {
=======================================
--- /trunk/src/libplatform/default-platform.cc Tue Aug 5 00:05:55 2014 UTC
+++ /trunk/src/libplatform/default-platform.cc Thu Aug 28 00:05:02 2014 UTC
@@ -9,6 +9,7 @@
#include "src/base/logging.h"
#include "src/base/platform/platform.h"
+#include "src/base/sys-info.h"
#include "src/libplatform/worker-thread.h"
namespace v8 {
@@ -58,8 +59,9 @@
void DefaultPlatform::SetThreadPoolSize(int thread_pool_size) {
base::LockGuard<base::Mutex> guard(&lock_);
DCHECK(thread_pool_size >= 0);
- if (thread_pool_size < 1)
- thread_pool_size = base::OS::NumberOfProcessorsOnline();
+ if (thread_pool_size < 1) {
+ thread_pool_size = base::SysInfo::NumberOfProcessors();
+ }
thread_pool_size_ =
std::max(std::min(thread_pool_size, kMaxThreadPoolSize), 1);
}
=======================================
--- /trunk/src/mips/code-stubs-mips.cc Wed Aug 27 00:06:40 2014 UTC
+++ /trunk/src/mips/code-stubs-mips.cc Thu Aug 28 00:05:02 2014 UTC
@@ -4795,6 +4795,20 @@
__ Ret(USE_DELAY_SLOT);
__ Addu(sp, sp, a1);
}
+
+
+void LoadICTrampolineStub::Generate(MacroAssembler* masm) {
+ EmitLoadTypeFeedbackVector(masm,
FullVectorLoadConvention::VectorRegister());
+ VectorLoadStub stub(isolate(), state());
+ __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET);
+}
+
+
+void KeyedLoadICTrampolineStub::Generate(MacroAssembler* masm) {
+ EmitLoadTypeFeedbackVector(masm,
FullVectorLoadConvention::VectorRegister());
+ VectorKeyedLoadStub stub(isolate());
+ __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET);
+}
void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) {
=======================================
--- /trunk/src/mips64/code-stubs-mips64.cc Wed Aug 27 00:06:40 2014 UTC
+++ /trunk/src/mips64/code-stubs-mips64.cc Thu Aug 28 00:05:02 2014 UTC
@@ -4832,6 +4832,20 @@
__ Ret(USE_DELAY_SLOT);
__ Daddu(sp, sp, a1);
}
+
+
+void LoadICTrampolineStub::Generate(MacroAssembler* masm) {
+ EmitLoadTypeFeedbackVector(masm,
FullVectorLoadConvention::VectorRegister());
+ VectorLoadStub stub(isolate(), state());
+ __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET);
+}
+
+
+void KeyedLoadICTrampolineStub::Generate(MacroAssembler* masm) {
+ EmitLoadTypeFeedbackVector(masm,
FullVectorLoadConvention::VectorRegister());
+ VectorKeyedLoadStub stub(isolate());
+ __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET);
+}
void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) {
=======================================
--- /trunk/src/version.cc Wed Aug 27 15:14:54 2014 UTC
+++ /trunk/src/version.cc Thu Aug 28 00:05:02 2014 UTC
@@ -34,8 +34,8 @@
// system so their names cannot be changed without changing the scripts.
#define MAJOR_VERSION 3
#define MINOR_VERSION 29
-#define BUILD_NUMBER 20
-#define PATCH_LEVEL 2
+#define BUILD_NUMBER 23
+#define PATCH_LEVEL 0
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
#define IS_CANDIDATE_VERSION 0
=======================================
--- /trunk/src/x87/builtins-x87.cc Mon Aug 25 19:57:56 2014 UTC
+++ /trunk/src/x87/builtins-x87.cc Thu Aug 28 00:05:02 2014 UTC
@@ -994,8 +994,8 @@
// Copy all arguments from the array to the stack.
Label entry, loop;
- Register receiver = LoadIC::ReceiverRegister();
- Register key = LoadIC::NameRegister();
+ Register receiver = LoadConvention::ReceiverRegister();
+ Register key = LoadConvention::NameRegister();
__ mov(key, Operand(ebp, kIndexOffset));
__ jmp(&entry);
__ bind(&loop);
@@ -1003,7 +1003,7 @@
// Use inline caching to speed up access to arguments.
if (FLAG_vector_ics) {
- __ mov(LoadIC::SlotRegister(), Immediate(Smi::FromInt(0)));
+ __ mov(VectorLoadConvention::SlotRegister(),
Immediate(Smi::FromInt(0)));
}
Handle<Code> ic =
masm->isolate()->builtins()->KeyedLoadIC_Initialize();
__ call(ic, RelocInfo::CODE_TARGET);
=======================================
--- /trunk/src/x87/code-stubs-x87.cc Wed Aug 27 00:06:40 2014 UTC
+++ /trunk/src/x87/code-stubs-x87.cc Thu Aug 28 00:05:02 2014 UTC
@@ -568,7 +568,7 @@
void FunctionPrototypeStub::Generate(MacroAssembler* masm) {
Label miss;
- Register receiver = LoadIC::ReceiverRegister();
+ Register receiver = LoadConvention::ReceiverRegister();
NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype(masm, receiver,
eax,
ebx, &miss);
@@ -1964,7 +1964,7 @@
void CallFunctionStub::Generate(MacroAssembler* masm) {
- CallFunctionNoFeedback(masm, argc_, NeedsChecks(), CallAsMethod());
+ CallFunctionNoFeedback(masm, argc(), NeedsChecks(), CallAsMethod());
}
@@ -2048,7 +2048,7 @@
// edi - function
// edx - slot id
Label miss;
- int argc = state_.arg_count();
+ int argc = arg_count();
ParameterCount actual(argc);
EmitLoadTypeFeedbackVector(masm, ebx);
@@ -2092,7 +2092,7 @@
Label extra_checks_or_miss, slow_start;
Label slow, non_function, wrap, cont;
Label have_js_function;
- int argc = state_.arg_count();
+ int argc = arg_count();
ParameterCount actual(argc);
EmitLoadTypeFeedbackVector(masm, ebx);
@@ -2103,7 +2103,7 @@
__ j(not_equal, &extra_checks_or_miss);
__ bind(&have_js_function);
- if (state_.CallAsMethod()) {
+ if (CallAsMethod()) {
EmitContinueIfStrictOrNative(masm, &cont);
// Load the receiver from the stack.
@@ -2122,7 +2122,7 @@
__ bind(&slow);
EmitSlowCase(isolate, masm, argc, &non_function);
- if (state_.CallAsMethod()) {
+ if (CallAsMethod()) {
__ bind(&wrap);
EmitWrapCase(masm, argc, &cont);
}
@@ -2171,7 +2171,7 @@
void CallICStub::GenerateMiss(MacroAssembler* masm, IC::UtilityId id) {
// Get the receiver of the function from the stack; 1 ~ return address.
- __ mov(ecx, Operand(esp, (state_.arg_count() + 1) * kPointerSize));
+ __ mov(ecx, Operand(esp, (arg_count() + 1) * kPointerSize));
{
FrameScope scope(masm, StackFrame::INTERNAL);
@@ -4133,14 +4133,27 @@
__ mov(ebx, MemOperand(ebp, parameter_count_offset));
masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE);
__ pop(ecx);
- int additional_offset = function_mode_ == JS_FUNCTION_STUB_MODE
- ? kPointerSize
- : 0;
+ int additional_offset =
+ function_mode() == JS_FUNCTION_STUB_MODE ? kPointerSize : 0;
__ lea(esp, MemOperand(esp, ebx, times_pointer_size, additional_offset));
__ jmp(ecx); // Return to IC Miss stub, continuation still on stack.
}
+void LoadICTrampolineStub::Generate(MacroAssembler* masm) {
+ EmitLoadTypeFeedbackVector(masm,
FullVectorLoadConvention::VectorRegister());
+ VectorLoadStub stub(isolate(), state());
+ __ jmp(stub.GetCode(), RelocInfo::CODE_TARGET);
+}
+
+
+void KeyedLoadICTrampolineStub::Generate(MacroAssembler* masm) {
+ EmitLoadTypeFeedbackVector(masm,
FullVectorLoadConvention::VectorRegister());
+ VectorKeyedLoadStub stub(isolate());
+ __ jmp(stub.GetCode(), RelocInfo::CODE_TARGET);
+}
+
+
void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) {
if (masm->isolate()->function_entry_hook() != NULL) {
ProfileEntryHookStub stub(masm->isolate());
@@ -4335,7 +4348,7 @@
void ArrayConstructorStub::GenerateDispatchToArrayStub(
MacroAssembler* masm,
AllocationSiteOverrideMode mode) {
- if (argument_count_ == ANY) {
+ if (argument_count() == ANY) {
Label not_zero_case, not_one_case;
__ test(eax, eax);
__ j(not_zero, ¬_zero_case);
@@ -4348,11 +4361,11 @@
__ bind(¬_one_case);
CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm, mode);
- } else if (argument_count_ == NONE) {
+ } else if (argument_count() == NONE) {
CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm, mode);
- } else if (argument_count_ == ONE) {
+ } else if (argument_count() == ONE) {
CreateArrayDispatchOneArgument(masm, mode);
- } else if (argument_count_ == MORE_THAN_ONE) {
+ } else if (argument_count() == MORE_THAN_ONE) {
CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm, mode);
} else {
UNREACHABLE();
@@ -4362,7 +4375,7 @@
void ArrayConstructorStub::Generate(MacroAssembler* masm) {
// ----------- S t a t e -------------
- // -- eax : argc (only if argument_count_ == ANY)
+ // -- eax : argc (only if argument_count() == ANY)
// -- ebx : AllocationSite or undefined
// -- edi : constructor
// -- esp[0] : return address
@@ -4510,9 +4523,9 @@
Register return_address = edi;
Register context = esi;
- int argc = ArgumentBits::decode(bit_field_);
- bool is_store = IsStoreBits::decode(bit_field_);
- bool call_data_undefined = CallDataUndefinedBits::decode(bit_field_);
+ int argc = this->argc();
+ bool is_store = this->is_store();
+ bool call_data_undefined = this->call_data_undefined();
typedef FunctionCallbackArguments FCA;
=======================================
--- /trunk/src/x87/debug-x87.cc Tue Aug 5 00:05:55 2014 UTC
+++ /trunk/src/x87/debug-x87.cc Thu Aug 28 00:05:02 2014 UTC
@@ -180,17 +180,17 @@
void DebugCodegen::GenerateLoadICDebugBreak(MacroAssembler* masm) {
// Register state for IC load call (from ic-x87.cc).
- Register receiver = LoadIC::ReceiverRegister();
- Register name = LoadIC::NameRegister();
+ Register receiver = LoadConvention::ReceiverRegister();
+ Register name = LoadConvention::NameRegister();
Generate_DebugBreakCallHelper(masm, receiver.bit() | name.bit(), 0,
false);
}
void DebugCodegen::GenerateStoreICDebugBreak(MacroAssembler* masm) {
// Register state for IC store call (from ic-x87.cc).
- Register receiver = StoreIC::ReceiverRegister();
- Register name = StoreIC::NameRegister();
- Register value = StoreIC::ValueRegister();
+ Register receiver = StoreConvention::ReceiverRegister();
+ Register name = StoreConvention::NameRegister();
+ Register value = StoreConvention::ValueRegister();
Generate_DebugBreakCallHelper(
masm, receiver.bit() | name.bit() | value.bit(), 0, false);
}
@@ -204,9 +204,9 @@
void DebugCodegen::GenerateKeyedStoreICDebugBreak(MacroAssembler* masm) {
// Register state for keyed IC store call (from ic-x87.cc).
- Register receiver = KeyedStoreIC::ReceiverRegister();
- Register name = KeyedStoreIC::NameRegister();
- Register value = KeyedStoreIC::ValueRegister();
+ Register receiver = StoreConvention::ReceiverRegister();
+ Register name = StoreConvention::NameRegister();
+ Register value = StoreConvention::ValueRegister();
Generate_DebugBreakCallHelper(
masm, receiver.bit() | name.bit() | value.bit(), 0, false);
}
=======================================
--- /trunk/src/x87/full-codegen-x87.cc Mon Aug 25 19:57:56 2014 UTC
+++ /trunk/src/x87/full-codegen-x87.cc Thu Aug 28 00:05:02 2014 UTC
@@ -1324,10 +1324,10 @@
// All extension objects were empty and it is safe to use a global
// load IC call.
- __ mov(LoadIC::ReceiverRegister(), GlobalObjectOperand());
- __ mov(LoadIC::NameRegister(), proxy->var()->name());
+ __ mov(LoadConvention::ReceiverRegister(), GlobalObjectOperand());
+ __ mov(LoadConvention::NameRegister(), proxy->var()->name());
if (FLAG_vector_ics) {
- __ mov(LoadIC::SlotRegister(),
+ __ mov(VectorLoadConvention::SlotRegister(),
Immediate(Smi::FromInt(proxy->VariableFeedbackSlot())));
}
@@ -1411,10 +1411,10 @@
switch (var->location()) {
case Variable::UNALLOCATED: {
Comment cmnt(masm_, "[ Global variable");
- __ mov(LoadIC::ReceiverRegister(), GlobalObjectOperand());
- __ mov(LoadIC::NameRegister(), var->name());
+ __ mov(LoadConvention::ReceiverRegister(), GlobalObjectOperand());
+ __ mov(LoadConvention::NameRegister(), var->name());
if (FLAG_vector_ics) {
- __ mov(LoadIC::SlotRegister(),
+ __ mov(VectorLoadConvention::SlotRegister(),
Immediate(Smi::FromInt(proxy->VariableFeedbackSlot())));
}
CallLoadIC(CONTEXTUAL);
@@ -1630,9 +1630,9 @@
if (key->value()->IsInternalizedString()) {
if (property->emit_store()) {
VisitForAccumulatorValue(value);
- DCHECK(StoreIC::ValueRegister().is(eax));
- __ mov(StoreIC::NameRegister(), Immediate(key->value()));
- __ mov(StoreIC::ReceiverRegister(), Operand(esp, 0));
+ DCHECK(StoreConvention::ValueRegister().is(eax));
+ __ mov(StoreConvention::NameRegister(),
Immediate(key->value()));
+ __ mov(StoreConvention::ReceiverRegister(), Operand(esp, 0));
CallStoreIC(key->LiteralFeedbackId());
PrepareForBailoutForId(key->id(), NO_REGISTERS);
} else {
@@ -1810,7 +1810,7 @@
if (expr->is_compound()) {
// We need the receiver both on the stack and in the register.
VisitForStackValue(property->obj());
- __ mov(LoadIC::ReceiverRegister(), Operand(esp, 0));
+ __ mov(LoadConvention::ReceiverRegister(), Operand(esp, 0));
} else {
VisitForStackValue(property->obj());
}
@@ -1819,8 +1819,8 @@
if (expr->is_compound()) {
VisitForStackValue(property->obj());
VisitForStackValue(property->key());
- __ mov(LoadIC::ReceiverRegister(), Operand(esp, kPointerSize));
- __ mov(LoadIC::NameRegister(), Operand(esp, 0));
+ __ mov(LoadConvention::ReceiverRegister(), Operand(esp,
kPointerSize));
+ __ mov(LoadConvention::NameRegister(), Operand(esp, 0));
} else {
VisitForStackValue(property->obj());
VisitForStackValue(property->key());
@@ -1960,8 +1960,8 @@
Label l_catch, l_try, l_suspend, l_continuation, l_resume;
Label l_next, l_call, l_loop;
- Register load_receiver = LoadIC::ReceiverRegister();
- Register load_name = LoadIC::NameRegister();
+ Register load_receiver = LoadConvention::ReceiverRegister();
+ Register load_name = LoadConvention::NameRegister();
// Initial send value is undefined.
__ mov(eax, isolate()->factory()->undefined_value());
@@ -2017,7 +2017,7 @@
__ bind(&l_call);
__ mov(load_receiver, Operand(esp, kPointerSize));
if (FLAG_vector_ics) {
- __ mov(LoadIC::SlotRegister(),
+ __ mov(VectorLoadConvention::SlotRegister(),
Immediate(Smi::FromInt(expr->KeyedLoadFeedbackSlot())));
}
Handle<Code> ic = isolate()->builtins()->KeyedLoadIC_Initialize();
@@ -2037,7 +2037,7 @@
__ mov(load_name,
isolate()->factory()->done_string()); // "done"
if (FLAG_vector_ics) {
- __ mov(LoadIC::SlotRegister(),
+ __ mov(VectorLoadConvention::SlotRegister(),
Immediate(Smi::FromInt(expr->DoneFeedbackSlot())));
}
CallLoadIC(NOT_CONTEXTUAL); // result.done in
eax
@@ -2051,7 +2051,7 @@
__ mov(load_name,
isolate()->factory()->value_string()); // "value"
if (FLAG_vector_ics) {
- __ mov(LoadIC::SlotRegister(),
+ __ mov(VectorLoadConvention::SlotRegister(),
Immediate(Smi::FromInt(expr->ValueFeedbackSlot())));
}
CallLoadIC(NOT_CONTEXTUAL); // result.value
in eax
@@ -2213,9 +2213,9 @@
SetSourcePosition(prop->position());
Literal* key = prop->key()->AsLiteral();
DCHECK(!key->value()->IsSmi());
- __ mov(LoadIC::NameRegister(), Immediate(key->value()));
+ __ mov(LoadConvention::NameRegister(), Immediate(key->value()));
if (FLAG_vector_ics) {
- __ mov(LoadIC::SlotRegister(),
+ __ mov(VectorLoadConvention::SlotRegister(),
Immediate(Smi::FromInt(prop->PropertyFeedbackSlot())));
CallLoadIC(NOT_CONTEXTUAL);
} else {
@@ -2228,7 +2228,7 @@
SetSourcePosition(prop->position());
Handle<Code> ic = isolate()->builtins()->KeyedLoadIC_Initialize();
if (FLAG_vector_ics) {
- __ mov(LoadIC::SlotRegister(),
+ __ mov(VectorLoadConvention::SlotRegister(),
Immediate(Smi::FromInt(prop->PropertyFeedbackSlot())));
CallIC(ic);
} else {
@@ -2368,9 +2368,10 @@
case NAMED_PROPERTY: {
__ push(eax); // Preserve value.
VisitForAccumulatorValue(prop->obj());
- __ Move(StoreIC::ReceiverRegister(), eax);
- __ pop(StoreIC::ValueRegister()); // Restore value.
- __ mov(StoreIC::NameRegister(), prop->key()->AsLiteral()->value());
+ __ Move(StoreConvention::ReceiverRegister(), eax);
+ __ pop(StoreConvention::ValueRegister()); // Restore value.
+ __ mov(StoreConvention::NameRegister(),
+ prop->key()->AsLiteral()->value());
CallStoreIC();
break;
}
@@ -2378,9 +2379,9 @@
__ push(eax); // Preserve value.
VisitForStackValue(prop->obj());
VisitForAccumulatorValue(prop->key());
- __ Move(KeyedStoreIC::NameRegister(), eax);
- __ pop(KeyedStoreIC::ReceiverRegister()); // Receiver.
- __ pop(KeyedStoreIC::ValueRegister()); // Restore value.
+ __ Move(StoreConvention::NameRegister(), eax);
+ __ pop(StoreConvention::ReceiverRegister()); // Receiver.
+ __ pop(StoreConvention::ValueRegister()); // Restore value.
Handle<Code> ic = strict_mode() == SLOPPY
? isolate()->builtins()->KeyedStoreIC_Initialize()
: isolate()->builtins()->KeyedStoreIC_Initialize_Strict();
@@ -2407,8 +2408,8 @@
Token::Value op) {
if (var->IsUnallocated()) {
// Global var, const, or let.
- __ mov(StoreIC::NameRegister(), var->name());
- __ mov(StoreIC::ReceiverRegister(), GlobalObjectOperand());
+ __ mov(StoreConvention::NameRegister(), var->name());
+ __ mov(StoreConvention::ReceiverRegister(), GlobalObjectOperand());
CallStoreIC();
} else if (op == Token::INIT_CONST_LEGACY) {
@@ -2481,8 +2482,8 @@
// Record source code position before IC call.
SetSourcePosition(expr->position());
- __ mov(StoreIC::NameRegister(), prop->key()->AsLiteral()->value());
- __ pop(StoreIC::ReceiverRegister());
+ __ mov(StoreConvention::NameRegister(),
prop->key()->AsLiteral()->value());
+ __ pop(StoreConvention::ReceiverRegister());
CallStoreIC(expr->AssignmentFeedbackId());
PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
context()->Plug(eax);
@@ -2495,9 +2496,9 @@
// esp[0] : key
// esp[kPointerSize] : receiver
- __ pop(KeyedStoreIC::NameRegister()); // Key.
- __ pop(KeyedStoreIC::ReceiverRegister());
- DCHECK(KeyedStoreIC::ValueRegister().is(eax));
+ __ pop(StoreConvention::NameRegister()); // Key.
+ __ pop(StoreConvention::ReceiverRegister());
+ DCHECK(StoreConvention::ValueRegister().is(eax));
// Record source code position before IC call.
SetSourcePosition(expr->position());
Handle<Code> ic = strict_mode() == SLOPPY
@@ -2516,15 +2517,15 @@
if (key->IsPropertyName()) {
VisitForAccumulatorValue(expr->obj());
- __ Move(LoadIC::ReceiverRegister(), result_register());
+ __ Move(LoadConvention::ReceiverRegister(), result_register());
EmitNamedPropertyLoad(expr);
PrepareForBailoutForId(expr->LoadId(), TOS_REG);
context()->Plug(eax);
} else {
VisitForStackValue(expr->obj());
VisitForAccumulatorValue(expr->key());
- __ pop(LoadIC::ReceiverRegister()); // Object.
- __ Move(LoadIC::NameRegister(), result_register()); // Key.
+ __ pop(LoadConvention::ReceiverRegister()); // Object.
+ __ Move(LoadConvention::NameRegister(), result_register()); // Key.
EmitKeyedPropertyLoad(expr);
context()->Plug(eax);
}
@@ -2557,7 +2558,7 @@
} else {
// Load the function from the receiver.
DCHECK(callee->IsProperty());
- __ mov(LoadIC::ReceiverRegister(), Operand(esp, 0));
+ __ mov(LoadConvention::ReceiverRegister(), Operand(esp, 0));
EmitNamedPropertyLoad(callee->AsProperty());
PrepareForBailoutForId(callee->AsProperty()->LoadId(), TOS_REG);
// Push the target function under the receiver.
@@ -2579,8 +2580,8 @@
// Load the function from the receiver.
DCHECK(callee->IsProperty());
- __ mov(LoadIC::ReceiverRegister(), Operand(esp, 0));
- __ mov(LoadIC::NameRegister(), eax);
+ __ mov(LoadConvention::ReceiverRegister(), Operand(esp, 0));
+ __ mov(LoadConvention::NameRegister(), eax);
EmitKeyedPropertyLoad(callee->AsProperty());
PrepareForBailoutForId(callee->AsProperty()->LoadId(), TOS_REG);
@@ -4037,10 +4038,10 @@
__ push(FieldOperand(eax, GlobalObject::kBuiltinsOffset));
// Load the function from the receiver.
- __ mov(LoadIC::ReceiverRegister(), Operand(esp, 0));
- __ mov(LoadIC::NameRegister(), Immediate(expr->name()));
+ __ mov(LoadConvention::ReceiverRegister(), Operand(esp, 0));
+ __ mov(LoadConvention::NameRegister(), Immediate(expr->name()));
if (FLAG_vector_ics) {
- __ mov(LoadIC::SlotRegister(),
+ __ mov(VectorLoadConvention::SlotRegister(),
Immediate(Smi::FromInt(expr->CallRuntimeFeedbackSlot())));
CallLoadIC(NOT_CONTEXTUAL);
} else {
@@ -4227,14 +4228,14 @@
if (assign_type == NAMED_PROPERTY) {
// Put the object both on the stack and in the register.
VisitForStackValue(prop->obj());
- __ mov(LoadIC::ReceiverRegister(), Operand(esp, 0));
+ __ mov(LoadConvention::ReceiverRegister(), Operand(esp, 0));
EmitNamedPropertyLoad(prop);
} else {
VisitForStackValue(prop->obj());
VisitForStackValue(prop->key());
- __ mov(LoadIC::ReceiverRegister(),
- Operand(esp, kPointerSize)); // Object.
- __ mov(LoadIC::NameRegister(), Operand(esp, 0)); // Key.
+ __ mov(LoadConvention::ReceiverRegister(),
+ Operand(esp, kPointerSize)); // Object.
+ __ mov(LoadConvention::NameRegister(), Operand(esp, 0)); // Key.
EmitKeyedPropertyLoad(prop);
}
}
@@ -4349,8 +4350,9 @@
}
break;
case NAMED_PROPERTY: {
- __ mov(StoreIC::NameRegister(), prop->key()->AsLiteral()->value());
- __ pop(StoreIC::ReceiverRegister());
+ __ mov(StoreConvention::NameRegister(),
+ prop->key()->AsLiteral()->value());
+ __ pop(StoreConvention::ReceiverRegister());
CallStoreIC(expr->CountStoreFeedbackId());
PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
if (expr->is_postfix()) {
@@ -4363,8 +4365,8 @@
break;
}
case KEYED_PROPERTY: {
- __ pop(KeyedStoreIC::NameRegister());
- __ pop(KeyedStoreIC::ReceiverRegister());
+ __ pop(StoreConvention::NameRegister());
+ __ pop(StoreConvention::ReceiverRegister());
Handle<Code> ic = strict_mode() == SLOPPY
? isolate()->builtins()->KeyedStoreIC_Initialize()
: isolate()->builtins()->KeyedStoreIC_Initialize_Strict();
@@ -4391,10 +4393,10 @@
if (proxy != NULL && proxy->var()->IsUnallocated()) {
Comment cmnt(masm_, "[ Global variable");
- __ mov(LoadIC::ReceiverRegister(), GlobalObjectOperand());
- __ mov(LoadIC::NameRegister(), Immediate(proxy->name()));
+ __ mov(LoadConvention::ReceiverRegister(), GlobalObjectOperand());
+ __ mov(LoadConvention::NameRegister(), Immediate(proxy->name()));
if (FLAG_vector_ics) {
- __ mov(LoadIC::SlotRegister(),
+ __ mov(VectorLoadConvention::SlotRegister(),
Immediate(Smi::FromInt(proxy->VariableFeedbackSlot())));
}
// Use a regular load, not a contextual load, to avoid a reference
=======================================
--- /trunk/src/x87/lithium-codegen-x87.cc Wed Aug 27 00:06:40 2014 UTC
+++ /trunk/src/x87/lithium-codegen-x87.cc Thu Aug 28 00:05:02 2014 UTC
@@ -2967,21 +2967,22 @@
void LCodeGen::EmitVectorLoadICRegisters(T* instr) {
DCHECK(FLAG_vector_ics);
Register vector = ToRegister(instr->temp_vector());
- DCHECK(vector.is(LoadIC::VectorRegister()));
+ DCHECK(vector.is(FullVectorLoadConvention::VectorRegister()));
__ mov(vector, instr->hydrogen()->feedback_vector());
// No need to allocate this register.
- DCHECK(LoadIC::SlotRegister().is(eax));
- __ mov(LoadIC::SlotRegister(),
+ DCHECK(FullVectorLoadConvention::SlotRegister().is(eax));
+ __ mov(FullVectorLoadConvention::SlotRegister(),
Immediate(Smi::FromInt(instr->hydrogen()->slot())));
}
void LCodeGen::DoLoadGlobalGeneric(LLoadGlobalGeneric* instr) {
DCHECK(ToRegister(instr->context()).is(esi));
-
DCHECK(ToRegister(instr->global_object()).is(LoadIC::ReceiverRegister()));
+ DCHECK(ToRegister(instr->global_object())
+ .is(LoadConvention::ReceiverRegister()));
DCHECK(ToRegister(instr->result()).is(eax));
- __ mov(LoadIC::NameRegister(), instr->name());
+ __ mov(LoadConvention::NameRegister(), instr->name());
if (FLAG_vector_ics) {
EmitVectorLoadICRegisters<LLoadGlobalGeneric>(instr);
}
@@ -3113,10 +3114,10 @@
void LCodeGen::DoLoadNamedGeneric(LLoadNamedGeneric* instr) {
DCHECK(ToRegister(instr->context()).is(esi));
- DCHECK(ToRegister(instr->object()).is(LoadIC::ReceiverRegister()));
+
DCHECK(ToRegister(instr->object()).is(LoadConvention::ReceiverRegister()));
DCHECK(ToRegister(instr->result()).is(eax));
- __ mov(LoadIC::NameRegister(), instr->name());
+ __ mov(LoadConvention::NameRegister(), instr->name());
if (FLAG_vector_ics) {
EmitVectorLoadICRegisters<LLoadNamedGeneric>(instr);
}
@@ -3338,8 +3339,8 @@
void LCodeGen::DoLoadKeyedGeneric(LLoadKeyedGeneric* instr) {
DCHECK(ToRegister(instr->context()).is(esi));
- DCHECK(ToRegister(instr->object()).is(LoadIC::ReceiverRegister()));
- DCHECK(ToRegister(instr->key()).is(LoadIC::NameRegister()));
+
DCHECK(ToRegister(instr->object()).is(LoadConvention::ReceiverRegister()));
+ DCHECK(ToRegister(instr->key()).is(LoadConvention::NameRegister()));
if (FLAG_vector_ics) {
EmitVectorLoadICRegisters<LLoadKeyedGeneric>(instr);
@@ -3974,10 +3975,10 @@
void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) {
DCHECK(ToRegister(instr->context()).is(esi));
- DCHECK(ToRegister(instr->object()).is(StoreIC::ReceiverRegister()));
- DCHECK(ToRegister(instr->value()).is(StoreIC::ValueRegister()));
+
DCHECK(ToRegister(instr->object()).is(StoreConvention::ReceiverRegister()));
+ DCHECK(ToRegister(instr->value()).is(StoreConvention::ValueRegister()));
- __ mov(StoreIC::NameRegister(), instr->name());
+ __ mov(StoreConvention::NameRegister(), instr->name());
Handle<Code> ic = StoreIC::initialize_stub(isolate(),
instr->strict_mode());
CallCode(ic, RelocInfo::CODE_TARGET, instr);
}
@@ -4185,9 +4186,9 @@
void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) {
DCHECK(ToRegister(instr->context()).is(esi));
- DCHECK(ToRegister(instr->object()).is(KeyedStoreIC::ReceiverRegister()));
- DCHECK(ToRegister(instr->key()).is(KeyedStoreIC::NameRegister()));
- DCHECK(ToRegister(instr->value()).is(KeyedStoreIC::ValueRegister()));
+
DCHECK(ToRegister(instr->object()).is(StoreConvention::ReceiverRegister()));
+ DCHECK(ToRegister(instr->key()).is(StoreConvention::NameRegister()));
+ DCHECK(ToRegister(instr->value()).is(StoreConvention::ValueRegister()));
Handle<Code> ic = instr->strict_mode() == STRICT
? isolate()->builtins()->KeyedStoreIC_Initialize_Strict()
=======================================
--- /trunk/src/x87/lithium-x87.cc Tue Aug 5 00:05:55 2014 UTC
+++ /trunk/src/x87/lithium-x87.cc Thu Aug 28 00:05:02 2014 UTC
@@ -2079,11 +2079,11 @@
LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric*
instr) {
LOperand* context = UseFixed(instr->context(), esi);
- LOperand* global_object = UseFixed(instr->global_object(),
- LoadIC::ReceiverRegister());
+ LOperand* global_object =
+ UseFixed(instr->global_object(), LoadConvention::ReceiverRegister());
LOperand* vector = NULL;
if (FLAG_vector_ics) {
- vector = FixedTemp(LoadIC::VectorRegister());
+ vector = FixedTemp(FullVectorLoadConvention::VectorRegister());
}
LLoadGlobalGeneric* result =
@@ -2140,10 +2140,11 @@
LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) {
LOperand* context = UseFixed(instr->context(), esi);
- LOperand* object = UseFixed(instr->object(), LoadIC::ReceiverRegister());
+ LOperand* object =
+ UseFixed(instr->object(), LoadConvention::ReceiverRegister());
LOperand* vector = NULL;
if (FLAG_vector_ics) {
- vector = FixedTemp(LoadIC::VectorRegister());
+ vector = FixedTemp(FullVectorLoadConvention::VectorRegister());
}
LLoadNamedGeneric* result = new(zone()) LLoadNamedGeneric(
context, object, vector);
@@ -2203,11 +2204,12 @@
LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) {
LOperand* context = UseFixed(instr->context(), esi);
- LOperand* object = UseFixed(instr->object(), LoadIC::ReceiverRegister());
- LOperand* key = UseFixed(instr->key(), LoadIC::NameRegister());
+ LOperand* object =
+ UseFixed(instr->object(), LoadConvention::ReceiverRegister());
+ LOperand* key = UseFixed(instr->key(), LoadConvention::NameRegister());
LOperand* vector = NULL;
if (FLAG_vector_ics) {
- vector = FixedTemp(LoadIC::VectorRegister());
+ vector = FixedTemp(FullVectorLoadConvention::VectorRegister());
}
LLoadKeyedGeneric* result =
new(zone()) LLoadKeyedGeneric(context, object, key, vector);
@@ -2292,10 +2294,10 @@
LInstruction* LChunkBuilder::DoStoreKeyedGeneric(HStoreKeyedGeneric*
instr) {
LOperand* context = UseFixed(instr->context(), esi);
- LOperand* object = UseFixed(instr->object(),
- KeyedStoreIC::ReceiverRegister());
- LOperand* key = UseFixed(instr->key(), KeyedStoreIC::NameRegister());
- LOperand* value = UseFixed(instr->value(),
KeyedStoreIC::ValueRegister());
+ LOperand* object =
+ UseFixed(instr->object(), StoreConvention::ReceiverRegister());
+ LOperand* key = UseFixed(instr->key(), StoreConvention::NameRegister());
+ LOperand* value = UseFixed(instr->value(),
StoreConvention::ValueRegister());
DCHECK(instr->object()->representation().IsTagged());
DCHECK(instr->key()->representation().IsTagged());
@@ -2397,8 +2399,9 @@
LInstruction* LChunkBuilder::DoStoreNamedGeneric(HStoreNamedGeneric*
instr) {
LOperand* context = UseFixed(instr->context(), esi);
- LOperand* object = UseFixed(instr->object(),
StoreIC::ReceiverRegister());
- LOperand* value = UseFixed(instr->value(), StoreIC::ValueRegister());
+ LOperand* object =
+ UseFixed(instr->object(), StoreConvention::ReceiverRegister());
+ LOperand* value = UseFixed(instr->value(),
StoreConvention::ValueRegister());
LStoreNamedGeneric* result =
new(zone()) LStoreNamedGeneric(context, object, value);
=======================================
--- /trunk/src/zone-containers.h Wed Aug 27 13:18:36 2014 UTC
+++ /trunk/src/zone-containers.h Thu Aug 28 00:05:02 2014 UTC
@@ -17,37 +17,36 @@
// A wrapper subclass for std::vector to make it easy to construct one
// that uses a zone allocator.
template <typename T>
-class ZoneVector : public std::vector<T, zone_allocator<T> > {
+class ZoneVector : public std::vector<T, zone_allocator<T>> {
public:
// Constructs an empty vector.
explicit ZoneVector(Zone* zone)
- : std::vector<T, zone_allocator<T> >(zone_allocator<T>(zone)) {}
+ : std::vector<T, zone_allocator<T>>(zone_allocator<T>(zone)) {}
// Constructs a new vector and fills it with {size} elements, each
// having the value {def}.
ZoneVector(int size, T def, Zone* zone)
- : std::vector<T, zone_allocator<T> >(size, def,
zone_allocator<T>(zone)) {
- }
+ : std::vector<T, zone_allocator<T>>(size, def,
zone_allocator<T>(zone)) {}
};
// A wrapper subclass std::deque to make it easy to construct one
// that uses a zone allocator.
template <typename T>
-class ZoneDeque : public std::deque<T, zone_allocator<T> > {
+class ZoneDeque : public std::deque<T, zone_allocator<T>> {
public:
explicit ZoneDeque(Zone* zone)
- : std::deque<T, zone_allocator<T> >(zone_allocator<T>(zone)) {}
+ : std::deque<T, zone_allocator<T>>(zone_allocator<T>(zone)) {}
};
// A wrapper subclass for std::queue to make it easy to construct one
// that uses a zone allocator.
template <typename T>
-class ZoneQueue : public std::queue<T, std::deque<T, zone_allocator<T> > >
{
+class ZoneQueue : public std::queue<T, std::deque<T, zone_allocator<T>>> {
public:
// Constructs an empty queue.
explicit ZoneQueue(Zone* zone)
- : std::queue<T, std::deque<T, zone_allocator<T> > >(
- std::deque<T, zone_allocator<T> >(zone_allocator<T>(zone))) {}
+ : std::queue<T, std::deque<T, zone_allocator<T>>>(
+ std::deque<T, zone_allocator<T>>(zone_allocator<T>(zone))) {}
};
// Typedefs to shorten commonly used vectors.
=======================================
--- /trunk/test/base-unittests/base-unittests.gyp Sun Aug 24 11:34:17 2014
UTC
+++ /trunk/test/base-unittests/base-unittests.gyp Thu Aug 28 00:05:02 2014
UTC
@@ -27,6 +27,7 @@
'platform/platform-unittest.cc',
'platform/semaphore-unittest.cc',
'platform/time-unittest.cc',
+ 'sys-info-unittest.cc',
'utils/random-number-generator-unittest.cc',
],
'conditions': [
=======================================
--- /trunk/test/base-unittests/platform/platform-unittest.cc Wed Aug 27
00:06:40 2014 UTC
+++ /trunk/test/base-unittests/platform/platform-unittest.cc Thu Aug 28
00:05:02 2014 UTC
@@ -26,11 +26,6 @@
OS::GetCurrentProcessId());
#endif
}
-
-
-TEST(OS, NumberOfProcessorsOnline) {
- EXPECT_GT(OS::NumberOfProcessorsOnline(), 0);
-}
namespace {
=======================================
--- /trunk/tools/gyp/v8.gyp Wed Aug 27 00:06:40 2014 UTC
+++ /trunk/tools/gyp/v8.gyp Thu Aug 28 00:05:02 2014 UTC
@@ -929,6 +929,7 @@
'../../src/ic/x87/handler-compiler-x87.cc',
'../../src/ic/x87/ic-x87.cc',
'../../src/ic/x87/ic-compiler-x87.cc',
+ '../../src/ic/x87/ic-conventions-x87.cc',
'../../src/ic/x87/stub-cache-x87.cc',
],
}],
@@ -1149,6 +1150,8 @@
'../../src/base/safe_conversions_impl.h',
'../../src/base/safe_math.h',
'../../src/base/safe_math_impl.h',
+ '../../src/base/sys-info.cc',
+ '../../src/base/sys-info.h',
'../../src/base/utils/random-number-generator.cc',
'../../src/base/utils/random-number-generator.h',
],
=======================================
--- /trunk/tools/whitespace.txt Wed Aug 27 10:29:36 2014 UTC
+++ /trunk/tools/whitespace.txt Thu Aug 28 00:05:02 2014 UTC
@@ -5,4 +5,4 @@
A Smi walks into a bar and says:
"I'm so deoptimized today!"
The doubles heard this and started to unbox.
-The Smi looked at them and...........................
+The Smi looked at them and..........................
--
--
v8-dev mailing list
v8-dev@googlegroups.com
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 v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.