1pub use super::segmentation;
11
12#[cfg(target_arch = "x86")]
13use core::arch::asm;
14
15#[cfg(target_arch = "x86")]
20pub unsafe fn tr() -> segmentation::SegmentSelector {
21    let segment: u16;
22    unsafe {
23        asm!("str {0:x}",
24            out(reg) segment,
25            options(att_syntax, nostack, nomem, preserves_flags));
26    }
27    segmentation::SegmentSelector::from_raw(segment)
28}
29
30#[cfg(target_arch = "x86")]
34pub unsafe fn load_tr(sel: segmentation::SegmentSelector) {
35    unsafe {
36        asm!("ltr {0:x}",
37            in(reg) sel.bits(),
38            options(att_syntax, nostack, nomem, preserves_flags));
39    }
40}
41
42#[cfg(not(any(doc, target_arch = "x86")))]
45pub unsafe fn tr() -> segmentation::SegmentSelector {
46    unimplemented!()
47}
48
49#[cfg(not(any(doc, target_arch = "x86")))]
50pub unsafe fn load_tr(_sel: segmentation::SegmentSelector) {
51    unimplemented!()
52}