1
4
不能这样做的原因是指令体系结构不接受寄存器间接作为寄存器参数的寻址模式。老实说,我从来没有见过这样的机器架构,因为寄存器的数量通常很小,所以寄存器被编码为指令本身的一部分。如果您真的不喜欢现有的解决方案,您可以尝试自己合成指令(获取基本操作码,查看寄存器说明符的位置和/或适当的值),然后执行它。根据您的操作系统和编译器,这可能是不可能的(自修改代码通常是禁忌)。 如果在汇编中编写跳转表,代码会更干净吗?可能传入SPR说明符(假设它是一个基于零的整数,或者可以强制为一个),将其向左移动以将偏移量放入跳转表,然后跳转到表中,这将是一个
我不知道什么对你来说是“清洁剂”,只是觉得我会把它扔掉。请注意,您可能需要使用NOPs来对齐所有内容,我没有PowerPC手册,因此我不知道指令大小或对齐要求是什么。 |
2
1
我使用stringizer宏找到了一个相当优雅的解决方案:
这是PowerPC的U-Boot代码。 |
3
0
这看起来是一件奇怪的事情,但是如果你确信你出于某种原因需要这么做,那么你需要实现一个跳转表或者一系列的条件来测试rA并跳转到相应的硬编码
|