0

NEON 扩展寄存器可以看作 16 个四字或 32 个双字。在大多数编程中,要使用的特定寄存器是固定的。例如,

vmov.i8 d0, 0xff
vmov.i8 d1, 0xee
vmov.i8 d2, 0xdd

在我的问题中,所需的双字寄存器的数量取决于函数调用中的参数。例如,如果参数是 2,我需要做

vmov.i8 d0, 0xff
vmov.i8 d1, 0xee

如果参数是 4,我需要做

vmov.i8 d0, 0xff
vmov.i8 d1, 0xee
vmov.i8 d2, 0xdd
vmov.i8 d3, 0xcc

无论如何选择一个名称基于变量的寄存器?即沿着这条线的东西(以下不是有效的ARM汇编代码):

mov r0, #1
vmov.i8 d{r0}, 0xff
4

2 回答 2

3

不可能在指令级选择目标寄存器,因为指令本身具有硬编码的目标寄存器,并且使用现代 CPU 创建自修改代码是不可行的。有关任何指令编码,请参见ARM ARM

您当然可以通过多种方式使用if 构造/条件执行在高级别的情况下执行此操作。

于 2013-02-08T00:37:18.217 回答
0

你可以执行最后两条指令

vmov.i8 d2, 0xdd
vmov.i8 d3, 0xcc

条件是参数是 4。

您还可以为参数的所有可能值编写或生成代码。

如果参数始终是常量而不是计算的东西,您也可以使用宏。

于 2013-02-07T18:45:42.907 回答