The shortest contest switch sequence I could come up on x86-64 is three instructions:
xchg %rsp, %rdx
leaq 1f(%rip), %rax
jmp *%rsi
1:
It it expect the target stack ptr/ip pair to be in rdx/rsi and saves the current stack ptr and ip in rdx/rax. It does not save any register and uses gcc asm clobbers to instruct the compiler to save any other register.
Code at [1]. The comments about hacks and ub is because I'm trying to transparently propagate exceptions across coroutines, otherwise the stack switching us fairly robust (although GCC specific).
[1] https://github.com/gpderetta/delimited/blob/master/delimited...