Mark the __curthread() functions as __pure2 and remove the volatile keyword

from the inline assembly.  This allows the compiler to cache invocations of
curthread since it's value does not change within a thread context.

Submitted by:	zec (i386)
MFC after:	1 week
This commit is contained in:
jhb 2010-07-29 18:44:10 +00:00
parent 32773dc6ee
commit 007376c918
3 changed files with 6 additions and 6 deletions

View File

@ -216,12 +216,12 @@ extern struct pcpu *pcpup;
#define PCPU_PTR(member) __PCPU_PTR(pc_ ## member)
#define PCPU_SET(member, val) __PCPU_SET(pc_ ## member, val)
static __inline struct thread *
static __inline __pure2 struct thread *
__curthread(void)
{
struct thread *td;
__asm __volatile("movq %%gs:0,%0" : "=r" (td));
__asm("movq %%gs:0,%0" : "=r" (td));
return (td);
}
#define curthread (__curthread())

View File

@ -223,12 +223,12 @@ extern struct pcpu *pcpup;
#define PCPU_PTR(member) __PCPU_PTR(pc_ ## member)
#define PCPU_SET(member, val) __PCPU_SET(pc_ ## member, val)
static __inline struct thread *
static __inline __pure2 struct thread *
__curthread(void)
{
struct thread *td;
__asm __volatile("movl %%fs:0,%0" : "=r" (td));
__asm("movl %%fs:0,%0" : "=r" (td));
return (td);
}
#define curthread (__curthread())

View File

@ -70,12 +70,12 @@ struct pcpu;
register struct pcpu *pcpup __asm__("r13");
static __inline struct thread *
static __inline __pure2 struct thread *
__curthread(void)
{
struct thread *td;
__asm __volatile("ld8.acq %0=[r13]" : "=r"(td));
__asm("ld8.acq %0=[r13]" : "=r"(td));
return (td);
}
#define curthread (__curthread())