diff options
author | dyson <dyson@FreeBSD.org> | 1998-05-11 02:13:47 +0000 |
---|---|---|
committer | dyson <dyson@FreeBSD.org> | 1998-05-11 02:13:47 +0000 |
commit | 70ecc33d9fff5a513c79af0bde4c7e3efef77a20 (patch) | |
tree | 8c77bf37920faaeb333ed3f3a5077419bc62ced1 /sys/amd64/include/cpufunc.h | |
parent | fac78afe5c7685395182993c3c9bfd8bb3963570 (diff) | |
download | FreeBSD-src-70ecc33d9fff5a513c79af0bde4c7e3efef77a20.zip FreeBSD-src-70ecc33d9fff5a513c79af0bde4c7e3efef77a20.tar.gz |
Support better performance with P6 architectures and in SMP
mode. Unnecessary TLB flushes removed. More efficient
page zeroing on P6 (modify page only if non-zero.)
Diffstat (limited to 'sys/amd64/include/cpufunc.h')
-rw-r--r-- | sys/amd64/include/cpufunc.h | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/sys/amd64/include/cpufunc.h b/sys/amd64/include/cpufunc.h index 22e4c27..fd3248e 100644 --- a/sys/amd64/include/cpufunc.h +++ b/sys/amd64/include/cpufunc.h @@ -30,7 +30,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: cpufunc.h,v 1.75 1998/01/25 17:02:00 kato Exp $ + * $Id: cpufunc.h,v 1.76 1998/01/25 23:45:41 kato Exp $ */ /* @@ -219,14 +219,21 @@ invd(void) void invlpg __P((u_int addr)); void invltlb __P((void)); +static __inline void +cpu_invlpg(void *addr) +{ + __asm __volatile("invlpg %0"::"m"(*(char *)addr):"memory"); +} + #else /* !SMP */ static __inline void -invlpg(u_int addr) +invlpg(void *addr) { - __asm __volatile("invlpg (%0)" : : "r" (addr) : "memory"); + __asm __volatile("invlpg %0"::"m"(*(char *)addr):"memory"); } + static __inline void invltlb(void) { @@ -432,5 +439,6 @@ void ltr __P((u_short sel)); u_int rcr0 __P((void)); u_long rcr3 __P((void)); u_long rcr4 __P((void)); +void i686_pagezero __P((void *addr)); #endif /* !_MACHINE_CPUFUNC_H_ */ |