summaryrefslogtreecommitdiff
path: root/src/kernel/arch/amd64/registers.h
blob: cfbfa54b251ee2c556612ce2823fdf8f48966aab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
#include <kernel/types.h>
#include <stdint.h>

/* requires 16-byte alignment */
struct CpuRegs {
	uint64_t r15, r14, r13, r12, r11, r10, r9, r8;
	uint64_t rdi, rsi;
	userptr_t rbp, rsp;
	uint64_t rbx, rdx, rcx, rax, rip, flags;
	uint8_t _sse[512];
} __attribute__((__packed__));

// saves a return value according to the SysV ABI
static inline uint64_t regs_savereturn(CpuRegs *regs, uint64_t value) {
	regs->rax = value;
	return value;
}