This is literally what glibc's `swapcontext()`/`ucontext.h` and Boost.Context do under the hood, and it's the same register-save trick that powers Go's goroutine scheduler and Lua coroutines. Getting the callee-saved register set wrong here is a real class of bug: a single missing `pushq %rbp` silently corrupts the caller's stack frame and manifests as a crash arbitrarily far from the actual switch.