我可以在 LLVM 中设置堆栈指针吗?

Ver*_*gon 5 llvm coroutine llvm-clang boost-context

我正在研究一种类似 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 有一个叫做“上下文”的东西,它可以实现堆栈协程。仍然试图弄清楚他们是如何做到的。有人知道吗?

gna*_*729 -2

假设您有gcd可用的库:您可以使用信号量 ( dispatch_semaphore_t) 轻松实现协作多任务处理。设置信号量计数,以便恰好有一个线程可以同时运行。该yield()函数发出信号并立即锁定信号量 -signal()唤醒另一个线程,并且锁停止调用的线程yield

  • 我想知道如何在 LLVM IR 中获取和设置堆栈指针,这并不能回答原来的问题。 (7认同)
  • 哦有趣!不过,这看起来像是苹果独有的东西。另外,这会像交换堆栈指针一样快,还是会像遍历内核一样慢? (3认同)