@@ -3879,7 +3879,7 @@ void CodeGen::genSIMDIntrinsic(GenTreeSIMD* simdNode)
38793879 noway_assert (!" SIMD intrinsic with unsupported base type." );
38803880 }
38813881
3882- switch (simdNode->gtSIMDIntrinsicID )
3882+ switch (simdNode->GetSIMDIntrinsicId () )
38833883 {
38843884 case SIMDIntrinsicInit:
38853885 genSIMDIntrinsicInit (simdNode);
@@ -4039,15 +4039,15 @@ instruction CodeGen::getOpForSIMDIntrinsic(SIMDIntrinsicID intrinsicId, var_type
40394039//
40404040void CodeGen::genSIMDIntrinsicInit (GenTreeSIMD* simdNode)
40414041{
4042- assert (simdNode->gtSIMDIntrinsicID == SIMDIntrinsicInit);
4042+ assert (simdNode->GetSIMDIntrinsicId () == SIMDIntrinsicInit);
40434043
4044- GenTree* op1 = simdNode->gtGetOp1 ( );
4044+ GenTree* op1 = simdNode->Op ( 1 );
40454045 var_types baseType = simdNode->GetSimdBaseType ();
40464046 regNumber targetReg = simdNode->GetRegNum ();
40474047 assert (targetReg != REG_NA);
40484048 var_types targetType = simdNode->TypeGet ();
40494049
4050- genConsumeOperands (simdNode);
4050+ genConsumeMultiOpOperands (simdNode);
40514051 regNumber op1Reg = op1->IsIntegralConst (0 ) ? REG_ZR : op1->GetRegNum ();
40524052
40534053 // TODO-ARM64-CQ Add LD1R to allow SIMDIntrinsicInit from contained memory
@@ -4090,16 +4090,18 @@ void CodeGen::genSIMDIntrinsicInit(GenTreeSIMD* simdNode)
40904090//
40914091void CodeGen::genSIMDIntrinsicInitN (GenTreeSIMD* simdNode)
40924092{
4093- assert (simdNode->gtSIMDIntrinsicID == SIMDIntrinsicInitN);
4093+ assert (simdNode->GetSIMDIntrinsicId () == SIMDIntrinsicInitN);
40944094
40954095 regNumber targetReg = simdNode->GetRegNum ();
40964096 assert (targetReg != REG_NA);
40974097
4098- var_types targetType = simdNode->TypeGet ();
4099-
4100- var_types baseType = simdNode->GetSimdBaseType ();
4098+ var_types targetType = simdNode->TypeGet ();
4099+ var_types baseType = simdNode->GetSimdBaseType ();
4100+ emitAttr baseTypeSize = emitTypeSize (baseType);
4101+ regNumber vectorReg = targetReg;
4102+ size_t initCount = simdNode->GetOperandCount ();
41014103
4102- regNumber vectorReg = targetReg ;
4104+ assert ((initCount * baseTypeSize) <= simdNode-> GetSimdSize ()) ;
41034105
41044106 if (varTypeIsFloating (baseType))
41054107 {
@@ -4108,24 +4110,17 @@ void CodeGen::genSIMDIntrinsicInitN(GenTreeSIMD* simdNode)
41084110 vectorReg = simdNode->GetSingleTempReg (RBM_ALLFLOAT);
41094111 }
41104112
4111- emitAttr baseTypeSize = emitTypeSize (baseType);
4112-
41134113 // We will first consume the list items in execution (left to right) order,
41144114 // and record the registers.
41154115 regNumber operandRegs[FP_REGSIZE_BYTES];
4116- unsigned initCount = 0 ;
4117- for (GenTree* list = simdNode->gtGetOp1 (); list != nullptr ; list = list->gtGetOp2 ())
4116+ for (size_t i = 1 ; i <= initCount; i++)
41184117 {
4119- assert (list->OperGet () == GT_LIST);
4120- GenTree* listItem = list->gtGetOp1 ();
4121- assert (listItem->TypeGet () == baseType);
4122- assert (!listItem->isContained ());
4123- regNumber operandReg = genConsumeReg (listItem);
4124- operandRegs[initCount] = operandReg;
4125- initCount++;
4126- }
4118+ GenTree* operand = simdNode->Op (i);
4119+ assert (operand->TypeIs (baseType));
4120+ assert (!operand->isContained ());
41274121
4128- assert ((initCount * baseTypeSize) <= simdNode->GetSimdSize ());
4122+ operandRegs[i - 1 ] = genConsumeReg (operand);
4123+ }
41294124
41304125 if (initCount * baseTypeSize < EA_16BYTE)
41314126 {
@@ -4164,25 +4159,25 @@ void CodeGen::genSIMDIntrinsicInitN(GenTreeSIMD* simdNode)
41644159//
41654160void CodeGen::genSIMDIntrinsicUnOp (GenTreeSIMD* simdNode)
41664161{
4167- assert (simdNode->gtSIMDIntrinsicID == SIMDIntrinsicCast ||
4168- simdNode->gtSIMDIntrinsicID == SIMDIntrinsicConvertToSingle ||
4169- simdNode->gtSIMDIntrinsicID == SIMDIntrinsicConvertToInt32 ||
4170- simdNode->gtSIMDIntrinsicID == SIMDIntrinsicConvertToDouble ||
4171- simdNode->gtSIMDIntrinsicID == SIMDIntrinsicConvertToInt64);
4162+ assert (( simdNode->GetSIMDIntrinsicId () == SIMDIntrinsicCast) ||
4163+ ( simdNode->GetSIMDIntrinsicId () == SIMDIntrinsicConvertToSingle) ||
4164+ ( simdNode->GetSIMDIntrinsicId () == SIMDIntrinsicConvertToInt32) ||
4165+ ( simdNode->GetSIMDIntrinsicId () == SIMDIntrinsicConvertToDouble) ||
4166+ ( simdNode->GetSIMDIntrinsicId () == SIMDIntrinsicConvertToInt64) );
41724167
4173- GenTree* op1 = simdNode->gtGetOp1 ( );
4168+ GenTree* op1 = simdNode->Op ( 1 );
41744169 var_types baseType = simdNode->GetSimdBaseType ();
41754170 regNumber targetReg = simdNode->GetRegNum ();
41764171 assert (targetReg != REG_NA);
41774172 var_types targetType = simdNode->TypeGet ();
41784173
4179- genConsumeOperands (simdNode);
4174+ genConsumeMultiOpOperands (simdNode);
41804175 regNumber op1Reg = op1->GetRegNum ();
41814176
41824177 assert (genIsValidFloatReg (op1Reg));
41834178 assert (genIsValidFloatReg (targetReg));
41844179
4185- instruction ins = getOpForSIMDIntrinsic (simdNode->gtSIMDIntrinsicID , baseType);
4180+ instruction ins = getOpForSIMDIntrinsic (simdNode->GetSIMDIntrinsicId () , baseType);
41864181 emitAttr attr = (simdNode->GetSimdSize () > 8 ) ? EA_16BYTE : EA_8BYTE;
41874182
41884183 if (GetEmitter ()->IsMovInstruction (ins))
@@ -4208,17 +4203,19 @@ void CodeGen::genSIMDIntrinsicUnOp(GenTreeSIMD* simdNode)
42084203//
42094204void CodeGen::genSIMDIntrinsicBinOp (GenTreeSIMD* simdNode)
42104205{
4211- assert (simdNode->gtSIMDIntrinsicID == SIMDIntrinsicSub || simdNode->gtSIMDIntrinsicID == SIMDIntrinsicBitwiseAnd ||
4212- simdNode->gtSIMDIntrinsicID == SIMDIntrinsicBitwiseOr || simdNode->gtSIMDIntrinsicID == SIMDIntrinsicEqual);
4206+ assert ((simdNode->GetSIMDIntrinsicId () == SIMDIntrinsicSub) ||
4207+ (simdNode->GetSIMDIntrinsicId () == SIMDIntrinsicBitwiseAnd) ||
4208+ (simdNode->GetSIMDIntrinsicId () == SIMDIntrinsicBitwiseOr) ||
4209+ (simdNode->GetSIMDIntrinsicId () == SIMDIntrinsicEqual));
42134210
4214- GenTree* op1 = simdNode->gtGetOp1 ( );
4215- GenTree* op2 = simdNode->gtGetOp2 ( );
4211+ GenTree* op1 = simdNode->Op ( 1 );
4212+ GenTree* op2 = simdNode->Op ( 2 );
42164213 var_types baseType = simdNode->GetSimdBaseType ();
42174214 regNumber targetReg = simdNode->GetRegNum ();
42184215 assert (targetReg != REG_NA);
42194216 var_types targetType = simdNode->TypeGet ();
42204217
4221- genConsumeOperands (simdNode);
4218+ genConsumeMultiOpOperands (simdNode);
42224219 regNumber op1Reg = op1->GetRegNum ();
42234220 regNumber op2Reg = op2->GetRegNum ();
42244221
@@ -4228,7 +4225,7 @@ void CodeGen::genSIMDIntrinsicBinOp(GenTreeSIMD* simdNode)
42284225
42294226 // TODO-ARM64-CQ Contain integer constants where posible
42304227
4231- instruction ins = getOpForSIMDIntrinsic (simdNode->gtSIMDIntrinsicID , baseType);
4228+ instruction ins = getOpForSIMDIntrinsic (simdNode->GetSIMDIntrinsicId () , baseType);
42324229 emitAttr attr = (simdNode->GetSimdSize () > 8 ) ? EA_16BYTE : EA_8BYTE;
42334230 insOpts opt = genGetSimdInsOpt (attr, baseType);
42344231
@@ -4257,9 +4254,9 @@ void CodeGen::genSIMDIntrinsicBinOp(GenTreeSIMD* simdNode)
42574254//
42584255void CodeGen::genSIMDIntrinsicUpperSave (GenTreeSIMD* simdNode)
42594256{
4260- assert (simdNode->gtSIMDIntrinsicID == SIMDIntrinsicUpperSave);
4257+ assert (simdNode->GetSIMDIntrinsicId () == SIMDIntrinsicUpperSave);
42614258
4262- GenTree* op1 = simdNode->gtGetOp1 ( );
4259+ GenTree* op1 = simdNode->Op ( 1 );
42634260 GenTreeLclVar* lclNode = op1->AsLclVar ();
42644261 LclVarDsc* varDsc = compiler->lvaGetDesc (lclNode);
42654262 assert (emitTypeSize (varDsc->GetRegisterType (lclNode)) == 16 );
@@ -4307,9 +4304,9 @@ void CodeGen::genSIMDIntrinsicUpperSave(GenTreeSIMD* simdNode)
43074304//
43084305void CodeGen::genSIMDIntrinsicUpperRestore (GenTreeSIMD* simdNode)
43094306{
4310- assert (simdNode->gtSIMDIntrinsicID == SIMDIntrinsicUpperRestore);
4307+ assert (simdNode->GetSIMDIntrinsicId () == SIMDIntrinsicUpperRestore);
43114308
4312- GenTree* op1 = simdNode->gtGetOp1 ( );
4309+ GenTree* op1 = simdNode->Op ( 1 );
43134310 assert (op1->IsLocal ());
43144311 GenTreeLclVar* lclNode = op1->AsLclVar ();
43154312 LclVarDsc* varDsc = compiler->lvaGetDesc (lclNode);
0 commit comments