irqflags.rs 412 B

12345678910111213141516171819
  1. use core::arch::asm;
  2. #[inline]
  3. pub fn local_irq_save() -> usize {
  4. let x: usize;
  5. // x86_64::registers::rflags::
  6. unsafe {
  7. asm!("pushfq; pop {}; cli", out(reg) x, options(nomem, preserves_flags));
  8. }
  9. x
  10. }
  11. #[inline]
  12. // 恢复先前保存的rflags的值x
  13. pub fn local_irq_restore(x: usize) {
  14. unsafe {
  15. asm!("push {}; popfq", in(reg) x, options(nomem, preserves_flags));
  16. }
  17. }