var_types targetType = simdNode->TypeGet();
genConsumeOperands(simdNode);
- regNumber op1Reg = op1->gtRegNum;
+ regNumber op1Reg = op1->IsIntegralConst(0) ? REG_ZR : op1->gtRegNum;
- // TODO-ARM64-CQ Add support contain int const zero
// TODO-ARM64-CQ Add LD1R to allow SIMDIntrinsicInit from contained memory
// TODO-ARM64-CQ Add MOVI to allow SIMDIntrinsicInit from contained immediate small constants
- assert(!op1->isContained());
+ assert(op1->isContained() == op1->IsIntegralConst(0));
assert(!op1->isUsedFromMemory());
assert(genIsValidFloatReg(targetReg));
GenTree* op2;
case SIMDIntrinsicInit:
- // TODO-ARM64-CQ Support containing 0
+ op1 = simdNode->gtOp.gtOp1;
+ if (op1->IsIntegralConst(0))
+ {
+ MakeSrcContained(simdNode, op1);
+ }
break;
case SIMDIntrinsicInitArray:
GenTree* op1;
GenTree* op2;
- case SIMDIntrinsicCast:
case SIMDIntrinsicInit:
+ info->srcCount = simdTree->gtGetOp1()->isContained() ? 0 : 1;
+ break;
+
+ case SIMDIntrinsicCast:
case SIMDIntrinsicSqrt:
case SIMDIntrinsicAbs:
case SIMDIntrinsicConvertToSingle: