【问题标题】:Can I set the stack pointer in LLVM?我可以在 LLVM 中设置堆栈指针吗?
【发布时间】:2017-01-13 06:54:53
【问题描述】:

我正在研究一种类似 c++ 的小型语言,我将编译为 LLVM。我想要实现的一件事是协作式多任务处理;将会有一个“yield”操作符,它有望将堆栈指针和程序计数器切换到我程序中的下一个“线程”。

是否可以在 llvm 中执行此操作?我可以设置堆栈指针寄存器吗?如果没有,我还能做其他类似的事情吗?

编辑:LLVM 协程 (http://llvm.org/docs/Coroutines.html) 听起来很有希望,尽管 https://internals.rust-lang.org/t/llvm-coroutines-to-bring-awarness/3708/12 提出了一些关于堆栈或无堆栈协程的问题。我想知道,它们可以用来实现一个通用的类似 yield 的操作符吗?

编辑 2:在 c++ 中,boost 有一个称为“上下文”的东西,它可以实现堆栈协同程序。仍然试图弄清楚他们是如何做到的。有人知道吗?

【问题讨论】:

    标签: llvm coroutine llvm-clang boost-context


    【解决方案1】:

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

    【讨论】:

    • 哦,有趣!不过,这看起来像是苹果独有的东西。另外,这会像交换堆栈指针一样快,还是会像通过内核一样慢?
    • 我想知道如何在 LLVM IR 中获取和设置堆栈指针,这并不能回答原始问题。
    • 这个有更新吗,我也在找这个。
    • 我觉得这很有帮助 [stackoverflow.com/questions/29365198/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2016-01-14
    • 2013-01-20
    相关资源
    最近更新 更多