@@ -659,12 +659,17 @@ void CodeGen::genEmitGSCookieCheck(bool pushReg)
659
659
void CodeGen::genIntrinsic (GenTreeIntrinsic* treeNode)
660
660
{
661
661
// Both operand and its result must be of the same floating point type.
662
- GenTree* srcNode = treeNode->AsOp ()->gtOp1 ;
663
- assert (varTypeIsFloating (srcNode));
664
- assert (srcNode->TypeGet () == treeNode->TypeGet ());
662
+ GenTree* srcNode = treeNode->gtGetOp1 ();
665
663
666
- // Only a subset of functions are treated as math intrinsics.
667
- //
664
+ #ifdef DEBUG
665
+ if ((treeNode->gtIntrinsicName > NI_SYSTEM_MATH_START) && (treeNode->gtIntrinsicName < NI_SYSTEM_MATH_END))
666
+ {
667
+ assert (varTypeIsFloating (srcNode));
668
+ assert (srcNode->TypeGet () == treeNode->TypeGet ());
669
+ }
670
+ #endif // DEBUG
671
+
672
+ // Handle intrinsics that can be implemented by target-specific instructions
668
673
switch (treeNode->gtIntrinsicName )
669
674
{
670
675
case NI_System_Math_Abs:
@@ -696,13 +701,13 @@ void CodeGen::genIntrinsic(GenTreeIntrinsic* treeNode)
696
701
case NI_System_Math_Max:
697
702
genConsumeOperands (treeNode->AsOp ());
698
703
GetEmitter ()->emitIns_R_R_R (INS_fmax, emitActualTypeSize (treeNode), treeNode->GetRegNum (),
699
- treeNode-> gtGetOp1 () ->GetRegNum (), treeNode->gtGetOp2 ()->GetRegNum ());
704
+ srcNode ->GetRegNum (), treeNode->gtGetOp2 ()->GetRegNum ());
700
705
break ;
701
706
702
707
case NI_System_Math_Min:
703
708
genConsumeOperands (treeNode->AsOp ());
704
709
GetEmitter ()->emitIns_R_R_R (INS_fmin, emitActualTypeSize (treeNode), treeNode->GetRegNum (),
705
- treeNode-> gtGetOp1 () ->GetRegNum (), treeNode->gtGetOp2 ()->GetRegNum ());
710
+ srcNode ->GetRegNum (), treeNode->gtGetOp2 ()->GetRegNum ());
706
711
break ;
707
712
#endif // TARGET_ARM64
708
713
0 commit comments