我一直在搜索整个手册,但找不到任何提及指令指针的内容。我需要这个用于我正在编写的 SPU 程序。也许它有不同的名字?谁能告诉我如何访问要执行的指令的地址?在此先感谢您的帮助。更新:显然它被称为程序计数器,但我如何从我的 SPU 程序中访问它?
2 回答
如果只想获取指令指针,可以在汇编中进行:
brsl r<n>, .+4
这会将下一条指令的地址加载到寄存器r<n>
中。
似乎您可以通过执行spe_context_run
操作来获取下一条指令:
int spe_context_run(spe_context_ptr_t spe, unsigned int *entry, unsigned int runflags, void *argp, void *envp, spe_stop_info_t *stopinfo)
entry
输入:入口点,即 SPU 指令指针的初始值,SPE 程序应在该处开始执行。如果entry的值为SPE_DEFAULT_ENTRY,则从加载的SPE镜像中获取SPU主程序的入口点。这通常是初始化函数 crt0 的本地存储地址(参见 Cell Broadband Engine Programming Handbook, Objects, Executables, and SPE Loading)。
输出:SPU 停止执行时的 SPU 指令指针,即将执行的下一条指令的本地存储地址。
例如,此参数可用于允许 SPE 程序“暂停”并向 PPE 线程请求某些操作,例如执行 I/O 操作。完成此 PPE 端操作后,您可以继续 SPE 程序再次调用 spe_context_run 而无需更改条目。