-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Add Predicate register placeholder methods and Z registers #95016
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
Changes from all commits
4229b9c
e2b2dbb
8e6403d
d547246
05b324d
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 |
|---|---|---|
|
|
@@ -268,6 +268,11 @@ enum insOpts : unsigned | |
| INS_OPTS_1D, | ||
| INS_OPTS_2D, | ||
|
|
||
| INS_OPTS_SCALABLE_B, | ||
| INS_OPTS_SCALABLE_H, | ||
| INS_OPTS_SCALABLE_S, | ||
| INS_OPTS_SCALABLE_D, | ||
|
|
||
|
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. I did a similar thing in my WIP, but put it inside emitAttr: I'm happy with he way you've done it. But what do we use for the size? or: ? 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. Never mind, I've just seen |
||
| INS_OPTS_MSL, // Vector Immediate (shifting ones variant) | ||
|
|
||
| INS_OPTS_S_TO_4BYTE, // Single to INT32 | ||
|
|
@@ -418,8 +423,10 @@ enum emitAttr : unsigned | |
| EA_4BYTE = 0x004, | ||
| EA_8BYTE = 0x008, | ||
| EA_16BYTE = 0x010, | ||
|
|
||
| #if defined(TARGET_XARCH) | ||
| #if defined(TARGET_ARM64) | ||
| EA_SCALABLE = 0x020, | ||
|
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. Intention here is to use scalable alongside another size? For example, for an SVE vector of ints: theEmitter->emitIns_R_R_R(INS_sve_and, EA_1BYTE|EA_SCALABLE, REG_V0, REG_V1, REG_V2, INS_OPTS_NONE); // AND <Zdn>.<T>, <Pg>/M, <Zdn>.<T>, <Zm>.<T>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. I think we need to add the following lane size enum entries in Then, for your example, it would be: theEmitter->emitIns_R_R_R(INS_sve_and, EA_SCALABLE, REG_V0, REG_V1, REG_V2, INS_OPTS_SCALABLE_B); // AND <Zdn>.<T>, <Pg>/M, <Zdn>.<T>, <Zm>.<T> |
||
| EA_SIZE_MASK = 0x03F, | ||
| #elif defined(TARGET_XARCH) | ||
| EA_32BYTE = 0x020, | ||
| EA_64BYTE = 0x040, | ||
| EA_SIZE_MASK = 0x07F, | ||
|
|
||
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.
Seems a shame we can't reuse insEncodeReg_Zn etc - the function is very similar.
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.
The only differentiator is the following portion: Could use macro to share most of that code, but don't think it is worth it (for now).
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 think it's not worth sharing. The asserts will be different even if the code is similar. It'll probably either get inlined or comdat folded in a release build anyway.