Avoid use of register variables. Clang 3.5 treats this as undefined behavior,

and bad things happen.

MFC after:	1 week
This commit is contained in:
jhibbits 2015-01-06 03:50:43 +00:00
parent 0c99d3fb54
commit 5de1b857a0
3 changed files with 10 additions and 12 deletions

View File

@ -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));
}

View File

@ -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));
}

View File

@ -62,22 +62,22 @@ static __inline void
_tcb_set(struct tcb *tcb)
{
#ifdef __powerpc64__
register uint8_t *_tp __asm__("%r13");
#else
register uint8_t *_tp __asm__("%r2");
#endif
__asm __volatile("mr %0,%1" : "=r"(_tp) :
__asm __volatile("mr 13,%0" ::
"r"((uint8_t *)tcb + TP_OFFSET));
#else
__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));