rustubs/arch/
x86_64.rs

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
pub mod arch_regs;
pub mod gdt;
pub mod interrupt;
pub mod io_port;
pub mod misc;
pub mod paging;
use core::arch::asm;

pub const RFLAGS_IF_MASK: u64 = 1 << 9;

pub mod ExternSyms {
	extern "C" {
		pub fn vectors_start();
		pub fn idt();
		pub fn idt_descr();
	}
}

#[inline]
pub fn read_rflags() -> u64 {
	let rflags;
	unsafe { asm!("pushfq; pop {}", out(reg) rflags) };
	rflags
}

pub fn is_int_enabled() -> bool {
	let rf = read_rflags();
	(rf & RFLAGS_IF_MASK) != 0
}