Dependabot ignores updates to Go modules that do not have semantic version
tags. See: https://github.com/dependabot/dependabot-core/issues/3017.
Therefore, this change replaces dependabot with a custom workflow with
upgrades Go dependencies using `go get -u ./...` and creates a PR. This PR
will be auto-merged using the existing logic for cadobot-generated PRs.
Github branch protection rules allow required checks to be specified, but they
must be mentioned by name. This is a little annoying for jobs with names that
change, such as test jobs that depend on the go version.
This PR fixes this by creating a stub job in the CI workflow that simply
depends on the test and lint workflows. This job can then be listed as a
required check, and has the effect of aggregating the dependent checks into
one.
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
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>
Adds a test for function signature memory layout by generating functions with
random signatures. This confirms that the size and offsets computed by
`gotypes` agree with `asmdecl`.
Updates #191#195
Exposes a few functions on Context that are not available globally. This
oversight suggests that #33 or #133 would be reasonable. `Signature()` is
currently excluded because it causes a conflict for users who have
dot-imported both `build` and `gotypes`. For example:
18af27c3ce/build/base64/decode_asm.go (L13-L14)a88a5ae268/asm/asm.go (L6-L7)
This fixes a bug in argument size calculation in the case where the function
has no return values. Previously it was padding the argument struct to max
alignment, but this only happens if there are return values following.
Updates #191
```
$ ./tmp/testgo161718.sh ./buildtags/ ./printer/
+ go1.16.8 test ./buildtags/ ./printer/
ok github.com/mmcloughlin/avo/buildtags 0.001s
ok github.com/mmcloughlin/avo/printer 0.002s
+ go1.17.2 test ./buildtags/ ./printer/
ok github.com/mmcloughlin/avo/buildtags 0.001s
ok github.com/mmcloughlin/avo/printer 0.002s
+ gotip test ./buildtags/ ./printer/
ok github.com/mmcloughlin/avo/buildtags 0.001s
ok github.com/mmcloughlin/avo/printer 0.002s
```
Updates #183