Branch Record Buffer Information Injection Register
The information of a Branch record for injection.
This register is present only when FEAT_BRBE is implemented. Otherwise, direct accesses to BRBINFINJ_EL1 are UNDEFINED.
BRBINFINJ_EL1 is a 64-bit register.
| 63 | 62 | 61 | 60 | 59 | 58 | 57 | 56 | 55 | 54 | 53 | 52 | 51 | 50 | 49 | 48 | 47 | 46 | 45 | 44 | 43 | 42 | 41 | 40 | 39 | 38 | 37 | 36 | 35 | 34 | 33 | 32 |
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RES0 | CCU | CC | |||||||||||||||||||||||||||||
| RES0 | TYPE | EL | MPRED | RES0 | VALID | ||||||||||||||||||||||||||
Reserved, RES0.
The number of PE clock cycles since the last Branch record entry is UNKNOWN.
| CCU | Meaning |
|---|---|
| 0b0 |
Indicates that the number of PE clock cycles since the last Branch record is indicated by BRBINFINJ_EL1.CC. |
| 0b1 |
Indicates that the number of PE clock cycles since the last Branch record is UNKNOWN. |
The value in this field is only valid when BRBINFINJ_EL1.VALID != 0b00.
The reset behavior of this field is:
Accessing this field has the following behavior:
The number of PE clock cycles since the last Branch record entry.
The format of this field uses a mantissa and exponent to express the cycle count value, as follows:
The cycle count is expressed using the following function:
if IsZero(E), then UInt(M) else UInt('1':M:Zeros(UInt(E)-1))
If required, the cycle count is rounded to a multiple of 2(E-1) towards zero before being encoded.
A value of all ones in both the mantissa and exponent indicates the cycle count value exceeded the size of the cycle counter.
The value in this field is only valid when BRBINFINJ_EL1.VALID != 0b00.
The reset behavior of this field is:
Accessing this field has the following behavior:
Reserved, RES0.
Branch type.
| TYPE | Meaning |
|---|---|
| 0b000000 |
Unconditional direct branch, excluding Branch with link. |
| 0b000001 |
Indirect branch, excluding Branch with link, Return from subroutine, and Exception return. |
| 0b000010 |
Direct Branch with link. |
| 0b000011 |
Indirect Branch with link. |
| 0b000101 |
Return from subroutine. |
| 0b000111 |
Exception return. |
| 0b001000 |
Conditional direct branch. |
| 0b100001 |
Debug halt. |
| 0b100010 |
Call. |
| 0b100011 |
Trap. |
| 0b100100 |
SError. |
| 0b100110 |
Instruction debug. |
| 0b100111 |
Data debug. |
| 0b101010 |
Alignment. |
| 0b101011 |
Inst Fault. |
| 0b101100 |
Data Fault. |
| 0b101110 |
IRQ. |
| 0b101111 |
FIQ. |
| 0b110000 |
IMPLEMENTATION DEFINED exception to EL3. |
| 0b111001 |
Debug State Exit. |
All other values are reserved.
The value in this field is only valid when BRBINFINJ_EL1.VALID != 0b00.
The reset behavior of this field is:
Accessing this field has the following behavior:
The Exception level at the target address.
| EL | Meaning | Applies when |
|---|---|---|
| 0b00 |
EL0. | |
| 0b01 |
EL1. | |
| 0b10 |
EL2. | |
| 0b11 |
EL3. | When FEAT_BRBEv1p1 is implemented |
The value in this field is only valid when BRBINFINJ_EL1.VALID == 0b11 or BRBINFINJ_EL1.VALID == 0b01.
The reset behavior of this field is:
Accessing this field has the following behavior:
Branch mispredict.
| MPRED | Meaning |
|---|---|
| 0b0 |
Branch was correctly predicted or the result of the prediction was not captured. |
| 0b1 |
Branch was incorrectly predicted. |
The value in this field is only valid when BRBINFINJ_EL1.VALID == 0b11 or BRBINFINJ_EL1.VALID == 0b10.
The reset behavior of this field is:
Accessing this field has the following behavior:
Reserved, RES0.
The Branch record is valid.
| VALID | Meaning |
|---|---|
| 0b00 | This Branch record is not valid. The values of following fields are not valid:
|
| 0b01 | This Branch record is valid. The values of following fields are not valid:
|
| 0b10 | This Branch record is valid. The values of following fields are not valid:
|
| 0b11 |
This Branch record is valid. |
The reset behavior of this field is:
Accesses to this register use the following encodings in the System register encoding space:
MRS <Xt>, BRBINFINJ_EL1
(op0 = 0b10, op1 = 0b001, CRn = 0b1001, CRm = 0b0001, op2 = 0b000)
if !IsFeatureImplemented(FEAT_BRBE) then Undefined(); elsif HaveEL(EL3) && !(EffectivelyAtEL0InHost() || EffectivelyAtEL0NotInHost() || PSTATE.EL == EL3) && EL3SDDUndefPriority() && MDCR_EL3().SBRBE != '11' && SCR_EL3().NS == '0' then Undefined(); elsif HaveEL(EL3) && !(EffectivelyAtEL0InHost() || EffectivelyAtEL0NotInHost() || PSTATE.EL == EL3) && EL3SDDUndefPriority() && MDCR_EL3().SBRBE IN {'x0'} && SCR_EL3().NS == '1' then Undefined(); elsif PSTATE.EL == EL0 then Undefined(); elsif PSTATE.EL == EL1 then if EL2Enabled() && IsFeatureImplemented(FEAT_FGT) && (!HaveEL(EL3) || SCR_EL3().FGTEn == '1') && HDFGRTR_EL2().nBRBDATA == '0' then AArch64_SystemAccessTrap(EL2, 0x18); elsif HaveEL(EL3) && MDCR_EL3().SBRBE != '11' && SCR_EL3().NS == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; elsif HaveEL(EL3) && MDCR_EL3().SBRBE IN {'x0'} && SCR_EL3().NS == '1' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; else X{64}(t) = BRBINFINJ_EL1(); end; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && MDCR_EL3().SBRBE != '11' && SCR_EL3().NS == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; elsif HaveEL(EL3) && MDCR_EL3().SBRBE IN {'x0'} && SCR_EL3().NS == '1' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; else X{64}(t) = BRBINFINJ_EL1(); end; elsif PSTATE.EL == EL3 then X{64}(t) = BRBINFINJ_EL1(); end;
MSR BRBINFINJ_EL1, <Xt>
(op0 = 0b10, op1 = 0b001, CRn = 0b1001, CRm = 0b0001, op2 = 0b000)
if !IsFeatureImplemented(FEAT_BRBE) then Undefined(); elsif HaveEL(EL3) && !(EffectivelyAtEL0InHost() || EffectivelyAtEL0NotInHost() || PSTATE.EL == EL3) && EL3SDDUndefPriority() && MDCR_EL3().SBRBE != '11' && SCR_EL3().NS == '0' then Undefined(); elsif HaveEL(EL3) && !(EffectivelyAtEL0InHost() || EffectivelyAtEL0NotInHost() || PSTATE.EL == EL3) && EL3SDDUndefPriority() && MDCR_EL3().SBRBE IN {'x0'} && SCR_EL3().NS == '1' then Undefined(); elsif PSTATE.EL == EL0 then Undefined(); elsif PSTATE.EL == EL1 then if EL2Enabled() && IsFeatureImplemented(FEAT_FGT) && (!HaveEL(EL3) || SCR_EL3().FGTEn == '1') && HDFGWTR_EL2().nBRBDATA == '0' then AArch64_SystemAccessTrap(EL2, 0x18); elsif HaveEL(EL3) && MDCR_EL3().SBRBE != '11' && SCR_EL3().NS == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; elsif HaveEL(EL3) && MDCR_EL3().SBRBE IN {'x0'} && SCR_EL3().NS == '1' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; else BRBINFINJ_EL1() = X{64}(t); end; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && MDCR_EL3().SBRBE != '11' && SCR_EL3().NS == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; elsif HaveEL(EL3) && MDCR_EL3().SBRBE IN {'x0'} && SCR_EL3().NS == '1' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; else BRBINFINJ_EL1() = X{64}(t); end; elsif PSTATE.EL == EL3 then BRBINFINJ_EL1() = X{64}(t); end;
Version 2026.06 — Copyright © 2010-2026 Arm Limited or its affiliates.
This site is provided as a community resource and is NOT affiliated with nor endorsed by Arm Limited.