summaryrefslogtreecommitdiffstats
path: root/lib/libthr/arch/powerpc/include/pthread_md.h
diff options
context:
space:
mode:
authorjhibbits <jhibbits@FreeBSD.org>2015-01-06 03:50:43 +0000
committerjhibbits <jhibbits@FreeBSD.org>2015-01-06 03:50:43 +0000
commit5de1b857a0f8b40d58ffb6bc6876312516ca397c (patch)
tree14f24de90530d06eb211a4a96ac699fc966d0d23 /lib/libthr/arch/powerpc/include/pthread_md.h
parent0c99d3fb5488d53a1b6c9afd134fb9f7066e373a (diff)
downloadFreeBSD-src-5de1b857a0f8b40d58ffb6bc6876312516ca397c.zip
FreeBSD-src-5de1b857a0f8b40d58ffb6bc6876312516ca397c.tar.gz
Avoid use of register variables. Clang 3.5 treats this as undefined behavior,
and bad things happen. MFC after: 1 week
Diffstat (limited to 'lib/libthr/arch/powerpc/include/pthread_md.h')
-rw-r--r--lib/libthr/arch/powerpc/include/pthread_md.h14
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/libthr/arch/powerpc/include/pthread_md.h b/lib/libthr/arch/powerpc/include/pthread_md.h
index 91102b4..3563297 100644
--- a/lib/libthr/arch/powerpc/include/pthread_md.h
+++ b/lib/libthr/arch/powerpc/include/pthread_md.h
@@ -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));
OpenPOWER on IntegriCloud