Version 3.10.4

Fixed issues when stressing compaction with WeakMaps.

Fixed missing GVN flag for new-space promotion. (Chromium issue 123919)

Simplify invocation sequence at monomorphic function invocation sites. (issue 2079)

Performance and stability improvements on all platforms.

git-svn-id: http://v8.googlecode.com/svn/trunk@11387 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
diff --git a/src/assembler.cc b/src/assembler.cc
index 40765b3..be25649 100644
--- a/src/assembler.cc
+++ b/src/assembler.cc
@@ -1153,6 +1153,20 @@
 
 
 double power_double_double(double x, double y) {
+#ifdef __MINGW64_VERSION_MAJOR
+  // MinGW64 has a custom implementation for pow.  This handles certain
+  // special cases that are different.
+  if ((x == 0.0 || isinf(x)) && isfinite(y)) {
+    double f;
+    if (modf(y, &f) != 0.0) return ((x == 0.0) ^ (y > 0)) ? V8_INFINITY : 0;
+  }
+
+  if (x == 2.0) {
+    int y_int = static_cast<int>(y);
+    if (y == y_int) return ldexp(1.0, y_int);
+  }
+#endif
+
   // The checks for special cases can be dropped in ia32 because it has already
   // been done in generated code before bailing out here.
   if (isnan(y) || ((x == 1 || x == -1) && isinf(y))) return OS::nan_value();