-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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
JIT ARM64-SVE: Add Sve.ConditionalExtract* APIs #104150
Changes from 10 commits
57fd096
3efea35
2290e8b
2cd8ef8
a0dc55c
50af1a2
7dfe36f
592a1d4
e3cd2ba
b0212ca
fb5c498
57ec981
f3dbc17
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 |
---|---|---|
|
@@ -2328,6 +2328,51 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node) | |
break; | ||
} | ||
|
||
case NI_Sve_ConditionalExtractAfterLastActiveElementScalar: | ||
case NI_Sve_ConditionalExtractLastActiveElementScalar: | ||
{ | ||
opt = emitter::optGetSveInsOpt(emitTypeSize(node->GetSimdBaseType())); | ||
|
||
if (emitter::isGeneralRegisterOrZR(targetReg)) | ||
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. shouldn't this be an assert instead? 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. Or are we using the term 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. CLASTA (scalar) is emitted only for integer |
||
{ | ||
assert(varTypeIsIntegralOrI(intrin.baseType)); | ||
|
||
emitSize = emitTypeSize(node); | ||
|
||
if (targetReg != op2Reg) | ||
{ | ||
assert(targetReg != op1Reg); | ||
assert(targetReg != op3Reg); | ||
GetEmitter()->emitIns_Mov(INS_mov, emitSize, targetReg, op2Reg, | ||
/* canSkip */ true); | ||
} | ||
|
||
GetEmitter()->emitInsSve_R_R_R(ins, emitSize, targetReg, op1Reg, op3Reg, opt, | ||
INS_SCALABLE_OPTS_NONE); | ||
break; | ||
} | ||
|
||
// FP scalars are processed by the INS_SCALABLE_OPTS_WITH_SIMD_SCALAR variant of the instructions | ||
FALLTHROUGH; | ||
} | ||
case NI_Sve_ConditionalExtractAfterLastActiveElement: | ||
case NI_Sve_ConditionalExtractLastActiveElement: | ||
{ | ||
assert(emitter::isFloatReg(targetReg)); | ||
assert(varTypeIsFloating(node->gtType) || varTypeIsSIMD(node->gtType)); | ||
|
||
if (targetReg != op2Reg) | ||
{ | ||
assert(targetReg != op1Reg); | ||
assert(targetReg != op3Reg); | ||
GetEmitter()->emitIns_Mov(INS_mov, emitTypeSize(node), targetReg, op2Reg, | ||
/* canSkip */ true); | ||
} | ||
GetEmitter()->emitInsSve_R_R_R(ins, EA_SCALABLE, targetReg, op1Reg, op3Reg, opt, | ||
INS_SCALABLE_OPTS_WITH_SIMD_SCALAR); | ||
break; | ||
} | ||
|
||
default: | ||
unreached(); | ||
} | ||
|
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.
This is not needed after #104396. Can you please merge the
main
and revert this?