Skip to main content

vector

Function vector 

Source
pub const fn vector(status: u64, kind: VectorKind) -> u64
Expand 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=0 and XTLB Miss, EXL=0. There is no EXL=1 refill 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.