Version 3.25.6 (based on bleeding_edge revision r19746)

Replace the recursion in PropagateMinusZeroChecks() with a loop and a worklist (issue 3204).

Reland "Enable Object.observe by default" (issue 2409).

Enable Object.observe by default (issue 2409).

AllocationTracker now maintains a map from address range to stack trace that allocated the range. When snapshot is generated the map is used to find construction stack trace for an object using its address (Chromium issue 277984).

Introduce Runtime_GetAllScopesDetails to get all scopes at once for a frame (Chromium issue 340285).

Reduce heavy runtime calls from debug mirrors (Chromium issue 340285).

Check and clear date cache in DateCurrentTime, DateLocalTimezone and getTimezoneOffset (Chromium issue 142141).

Performance and stability improvements on all platforms.

git-svn-id: http://v8.googlecode.com/svn/trunk@19747 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
diff --git a/src/atomicops_internals_x86_msvc.h b/src/atomicops_internals_x86_msvc.h
index fcf6a65..ad9cf9d 100644
--- a/src/atomicops_internals_x86_msvc.h
+++ b/src/atomicops_internals_x86_msvc.h
@@ -33,6 +33,15 @@
 #include "checks.h"
 #include "win32-headers.h"
 
+#if defined(V8_HOST_ARCH_64_BIT)
+// windows.h #defines this (only on x64). This causes problems because the
+// public API also uses MemoryBarrier at the public name for this fence. So, on
+// X64, undef it, and call its documented
+// (http://msdn.microsoft.com/en-us/library/windows/desktop/ms684208.aspx)
+// implementation directly.
+#undef MemoryBarrier
+#endif
+
 namespace v8 {
 namespace internal {
 
@@ -70,8 +79,13 @@
 #error "We require at least vs2005 for MemoryBarrier"
 #endif
 inline void MemoryBarrier() {
+#if defined(V8_HOST_ARCH_64_BIT)
+  // See #undef and note at the top of this file.
+  __faststorefence();
+#else
   // We use MemoryBarrier from WinNT.h
   ::MemoryBarrier();
+#endif
 }
 
 inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,