Skip to content
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

Add support for AVX512 Vpclmulqdq, Vbmi2, Vnni, & Vaes instructions #349

Closed
wants to merge 10 commits into from

Conversation

vsivsi
Copy link
Contributor

@vsivsi vsivsi commented Dec 16, 2022

This PR, in conjunction with #234, rounds out the "missing" AVX512 extensions which are supported by the Golang assembler, but not present in the X86_64.xml file used to generate Avo's instruction support files.

With the addition of the instructions in these two PRs (plus those merged in #344), Avo will support all of the AVX512 instructions up through the Intel Sunny Cove (Ice & Rocket Lake) and AMD Zen4 processor lines.

Instructions were added using the same opcodesextra mechanism as was used in the GFNI PR.

@codecov-commenter
Copy link

codecov-commenter commented Dec 16, 2022

Codecov Report

Merging #349 (a27388a) into master (ead3fb5) will increase coverage by 0.06%.
The diff coverage is 80.00%.

@@            Coverage Diff             @@
##           master     #349      +/-   ##
==========================================
+ Coverage   75.92%   75.98%   +0.06%     
==========================================
  Files          65       65              
  Lines       20694    21014     +320     
==========================================
+ Hits        15711    15967     +256     
- Misses       4901     4965      +64     
  Partials       82       82              
Flag Coverage Δ
integration 11.72% <0.00%> (-0.21%) ⬇️
stress ?
unittests 73.11% <80.00%> (+0.10%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
internal/inst/types.go 52.63% <ø> (ø)
x86/zoptab.go 92.42% <ø> (ø)
build/zinstructions.go 67.63% <66.66%> (-0.02%) ⬇️
x86/zctors.go 100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

mmcloughlin added a commit that referenced this pull request Jan 8, 2023
mmcloughlin added a commit that referenced this pull request Jan 8, 2023
Adds "Vector Advanced Encryption Standard" instruction set.

These are added via the `opcodesextra` mechanism #345, since they're missing
from the opcodes database.

Contributed by @vsivsi. Extracted from #349 with minor tweaks.

Co-authored-by: Vaughn Iverson <vsivsi@yahoo.com>
@mmcloughlin
Copy link
Owner

This is awesome!

Going to take these one-by-one and land them independently.

VAES just landed in #358.

mmcloughlin added a commit that referenced this pull request Jan 8, 2023
@mmcloughlin
Copy link
Owner

It was possible to substantially simplify the VNNI instruction list, see #359.

AVX-512 instruction form expansion for masking/zeroing/broadcast versions is applied to the lists in opcodesextra, so it's not necessary to enumerate those manually. This was used in the GFNI PR too.

Not sure yet whether these simplifications will be possible for the other ISAs.

mmcloughlin added a commit that referenced this pull request Jan 8, 2023
Adds "Vector Neural Network Instructions" instruction set.

These are added via the `opcodesextra` mechanism #345, since they're missing
from the opcodes database.

Contributed by @vsivsi. Extracted from #349 with some tweaks.

Co-authored-by: Vaughn Iverson <vsivsi@yahoo.com>
mmcloughlin added a commit that referenced this pull request Jan 10, 2023
mmcloughlin added a commit that referenced this pull request Jan 10, 2023
Adds VEX and EVEX encoded versions of the `PCLMULQDQ` carry-less quadword
multiplication instruction.

These are added via the `opcodesextra` mechanism #345, since they're missing
from the opcodes database.

Contributed by @vsivsi. Extracted from #349 with minor tweaks.

Co-authored-by: Vaughn Iverson <vsivsi@yahoo.com>
mmcloughlin added a commit that referenced this pull request Jan 14, 2023
Adds the "Vector Bit Manipulation Instructions 2" instruction set.

These new instructions are added via the `opcodesextra` mechanism #345, since
they're missing from the opcodes database.

Contributed by @vsivsi. Extracted from #349 with simplifications.
Specifically, as prompted by the `dupl` linter we extract some common forms
lists into a helper `forms.go` file.

Co-authored-by: Vaughn Iverson <vsivsi@yahoo.com>
@mmcloughlin
Copy link
Owner

Landed in #360 #363 #359 #358.

Thanks again!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants