@@ -3765,13 +3765,11 @@ Lowerer::GenerateProfiledNewScArrayFastPath(IR::Instr *instr, Js::ArrayCallSiteI
3765
3765
GenerateMemInit(dstOpnd, Js::JavascriptNativeFloatArray::GetOffsetOfWeakFuncRef(), IR::AddrOpnd::New(weakFuncRef, IR::AddrOpndKindDynamicFunctionBodyWeakRef, m_func), instr, isZeroed);
3766
3766
// Js::JavascriptArray::MissingItem is a Var, so it may be 32-bit or 64 bit.
3767
3767
uint const offsetStart = sizeof(Js::SparseArraySegmentBase);
3768
- uint const missingItemCount = size * sizeof(double) / sizeof(Js::JavascriptArray::MissingItem);
3769
- i = i * sizeof(double) / sizeof(Js::JavascriptArray::MissingItem);
3770
- for (; i < missingItemCount; i++)
3768
+ for (; i < size; i++)
3771
3769
{
3772
3770
GenerateMemInit(
3773
- headOpnd, offsetStart + i * sizeof(Js::JavascriptArray::MissingItem ),
3774
- IR::AddrOpnd::New(Js::JavascriptArray::MissingItem, IR::AddrOpndKindConstantAddress, m_func, true ),
3771
+ headOpnd, offsetStart + i * sizeof(double ),
3772
+ GetMissingItemOpndForAssignment(TyFloat64, m_func),
3775
3773
instr, isZeroed);
3776
3774
}
3777
3775
}
@@ -3788,7 +3786,7 @@ Lowerer::GenerateProfiledNewScArrayFastPath(IR::Instr *instr, Js::ArrayCallSiteI
3788
3786
{
3789
3787
GenerateMemInit(
3790
3788
headOpnd, offsetStart + i * sizeof(Js::Var),
3791
- IR::AddrOpnd::New(Js::JavascriptArray::MissingItem, IR::AddrOpndKindConstantAddress, m_func, true ),
3789
+ GetMissingItemOpndForAssignment(TyVar, m_func),
3792
3790
instr, isZeroed);
3793
3791
}
3794
3792
}
@@ -4111,12 +4109,11 @@ Lowerer::GenerateProfiledNewScObjArrayFastPath(IR::Instr *instr, Js::ArrayCallSi
4111
4109
4112
4110
// Js::JavascriptArray::MissingItem is a Var, so it may be 32-bit or 64 bit.
4113
4111
uint const offsetStart = sizeof(Js::SparseArraySegmentBase);
4114
- uint const missingItemCount = size * sizeof(double) / sizeof(Js::JavascriptArray::MissingItem);
4115
- for (uint i = 0; i < missingItemCount; i++)
4112
+ for (uint i = 0; i < size; i++)
4116
4113
{
4117
4114
GenerateMemInit(
4118
- headOpnd, offsetStart + i * sizeof(Js::JavascriptArray::MissingItem ),
4119
- IR::AddrOpnd::New(Js::JavascriptArray::MissingItem, IR::AddrOpndKindConstantAddress, m_func, true ),
4115
+ headOpnd, offsetStart + i * sizeof(double ),
4116
+ GetMissingItemOpndForAssignment(TyFloat64, m_func),
4120
4117
instr, isZeroed);
4121
4118
}
4122
4119
}
@@ -4126,9 +4123,9 @@ Lowerer::GenerateProfiledNewScObjArrayFastPath(IR::Instr *instr, Js::ArrayCallSi
4126
4123
headOpnd = GenerateArrayObjectsAlloc<Js::JavascriptArray>(instr, &size, arrayInfo, &isZeroed, isNoArgs);
4127
4124
for (uint i = 0; i < size; i++)
4128
4125
{
4129
- GenerateMemInit(
4126
+ GenerateMemInit(
4130
4127
headOpnd, offsetStart + i * sizeof(Js::Var),
4131
- IR::AddrOpnd::New(Js::JavascriptArray::MissingItem, IR::AddrOpndKindConstantAddress, m_func, true ),
4128
+ GetMissingItemOpndForAssignment(TyVar, m_func),
4132
4129
instr, isZeroed);
4133
4130
}
4134
4131
}
@@ -4159,8 +4156,8 @@ Lowerer::GenerateProfiledNewScObjArrayFastPath(IR::Instr *instr, Js::ArrayCallSi
4159
4156
uint allocationBucketsCount = ArrayType::AllocationBucketsCount;
4160
4157
uint(*allocationBuckets)[Js::JavascriptArray::AllocationBucketsInfoSize];
4161
4158
allocationBuckets = ArrayType::allocationBuckets;
4162
- uint sizeFactor = 1;
4163
- IRType missingItemType = (arrayInfo && arrayInfo->IsNativeIntArray()) ? IRType::TyInt32 : IRType::TyVar;
4159
+
4160
+ IRType missingItemType = (arrayInfo ? arrayInfo->IsNativeIntArray() ? IRType::TyInt32 : arrayInfo->IsNativeFloatArray() ? IRType::TyFloat64 : IRType:: TyVar : IRType::TyVar) ;
4164
4161
IR::LabelInstr * arrayInitDone = IR::LabelInstr::New(Js::OpCode::Label, func);
4165
4162
4166
4163
bool isNativeArray = arrayInfo && (arrayInfo->IsNativeIntArray() || arrayInfo->IsNativeFloatArray());
@@ -4172,9 +4169,7 @@ Lowerer::GenerateProfiledNewScObjArrayFastPath(IR::Instr *instr, Js::ArrayCallSi
4172
4169
}
4173
4170
else if (arrayInfo && arrayInfo->IsNativeFloatArray())
4174
4171
{
4175
- // Js::JavascriptArray::MissingItem is a Var, so it may be 32-bit or 64 bit.
4176
- sizeFactor = sizeof(double) / sizeof(Js::JavascriptArray::MissingItem);
4177
- sizeOfElement = sizeof(Js::JavascriptArray::MissingItem);
4172
+ sizeOfElement = sizeof(double);
4178
4173
GenerateArrayInfoIsNativeFloatAndNotIntArrayTest(instr, arrayInfo, arrayInfoAddr, helperLabel);
4179
4174
}
4180
4175
else
@@ -4204,7 +4199,7 @@ Lowerer::GenerateProfiledNewScObjArrayFastPath(IR::Instr *instr, Js::ArrayCallSi
4204
4199
4205
4200
for (uint8 i = 0;i < allocationBucketsCount;i++)
4206
4201
{
4207
- missingItemCount = allocationBuckets[i][Js::JavascriptArray::MissingElementsCountIndex] * sizeFactor ;
4202
+ missingItemCount = allocationBuckets[i][Js::JavascriptArray::MissingElementsCountIndex];
4208
4203
4209
4204
if (i > 0)
4210
4205
{
@@ -4235,7 +4230,7 @@ Lowerer::GenerateProfiledNewScObjArrayFastPath(IR::Instr *instr, Js::ArrayCallSi
4235
4230
// Ensure no. of missingItems written are same
4236
4231
Assert(missingItemIndex == missingItemInitializedSoFar);
4237
4232
// Ensure no. of missingItems match what present in allocationBuckets
4238
- Assert(missingItemIndex == allocationBuckets[allocationBucketsCount - 1][Js::JavascriptArray::MissingElementsCountIndex] * sizeFactor );
4233
+ Assert(missingItemIndex == allocationBuckets[allocationBucketsCount - 1][Js::JavascriptArray::MissingElementsCountIndex]);
4239
4234
4240
4235
instr->InsertBefore(arrayInitDone);
4241
4236
@@ -4363,11 +4358,11 @@ Lowerer::GenerateProfiledNewScFloatArrayFastPath(IR::Instr *instr, Js::ArrayCall
4363
4358
4364
4359
// Js::JavascriptArray::MissingItem is a Var, so it may be 32-bit or 64 bit.
4365
4360
uint const offsetStart = sizeof(Js::SparseArraySegmentBase) + doubles->count * sizeof(double);
4366
- uint const missingItem = (size - doubles->count) * sizeof(double) / sizeof(Js::JavascriptArray::MissingItem) ;
4361
+ uint const missingItem = (size - doubles->count);
4367
4362
for (uint i = 0; i < missingItem; i++)
4368
4363
{
4369
- GenerateMemInit(headOpnd, offsetStart + i * sizeof(Js::JavascriptArray::MissingItem ),
4370
- IR::AddrOpnd::New(Js::JavascriptArray::MissingItem, IR::AddrOpndKindConstantAddress, m_func, true ), instr, isHeadSegmentZeroed);
4364
+ GenerateMemInit(headOpnd, offsetStart + i * sizeof(double ),
4365
+ GetMissingItemOpndForAssignment(TyFloat64, m_func), instr, isHeadSegmentZeroed);
4371
4366
}
4372
4367
// Skip pass the helper call
4373
4368
IR::LabelInstr * doneLabel = IR::LabelInstr::New(Js::OpCode::Label, func);
0 commit comments