Commit Graph

34 Commits

Author SHA1 Message Date
Michael McLoughlin
11e0a2138b all: enable use-any revive rule (#417)
Enable the `use-any` `revive` rule which requires replacing the empty
interface `interface{}` with `any`.
2024-01-07 13:16:59 -08: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
c8004ba627 ir,build: pragma support (#97)
Adds support for arbitrary compiler directives.

Fixes #15
2019-09-16 11:01:48 -07: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
8f97788836 build: use packages.NeedImports (#91)
Use packages.NeedImports when loading packages. This fixes avo to account for a bugfix in golang/tools@aac0b97.

Closes #90
2019-07-20 20:34:38 -07:00
Michael McLoughlin
3355ecfbfd lint: stop using deprecated go/packages api (#87)
The packages.Load* constants have been deprecated in favor of packages.Need*.
2019-06-13 11:20:49 -07:00
Michael McLoughlin
3cfe40e76c build: load package in LoadAllSyntax mode (#63)
Fixes #62
2019-02-20 21:17:28 +00:00
Michael McLoughlin
eb225e9d2c gotypes,build: add Implement (#58)
By using Implement you can provide a definition of a function, taking the signature from a stub in the package. One major benefit of this approach is it makes it easy to handle external types in the function signature.

Updates #55
2019-01-22 22:35:01 -08:00
Michael McLoughlin
94033059eb build: Commentf function
Convenience for adding a comment generated with fmt.Sprintf.

Updates #41
2019-01-11 10:51:36 -08:00
Michael McLoughlin
284ee13ada build: support comments in functions (#41) 2019-01-11 10:33:41 -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
07901bb91b build: return ErrorList type
Adds a very similar interface to go/scanner package for returning a list
of errors.

Updates #34
2019-01-06 13:32:09 -08:00
Michael McLoughlin
602bb5197c build: unify Label function signatures
The Context.Label method and LABEL global function did not agree. Also
breaks the convention I'd like to set that capitalized functions must
agree with existing Go assembly syntax.

To help avoid a conflict with `avo.Label`, attributes were moved to
their own package.

Fixes #35
2019-01-05 18:18:49 -08:00
Michael McLoughlin
7eb55c9ac5 build: doc external symbols (#9) 2019-01-05 16:49:59 -08:00
Michael McLoughlin
c95744c872 build: some more doc comments (#9) 2019-01-05 00:11:13 -08:00
Michael McLoughlin
05cfa809f2 build: include position information in errors
Updates #5
2019-01-04 15:01:29 -08:00
Michael McLoughlin
75224ed031 build: remove Build stutter from BuildConstraint*
Address golint failure.
2019-01-02 21:55:43 -08:00
Michael McLoughlin
6202c2c9aa ast,build: add build constraints to File
Updates #3
2019-01-02 21:35:17 -08:00
Michael McLoughlin
816fa4c0e6 ast,build: allow setting data attributes
Previously GLOBL/DATA attributes are set to RODATA. This diff removes
that default and allows them to be set through the DataAttributes
context method.

Updates #2
2018-12-31 19:04:14 -08:00
Michael McLoughlin
e364d6398e ast,build: add Attributes fields to Function and Global
Updates #2
2018-12-30 23:35:54 -08:00
Michael McLoughlin
9f5277bf8e support docstrings 2018-12-27 23:01:32 -08:00
Michael McLoughlin
9243d299e6 first pass at DATA sections 2018-12-27 11:57:46 -08:00
Michael McLoughlin
d29c6340d7 ast: change file to have a list of sections 2018-12-26 18:58:12 -08:00
Michael McLoughlin
f464082484 examples/sha1: single block 2018-12-21 00:30:59 -08:00
Michael McLoughlin
7f3efa1eb5 fix nil pointer dereference 2018-12-17 21:20:21 -08:00
Michael McLoughlin
34a3ddefcc start example/test for components access 2018-12-17 20:52:26 -08:00
Michael McLoughlin
c882e52510 printing: commit some refactors (probably broken) 2018-12-11 00:18:22 -08:00
Michael McLoughlin
20525e1437 get the basic add example working 2018-12-08 22:02:02 -08:00
Michael McLoughlin
5431f2edef support signatures and param load/stores 2018-12-08 21:16:03 -08:00
Michael McLoughlin
faafa00e40 pass: test for liveness 2018-12-03 20:40:43 -08:00
Michael McLoughlin
b52c67f3fb pass: naive implementation of liveness 2018-12-02 23:59:29 -08:00
Michael McLoughlin
0ba8a60ea5 add label type 2018-11-30 21:37:17 -08:00
Michael McLoughlin
241b5ea673 some command line flags for builders 2018-11-30 20:58:51 -08:00
Michael McLoughlin
9b9f5b7e0c first pass at a "builder" interface 2018-11-30 20:43:31 -08:00