arminstruction-set

Why an illegal instruction exception is reported when I execute BC.cond instructions such as bc.eq or bc.ne on Armv9.0-a cores?


As described in the Arm® Architecture Reference Manual for A-profile architectures, FEAT_HBC provides the BC.cond instruction to give a conditional branch with a hint to branch prediction logic that this branch will behave consistently and is highly unlikely to change direction. FEAT_HBC is mandatory starting with Armv8.8. FEAT_HBC provides the BC.cond instruction FEAT_HBC is mandatory starting with Armv8.8

However, an illegal instruction exception is reported when I execute BC.cond instructions such as bc.eq or bc.ne on Pixel8, which is based on Armv9.0-a cores (Cortex-A715 and Cortex-A510). An illegal instruction exception

I hope this question can be solved.


Solution

  • Despite 9.0 being a higher number than 8.8, Armv9.0 does not include Armv8.8 as a subset. It is only guaranteed to include Armv8.5. This is documented in the Architecture Reference Manual at the start of the section which defines "The Armv9.0 architecture extension".

    This also makes sense chronologically - from what I can tell, Armv9.0 was released in March 2021, and Armv8.8 was six months later in September 2021.

    So, it appears your chip simply does not support these instructions, and that is not a violation of Armv9.0 compliance.