-
Notifications
You must be signed in to change notification settings - Fork 4.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Accelerate Vector128<long>::op_Multiply on x64 #103555
Changes from all commits
ae17211
afda312
ab01574
21b42de
581f1e2
49a359f
57898f0
f1be705
95d0eb8
dcfd93d
7fec9e3
e172296
0456d12
8af6104
69572a2
d607549
573a37b
3790d1b
60441f3
5b78ddd
cc257dd
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2750,17 +2750,25 @@ GenTree* Compiler::impSpecialIntrinsic(NamedIntrinsic intrinsic, | |
|
||
if (varTypeIsLong(simdBaseType)) | ||
{ | ||
if (simdSize != 64 && !canUseEvexEncoding()) | ||
if (TARGET_POINTER_SIZE == 4) | ||
{ | ||
// TODO-XARCH-CQ: We should support long/ulong multiplication | ||
// TODO-XARCH-CQ: 32bit support | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What's blocking 32-bit support? It doesn't look like we're using any There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not sure to be honest, that check was pre-existing, I only changed comment |
||
break; | ||
} | ||
// else if simdSize == 64 then above assert would check if baseline isa supported | ||
|
||
#if defined(TARGET_X86) | ||
// TODO-XARCH-CQ: We need to support 64-bit CreateBroadcast | ||
break; | ||
#endif // TARGET_X86 | ||
if ((simdSize == 32) && compOpportunisticallyDependsOn(InstructionSet_AVX2)) | ||
{ | ||
// Emulate NI_AVX512DQ_VL_MultiplyLow with AVX2 for SIMD32 | ||
} | ||
else if ((simdSize == 16) && compOpportunisticallyDependsOn(InstructionSet_SSE41)) | ||
{ | ||
// Emulate NI_AVX512DQ_VL_MultiplyLow with SSE41 for SIMD16 | ||
} | ||
else | ||
{ | ||
// Software fallback | ||
break; | ||
} | ||
} | ||
|
||
CORINFO_ARG_LIST_HANDLE arg1 = sig->args; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I know in other places we've started avoiding
hadd
in favor ofshuffle+add
, might be worth seeing if that's appropriate here too (low priority, non blocking)There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I tried to benchmark different implementations for it and they all were equaly fast e.g. #99871 (comment)