> asm > ( > "next:\n\t" > #ifdef __x86_64__ > "pop %rax\n\t" > "pop %rcx" > #else > "popl %eax\n\t" > "popl %ecx" > #endif > ); > > asm > ( > "xorl %eax, %eax\n\t" > "cpuid\n\t" > "cmpl $4, %eax\n\t" // check if cpuid supports leaf 4 > "jl .single_core\n\t" // Single core > "movl $4, %eax\n\t" > "movl $0, %ecx\n\t" // start with index = 0; Leaf 4 reports > ); // at least one valid cache level > asm > ( > "cpuid" > : "=a" (Regeax) > : > : "%ebx", "%ecx", "%edx" > ); > asm > ( > "jmp .multi_core\n" > ".single_core:\n\t" > "xor %eax, %eax\n" > ".multi_core:" > ); > Dear All, The label redefinition in inline ASM was fixed. The actual error is due to the function was called more than 3 times and in every place the code was replaced. So, it was showed the redefinition error. However, by looking at the following paragraph and links, I have fixed the error. GCC allows (and requires) you to specify register constraints in your inline assembly code, so the optimizer always know about it; thus, inline assembly code is really made of patterns, not forcibly exact code. Thus, you can put your assembly into CPP macros, and inline C functions, so anyone can use it in as any C function/macro. Inline functions resemble macros very much, but are sometimes cleaner to use. Beware that in all those cases, code will be duplicated, so only local labels (of 1: style) should be defined in that asm code. However, a macro would allow the name for a non local defined label to be passed as a parameter (or else, you should use additional meta-programming methods). Also, note that propagating inline asm code will spread potential bugs in them; so watch out doubly for register constraints in such inline asm code. http://lists.apple.com/archives/xcode-users/2005/apr/msg00107.html Thanks and Regards, Srinivas G -- To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html