如何让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));
答案 0 :(得分:1)
我没试过这个,但看起来不错:
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编码。的确,这是一个无操作。