内联装配标签已定义错误 [英] Inline assembly label already defined error
本文介绍了内联装配标签已定义错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试编写第一个内联asm程序,它是质数函数.我收到这些错误...
I am trying to write my first inline asm program which is a prime number function. I get these errors...
../prime.c:30: Error: symbol `loop_top' is already defined
../prime.c:38: Error: symbol `loop_bot' is already defined
../prime.c:40: Error: symbol `loop_end' is already defined
int inline_prime(long n)
{
if(n == 2)
return 1;
if(n % 2 == 0)
return 0;
long sr = sqrt(n);
long prime = 0;
__asm__
(
"jmp loop_bot \n"
"movq $3, %%r8 \n"
"loop_top:\n"
"movq $0, %[prime] \n"
"movq %[n], %%rax \n"
"divq %%r8 \n"
"test %[prime], %[prime] \n"
"jz loop_end \n"
"addq $2, %%r8 \n"
"cmpq %[sr], %%r8 \n"
"loop_bot: \n"
"jle loop_top \n"
"loop_end: \n"
: [prime]"=d"(prime)
: [n]"r"(n), [sr]"r"(sr)
: "%r8", "%rax"
);
return prime;
}
我应该如何定义标签和跳跃?
How should I define my labels and jumps?
推荐答案
Use the Special Format String %=
as defined here.
例如:
"loop_top_%=:\n"
"jmp loop_top_%=\n"
这篇关于内联装配标签已定义错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文