blob: c401bc9e4c5aaa943acfd448ee684b6bb5711b8a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
//! CPU Halt Operations
pub fn halt() void {
asm volatile ("hlt");
}
pub fn halt_loop() noreturn {
while (true) {
halt();
}
}
pub fn enable_interrupts() void {
asm volatile ("sti");
}
pub fn disable_interrupts() void {
asm volatile ("cli");
}
pub fn are_interrupts_enabled() bool {
const flags = read_flags();
return (flags & 0x200) != 0;
}
pub fn read_flags() u64 {
var result: u64 = undefined;
asm volatile ("pushfq; pop %[result]"
: [result] "=r" (result),
);
return result;
}
pub fn pause() void {
asm volatile ("pause");
}
|