Rearrange for better page breaking
This commit is contained in:
parent
7472b2b451
commit
37ee75f42e
1 changed files with 43 additions and 42 deletions
85
x86.h
85
x86.h
|
@ -90,25 +90,36 @@ readeflags(void)
|
||||||
return eflags;
|
return eflags;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint
|
|
||||||
xchg(volatile uint *addr, uint newval)
|
|
||||||
{
|
|
||||||
uint result;
|
|
||||||
|
|
||||||
// The + in "+m" denotes a read-modify-write operand.
|
|
||||||
asm volatile("lock; xchgl %0, %1" :
|
|
||||||
"+m" (*addr), "=a" (result) :
|
|
||||||
"1" (newval) :
|
|
||||||
"cc");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
loadgs(ushort v)
|
loadgs(ushort v)
|
||||||
{
|
{
|
||||||
asm volatile("movw %0, %%gs" : : "r" (v));
|
asm volatile("movw %0, %%gs" : : "r" (v));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void lebp(uint val)
|
||||||
|
{
|
||||||
|
asm volatile("movl %0,%%ebp" : : "r" (val));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint rebp(void)
|
||||||
|
{
|
||||||
|
uint val;
|
||||||
|
asm volatile("movl %%ebp,%0" : "=r" (val));
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void lesp(uint val)
|
||||||
|
{
|
||||||
|
asm volatile("movl %0,%%esp" : : "r" (val));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint resp(void)
|
||||||
|
{
|
||||||
|
uint val;
|
||||||
|
asm volatile("movl %%esp,%0" : "=r" (val));
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
cli(void)
|
cli(void)
|
||||||
{
|
{
|
||||||
|
@ -121,6 +132,25 @@ sti(void)
|
||||||
asm volatile("sti");
|
asm volatile("sti");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void nop_pause(void)
|
||||||
|
{
|
||||||
|
asm volatile("pause" : :);
|
||||||
|
}
|
||||||
|
|
||||||
|
//PAGEBREAK!
|
||||||
|
static inline uint
|
||||||
|
xchg(volatile uint *addr, uint newval)
|
||||||
|
{
|
||||||
|
uint result;
|
||||||
|
|
||||||
|
// The + in "+m" denotes a read-modify-write operand.
|
||||||
|
asm volatile("lock; xchgl %0, %1" :
|
||||||
|
"+m" (*addr), "=a" (result) :
|
||||||
|
"1" (newval) :
|
||||||
|
"cc");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void lcr0(uint val)
|
static inline void lcr0(uint val)
|
||||||
{
|
{
|
||||||
asm volatile("movl %0,%%cr0" : : "r" (val));
|
asm volatile("movl %0,%%cr0" : : "r" (val));
|
||||||
|
@ -152,35 +182,6 @@ static inline uint rcr3(void)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void lebp(uint val)
|
|
||||||
{
|
|
||||||
asm volatile("movl %0,%%ebp" : : "r" (val));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline uint rebp(void)
|
|
||||||
{
|
|
||||||
uint val;
|
|
||||||
asm volatile("movl %%ebp,%0" : "=r" (val));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void lesp(uint val)
|
|
||||||
{
|
|
||||||
asm volatile("movl %0,%%esp" : : "r" (val));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline uint resp(void)
|
|
||||||
{
|
|
||||||
uint val;
|
|
||||||
asm volatile("movl %%esp,%0" : "=r" (val));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void nop_pause(void)
|
|
||||||
{
|
|
||||||
asm volatile("pause" : :);
|
|
||||||
}
|
|
||||||
|
|
||||||
//PAGEBREAK: 36
|
//PAGEBREAK: 36
|
||||||
// Layout of the trap frame built on the stack by the
|
// Layout of the trap frame built on the stack by the
|
||||||
// hardware and by trapasm.S, and passed to trap().
|
// hardware and by trapasm.S, and passed to trap().
|
||||||
|
|
Loading…
Reference in a new issue