0
我想寫我的第一個內聯asm程序,這是一個素數函數。我得到這些錯誤...行內彙編標籤已經定義錯誤
../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;
}
我該如何定義我的標籤和跳轉?
我只得到了OP使用-02標誌時遇到的錯誤。我給了這個旋轉,並收到錯誤。 「助記符中的字符'%'無效。」接下來是「操作數1中的」無效字符=「。」我用-S來獲得沒有優化的程序集,它看起來很荒謬。很多浪費的指示。但我不認爲由-S生成的代碼可以工作..... –
我自己找到答案(令人興奮,因爲它通常不會發生)...我必須使用__attribute __(( noinline始終))'。完美的作品。 –