在G ++中,可以指定ASM的Clobber列表,例如:

asm ("somecode" : : "r1", "r2", "r3");

这意味着ASM代码更改寄存器R1,R2,R3。

现在,我的更改寄存器取决于模板参数 n (这 asm 块在模板函数的内部),并且寄存器R1,RN将被更改。我该怎么表达?

有帮助吗?

解决方案

您面对多少个不同的注册星座?如果不是太多,您可以为每个人提供特定的实现。 ((模板专业化)

因为,我担心没有可能创建“模板陈述”。

其他提示

您可以设置可以在Clobber列表中使用的所有寄存器,以便编译器不会使用它们来存储变量的值;我知道这要慢一点,但是如果您不需要非常高的优化,它将起作用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top