-
Notifications
You must be signed in to change notification settings - Fork 645
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
[vector crypto] Clarifying mandate for vector register index alignment to LMUL/EMUL #1653
[vector crypto] Clarifying mandate for vector register index alignment to LMUL/EMUL #1653
Conversation
35de075
to
457e92d
Compare
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.
LGTM but I'll wait for the TG to affirm.
Signed-off-by: Nicolas Brunie <[email protected]>
Signed-off-by: Nicolas Brunie <[email protected]>
This was presented during the crypto task group meeting of October 10th 2024. |
@nibrunie @nibrunieAtSi5 I'm at lfiolhais. I don't know Richard's handle. This LGTM, in fact from the original document I implicitly got these requirements. I'm glad the document is more explicit. Thanks Nicolas! |
I am trying to reach out to @kdockser on the RISC-V slack. I would like for him to review this change before moving forward. |
Signed-off-by: Nicolas Brunie <[email protected]>
I think that this is concise way of stating what is in Source/Destination overlap constraints. Therefore, I suggest that it is added as a non-normative note in that section. Perhaps it should be placed between the text and the table. Also, the note:
conflicts with the overlap constraints; the scalar element group cannot be allocated to any vector register. Perhaps we could go with something like this:
|
…rasing "any vector register")
@kdockser, thank you for the second suggestion on the note; the wording "any vector register" was indeed incorrect. For the first part of your feedback, I am not sure I understand: I think this goes beyond Source/Destination overlap constraints, as this clarify what source indices and destination index can actually be (even without overlap). After reconsidering, I agree that "LMUL constraints" may not be the best location for this clarification but I don't think "Source/Destination overlap constraints" is either. |
I can suggest to move my additions into a new constraint sub-section: "Source/Destination index alignment constraints" and add the mention:
What do you think ? |
@nibrunie My point was that this is not a clarification as it is already stated in "Source/Destination overlap constraints". Therefore, it should be a non-normative note. I agree that this note should be elsewhere. Also, we need to make it explicit that Vector Crypto inherits all constraints from RVV. |
@kdockser, I have made a few changes: Adding an introduction to the instruction constraints section to enforce your recommendation:
Moved my other additions to a new sub-section:
Let me know what you think. |
src/vector-crypto.adoc
Outdated
+ | ||
A *Scalar Element Group* operand or destination has `EMUL = ceil(EGW / VLEN)`. | ||
+ | ||
The https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc#342-vector-register-grouping-vlmul20[Standard RVV vector register group alignment constraints] apply. |
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.
We shouldn't reference the riscv-v-spec
repo anymore. Since the alignment constraints section is now part of the same spec as this--both are in the unpriv ISA manual--we can use an asciidoc reference rather than a URL. I guess we can fix the other reference to riscv-v-spec
while we are at it.
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.
Should be corrected in 2161a3b
It makes sense to combine all of the vector/scalar constraints into one section. We no longer need to specify that each constraint is inherited from Vector as this is now included above. Signed-off-by: Ken Dockser <[email protected]>
@nibrunie I changed the section on overlapping registers into a section on .sv instructions. I also removed redundant statements about following the constraints of portions of RVV because you had added the statement that we were following all of the constraints of RVV. |
Thank you @kdockser, the changes look good to me. There are several way to suggest changes on top of a PR, one of them is to open a second PR which uses the branch of the first PR as the base branch ( |
@kdockser do you approve the current version of this PR ? |
Signed-off-by: Nicolas Brunie <[email protected]>
This change request against RISC-V vector crypto specification is related to riscv-software-src/riscv-isa-sim#1548: it aims at making the alignment mandate of vector register index clear for any vector crypto instruction manipulating element groups (vector or scalar element groups).
In the spike issue, @GuoShibo-cn noticed that the spike behavior for vector register index alignment was not consistent with the standard constraints for Vector instructions (namely the operand/destination vector register index must be
EMUL
aligned, else the behavior is reserved).Current spike does not trap and execute vector crypto instruction from https://gist.github.com/nibrunie/80a00047dce935011614530d86a829e6 without complaining.
There is a PR open on spike to fix this riscv-software-src/riscv-isa-sim#1815
LMUL
alignment checks for vector crypto instructions. All extensions from the following extensions are affected (that should be all instructions manipulating element groups): Zvkned, Zvknh[a/b], Zvksed, Zvksh, Zvkg.LMUL
alignment checks for the scalar-element-group operand of.vs
instructionThis PR (#1653) addresses the same two points (a) and (b):
(a) the
EMUL
alignment of vector operand/destination (=EMUL
for the vector element group operands and the destination) is specified in the main RVV spec; when a vector register group is notEMUL
aligned, the behavior is listed as "reserved" and spike has implemented this check to trigger illegal instruction exception when the condition was not met (e.g.(b) The vector crypto specification lists multiple times the intent to allow the vector register group for the scalar-element-group to have
EMUL = EGW / VLEN
(and to be aligned with thisEMUL
and not with the global LMUL associated with other vector operands/destination of the instruction). Looking at the current version of the spec (https://github.com/riscv/riscv-isa-manual/blob/1745bbf5549e519dea428fa05178b9fe0a0449f3/src/vector-crypto.adoc#element-groups) one can find:and elsewhere
and also