Re:Show HN: Minimal Fibers
by gpderetta on Saturday May 19, 2018 @10:15AM
(#17107974)
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).
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...