#include <arch/paging.h>
Go to the source code of this file.
Functions | |
| __inline__ void | fast_clear_page (void *page) |
| Clear a page using MMX extensions. | |
Definition in file mmx.h.
|
|
Clear a page using MMX extensions.
Definition at line 14 of file mmx.h.
00015 {
00016 int i;
00017
00018 // Clear the task switch flag.
00019 __asm__ __volatile__ ("clts");
00020
00021 // Clear the 64-bit mm0 register.
00022 __asm__ __volatile__ ("pxor %mm0, %mm0");
00023
00024 // Fast clear the page.
00025 for( i=0; i<PAGE_SIZE/128; i++ )
00026 {
00027 __asm__ __volatile__ (
00028 "movq %%mm0, (%0)\n"
00029 "movq %%mm0, 8(%0)\n"
00030 "movq %%mm0, 16(%0)\n"
00031 "movq %%mm0, 24(%0)\n"
00032 "movq %%mm0, 32(%0)\n"
00033 "movq %%mm0, 40(%0)\n"
00034 "movq %%mm0, 48(%0)\n"
00035 "movq %%mm0, 56(%0)\n"
00036 "movq %%mm0, 64(%0)\n"
00037 "movq %%mm0, 72(%0)\n"
00038 "movq %%mm0, 80(%0)\n"
00039 "movq %%mm0, 88(%0)\n"
00040 "movq %%mm0, 96(%0)\n"
00041 "movq %%mm0, 104(%0)\n"
00042 "movq %%mm0, 112(%0)\n"
00043 "movq %%mm0, 120(%0)\n"
00044 : : "r"(page) : "memory");
00045 page += 128;
00046 }
00047
00048 // Restore task switch flag.
00049 do
00050 {
00051 unsigned int __cr0;
00052 __asm__ __volatile__ (
00053 "movl %%cr0, %0\n"
00054 "or $8, %0\n"
00055 "movl %0, %%cr0" : "=r"(__cr0));
00056 } while( 0 );
00057 }
|
1.2.18