Skip to content

Commit

Permalink
AArch64 special register designations Change range of o0 to [0, 3] (#342
Browse files Browse the repository at this point in the history
)

The documented syntax doesn't allow designation of all possible special
registers (e.g. "ICC_CTLR_EL3" designated with "3:6:12:12:4").

clang supports the documented syntax but not gcc.  

Both compilers support an alternative syntax with <o0> in [0, 3]:
`s<o0>_<o1>_c<CRm>_c<CRn>_<o2>`.
  • Loading branch information
v01dXYZ authored Oct 28, 2024
1 parent bd07927 commit 1b6ea53
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion main/acle.md
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,7 @@ Armv8.4-A [[ARMARMv84]](#ARMARMv84). Support is added for the Dot Product intrin
* Unified Function Multi Versioning features memtag and memtag2.
* Unified Function Multi Versioning features aes and pmull.
* Unified Function Multi Versioning features sve2-aes and sve2-pmull128.
* Fixed range of operand `o0` (too small) in AArch64 system register designations.

### References

Expand Down Expand Up @@ -5414,7 +5415,7 @@ When specifying a system register to `__arm_rsr`, `__arm_rsr64`, `__arm_rsr128`,

Where:

* `<o0>` is a decimal integer in the range `[0, 1]`
* `<o0>` is a decimal integer in the range `[0, 3]`
* `<op1>`, `<op2>` are decimal integers in the range `[0, 7]`
* `<CRm>`, `<CRn>` are decimal integers in the range `[0, 15]`

Expand Down

0 comments on commit 1b6ea53

Please sign in to comment.