Release notes for the A64 Instruction Set Architecture for Armv8.7-A

30 June 2021

Product Status

The information in this release is at Beta quality. Beta quality means that all major features of the specification are included, some details might be missing.

Change history

The following general changes are made:

  • Changed GetNumXXX() to NumXXXImplemented().
  • Translation regime to be considered in place of PSTATE.EL to populate TFSRE0_EL1 and TFSR_ELx in a Tag Check Fault.

The following changes are made to the instruction descriptions:

  • Corrected HVC instruction descriptions to account for Secure EL2 and the HCR_EL2.HCD and HCR.HCD bits.
  • The SVE LD1R* load and broadcast instructions now generate Tag Unchecked access for a load or store that uses either of the following addressing modes:
    • A base register only, with the SP as the base register.
    • A base register plus immediate offset addressing form, with the SP as the base register.
  • Corrected SABDL, SABDL2 instruction description to describe 'long' behavior instead of 'narrow' behavior.
  • USUBW, USUBW2 instruction description corrected to refer to 'unsigned integer values'.
  • Removed unused variable 'sboxout' from SM4E and SM4EKEY.
  • Removed the loop from the operational Pseudocode for FRECPX half-precision, single-precision, and double-precision.

The following changes are made to the Shared Pseudocode:

  • Pseudocode functions PhysMemRead() and PhysMemWrite() replace the _Mem[] accessor read and write forms and return a status structure instead of triggering external aborts, leaving the responsibility of handling aborts on the call sites.
  • Removed unused function ReservedValue().
  • The Pseudocode function AArch32.CheckWatchpoint() is updated to check for excluded data types and scenarios.
  • EL2Enabled() qualifier now added with access to HCR_EL2, Exception logic improved for AArch64 routines.
  • In the Pseudocode function AArch64.BreakpointValueMatch(), the BXVR_match check is updated.
  • Pseudocode functions for AArch64 DC and IC System instruction are added and called from the System instruction accessibility pseudocode.
  • In the Pseudocode function AArch64.TakeException() and the AArch32.EnterXXXMode(), a call to CheckExceptionCatch(FALSE) is added after the calls to 'BranchTo()'.
  • The Pseudocode function AArch64.GenerateDebugExceptionsFrom() is updated to check SDER32_EL3.SUIDEN when Secure EL1 is using AArch32 and debug exceptions taken to SecureEL2.
  • Renamed the Pseudocode functions HaveAnyAArch32() to HaveAArch32() and HaveAnyAArch64() to HaveAArch64(), and updated the function comments to clarify their meaning. Removed the function HighestELUsingAArch32() and changed usage to !HaveAArch64().
  • IsVirtualSErrorPending() considered along with HCR_EL2.VSE for a pending virtual interrupt.
  • The Pseucocode function AArch32.ReportDataAbort() now adequately reflects when Long-descriptor and Short-descriptor format is used when reporting External aborts to Monitor mode.
  • New Pseudocode functions GenericCounterTick() and PhysicalCountInt() have been defined.
  • The Pseudocode function AArch64.S2ApplyFWBMemAttrs() is updated to ensure the correct final shareability in the case when FWB is active and s2MemAttr<2:0> is '101' and stage 1 assigns device memory.
  • The Pseudocode function AArch64.S2ApplyFWBMemAttrs() is updated to ensure the correct final shareability in the case when FWB is active and stage 2 MemAttr<2:0> is '101' and stage 1 assigns Device memory or '111' and stage 1 assigns Device or Normal iNCoNC memory.
  • In Pseudocode function AArch64.CountEvents(), the sense of the SPME bit when used in conjunction with MPMX, is flipped.
  • The code extracting fields for TLBI operations for AArch64.TLBI_RVA() is updated to avoid extracting non-existent 'NS' field in the argument register Xt.
  • The Pseudocode function AArch64.S2Translate() is simplified to remove redundant Alignment Fault check due to memory type when stage 2 is disabled.
  • In the code extracting fields for TLBI operations, specifically, TLBI VA and TLBI VAA, is updated to acquire the full set of bits representing the VA from the argument register Xt.
  • In the code extracting fields for TLBI operations, specifically those that operate on a range of input addresses, is updated to extract the correct range of bits in Xt representing TTL.
  • The Pseudocode function FPRoundBase() now checks if floating-point exceptions should be generated before setting FPSR.UFC to '1'.
  • The Pseudocode function GenMPAMcurEL() now returns the default PARTID and PMG when MPAM is not enabled.


Known issues

  • Clarification for MSR and MRS action with unnamed registers.
  • The Pseudocode functions for TLBRecordType() and TLBContextType() will be updated.
  • The description for FRECPX instruction will be clarified by removing incorrect references to vectors.
  • In the browsable XML, hyperlinking with some Pseudocode functions do not link correctly.
  • Some architectural features have limited or no descriptions in Pseudocode and are not fully covered by the functional testing. Affected features are listed below:
    • Address translation, Instruction Cache, Data Cache System instructions.
    • Ordering of memory accesses.
    • Self-hosted and halting debug.
    • Self-hosted trace and external trace.
    • RAS architecture.
    • Statistical Profiling Extension.
    • Performance Monitors Extension.
    • Activity Monitors Extension.
    • Generic Timers.
    • Generic Interrupt Controller.
    • Multi-processing.


Potential upcoming changes

  • Pseudocode functions for AArch64 AT System instructions will be added and called from the System instruction accessibility pseudocode.