I just published the first version of my illustrated SVE (ARMv9 SIMD) instruction list, with a truly absurd number of instruction diagrams and descriptions.
Check it out at https://dougallj.github.io/asil/
I just published the first version of my illustrated SVE (ARMv9 SIMD) instruction list, with a truly absurd number of instruction diagrams and descriptions.
Check it out at https://dougallj.github.io/asil/
I updated this with an Apple M4 preset, which is the default on the SME page, and sticky table headers (thanks to @amonakov for the suggestion).
It's exciting to get to try out some of these instructions on the new iPad Pro!
@dougall It's a little funny that within hours of publishing this, Arm releases new SIMD instructions for SVE and SME xD
Specifically the FP8 ones
@dougall to be clear: SVE is arm v8.2 extension.
Just was not popular.
@moonling Fun! Yeah, SVE is currently kind of at the opposite end of the space from embedded SIMD extensions like Arm Helium – currently found in supercomputers and some high end phones and tablets (but I guess the ARM Cortex-A510 and similar may find their way to embedded spaces at some point).
I just wrote my own Python scripts to generate the SVG code for each, copying previous scripts and adding what I needed for each diagram.
@crystalmoon Oh no... For SVE specifically?
It's definitely possible, but it's probably not easy. If you click through to "exploration tools" (top-right) it shows the encoding.
The tables are partially generated from Arm's XML, and the XML can be used to generate the magic numbers and masks, for example:
I'm not too keen on trying to tie together these two piles of hacks, but it might be possible to make an index... Couldn't you just feed them to a disassembler?
@dougall would be nice to make table headers sticky so they don't scroll out of view. It should be a matter of wrapping them in <thead> and adding
thead {
top: 0;
position: sticky;
}
to CSS. Do you want a pull request with that?
@amonakov Good suggestion, thanks! Probably best to avoid PRs, since the HTML is generated by scripts, but I'll look into it.
(Looks like I need to add the THEADs too)
@adreid Thanks! I'm a fan of your work on the specs :)
For each table row I manually list the instructions (e.g. "zip" -> zip1_z_zz, zipq1_z_zz, zipq2_z_zz). This is used to automatically populate the columns for the supported sizes from the spec. I automatically cross-match this with the SIMD intrinsics data (https://developer.arm.com/architectures/instruction-sets/intrinsics/), and I scan/pattern-match the starts of the ASL to automatically find the requirements (e.g. "HaveSVE() && HaveSVE2BitPerm() && NonStreamingSVEEnabled()").
@adreid One maybe-practical change I'd consider would be pulling the instrinsics data into the machine-readable-specs.
If I were to use symbolic execution, I think one of the trickier parts would be broadcasts, like in SUDOT above. Specifying these in terms of a broadcast function, followed by an element-wise operation might be preferable? But I'd want to try the symbolic execution approach before recommending something like that.
@stsquad Thanks!
Yeah, that's always been the plan, unfortunately I lost a bit of momentum as I couldn't find much by way of interesting uses for SME. It's not bad, it's just mostly for matrix multiplication.
I did start trying to figure out how to do the diagrams nicely. I have a few ideas, but trying to depict the ZA register in an intuitive-but-not-overwhelming way definitely adds to the challenge.