Skip to content

Commit 14e43ae

Browse files
committed
Handle some asserts on Arm64
1 parent a14d97c commit 14e43ae

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

src/coreclr/jit/codegenarmarch.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -659,12 +659,17 @@ void CodeGen::genEmitGSCookieCheck(bool pushReg)
659659
void CodeGen::genIntrinsic(GenTreeIntrinsic* treeNode)
660660
{
661661
// 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();
665663

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
668673
switch (treeNode->gtIntrinsicName)
669674
{
670675
case NI_System_Math_Abs:
@@ -696,13 +701,13 @@ void CodeGen::genIntrinsic(GenTreeIntrinsic* treeNode)
696701
case NI_System_Math_Max:
697702
genConsumeOperands(treeNode->AsOp());
698703
GetEmitter()->emitIns_R_R_R(INS_fmax, emitActualTypeSize(treeNode), treeNode->GetRegNum(),
699-
treeNode->gtGetOp1()->GetRegNum(), treeNode->gtGetOp2()->GetRegNum());
704+
srcNode->GetRegNum(), treeNode->gtGetOp2()->GetRegNum());
700705
break;
701706

702707
case NI_System_Math_Min:
703708
genConsumeOperands(treeNode->AsOp());
704709
GetEmitter()->emitIns_R_R_R(INS_fmin, emitActualTypeSize(treeNode), treeNode->GetRegNum(),
705-
treeNode->gtGetOp1()->GetRegNum(), treeNode->gtGetOp2()->GetRegNum());
710+
srcNode->GetRegNum(), treeNode->gtGetOp2()->GetRegNum());
706711
break;
707712
#endif // TARGET_ARM64
708713

src/coreclr/jit/codegenxarch.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7670,7 +7670,7 @@ void CodeGen::genIntrinsic(GenTreeIntrinsic* treeNode)
76707670
case NI_System_Math_Sqrt:
76717671
{
76727672
// Both operand and its result must be of the same floating point type.
7673-
GenTree* srcNode = treeNode->AsOp()->gtOp1;
7673+
GenTree* srcNode = treeNode->gtGetOp1();
76747674
assert(varTypeIsFloating(srcNode));
76757675
assert(srcNode->TypeGet() == treeNode->TypeGet());
76767676

0 commit comments

Comments
 (0)