LinuxCommandLibrary

avo

Assemble Go source files to object code

TLDR

Initialize a workspace in the current directory

$ avo init
copy

Log into the Avo platform
$ avo login
copy

Switch to an existing Avo branch
$ avo checkout [branch_name]
copy

Pull analytics wrappers for the current path
$ avo pull
copy

Display the status of the Avo implementation
$ avo status
copy

Resolve Git conflicts in Avo files
$ avo conflict
copy

Open the current Avo workspace in the default web browser
$ avo edit
copy

Display help for a subcommand
$ avo [subcommand] --help
copy

SYNOPSIS

avo fmt|build [options] [files...]

PARAMETERS

fmt
    Format .avo files, rewriting syntax and aligning comments

build
    Build .avo files into Go assembly (_gen.go) and assembly (_gen.s)

--rewrite
    Rewrite deprecated instructions during fmt (default true)

--no-rewrite
    Disable rewriting during fmt

--werror
    Treat warnings as errors

--cpu=model
    Target specific CPU model (e.g., skylake, zen2) for build

-v
    Enable verbose output

--help
    Show help

DESCRIPTION

The avo command is a CLI tool for the avo library, which enables writing portable SIMD assembly functions in Go. It provides two main subcommands: fmt to format .avo files (similar to go fmt) and build to generate optimized Go assembly code from .avo sources.

Primarily used by developers optimizing performance-critical code with SIMD instructions on x86-64. Install via go install github.com/mmcloughlin/avo/cmd/avo@latest. It enforces avo syntax, checks constraints, and integrates with Go build process. Not a standard system command; requires Go toolchain and avo import in projects.

Supports rewriting deprecated instructions, error handling, and verbose output. Ensures cross-CPU compatibility by generating variants for different architectures like Skylake or Zen.

CAVEATS

Not installed by default; requires Go 1.17+. Only supports x86-64. Files must follow avo syntax or fail formatting. Generated code must be committed and imported in Go packages.

USAGE EXAMPLE

avo fmt *.avo
avo build -cpu=skylake vec.sums.avo

INTEGRATION

Import github.com/mmcloughlin/avo/build in Go; run avo build before go build.

HISTORY

Developed by Mark McLoughlin starting 2019 as part of Go SIMD efforts. First release v0.1.0 in 2020. Actively maintained on GitHub (mmcloughlin/avo). Evolved to support more CPUs and integrate with Go modules. Widely used in projects like x/sys and performance libs.

SEE ALSO

go(1), as(1), nasm(1), yasm(1)

Copied to clipboard