| Index: src/assembler.cc
|
| diff --git a/src/assembler.cc b/src/assembler.cc
|
| index 40765b31d7dde62c4b731dd304f5dd6e1fc739f2..1f65a41c0449576d1a1e0e368ee664b9534aecf6 100644
|
| --- a/src/assembler.cc
|
| +++ b/src/assembler.cc
|
| @@ -1153,6 +1153,20 @@ double power_double_int(double x, int y) {
|
|
|
|
|
| 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);
|
| + }
|
| +#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();
|
|
|