Unwinders may only preserve the base ABI over the exception edge, so thelower 64bits of Neon and SVE registers,
caller needs to preserve additional registers for when the call throwsas only the registers in the base ABI are guaranteed to be preserved
over the exception edge. The caller will need to preserve additional
registers for when the call throws an exception and the unwinder has has
tried to recover state.
For e.g.
svint32_t bar(svint32_t);
svint32_t foo(svint32_t x, bool *err) {
try { bar(x); } catch (...) { *err = true; }
return x;
}
z0`z0` needs to be spilled before the call to `bar(x)` and reloaded before
returning from foo, as the exception handler may have clobbered z0.
That registers are clobbered by the unwinder shouldn't necessarily be
tied to calls, but rather to the context that invokes the call, but
without -fnon-call-exceptions being implemented, that distinction is
not made.