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(&divider_, reinterpret_cast<AtomicWord>(next));
+  Release_Store(&divider_, 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.


Reply via email to