Generate x86 Assembly with Go
Extends instruction set support to include the extensions:
Third-party test suite now includes the standard library package crypto/internal/bigmod
.
Fixes issue reported in #387 where integer float data was printed incorrectly and therefore parsed as the wrong type by the Go assembler.
Includes miscellaneous tweaks to support Go 1.20 and 1.21 releases. The go.mod
file bumps the minimum Go version to 1.18.
Full Changelog: https://github.com/mmcloughlin/avo/compare/v0.5.0...v0.6.0
Fixes issue reported in #336 where automatic load/store generation does not work for boolean function arguments or return values.
Adds an Adopters README section and full adopters list to showcase exciting uses of avo
across the Go ecosystem. The list is auto-generated from the third-party test suite. If you'd like to see your project listed, please reach out.
The third-party test suite now includes:
crypto/ed25519
github.com/klauspost/compress/zstd
github.com/segmentio/asm
github.com/cloudflare/circl
lukechampine.com/blake3
github.com/oasisprotocol/deoxysii
github.com/mmcloughlin/md4
Includes small tweaks to support Go 1.18 and 1.19 releases. The go.mod
file bumps the minimum Go version to 1.16.
Implements bot automation for upgrading direct module dependencies and keeping third-party package metadata up-to-date.
Full Changelog: https://github.com/mmcloughlin/avo/compare/v0.4.0...v0.5.0
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 instruciton 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:
x86
package moved to an optab-based approach. This compiles substantially faster than the verbose code generation we had before.An example of AVX-512 accelerated 16-lane MD5 is provided to demonstrate and test the new functionality.
Third-party test suite now also includes:
golang.org/x/crypto/curve25519
filippo.io/edwards25519
github.com/oasisprotocol/curve25519-voi
github.com/ericlagergren/lwcrypto
Full Changelog: https://github.com/mmcloughlin/avo/compare/v0.3.1...v0.4.0
avo
would incorrectly add padding to the end of function arguments in the case where the function has no return values, triggering an asmdecl
vet error.Full Changelog: https://github.com/mmcloughlin/avo/compare/v0.3.0...v0.3.1
go:build
constraints: avo
will output +build
, go:build
or both depending on the Go version.Full Changelog: https://github.com/mmcloughlin/avo/compare/v0.2.0...v0.3.0