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
答案 0 :(得分:3)
不可能在指令级选择目标寄存器,因为指令将目标寄存器硬编码到自身中,并且用现代CPU创建自修改代码是不可行的。有关任何指令编码,请参阅ARM ARM。
当然,你可以在很高的层次上使用来构建/条件执行。
答案 1 :(得分:0)
您可以执行最后两条指令
vmov.i8 d2, 0xdd
vmov.i8 d3, 0xcc
条件是参数为4.
您还可以为参数的所有可能值编写或生成代码。
如果参数始终是常量而不是计算出来的话,你也可以使用宏。