|
@@ -581,37 +581,3 @@ int dump_fpu(struct pt_regs *regs, struct user_i387_struct *fpu)
|
|
|
EXPORT_SYMBOL(dump_fpu);
|
|
|
|
|
|
#endif /* CONFIG_X86_32 || CONFIG_IA32_EMULATION */
|
|
|
-
|
|
|
-static int __init no_387(char *s)
|
|
|
-{
|
|
|
- setup_clear_cpu_cap(X86_FEATURE_FPU);
|
|
|
- return 1;
|
|
|
-}
|
|
|
-
|
|
|
-__setup("no387", no_387);
|
|
|
-
|
|
|
-/*
|
|
|
- * Set the X86_FEATURE_FPU CPU-capability bit based on
|
|
|
- * trying to execute an actual sequence of FPU instructions:
|
|
|
- */
|
|
|
-void fpu__detect(struct cpuinfo_x86 *c)
|
|
|
-{
|
|
|
- unsigned long cr0;
|
|
|
- u16 fsw, fcw;
|
|
|
-
|
|
|
- fsw = fcw = 0xffff;
|
|
|
-
|
|
|
- cr0 = read_cr0();
|
|
|
- cr0 &= ~(X86_CR0_TS | X86_CR0_EM);
|
|
|
- write_cr0(cr0);
|
|
|
-
|
|
|
- asm volatile("fninit ; fnstsw %0 ; fnstcw %1"
|
|
|
- : "+m" (fsw), "+m" (fcw));
|
|
|
-
|
|
|
- if (fsw == 0 && (fcw & 0x103f) == 0x003f)
|
|
|
- set_cpu_cap(c, X86_FEATURE_FPU);
|
|
|
- else
|
|
|
- clear_cpu_cap(c, X86_FEATURE_FPU);
|
|
|
-
|
|
|
- /* The final cr0 value is set in fpu_init() */
|
|
|
-}
|