aboutsummaryrefslogtreecommitdiff
path: root/mirai/asm/gdt/lgdt.zig
blob: 42a640b0dd902fab4b01528e441104d7644b1455 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//! GDT Load Instructions

pub const Gdtr = packed struct {
    limit: u16,
    base: u64,
};

pub fn lgdt(gdtr: *const Gdtr) void {
    asm volatile ("lgdt (%[gdtr])"
        :
        : [gdtr] "r" (gdtr),
        : .{ .memory = true });
}

pub fn sgdt() Gdtr {
    var gdtr: Gdtr = undefined;
    asm volatile ("sgdt (%[gdtr])"
        :
        : [gdtr] "r" (&gdtr),
        : .{ .memory = true });
    return gdtr;
}