Skip to content

Commit bc9f91a

Browse files
Freax13vinaychandra
authored andcommitted
remove inline assembly + don't set reserved bits (rust-osdev#105)
1 parent f9c1d80 commit bc9f91a

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

src/sse.rs

+10-16
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,17 @@
11
/// Enables Streaming SIMD Extensions (SSE) support for loaded kernels.
22
pub fn enable_sse() {
3-
use bit_field::BitField;
4-
use x86_64::registers::control::Cr0;
5-
let mut flags = Cr0::read_raw();
6-
flags.set_bit(2, false);
7-
flags.set_bit(1, true);
8-
flags.set_bit(9, true);
9-
flags.set_bit(10, true);
3+
use x86_64::registers::control::{Cr0, Cr0Flags, Cr4, Cr4Flags};
4+
let mut flags = Cr0::read();
5+
flags.remove(Cr0Flags::EMULATE_COPROCESSOR);
6+
flags.insert(Cr0Flags::MONITOR_COPROCESSOR);
107
unsafe {
11-
Cr0::write_raw(flags);
8+
Cr0::write(flags);
129
}
13-
// For now, we must use inline ASM here
14-
let mut cr4: u64;
10+
11+
let mut flags = Cr4::read();
12+
flags.insert(Cr4Flags::OSFXSR);
13+
flags.insert(Cr4Flags::OSXMMEXCPT_ENABLE);
1514
unsafe {
16-
asm!("mov %cr4, $0" : "=r" (cr4));
17-
}
18-
cr4.set_bit(9, true);
19-
cr4.set_bit(10, true);
20-
unsafe {
21-
asm!("mov $0, %cr4" :: "r" (cr4) : "memory");
15+
Cr4::write(flags);
2216
}
2317
}

0 commit comments

Comments
 (0)