Veneers
In this section:
Veneers are small sequences of code inserted by the linker to bridge the gap when a call instruction does not reach its destination or cannot switch to the correct mode.
Code for veneers can be inserted between any caller and called function. As a result, some registers must be treated as scratch registers at function calls, including functions written in assembler language. This applies to jumps as well. In 32-bit mode, R12 must be treated as a scratch register. In 64-bit mode, both X16 and X17 must be treated as scratch registers.