我正在研究一种类似 c++ 的小型语言,我将编译到 LLVM。我想要实现的一件事是协作式多任务处理;将会有一个“yield”操作符,它有望将堆栈指针和程序计数器切换到我程序中的下一个“线程”。
可以在llvm中做到这一点吗?我可以设置堆栈指针寄存器吗?如果没有,我还能做其他类似的事情吗?
编辑:LLVM 协程(http://llvm.org/docs/Coroutines.html)听起来很有希望,尽管https://internals.rust-lang.org/t/llvm-coroutines-to-bring-awarness/3708/12提出了一些关于堆栈或无堆栈协程的问题。我想知道,它们可以用来实现一个通用的类似产量的运算符吗?
编辑 2:在 c++ 中,boost 有一个叫做“上下文”的东西,它可以实现堆栈协程。仍然试图弄清楚他们是如何做到的。有人知道吗?