From: Rich Felker Date: Fri, 7 Sep 2012 16:18:14 +0000 (-0400) Subject: add clang-compatible thread-pointer code for mips X-Git-Tag: v0.9.5~49 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=9f65796c35bd93a1de42752ce8af901acfe4b1a4;p=oweals%2Fmusl.git add clang-compatible thread-pointer code for mips clang does not presently support the "v" constraint we want to use to get the result from $3, and trying to use register...__asm__("$3") to do the same invokes serious compiler bugs. so for now, i'm working around the issue with an extra temp register and putting $3 in the clobber list instead of using it as output. when the bugs in clang are fixed, this issue should be revisited to generate smaller/faster code like what gcc gets. --- diff --git a/arch/mips/pthread_arch.h b/arch/mips/pthread_arch.h index f75379cf..77b7330d 100644 --- a/arch/mips/pthread_arch.h +++ b/arch/mips/pthread_arch.h @@ -1,7 +1,11 @@ static inline struct pthread *__pthread_self() { struct pthread *self; +#ifdef __clang__ + __asm__ __volatile__ (".word 0x7c03e83b ; move %0, $3" : "=r" (self) : : "$3" ); +#else __asm__ __volatile__ (".word 0x7c03e83b" : "=v" (self) ); +#endif return self; }