Reviewers: Sven Panne, loislo,
Description:
Nuke OS::ReleaseStore, use Release_Store instead
The operation is already implemented in atomicops.h No need to duplicate the
code.
BUG=249750
Please review this at https://codereview.chromium.org/17222004/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/arm/lithium-arm.cc
M src/ia32/lithium-ia32.cc
M src/mips/lithium-mips.cc
M src/platform-cygwin.cc
M src/platform-freebsd.cc
M src/platform-linux.cc
M src/platform-macos.cc
M src/platform-openbsd.cc
M src/platform-solaris.cc
M src/platform-win32.cc
M src/platform.h
M src/unbound-queue-inl.h
M src/x64/lithium-x64.cc
Index: src/arm/lithium-arm.cc
diff --git a/src/arm/lithium-arm.cc b/src/arm/lithium-arm.cc
index
84aa2a61dd7f0faf93de0a4fdbacdc8a9f2d2ed4..b421f8a045204126c48babca9592b147b001f15f
100644
--- a/src/arm/lithium-arm.cc
+++ b/src/arm/lithium-arm.cc
@@ -2592,8 +2592,9 @@ LInstruction*
LChunkBuilder::DoEnterInlined(HEnterInlined* instr) {
undefined,
instr->inlining_kind(),
instr->undefined_receiver());
- if (instr->arguments_var() != NULL) {
- inner->Bind(instr->arguments_var(), graph()->GetArgumentsObject());
+ // Only replay binding of arguments object if it wasn't removed from
graph.
+ if (instr->arguments_var() != NULL &&
instr->arguments_object()->IsLinked()) {
+ inner->Bind(instr->arguments_var(), instr->arguments_object());
}
inner->set_entry(instr);
current_block_->UpdateEnvironment(inner);
Index: src/ia32/lithium-ia32.cc
diff --git a/src/ia32/lithium-ia32.cc b/src/ia32/lithium-ia32.cc
index
706e031d9f21fd13498974c85220dee0402b935d..885b2e304e3a57b8cb473a02ed61a069379ac017
100644
--- a/src/ia32/lithium-ia32.cc
+++ b/src/ia32/lithium-ia32.cc
@@ -2734,8 +2734,9 @@ LInstruction*
LChunkBuilder::DoEnterInlined(HEnterInlined* instr) {
undefined,
instr->inlining_kind(),
instr->undefined_receiver());
- if (instr->arguments_var() != NULL) {
- inner->Bind(instr->arguments_var(), graph()->GetArgumentsObject());
+ // Only replay binding of arguments object if it wasn't removed from
graph.
+ if (instr->arguments_var() != NULL &&
instr->arguments_object()->IsLinked()) {
+ inner->Bind(instr->arguments_var(), instr->arguments_object());
}
inner->set_entry(instr);
current_block_->UpdateEnvironment(inner);
Index: src/mips/lithium-mips.cc
diff --git a/src/mips/lithium-mips.cc b/src/mips/lithium-mips.cc
index
d4f450e5c4ce60be2cdaaeb3a6e961223055ac57..f725a11419c7d42cf6f38bc9dd661c2cbe40fefa
100644
--- a/src/mips/lithium-mips.cc
+++ b/src/mips/lithium-mips.cc
@@ -2463,8 +2463,9 @@ LInstruction*
LChunkBuilder::DoEnterInlined(HEnterInlined* instr) {
undefined,
instr->inlining_kind(),
instr->undefined_receiver());
- if (instr->arguments_var() != NULL) {
- inner->Bind(instr->arguments_var(), graph()->GetArgumentsObject());
+ // Only replay binding of arguments object if it wasn't removed from
graph.
+ if (instr->arguments_var() != NULL &&
instr->arguments_object()->IsLinked()) {
+ inner->Bind(instr->arguments_var(), instr->arguments_object());
}
inner->set_entry(instr);
current_block_->UpdateEnvironment(inner);
Index: src/platform-cygwin.cc
diff --git a/src/platform-cygwin.cc b/src/platform-cygwin.cc
index
35427d4d19433518cb884a678543fc835673ba21..bda9f923fd68516dd4fea9d83d115958f62e0ae2
100644
--- a/src/platform-cygwin.cc
+++ b/src/platform-cygwin.cc
@@ -79,12 +79,6 @@ int OS::ActivationFrameAlignment() {
}
-void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
- __asm__ __volatile__("" : : : "memory");
- // An x86 store acts as a release barrier.
- *ptr = value;
-}
-
const char* OS::LocalTimezone(double time) {
if (std::isnan(time)) return "";
time_t tv = static_cast<time_t>(floor(time/msPerSecond));
Index: src/platform-freebsd.cc
diff --git a/src/platform-freebsd.cc b/src/platform-freebsd.cc
index
4305ccb28888888795757d2101948d0c5eb64166..e2c2c42de5864e5d89ab9c6c442afc9f04a9c317
100644
--- a/src/platform-freebsd.cc
+++ b/src/platform-freebsd.cc
@@ -85,12 +85,6 @@ void OS::PostSetUp() {
}
-void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
- __asm__ __volatile__("" : : : "memory");
- *ptr = value;
-}
-
-
uint64_t OS::CpuFeaturesImpliedByPlatform() {
return 0; // FreeBSD runs on anything.
}
Index: src/platform-linux.cc
diff --git a/src/platform-linux.cc b/src/platform-linux.cc
index
22f2245f487bd9787bc1e97012f0e2fbf393914d..4a9bb7ed41bdcbb82e76c9c396f7e41142a18aac
100644
--- a/src/platform-linux.cc
+++ b/src/platform-linux.cc
@@ -308,19 +308,6 @@ int OS::ActivationFrameAlignment() {
}
-void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
-#if (defined(V8_TARGET_ARCH_ARM) && defined(__arm__)) || \
- (defined(V8_TARGET_ARCH_MIPS) && defined(__mips__))
- // Only use on ARM or MIPS hardware.
- MemoryBarrier();
-#else
- __asm__ __volatile__("" : : : "memory");
- // An x86 store acts as a release barrier.
-#endif
- *ptr = value;
-}
-
-
const char* OS::LocalTimezone(double time) {
if (std::isnan(time)) return "";
time_t tv = static_cast<time_t>(floor(time/msPerSecond));
Index: src/platform-macos.cc
diff --git a/src/platform-macos.cc b/src/platform-macos.cc
index
eea17264054e5b0f1f2ea0d7a8e03f08fb6dcb59..b21166d6ce5cf643f1d73044d70f354e0cda02aa
100644
--- a/src/platform-macos.cc
+++ b/src/platform-macos.cc
@@ -295,12 +295,6 @@ int OS::ActivationFrameAlignment() {
}
-void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
- OSMemoryBarrier();
- *ptr = value;
-}
-
-
const char* OS::LocalTimezone(double time) {
if (std::isnan(time)) return "";
time_t tv = static_cast<time_t>(floor(time/msPerSecond));
Index: src/platform-openbsd.cc
diff --git a/src/platform-openbsd.cc b/src/platform-openbsd.cc
index
0a7cc80f3db1538a1b65be5b4ff21a549c3d16ad..f2d9dd48cb734a3cc6b1abdc05a1563e1235b839
100644
--- a/src/platform-openbsd.cc
+++ b/src/platform-openbsd.cc
@@ -117,13 +117,6 @@ int OS::ActivationFrameAlignment() {
}
-void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
- __asm__ __volatile__("" : : : "memory");
- // An x86 store acts as a release barrier.
- *ptr = value;
-}
-
-
const char* OS::LocalTimezone(double time) {
if (std::isnan(time)) return "";
time_t tv = static_cast<time_t>(floor(time/msPerSecond));
Index: src/platform-solaris.cc
diff --git a/src/platform-solaris.cc b/src/platform-solaris.cc
index
5fb28c84a62e1a39d9c48d052a5816dc09c64a4f..4b0094fb22fe6cc2e8df3c5b9c9fc112f858adb4
100644
--- a/src/platform-solaris.cc
+++ b/src/platform-solaris.cc
@@ -111,12 +111,6 @@ int OS::ActivationFrameAlignment() {
}
-void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
- __asm__ __volatile__("" : : : "memory");
- *ptr = value;
-}
-
-
const char* OS::LocalTimezone(double time) {
if (std::isnan(time)) return "";
time_t tv = static_cast<time_t>(floor(time/msPerSecond));
Index: src/platform-win32.cc
diff --git a/src/platform-win32.cc b/src/platform-win32.cc
index
679584476083cbc84404b7b6501c627b523340be..600962e2d152828cde066c31f485deabb022eafc
100644
--- a/src/platform-win32.cc
+++ b/src/platform-win32.cc
@@ -1485,12 +1485,6 @@ int OS::ActivationFrameAlignment() {
}
-void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
- MemoryBarrier();
- *ptr = value;
-}
-
-
VirtualMemory::VirtualMemory() : address_(NULL), size_(0) { }
Index: src/platform.h
diff --git a/src/platform.h b/src/platform.h
index
86706fe3c399855d4603b65fbe1f39ae03f4c3b4..24d21cb3aee129ba84df74a0b8b1037312b24a15
100644
--- a/src/platform.h
+++ b/src/platform.h
@@ -100,7 +100,6 @@ int random();
#endif // WIN32
-#include "atomicops.h"
#include "lazy-instance.h"
#include "platform-tls.h"
#include "utils.h"
@@ -330,8 +329,6 @@ class OS {
// the platform doesn't care. Guaranteed to be a power of two.
static int ActivationFrameAlignment();
- static void ReleaseStore(volatile AtomicWord* ptr, AtomicWord value);
-
#if defined(V8_TARGET_ARCH_IA32)
// Limit below which the extra overhead of the MemCopy function is likely
// to outweigh the benefits of faster copying.
Index: src/unbound-queue-inl.h
diff --git a/src/unbound-queue-inl.h b/src/unbound-queue-inl.h
index
fffb1dbcfb13d966c2164d19dc781404c976af52..86722f3a7cd18b24bbe44f5de9abbbdb51fcf7b4
100644
--- a/src/unbound-queue-inl.h
+++ b/src/unbound-queue-inl.h
@@ -30,6 +30,8 @@
#include "unbound-queue.h"
+#include "atomicops.h"
+
namespace v8 {
namespace internal {
@@ -70,7 +72,7 @@ void UnboundQueue<Record>::Dequeue(Record* rec) {
ASSERT(divider_ != last_);
Node* next = reinterpret_cast<Node*>(divider_)->next;
*rec = next->value;
- OS::ReleaseStore(÷r_, reinterpret_cast<AtomicWord>(next));
+ Release_Store(÷r_, reinterpret_cast<AtomicWord>(next));
}
@@ -78,7 +80,7 @@ template<typename Record>
void UnboundQueue<Record>::Enqueue(const Record& rec) {
Node*& next = reinterpret_cast<Node*>(last_)->next;
next = new Node(rec);
- OS::ReleaseStore(&last_, reinterpret_cast<AtomicWord>(next));
+ Release_Store(&last_, reinterpret_cast<AtomicWord>(next));
while (first_ != reinterpret_cast<Node*>(divider_)) DeleteFirst();
}
Index: src/x64/lithium-x64.cc
diff --git a/src/x64/lithium-x64.cc b/src/x64/lithium-x64.cc
index
f776bf339f5d595e63a9a2633a72f7927efd4e97..980cb2112825a5d2969a1ea024120946efbf3c72
100644
--- a/src/x64/lithium-x64.cc
+++ b/src/x64/lithium-x64.cc
@@ -2529,8 +2529,9 @@ LInstruction*
LChunkBuilder::DoEnterInlined(HEnterInlined* instr) {
undefined,
instr->inlining_kind(),
instr->undefined_receiver());
- if (instr->arguments_var() != NULL) {
- inner->Bind(instr->arguments_var(), graph()->GetArgumentsObject());
+ // Only replay binding of arguments object if it wasn't removed from
graph.
+ if (instr->arguments_var() != NULL &&
instr->arguments_object()->IsLinked()) {
+ inner->Bind(instr->arguments_var(), instr->arguments_object());
}
inner->set_entry(instr);
current_block_->UpdateEnvironment(inner);
--
--
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/groups/opt_out.