gpt4 book ai didi

assembly - PowerPC 转向可变 SPR

转载 作者:行者123 更新时间:2023-12-02 19:13:47 26 4
gpt4 key购买 nike

我正在为 C 程序编写一个汇编宏,并且对此很陌生,我陷入了一些困境。我正在尝试编写一个宏,用于将数据从通用寄存器移动到专用寄存器。

我的问题是,我发现将数据从 GPR 移动到 SPR 的语法采用恒定的 SPR 值,而我想使用存储在另一个寄存器中的变量。

# SPR is constant, rA is the value to be written
mtspr SPR, rA

我正在寻找看起来像这样的东西:

# rA contains the number of the SPR, and rB the value to be moved.
AWESOMEmtspr rA, rB

有没有这样的宏可用的原因,我该如何自己制作它?

提前非常感谢。

---- 编辑: ----现在看来,我的 C 代码中有一个巨大的 switch case,可以跳转到正确的 mtspr 部分。我有二十几个部分用于读取和编写特定的 SPR:s,每个部分看起来完全相同,但有一个常数值不同。

最佳答案

不能这样做的原因是指令架构不接受寄存器间接作为寄存器参数的寻址模式。老实说,我从未见过这样的机器架构,因为寄存器的数量通常相当小,因此寄存器被编码为指令本身的一部分。如果您确实不喜欢现有的解决方案,您可以尝试自己合成指令(获取基本操作码,查看寄存器说明符的位置以及适当值中的“或”),然后执行它。根据您的操作系统和编译器,这可能是不可能的(自修改代码通常是禁忌)。

如果用汇编语言编写跳转表,是否会使代码更简洁?也许传入 SPR 说明符(假设它是一个从零开始的整数,或者可以强制为 1),将其向左移动以获得跳转表中的偏移量,然后跳转到表中,这将是一个序列

MTPSR PSRx, val
RET
MTPSR PSRx+1, val
RET

我不知道什么对你来说算“更干净”,只是想我会把它扔掉。请注意,您可能必须用 NOP 填充才能使所有内容对齐,我没有 PowerPC 手册,因此我不知道指令大小或对齐要求是什么。

关于assembly - PowerPC 转向可变 SPR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3236791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com