patch-2.4.1 linux/arch/i386/lib/mmx.c
Next file: linux/arch/i386/mm/init.c
Previous file: linux/arch/i386/kernel/traps.c
Back to the patch index
Back to the overall index
- Lines: 80
- Date:
Thu Jan 11 17:42:24 2001
- Orig file:
v2.4.0/linux/arch/i386/lib/mmx.c
- Orig date:
Wed Nov 8 17:09:49 2000
diff -u --recursive --new-file v2.4.0/linux/arch/i386/lib/mmx.c linux/arch/i386/lib/mmx.c
@@ -2,6 +2,8 @@
#include <linux/string.h>
#include <linux/sched.h>
+#include <asm/i387.h>
+
/*
* MMX 3DNow! library helper functions
*
@@ -26,13 +28,7 @@
void *p=to;
int i= len >> 6; /* len/64 */
- if (!(current->flags & PF_USEDFPU))
- clts();
- else
- {
- __asm__ __volatile__ ( " fnsave %0; fwait\n"::"m"(current->thread.i387));
- current->flags &= ~PF_USEDFPU;
- }
+ kernel_fpu_begin();
__asm__ __volatile__ (
"1: prefetch (%0)\n" /* This set is 28 bytes */
@@ -88,20 +84,15 @@
* Now do the tail of the block
*/
__memcpy(to, from, len&63);
- stts();
+ kernel_fpu_end();
return p;
}
static void fast_clear_page(void *page)
{
int i;
- if (!(current->flags & PF_USEDFPU))
- clts();
- else
- {
- __asm__ __volatile__ ( " fnsave %0; fwait\n"::"m"(current->thread.i387));
- current->flags &= ~PF_USEDFPU;
- }
+
+ kernel_fpu_begin();
__asm__ __volatile__ (
" pxor %%mm0, %%mm0\n" : :
@@ -127,19 +118,14 @@
__asm__ __volatile__ (
" sfence \n" : :
);
- stts();
+ kernel_fpu_end();
}
static void fast_copy_page(void *to, void *from)
{
int i;
- if (!(current->flags & PF_USEDFPU))
- clts();
- else
- {
- __asm__ __volatile__ ( " fnsave %0; fwait\n"::"m"(current->thread.i387));
- current->flags &= ~PF_USEDFPU;
- }
+
+ kernel_fpu_begin();
/* maybe the prefetch stuff can go before the expensive fnsave...
* but that is for later. -AV
@@ -199,7 +185,7 @@
__asm__ __volatile__ (
" sfence \n" : :
);
- stts();
+ kernel_fpu_end();
}
/*
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)