diff options
author | Austin Clements <[email protected]> | 2010-08-31 16:42:05 -0400 |
---|---|---|
committer | Austin Clements <[email protected]> | 2010-08-31 16:42:05 -0400 |
commit | 37ee75f42e9d35a96b84fe0c95479178cd41efac (patch) | |
tree | df8e4c266ab047fe07fe3b1541dee50dd7436677 /x86.h | |
parent | 7472b2b451f100162fa4542f5bfe260385f861ad (diff) | |
download | xv6-labs-37ee75f42e9d35a96b84fe0c95479178cd41efac.tar.gz xv6-labs-37ee75f42e9d35a96b84fe0c95479178cd41efac.tar.bz2 xv6-labs-37ee75f42e9d35a96b84fe0c95479178cd41efac.zip |
Rearrange for better page breaking
Diffstat (limited to 'x86.h')
-rw-r--r-- | x86.h | 85 |
1 files changed, 43 insertions, 42 deletions
@@ -90,25 +90,36 @@ readeflags(void) 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 loadgs(ushort 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 cli(void) { @@ -121,6 +132,25 @@ sti(void) 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) { asm volatile("movl %0,%%cr0" : : "r" (val)); @@ -152,35 +182,6 @@ static inline uint rcr3(void) 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 // Layout of the trap frame built on the stack by the // hardware and by trapasm.S, and passed to trap(). |