arm64/instgen: add assembler code generator for SVE

This CL implements the code generation logic.
It generates 4 files to the assembler:
- inst_gen.go: this file contains the instruction table for these new SVE
instructions.
- goops_gen.go: this file contains the go op constants for these new SVE
instructions.
- anames_gen.go: this file contains the anames (debugger symbols) for
these new SVE instructions.
- encoding_gen.go: this file contains the encoding functions for parts
(elements) of these new SVE instructions. They are emitted with their
natural language specification and we need to fill up their logic, which
will be in the next CL.

This CL generated files into CL 747180

This CL adds logic to allow only certain AClasses to be generated.

This CL also merged PREGZ and PREGM, and defer its check to encoding
phase. This is required to distinguish <P>/<ZM> cases.

This CL also filters out the generation of aliased encodings, as they
are not fully specified.

This CL also added encoding specifications for another weird encoding
defined in the decoding section, please see the added code in
`extractBinary` for details. An example instruction is "Unsigned divide
(predicated)".

It is useful for partial code gen for assembler without all AClasses
support.

This CL added a generation target that generates e2e test data, it uses
the GNU toolchain as an oracle. This CL assumes the toolchain version
2.45. There currently exists a bleeding edge new toolchain 2.46, some
special cases in `constructInstance` might be removed if we upgrade the
GNU toolchain.

This CL also rearranged the types. XML types are parsed data types are
in different files now.

Change-Id: Ia7e30e1d1da17ad6aff5d963cf90fe76bc1a76fd
Reviewed-on: https://go-review.googlesource.com/c/arch/+/755180
Reviewed-by: David Chase <drchase@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
10 files changed
tree: 2bceff17b748f50ce366088f8311c06d5f7a8a95
  1. arm/
  2. arm64/
  3. loong64/
  4. ppc64/
  5. riscv64/
  6. s390x/
  7. x86/
  8. codereview.cfg
  9. CONTRIBUTING.md
  10. go.mod
  11. go.sum
  12. LICENSE
  13. PATENTS
  14. README.md
README.md

arch

Go Reference

This repository holds machine architecture information used by the Go toolchain. The parts needed in the main Go repository are copied in.

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://go.dev/doc/contribute.

The git repository is https://go.googlesource.com/arch.

The main issue tracker for the arch repository is located at https://go.dev/issues. Prefix your issue with “x/arch:” in the subject line, so it is easy to find.