2022-12-07 14:48:08 +01:00
|
|
|
#pragma once
|
2022-12-04 12:42:43 +01:00
|
|
|
#include <luna/Types.h>
|
2022-11-16 17:37:18 +01:00
|
|
|
|
|
|
|
struct Registers // Saved CPU registers for x86-64
|
|
|
|
{
|
|
|
|
u64 r15, r14, r13, r12, r11, r10, r9, r8;
|
|
|
|
u64 rbp, rdi, rsi, rdx, rcx, rbx, rax;
|
|
|
|
u64 isr, error;
|
|
|
|
u64 rip, cs, rflags, rsp, ss;
|
2022-12-17 15:45:06 +01:00
|
|
|
};
|
|
|
|
|
2023-03-07 20:59:11 +01:00
|
|
|
struct FPData
|
|
|
|
{
|
|
|
|
void save();
|
|
|
|
void restore();
|
|
|
|
|
|
|
|
private:
|
|
|
|
char m_data[512] alignas(16);
|
|
|
|
bool m_already_saved;
|
|
|
|
};
|
|
|
|
|
2022-12-17 15:45:06 +01:00
|
|
|
struct [[gnu::packed]] TSS
|
|
|
|
{
|
|
|
|
u32 reserved0;
|
|
|
|
u64 rsp[3];
|
|
|
|
u64 reserved1;
|
|
|
|
u64 ist[7];
|
|
|
|
u64 reserved2;
|
|
|
|
u16 reserved3;
|
|
|
|
u16 iomap_base;
|
|
|
|
};
|
|
|
|
|
|
|
|
static_assert(sizeof(TSS) == 104UL);
|
|
|
|
|
2023-01-02 13:07:29 +01:00
|
|
|
extern TSS task_state_segment;
|