/kernel/trunk/arch/ia32/src/cpu/cpu.c |
---|
92,8 → 92,31 |
void cpu_arch_init(void) |
{ |
__u32 help=0; |
CPU->arch.tss = tss_p; |
CPU->fpu_owner=NULL; |
cpuid_feature_info fi; |
cpuid_extended_feature_info efi; |
cpu_info_t info; |
cpuid(1, &info); |
fi.word=info.cpuid_edx; |
efi.word=info.cpuid_ecx; |
if(fi.bits.fxsr) fpu_fxsr(); |
else fpu_fsr(); |
if(fi.bits.sse) asm volatile ( |
"mov %%cr4,%0;\n" |
"or %1,%0;\n" |
"mov %0,%%cr4;\n" |
:"+r"(help) |
:"i"(CR4_OSFXSR_MASK|(1<<10)) |
); |
} |