Merge V8 5.3.332.45. DO NOT MERGE
Test: Manual
FPIIM-449
Change-Id: Id3254828b068abdea3cb10442e0172a8c9a98e03
(cherry picked from commit 13e2dadd00298019ed862f2b2fc5068bba730bcf)
diff --git a/src/crankshaft/hydrogen-instructions.cc b/src/crankshaft/hydrogen-instructions.cc
index 5e4ad37..6036d3f 100644
--- a/src/crankshaft/hydrogen-instructions.cc
+++ b/src/crankshaft/hydrogen-instructions.cc
@@ -5,6 +5,7 @@
#include "src/crankshaft/hydrogen-instructions.h"
#include "src/base/bits.h"
+#include "src/base/ieee754.h"
#include "src/base/safe_math.h"
#include "src/crankshaft/hydrogen-infer-representation.h"
#include "src/double.h"
@@ -784,7 +785,6 @@
case HValue::kCompareNumericAndBranch:
case HValue::kCompareObjectEqAndBranch:
case HValue::kConstant:
- case HValue::kConstructDouble:
case HValue::kContext:
case HValue::kDebugBreak:
case HValue::kDeclareGlobals:
@@ -1114,10 +1114,14 @@
return "round";
case kMathAbs:
return "abs";
+ case kMathCos:
+ return "cos";
case kMathLog:
return "log";
case kMathExp:
return "exp";
+ case kMathSin:
+ return "sin";
case kMathSqrt:
return "sqrt";
case kMathPowHalf:
@@ -1553,6 +1557,9 @@
case IS_JS_ARRAY:
*first = *last = JS_ARRAY_TYPE;
return;
+ case IS_JS_FUNCTION:
+ *first = *last = JS_FUNCTION_TYPE;
+ return;
case IS_JS_DATE:
*first = *last = JS_DATE_TYPE;
return;
@@ -1625,6 +1632,8 @@
switch (check_) {
case IS_JS_RECEIVER: return "object";
case IS_JS_ARRAY: return "array";
+ case IS_JS_FUNCTION:
+ return "function";
case IS_JS_DATE:
return "date";
case IS_STRING: return "string";
@@ -2412,9 +2421,9 @@
if (handle->IsBoolean()) {
res = handle->BooleanValue() ?
new(zone) HConstant(1) : new(zone) HConstant(0);
- } else if (handle->IsUndefined()) {
+ } else if (handle->IsUndefined(isolate)) {
res = new (zone) HConstant(std::numeric_limits<double>::quiet_NaN());
- } else if (handle->IsNull()) {
+ } else if (handle->IsNull(isolate)) {
res = new(zone) HConstant(0);
} else if (handle->IsString()) {
res = new(zone) HConstant(String::ToNumber(Handle<String>::cast(handle)));
@@ -3395,6 +3404,9 @@
}
if (std::isinf(d)) { // +Infinity and -Infinity.
switch (op) {
+ case kMathCos:
+ case kMathSin:
+ return H_CONSTANT_DOUBLE(std::numeric_limits<double>::quiet_NaN());
case kMathExp:
return H_CONSTANT_DOUBLE((d > 0.0) ? d : 0.0);
case kMathLog:
@@ -3416,11 +3428,14 @@
}
}
switch (op) {
+ case kMathCos:
+ return H_CONSTANT_DOUBLE(base::ieee754::cos(d));
case kMathExp:
- lazily_initialize_fast_exp(isolate);
- return H_CONSTANT_DOUBLE(fast_exp(d, isolate));
+ return H_CONSTANT_DOUBLE(base::ieee754::exp(d));
case kMathLog:
- return H_CONSTANT_DOUBLE(std::log(d));
+ return H_CONSTANT_DOUBLE(base::ieee754::log(d));
+ case kMathSin:
+ return H_CONSTANT_DOUBLE(base::ieee754::sin(d));
case kMathSqrt:
lazily_initialize_fast_sqrt(isolate);
return H_CONSTANT_DOUBLE(fast_sqrt(d, isolate));