amd64 ready
Yes, amd64 too — for one uniform builder across every target. SSE float moves, sign/zero-extending sub-word loads. NEON/SSE SIMD via Raw.
Ergonomic generation of Go-compatible Plan 9 assembly
for all six 64-bit Go targets — amd64, arm64, riscv64, loong64, ppc64le and s390x — one uniform builder, encoding delegated to cmd/asm.
avo encodes amd64 instruction bytes itself — which is exactly what makes
extending it to new ISAs expensive. go-asmgen instead emits the same Plan 9 assembly text a human
would hand-write and lets the Go toolchain assembler cmd/asm encode it. Each new
architecture needs only an ABI layout model and a thin instruction-emit surface.
amd64 readyYes, amd64 too — for one uniform builder across every target. SSE float moves, sign/zero-extending sub-word loads. NEON/SSE SIMD via Raw.
arm64 readyAll ABI0 scalars + struct/slice/string aggregates, and NEON packed ops. The reference target; runtime-proven natively.
riscv64 readySame ABI0 layout as arm64, a different move table (MOV/MOVF/MOVD). Runtime-proven under qemu-user.
loong64 readyLoongArch 64-bit — same shared ABI0 layout, a third move table (MOVV/MOVF/MOVD). Runtime-proven under qemu-user.
ppc64le readyPOWER little-endian — same shared ABI0 layout, move table MOVD/FMOVS/FMOVD. VSX packed ops via Raw. Runtime-proven under qemu-user.
s390x readyIBM Z, big-endian — same shared ABI0 layout, move table MOVD/FMOVS/FMOVD. Vector-facility ops via Raw; the big-endian path is exercised. Runtime-proven under qemu-user.
All six targets share one ABI0 layout model — scalars, struct/slice/string aggregates, fixed-size arrays, and SIMD (SSE, NEON, RVV, LSX, VSX, s390x vector) — differing only in their move tables. Every emitted name+offset(FP) is cross-checked against the Go declaration by go vet and run for real: natively on amd64 and arm64, under qemu-user for riscv64, loong64, ppc64le and s390x (the s390x run exercising the big-endian path).