Commit 210c18cf authored by yangguo's avatar yangguo Committed by Commit bot

Initialize maths result array in JS.

R=ishell@chromium.org

Committed: https://crrev.com/aa26f5d4a11a1e5655d425ff40ced79c8ecdd55f
Cr-Commit-Position: refs/heads/master@{#31722}

Review URL: https://codereview.chromium.org/1421703004

Cr-Commit-Position: refs/heads/master@{#31735}
parent 2200c389
......@@ -197,8 +197,6 @@ class Genesis BASE_EMBEDDED {
Handle<JSFunction> empty_function,
ContextType context_type);
void InitializeExperimentalGlobal();
// Typed arrays are not serializable and have to initialized afterwards.
bool InitializeBuiltinTypedArrays();
// Depending on the situation, expose and/or get rid of the utils object.
void ConfigureUtilsObject(ContextType context_type);
......@@ -1767,26 +1765,6 @@ Handle<JSTypedArray> CreateTypedArray(Isolate* isolate, ExternalArrayType type,
}
bool Genesis::InitializeBuiltinTypedArrays() {
HandleScope scope(isolate());
const size_t num_elements = 2;
double* data = NULL;
Handle<JSTypedArray> rempio2result =
CreateTypedArray(isolate(), kExternalFloat64Array, num_elements, &data);
for (size_t i = 0; i < num_elements; i++) data[i] = 0;
Handle<JSObject> utils =
Handle<JSObject>::cast(isolate()->natives_utils_object());
Handle<String> name_string = isolate()->factory()->NewStringFromAsciiChecked(
"InitializeBuiltinTypedArrays");
Handle<Object> fun = JSObject::GetDataProperty(utils, name_string);
Handle<Object> receiver = isolate()->factory()->undefined_value();
Handle<Object> args[] = {utils, rempio2result};
return !Execution::Call(isolate(), fun, receiver, arraysize(args), args)
.is_null();
}
void Genesis::ConfigureUtilsObject(ContextType context_type) {
switch (context_type) {
// We still need the utils object to find debug functions.
......@@ -3231,7 +3209,6 @@ Genesis::Genesis(Isolate* isolate,
// snapshot as we should be able to turn them off at runtime. Re-installing
// them after they have already been deserialized would also fail.
if (context_type == FULL_CONTEXT) {
if (!InitializeBuiltinTypedArrays()) return;
if (!isolate->serializer_enabled()) {
InitializeExperimentalGlobal();
if (!InstallExperimentalNatives()) return;
......@@ -3244,7 +3221,6 @@ Genesis::Genesis(Isolate* isolate,
// for each new context.
} else if (context_type == DEBUG_CONTEXT) {
DCHECK(!isolate->serializer_enabled());
if (!InitializeBuiltinTypedArrays()) return;
InitializeExperimentalGlobal();
if (!InstallDebuggerNatives()) return;
}
......
......@@ -247,12 +247,12 @@ function PostExperimentals(utils) {
utils.InitializeRNG();
utils.InitializeRNG = UNDEFINED;
utils.CreateDoubleResultArray();
utils.CreateDoubleResultArray = UNDEFINED;
utils.Export = UNDEFINED;
utils.PostDebug = UNDEFINED;
utils.PostExperimentals = UNDEFINED;
utils.InitializeBuiltinTypedArrays = UNDEFINED;
utils.SetupTypedArray = UNDEFINED;
typed_array_setup = UNDEFINED;
}
......@@ -264,6 +264,8 @@ function PostDebug(utils) {
utils.InitializeRNG();
utils.InitializeRNG = UNDEFINED;
utils.CreateDoubleResultArray();
utils.CreateDoubleResultArray = UNDEFINED;
exports_container = UNDEFINED;
......@@ -272,8 +274,6 @@ function PostDebug(utils) {
utils.ImportNow = UNDEFINED;
utils.PostDebug = UNDEFINED;
utils.PostExperimentals = UNDEFINED;
utils.InitializeBuiltinTypedArrays = UNDEFINED;
utils.SetupTypedArray = UNDEFINED;
typed_array_setup = UNDEFINED;
}
......@@ -304,8 +304,6 @@ utils.SetUpLockedPrototype = SetUpLockedPrototype;
utils.PostNatives = PostNatives;
utils.PostExperimentals = PostExperimentals;
utils.PostDebug = PostDebug;
utils.SetupTypedArray = SetupTypedArray;
utils.InitializeBuiltinTypedArrays = InitializeBuiltinTypedArrays;
%ToFastProperties(utils);
......
......@@ -68,8 +68,8 @@ RUNTIME_FUNCTION(Runtime_RemPiO2) {
CONVERT_DOUBLE_ARG_CHECKED(x, 0);
CONVERT_ARG_CHECKED(JSTypedArray, result, 1);
RUNTIME_ASSERT(result->byte_length() == Smi::FromInt(2 * sizeof(double)));
void* backing_store = JSArrayBuffer::cast(result->buffer())->backing_store();
double* y = static_cast<double*>(backing_store);
FixedFloat64Array* array = FixedFloat64Array::cast(result->elements());
double* y = static_cast<double*>(array->DataPtr());
return Smi::FromInt(fdlibm::rempio2(x, y));
}
......
......@@ -28,6 +28,7 @@
// -------------------------------------------------------------------
// Imports
var GlobalFloat64Array = global.Float64Array;
var GlobalMath = global.Math;
var MathAbs;
var MathExp;
......@@ -39,9 +40,9 @@ utils.Import(function(from) {
MathExp = from.MathExp;
});
utils.SetupTypedArray(function(arg) {
rempio2result = arg;
});
utils.CreateDoubleResultArray = function(global) {
rempio2result = new GlobalFloat64Array(2);
};
// -------------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment