diff options
| -rw-r--r-- | include/asm-i386/xor.h | 59 |
1 files changed, 16 insertions, 43 deletions
diff --git a/include/asm-i386/xor.h b/include/asm-i386/xor.h index 4ddeb7e68621..0b0dfb0b9431 100644 --- a/include/asm-i386/xor.h +++ b/include/asm-i386/xor.h @@ -18,22 +18,6 @@ * Copyright (C) 1998 Ingo Molnar. */ -#define FPU_SAVE \ - do { \ - preempt_disable(); \ - if (!test_thread_flag(TIF_USEDFPU)) \ - __asm__ __volatile__ (" clts;\n"); \ - __asm__ __volatile__ ("fsave %0; fwait": "=m"(fpu_save[0])); \ - } while (0) - -#define FPU_RESTORE \ - do { \ - __asm__ __volatile__ ("frstor %0": : "m"(fpu_save[0])); \ - if (!test_thread_flag(TIF_USEDFPU)) \ - stts(); \ - preempt_enable(); \ - } while (0) - #define LD(x,y) " movq 8*("#x")(%1), %%mm"#y" ;\n" #define ST(x,y) " movq %%mm"#y", 8*("#x")(%1) ;\n" #define XO1(x,y) " pxor 8*("#x")(%2), %%mm"#y" ;\n" @@ -46,9 +30,8 @@ static void xor_pII_mmx_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) { unsigned long lines = bytes >> 7; - char fpu_save[108]; - FPU_SAVE; + kernel_fpu_begin(); __asm__ __volatile__ ( #undef BLOCK @@ -83,7 +66,7 @@ xor_pII_mmx_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) : : "memory"); - FPU_RESTORE; + kernel_fpu_end(); } static void @@ -91,9 +74,8 @@ xor_pII_mmx_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, unsigned long *p3) { unsigned long lines = bytes >> 7; - char fpu_save[108]; - FPU_SAVE; + kernel_fpu_begin(); __asm__ __volatile__ ( #undef BLOCK @@ -133,7 +115,7 @@ xor_pII_mmx_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, : : "memory"); - FPU_RESTORE; + kernel_fpu_end(); } static void @@ -141,9 +123,8 @@ xor_pII_mmx_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, unsigned long *p3, unsigned long *p4) { unsigned long lines = bytes >> 7; - char fpu_save[108]; - FPU_SAVE; + kernel_fpu_begin(); __asm__ __volatile__ ( #undef BLOCK @@ -188,7 +169,7 @@ xor_pII_mmx_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, : : "memory"); - FPU_RESTORE; + kernel_fpu_end(); } @@ -197,9 +178,8 @@ xor_pII_mmx_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, unsigned long *p3, unsigned long *p4, unsigned long *p5) { unsigned long lines = bytes >> 7; - char fpu_save[108]; - FPU_SAVE; + kernel_fpu_begin(); /* need to save/restore p4/p5 manually otherwise gcc's 10 argument limit gets exceeded (+ counts as two arguments) */ @@ -255,7 +235,7 @@ xor_pII_mmx_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, : "r" (p4), "r" (p5) : "memory"); - FPU_RESTORE; + kernel_fpu_end(); } #undef LD @@ -270,9 +250,8 @@ static void xor_p5_mmx_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) { unsigned long lines = bytes >> 6; - char fpu_save[108]; - FPU_SAVE; + kernel_fpu_begin(); __asm__ __volatile__ ( " .align 32 ;\n" @@ -311,7 +290,7 @@ xor_p5_mmx_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) : : "memory"); - FPU_RESTORE; + kernel_fpu_end(); } static void @@ -319,9 +298,8 @@ xor_p5_mmx_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, unsigned long *p3) { unsigned long lines = bytes >> 6; - char fpu_save[108]; - FPU_SAVE; + kernel_fpu_begin(); __asm__ __volatile__ ( " .align 32,0x90 ;\n" @@ -369,7 +347,7 @@ xor_p5_mmx_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, : : "memory" ); - FPU_RESTORE; + kernel_fpu_end(); } static void @@ -377,9 +355,8 @@ xor_p5_mmx_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, unsigned long *p3, unsigned long *p4) { unsigned long lines = bytes >> 6; - char fpu_save[108]; - FPU_SAVE; + kernel_fpu_begin(); __asm__ __volatile__ ( " .align 32,0x90 ;\n" @@ -436,7 +413,7 @@ xor_p5_mmx_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, : : "memory"); - FPU_RESTORE; + kernel_fpu_end(); } static void @@ -444,9 +421,8 @@ xor_p5_mmx_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, unsigned long *p3, unsigned long *p4, unsigned long *p5) { unsigned long lines = bytes >> 6; - char fpu_save[108]; - FPU_SAVE; + kernel_fpu_begin(); /* need to save p4/p5 manually to not exceed gcc's 10 argument limit */ __asm__ __volatile__ ( @@ -517,7 +493,7 @@ xor_p5_mmx_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, : "r" (p4), "r" (p5) : "memory"); - FPU_RESTORE; + kernel_fpu_end(); } static struct xor_block_template xor_block_pII_mmx = { @@ -536,9 +512,6 @@ static struct xor_block_template xor_block_p5_mmx = { .do_5 = xor_p5_mmx_5, }; -#undef FPU_SAVE -#undef FPU_RESTORE - /* * Cache avoiding checksumming functions utilizing KNI instructions * Copyright (C) 1999 Zach Brown (with obvious credit due Ingo) |
