From ee85f90edd17d9c3fadc0d118021c18a5bb8463c Mon Sep 17 00:00:00 2001 From: Carson Fleming Date: Sat, 28 Mar 2026 07:21:26 -1000 Subject: impl x86_64 calling convention --- register.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 register.c (limited to 'register.c') diff --git a/register.c b/register.c new file mode 100644 index 0000000..ca095ea --- /dev/null +++ b/register.c @@ -0,0 +1,48 @@ +#include "register.h" + +const struct reg RAX = { + .qword = "rax", + .dword = "eax", + .word = "ax", + .byte = "al", +}; +const struct reg RDI = { + .qword = "rdi", + .dword = "edi", + .word = "di", + .byte = "dil", +}; +const struct reg RSI = { + .qword = "rsi", + .dword = "esi", + .word = "si", + .byte = "sil", +}; +const struct reg RDX = { + .qword = "rdx", + .dword = "edx", + .word = "dx", + .byte = "dl", +}; +const struct reg R10 = { + .qword = "r10", + .dword = "r10d", + .word = "r10w", + .byte = "r10b", +}; +const struct reg R9 = { + .qword = "r9", + .dword = "r9d", + .word = "r9w", + .byte = "r9b", +}; +const struct reg R8 = { + .qword = "r8", + .dword = "r8d", + .word = "r8w", + .byte = "r8b", +}; + +const struct reg* const CALLING_CONV[] = {&RDI, &RSI, &RDX, &R10, &R9, &R8}; +const unsigned long long CC_N_REGS = + sizeof(CALLING_CONV) / sizeof(const struct reg* const); -- cgit v1.2.3