Commit Graph

105 Commits

Author SHA1 Message Date
Michael McLoughlin
9e56971ed6 internal/opcodesextra: _yvblendmpd forms helper (#365)
Use helper function for instructions sharing the `_yvblendmpd` family of forms.
2023-01-14 13:55:36 -08:00
Michael McLoughlin
e2c0a40f50 all: VBMI2 instructions (#363)
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>
2023-01-14 13:25:44 -08:00
Michael McLoughlin
05ed388d0f all: BITALG instructions (#362)
Adds the AVX-512 Bit Algorithms 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 #234 with simplifications for AVX-512
form expansion.

Co-authored-by: Vaughn Iverson <vsivsi@yahoo.com>
2023-01-10 18:55:12 -08:00
Michael McLoughlin
a42c8ae281 all: VPOPCNTDQ instructions (#361)
Adds the VPOPCNTDQ instruction set, providing packed population count for
double and quadword integers.

These are added via the `opcodesextra` mechanism #345, since they're missing
from the opcodes database. In this case the 512-bit non-AVX512VL forms are
added here as well as the opcodes database, but they're deduplicated later.

Contributed by @vsivsi. Extracted from #234 with simplifications for AVX-512
form expansion.

Co-authored-by: Vaughn Iverson <vsivsi@yahoo.com>
2023-01-09 22:36:27 -08:00
Michael McLoughlin
7dac51aabf all: VPCLMULQDQ instruction (#360)
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>
2023-01-09 21:38:43 -08:00
Michael McLoughlin
b893b32213 all: VNNI instructions (#359)
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>
2023-01-08 11:42:48 -08:00
Michael McLoughlin
0569748e19 all: VAES instructions (#358)
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>
2023-01-07 21:55:36 -08:00
Michael McLoughlin
8f726c0f4d doc: fix README ci badge (#352)
Update URL for CI status badge in README.

See badges/shields#8671
2023-01-07 10:46:51 -08:00
Michael McLoughlin
bf1d055620 internal/data: bump versions (#346)
Bumps data dependencies to the latest versions.

Fixes a bug in the downloader that was causing duplicate licenses.
2022-11-27 20:57:30 -08:00
Michael McLoughlin
946323570a all: add GFNI instructions (#344)
Adds support for the GFNI "Galois Field New Instructions" instruction set.

These instructions are not included in the Opcodes database, therefore they're
added using the "extras" mechanism introduced in #345.

For simplicity, the loading phase is updated slightly so that AVX-512 form
expansion rules are applied after extras are added to the list. This greatly
reduces the number of forms that have to be specified by hand.

Based on #343
Fixes #335

Co-authored-by: Klaus Post <klauspost@gmail.com>
2022-11-27 18:53:46 -08:00
Michael McLoughlin
a0ea0f3e6f internal/opcodesextra: curated extra instructions (#345)
Supporting extra instructions not included in the Opcodes database is
currently a challenge. Short of migrating to an entirely different source
(such as #23), the options are either to patch the XML data file or to append
additional instructions at the loading phase.

An example of patching the XML was shown in the as-yet unlanded PR #234. This
shows the XML patching approach is unwieldy and requires more information than
we actually need (for example instruction form encodings).

In #335 we discussed the alternative of adding extra instructions during
loading. This has the advantage of using avo's simpler internal data
structure.

This PR prepares for using that approach by adding an `internal/opcodesextra`
package, intended to contain manually curated lists of extra instructions to
add to the instruction database during loading. At the moment, the only
instruction added here is the `MOVLQZX` instruction that's already handled
this way.

Updates #335 #234 #23
2022-11-27 18:32:31 -08:00
Michael McLoughlin
127528d117 build: mov deduction for booleans (#341)
Updates #336
2022-11-26 19:30:55 -08:00
Michael McLoughlin
e788b7675f all: upgrade to golangci-lint v1.49.0 (#329)
Fixes #242
2022-09-05 17:25:03 -07:00
Michael McLoughlin
88c126385a doc: report project metadata update time (#286) 2022-05-09 00:34:16 +00:00
Michael McLoughlin
bdaad2bb98 internal/cmd/docgen: use "missingkey=error" (#287) 2022-05-09 00:23:31 +00:00
Michael McLoughlin
62c71109a4 tests/thirdparty: use Suite type for configuration (#285) 2022-05-08 16:55:51 -07:00
Michael McLoughlin
4ca3d8a29f doc: format stars count (#281)
Use the k format for thousands, just like Github itself.
2022-05-08 15:22:26 -07:00
Michael McLoughlin
84071ae4f9 tests/thirdparty: multiple packages per project (#262) 2022-04-24 20:20:11 -07:00
Michael McLoughlin
3d25f4574c doc: rounded avatars (#256)
Use weserv service to format avatars with circle masks. Make size configurable.

Tweak readme and adopters pages.

Updates #101
2022-04-18 00:49:52 -07:00
Michael McLoughlin
1cbd35f134 doc: Adopters page (#254)
Adds page with full list of `avo` adopters. Linked to from README.

Updates #101
2022-04-17 23:57:05 -07:00
Michael McLoughlin
57ea8119b7 doc: Adopters list in README (#252)
Adds a list of most popular projects using avo, based on Github Stars.

Auto-generated from the third-party packages list using docgen.

Updates #101
2022-04-17 22:38:54 -07:00
Michael McLoughlin
9fee3b0ead doc: generate README with docgen tool (#251)
Introduces a docgen tool for templated documentation generation, and uses it
to generate the README.

At the moment this change makes minimal difference to generating it with
embedmd. The difference is that docgen opens up the possibility to generate
documentation with more elaborate templating. The specific use case currently
in mind is including an adopters list that's kept in sync with the third-party
packages file.

Updates #101
2022-04-17 19:41:29 -07:00
Michael McLoughlin
b0c64b2e52 ci: bump to go 1.18 (#239) 2022-04-10 21:03:05 -07:00
Michael McLoughlin
72b8db9c80 all: upgrade golangci-lint and formatters (#240) 2022-03-27 15:31:26 -07:00
Michael McLoughlin
b76e849b5c all: AVX-512 (#217)
Extends avo to support most AVX-512 instruction sets.

The instruction type is extended to support suffixes. The K family of opmask
registers is added to the register package, and the operand package is updated
to support the new operand types. Move instruction deduction in `Load` and
`Store` is extended to support KMOV* and VMOV* forms.

Internal code generation packages were overhauled. Instruction database loading
required various messy changes to account for the additional complexities of the
AVX-512 instruction sets. The internal/api package was added to introduce a
separation between instruction forms in the database, and the functions avo
provides to create them. This was required since with instruction suffixes there
is no longer a one-to-one mapping between instruction constructors and opcodes.

AVX-512 bloated generated source code size substantially, initially increasing
compilation and CI test times to an unacceptable level. Two changes were made to
address this:

1.  Instruction constructors in the `x86` package moved to an optab-based
    approach. This compiles substantially faster than the verbose code
    generation we had before.

2.  The most verbose code-generated tests are moved under build tags and
    limited to a stress test mode. Stress test builds are run on
    schedule but not in regular CI.

An example of AVX-512 accelerated 16-lane MD5 is provided to demonstrate and
test the new functionality.

Updates #20 #163 #229

Co-authored-by: Vaughn Iverson <vsivsi@yahoo.com>
2021-11-12 19:02:39 -08:00
Michael McLoughlin
2867bd7e01 tests/thirdparty: add skip option (#228)
Add the ability to skip third-party tests by specifying a known issue.
2021-11-10 18:44:28 -08:00
Michael McLoughlin
f355d27b13 tests/thirdparty: package metadata (#223)
Fetches third-party package metadata from Github.
2021-11-07 16:13:33 -08:00
Michael McLoughlin
8ff8e3b751 tests/thirdparty: fix and run as github workflow (#198)
As part of fixing failing third-party tests, this PR significantly
rearchitects their specification and execution.

Third-party tests are now specified in a much more flexible format allowing
more customization on a per-package level. In addition, third-party tests are
now used to auto-generate a Github Actions workflow to perform the tests in
parallel. This not only gives faster feedback on PRs, but will also allow us
to more quickly narrow down on which packages are failing. An additional
workflow also confirms that local execution of third-party tests is consistent
with the Github Actions version. This workflow only runs when tests/thirdparty
itself is changed.
2021-09-15 23:25:51 -07:00
Michael McLoughlin
f295bde84c pass: ensure frame pointer register is saved (#174)
Currently `avo` uses `BP` as a standard general-purpose register. However, `BP` is used for the frame pointer and should be callee-save. Under some circumstances, the Go assembler will do this automatically, but not always. At the moment `avo` can produce code that clobbers the `BP` register. Since Go 1.16 this code will also fail a new `go vet` check.

This PR provides a (currently sub-optimal) fix for the issue. It introduces an `EnsureBasePointerCalleeSaved` pass which will check if the base pointer is written to by a function, and if so will artificially ensure that the function has a non-zero frame size. This will trigger the Go assembler to automatically save and restore the BP register.

In addition, we update the `asmdecl` tool to `asmvet`, which includes the `framepointer` vet check.

Updates #156
2021-04-18 18:37:56 -07:00
Josh Bleecher Snyder
599bdd1269 internal/cmd/avogen: write output file even when gofmt fails (#165)
This makes it easier to debug avogen: when you emit invalid syntax, you can inspect the generated file to determine what went wrong, instead of having only gofmt's error to work with.
2021-01-03 19:29:11 -08:00
Michael McLoughlin
e089a6c93c tests/fixedbugs: regression test for issue 100 (#129)
Adds a regression test based on klauspost/compress#186. This necessitated some related changes:

* Mark "RET" as a terminal instruction
* printer refactor to maintain compatibility with asmfmt
* Tweaks to other regression tests to ensure they are run correctly in CI

Updates #100 #65 #8
2020-01-27 21:05:33 -08:00
Michael McLoughlin
cde7e9483b pass,printer: display required ISA features (#120)
Fixes #119
2020-01-19 16:45:09 -08:00
Klaus Post
3c861c7c0b internal/prnt: trim trailing comment whitespace (#114)
Before printing a comment, remove trailing whitespace. Generation would output `// ` for empty comments. So we trim the whitespace off the end before printing.
2020-01-13 10:09:25 -08:00
Michael McLoughlin
205fc6a3d7 tests: integration tests for third-party packages (#112)
Closes #103
2020-01-06 22:56:38 -05:00
Michael McLoughlin
bb615f61ce all: formatting (#93)
Enforce stricter formatting and import grouping with gofumports.
2019-07-30 18:40:47 -07:00
Michael McLoughlin
d43efabdbe inst,ir: cancelling inputs (#92)
Adds support for a `CancellingInputs` instruction flag, to indicate cases like `XORQ R10, R10` where the instruction actually does not depend on the value of `R10` at all.

Closes #89
2019-07-28 17:58:49 -07:00
Michael McLoughlin
1735441939 all: apply gofumpt (#79)
Apply @mvdan's opinionated gofumpt formatter across the codebase.
2019-04-13 22:53:13 -05:00
Michael McLoughlin
02ecaad4e4 internal/load: use alias slice for determinism
Previously aliases were stored in a map which was causing
non-deterministic code generation (see recent build failures). This diff
changes to a slice to avoid this problem.

Updates #50
2019-01-20 23:06:42 -08:00
Michael McLoughlin
2d7a9ddb6c internal/load: rerun code generation
Updates #50
2019-01-20 22:43:14 -08:00
Michael McLoughlin
220969f8c8 internal/load: support additional MOVQ forms
The Go assembler merges MOVD/MOVQ instruction forms. The logic in the
avo instruction loader was discarding the MOVD forms. This diff should
merge them correctly.

Updates #50
2019-01-20 22:34:52 -08:00
Michael McLoughlin
a23fe8ee57 internal/cmd/asmdecl: standalone asmdecl checker
Updates #24
2019-01-13 11:40:47 -08:00
Michael McLoughlin
f77a2e3b9e printer: use tabwriter to align instructions (#8) 2019-01-10 21:21:41 -08:00
Michael McLoughlin
56c962b9aa lint: switch to linter blacklist 2019-01-09 22:31:14 -08:00
Michael McLoughlin
775226218c internal/gen: docstrings for instruction builders
Piggybacks off the docstrings for constructors in x64 package.

Closes #36
2019-01-06 21:12:15 -08:00
Michael McLoughlin
0f63e0906d ast: move "ast" types from root to ir sub-package
Closes #32
2019-01-06 14:21:10 -08:00
Michael McLoughlin
b6576feee6 internal/test: test Logger helper
Provides *log.Logger and io.Writer that will log to a test object.

See golang/go#22513
Helped with #34
2019-01-06 13:30:34 -08:00
Michael McLoughlin
5c67547d67 doc: add package-level doc comments (#9) 2019-01-05 17:23:56 -08:00
Michael McLoughlin
7eb55c9ac5 build: doc external symbols (#9) 2019-01-05 16:49:59 -08:00
Michael McLoughlin
f4c5957820 internal/opcodes{csv/xml}: doc exported symbols (#9) 2019-01-05 14:41:37 -08:00
Michael McLoughlin
cf1739b920 internal/gen: doc exported symbols (#9) 2019-01-05 14:12:50 -08:00