File tree 1 file changed +10
-16
lines changed
1 file changed +10
-16
lines changed Original file line number Diff line number Diff line change 1
1
/// Enables Streaming SIMD Extensions (SSE) support for loaded kernels.
2
2
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 ) ;
10
7
unsafe {
11
- Cr0 :: write_raw ( flags) ;
8
+ Cr0 :: write ( flags) ;
12
9
}
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 ) ;
15
14
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) ;
22
16
}
23
17
}
You can’t perform that action at this time.
0 commit comments