pub const fn vector(status: u64, kind: VectorKind) -> u64Expand description
The exception vector address (UM Tables 6-3/6-4, p. 181).
§The EXL rule, which is where implementations diverge
A TLB or XTLB refill uses its special vector only when EXL is 0. With
EXL already set it takes the general vector at 0x180. The manual says so
three times:
- Tables 6-3/6-4 label the refill rows
TLB Miss, EXL=0andXTLB Miss, EXL=0. There is noEXL=1refill row to select. - §6.4.8 (p. 187): “All TLB Miss exceptions use these two special vectors when the EXL bit is set to 0 … and they use the common exception vector when the EXL bit is set to 1.”
- §6.4.8 (p. 188): “This second exception goes to the common exception vector because the EXL bit of the Status register is set.”
UM Fig. 6-15 (p. 203) disagrees and is wrong. Its EXL = 0? → No arm
leads to a box reading “General Purpose Exception, Vec. Off. = 0x080”,
contradicting both tables, the prose twice, and Fig. 6-14 — which is the
general-purpose handler and unconditionally uses + 0x180. CEN64 routes to
0x180 with a source comment that 0x080 “doesn’t make any sense”; it is
right, and this is accuracy-ledger S-3.
Note also that UM p. 181’s prose gives the BEV = 1 general vector as
0x8000_0180, which is a typo: per Table 6-4 the BEV = 1 base is
0xBFC0_0200, making the vector 0xBFC0_0380. The 64-bit value in the same
sentence is correct and proves it.