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:
parent
97a012f24a
commit
536af0d751
@ -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())
|
||||
|
@ -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())
|
||||
|
@ -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())
|
||||
|
Loading…
Reference in New Issue
Block a user