I noticed, on close reading of the Arm ARM, that llvm is missing
assembly support for a recently-added PSTATE: ALLINT from FEAT_NMI.
This patch:
- Adds the missing PSTATE
- Aligns the decoder more closely with the Arm ARM Decoder pseudocode, including allowing 4-bit immediates for all PSTATES except those explicitly noted (ALLINT, and the SVCRs that we handle separately).
- Tries to centralise the information about the immediates accepted by a given named PSTATE, rather than spreading it around the LLVM codebase.
- Updates tests for existing pstates to reflect these changes.
- Adds another missing system register, from GIC v3.3. It is enabled with FEAT_NMI because it's from FEAT_GICv3_NMI which implies FEAT_NMI.
Parts of this patch are by David Candler and Tomas Matheson.
This is using the wrong accessor. I will update the patch with the right one after the first set of feedback comes in.