kernel: fpu_init: only enable OSXMMEXCPT in CR4 on at least SSE1 machines.
Found and debugged by totalinux at yandex.ru and Evgeniy Ivanov, thanks!
This commit is contained in:
parent
c37401f23f
commit
50335291ae
1 changed files with 8 additions and 2 deletions
|
@ -154,9 +154,15 @@ PRIVATE void fpu_init(void)
|
||||||
if(_cpufeature(_CPUF_I386_FXSR)) {
|
if(_cpufeature(_CPUF_I386_FXSR)) {
|
||||||
register struct proc *rp;
|
register struct proc *rp;
|
||||||
phys_bytes aligned_fp_area;
|
phys_bytes aligned_fp_area;
|
||||||
|
u32_t cr4 = read_cr4() | CR4_OSFXSR; /* Enable FXSR. */
|
||||||
|
|
||||||
/* Enable FXSR feature usage. */
|
/* OSXMMEXCPT if supported
|
||||||
write_cr4(read_cr4() | CR4_OSFXSR | CR4_OSXMMEXCPT);
|
* FXSR feature can be available without SSE
|
||||||
|
*/
|
||||||
|
if(_cpufeature(_CPUF_I386_SSE))
|
||||||
|
cr4 |= CR4_OSXMMEXCPT;
|
||||||
|
|
||||||
|
write_cr4(cr4);
|
||||||
osfxsr_feature = 1;
|
osfxsr_feature = 1;
|
||||||
|
|
||||||
for (rp = BEG_PROC_ADDR; rp < END_PROC_ADDR; ++rp) {
|
for (rp = BEG_PROC_ADDR; rp < END_PROC_ADDR; ++rp) {
|
||||||
|
|
Loading…
Reference in a new issue