如何要求 gcc 重置 asm 内联输入值?以下示例中的 %0
在第一个循环后未重置为 42
。所以当 i = 1 时,%0
值仍然是 0
。
for (int i = 0; i < N; ++i)
asm("label: substract_immediate_value %0,%0,1;"
"compare_immediate_value %0,0;"
"branch_not_equal label"
: /* no outputs */
: /* input */ "r" (42));
最佳答案
我没试过,但看起来不错:
for (int i = 0; i < N; ++i)
{
int n = 42;
asm("label: substract_immediate_value %0,%0,1;"
"compare_immediate_value %0,0;"
"branch_not_equal label"
: "+r" (n));
}
我认为这是一个简化的示例,因为我无法想象您为什么不直接用 C 编写代码。实际上,这是一个空操作。
关于c - 重置 gcc 的 asm 内联输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16100044/