@@ -982,14 +982,13 @@ using namespace Js;
982
982
Var JavascriptArray::OP_NewScIntArray(AuxArray<int32> *ints, ScriptContext* scriptContext)
983
983
{
984
984
JIT_HELPER_NOT_REENTRANT_HEADER(ScrArr_OP_NewScIntArray, reentrancylock, scriptContext->GetThreadContext());
985
- uint32 count = ints->count;
986
- JavascriptArray *arr = scriptContext->GetLibrary()->CreateArrayLiteral(count);
987
- SparseArraySegment<Var> *head = SparseArraySegment<Var>::From(arr->head);
988
- Assert(count > 0 && count == head->length);
989
- for (uint i = 0; i < count; i++)
990
- {
991
- head->elements[i] = JavascriptNumber::ToVar(ints->elements[i], scriptContext);
992
- }
985
+
986
+ JavascriptNativeIntArray *arr = scriptContext->GetLibrary()->CreateNativeIntArrayLiteral(ints->count);
987
+
988
+ SparseArraySegment<int32> * segment = (SparseArraySegment<int32>*)arr->GetHead();
989
+
990
+ JavascriptOperators::AddIntsToArraySegment(segment, ints);
991
+
993
992
return arr;
994
993
JIT_HELPER_END(ScrArr_OP_NewScIntArray);
995
994
}
@@ -1042,31 +1041,30 @@ using namespace Js;
1042
1041
return arr;
1043
1042
}
1044
1043
1045
- return OP_NewScIntArray(ints, scriptContext);
1044
+ JavascriptArray *arr = scriptContext->GetLibrary()->CreateArrayLiteral(count);
1045
+ SparseArraySegment<Var> *head = SparseArraySegment<Var>::From(arr->head);
1046
+ Assert(count > 0 && count == head->length);
1047
+
1048
+ for (uint i = 0; i < count; i++)
1049
+ {
1050
+ head->elements[i] = JavascriptNumber::ToVar(ints->elements[i], scriptContext);
1051
+ }
1052
+
1053
+ return arr;
1046
1054
JIT_HELPER_END(ScrArr_ProfiledNewScIntArray);
1047
1055
}
1048
1056
#endif
1049
1057
1050
1058
Var JavascriptArray::OP_NewScFltArray(AuxArray<double> *doubles, ScriptContext* scriptContext)
1051
1059
{
1052
1060
JIT_HELPER_NOT_REENTRANT_HEADER(ScrArr_OP_NewScFltArray, reentrancylock, scriptContext->GetThreadContext());
1053
- uint32 count = doubles->count;
1054
- JavascriptArray *arr = scriptContext->GetLibrary()->CreateArrayLiteral(count);
1055
- SparseArraySegment<Var> *head = SparseArraySegment<Var>::From(arr->head);
1056
- Assert(count > 0 && count == head->length);
1057
- for (uint i = 0; i < count; i++)
1058
- {
1059
- double dval = doubles->elements[i];
1060
- int32 ival;
1061
- if (JavascriptNumber::TryGetInt32Value(dval, &ival) && !TaggedInt::IsOverflow(ival))
1062
- {
1063
- head->elements[i] = TaggedInt::ToVarUnchecked(ival);
1064
- }
1065
- else
1066
- {
1067
- head->elements[i] = JavascriptNumber::ToVarNoCheck(dval, scriptContext);
1068
- }
1069
- }
1061
+
1062
+ JavascriptNativeFloatArray *arr = scriptContext->GetLibrary()->CreateNativeFloatArrayLiteral(doubles->count);
1063
+
1064
+ SparseArraySegment<double> * segment = (SparseArraySegment<double>*)arr->GetHead();
1065
+
1066
+ JavascriptOperators::AddFloatsToArraySegment(segment, doubles);
1067
+
1070
1068
return arr;
1071
1069
JIT_HELPER_END(ScrArr_OP_NewScFltArray);
1072
1070
}
@@ -1089,7 +1087,26 @@ using namespace Js;
1089
1087
return arr;
1090
1088
}
1091
1089
1092
- return OP_NewScFltArray(doubles, scriptContext);
1090
+ uint32 count = doubles->count;
1091
+ JavascriptArray *arr = scriptContext->GetLibrary()->CreateArrayLiteral(count);
1092
+ SparseArraySegment<Var> *head = SparseArraySegment<Var>::From(arr->head);
1093
+ Assert(count > 0 && count == head->length);
1094
+
1095
+ for (uint i = 0; i < count; i++)
1096
+ {
1097
+ double dval = doubles->elements[i];
1098
+ int32 ival;
1099
+ if (JavascriptNumber::TryGetInt32Value(dval, &ival) && !TaggedInt::IsOverflow(ival))
1100
+ {
1101
+ head->elements[i] = TaggedInt::ToVarUnchecked(ival);
1102
+ }
1103
+ else
1104
+ {
1105
+ head->elements[i] = JavascriptNumber::ToVarNoCheck(dval, scriptContext);
1106
+ }
1107
+ }
1108
+
1109
+ return arr;
1093
1110
JIT_HELPER_END(ScrArr_ProfiledNewScFltArray);
1094
1111
}
1095
1112
0 commit comments