gcc - Inline assembly lable already defined error -


i trying write first inline asm program prime number function. these errors...

../prime.c:30: error: symbol `loop_top' defined ../prime.c:38: error: symbol `loop_bot' defined ../prime.c:40: error: symbol `loop_end' 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 define labels , jumps?

use special format string %= defined here.

for example:

"loop_top_%=:\n" "jmp loop_top_%=\n" 

Comments