32 Commits

Author SHA1 Message Date
33208a2356 update 2026-03-06 20:14:02 +00: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
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
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
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
5c67547d67 doc: add package-level doc comments (#9) 2019-01-05 17:23:56 -08:00
Michael McLoughlin
c3a3000908 internal/load: doc exported symbols (#9) 2019-01-05 13:45:09 -08:00
Michael McLoughlin
ca5c7e7454 printer: add generated code warnings 2018-12-18 22:57:26 -08:00
Michael McLoughlin
19d1761694 fix couple of tests 2018-12-11 22:35:01 -08:00
Michael McLoughlin
00c50be004 enable some more linters 2018-12-05 00:49:12 -08:00
Michael McLoughlin
82b31fa0da wip: adding instruction inputs and outputs 2018-12-02 17:57:12 -08:00
Michael McLoughlin
0694ebab9b ensure all stdlib opcodes are present 2018-11-25 16:22:02 -08:00
Michael McLoughlin
0edbdb064f supporting more instructions seen in stdlib 2018-11-24 17:32:18 -08:00
Michael McLoughlin
898d66c585 test asmtest with instruction list 2018-11-24 14:20:04 -08:00
Michael McLoughlin
70dcf2b611 generate the instruction table 2018-11-24 13:47:30 -08:00
Michael McLoughlin
4571841ee5 fix implicit operands 2018-11-23 23:48:47 -08:00
Michael McLoughlin
4e059c258b import isa and implicit operands 2018-11-23 17:14:18 -06:00
Michael McLoughlin
86373c79ee load: handle MOVABS special case 2018-11-23 16:14:05 -06:00
Michael McLoughlin
4404836ff4 loadertest: rel8/32 operands 2018-11-22 16:21:05 -06:00
Michael McLoughlin
27235485a6 m256 arguments, MMX exception 2018-11-22 15:24:28 -06:00
Michael McLoughlin
1f20eae901 loadertest: more operand types 2018-11-22 14:58:31 -06:00
Michael McLoughlin
e97da03f19 loadertest: add memory operands 2018-11-22 14:12:20 -06:00
Michael McLoughlin
c67dcb7fa9 add more immediates to loader test 2018-11-22 11:17:46 -06:00
Michael McLoughlin
c1601f0fe0 remove ifind.sh from git 2018-11-21 23:08:05 -06:00
Michael McLoughlin
b5c22e9464 handle order differences 2018-11-21 23:06:29 -06:00
Michael McLoughlin
c30d7fb743 handle xmm instructions 2018-11-21 22:28:55 -06:00
Michael McLoughlin
59e6af7d36 wip 2018-11-21 13:02:18 -06:00