svn commit: r276734 - in head/lib: libc/powerpc/gen libc/powerpc64/gen libthr/arch/powerpc/include
Justin Hibbits
jhibbits at FreeBSD.org
Tue Jan 6 03:50:45 UTC 2015
Author: jhibbits
Date: Tue Jan 6 03:50:43 2015
New Revision: 276734
URL: https://svnweb.freebsd.org/changeset/base/276734
Log:
Avoid use of register variables. Clang 3.5 treats this as undefined behavior,
and bad things happen.
MFC after: 1 week
Modified:
head/lib/libc/powerpc/gen/_set_tp.c
head/lib/libc/powerpc64/gen/_set_tp.c
head/lib/libthr/arch/powerpc/include/pthread_md.h
Modified: head/lib/libc/powerpc/gen/_set_tp.c
==============================================================================
--- head/lib/libc/powerpc/gen/_set_tp.c Tue Jan 6 03:49:22 2015 (r276733)
+++ head/lib/libc/powerpc/gen/_set_tp.c Tue Jan 6 03:50:43 2015 (r276734)
@@ -29,7 +29,6 @@
void
_set_tp(void *tpval)
{
- register void *tp __asm__("r2");
- __asm __volatile("mr %0,%1" : "=r"(tp) : "r"((char*)tpval + 0x7008));
+ __asm __volatile("mr 2,%0" :: "r"((char*)tpval + 0x7008));
}
Modified: head/lib/libc/powerpc64/gen/_set_tp.c
==============================================================================
--- head/lib/libc/powerpc64/gen/_set_tp.c Tue Jan 6 03:49:22 2015 (r276733)
+++ head/lib/libc/powerpc64/gen/_set_tp.c Tue Jan 6 03:50:43 2015 (r276734)
@@ -29,7 +29,6 @@
void
_set_tp(void *tpval)
{
- register void *tp __asm__("r13");
- __asm __volatile("mr %0,%1" : "=r"(tp) : "r"((char*)tpval + 0x7010));
+ __asm __volatile("mr 13,%0" :: "r"((char*)tpval + 0x7010));
}
Modified: head/lib/libthr/arch/powerpc/include/pthread_md.h
==============================================================================
--- head/lib/libthr/arch/powerpc/include/pthread_md.h Tue Jan 6 03:49:22 2015 (r276733)
+++ head/lib/libthr/arch/powerpc/include/pthread_md.h Tue Jan 6 03:50:43 2015 (r276734)
@@ -62,22 +62,22 @@ static __inline void
_tcb_set(struct tcb *tcb)
{
#ifdef __powerpc64__
- register uint8_t *_tp __asm__("%r13");
+ __asm __volatile("mr 13,%0" ::
+ "r"((uint8_t *)tcb + TP_OFFSET));
#else
- register uint8_t *_tp __asm__("%r2");
-#endif
-
- __asm __volatile("mr %0,%1" : "=r"(_tp) :
+ __asm __volatile("mr 2,%0" ::
"r"((uint8_t *)tcb + TP_OFFSET));
+#endif
}
static __inline struct tcb *
_tcb_get(void)
{
+ register uint8_t *_tp;
#ifdef __powerpc64__
- register uint8_t *_tp __asm__("%r13");
+ __asm __volatile("mr %0,13" : "=r"(_tp));
#else
- register uint8_t *_tp __asm__("%r2");
+ __asm __volatile("mr %0,2" : "=r"(_tp));
#endif
return ((struct tcb *)(_tp - TP_OFFSET));
More information about the svn-src-all
mailing list