summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
author0x221E <0x221E@0xinfinity.dev>2026-04-12 16:24:06 +0200
committer0x221E <0x221E@0xinfinity.dev>2026-04-12 16:24:06 +0200
commit4946ca67cf04845737f0f7f70b5ed27bcfe9a18b (patch)
treee0ce4c11f5b81828da7680143ea444003dd355b3 /include
Initial commitHEADmaster
Diffstat (limited to 'include')
-rw-r--r--include/backend.h25
-rw-r--r--include/x86.h36
2 files changed, 61 insertions, 0 deletions
diff --git a/include/backend.h b/include/backend.h
new file mode 100644
index 0000000..42c6e8c
--- /dev/null
+++ b/include/backend.h
@@ -0,0 +1,25 @@
+#ifndef BACKEND_H
+#define BACKEND_H
+
+#include <stdint.h>
+#include <stddef.h>
+
+#define DEBUG(fmt, ...) debug(__func__, __FILE__, __LINE__, fmt , ## __VA_ARGS__)
+#define DIE(fmt, ...) die(__func__, __FILE__, __LINE__, fmt , ## __VA_ARGS__)
+
+void debug(const char *name, const char *file, size_t line, const char *fmt, ...);
+void die(const char *name, const char *file, size_t line, const char *fmt, ...);
+
+void emit8(uint8_t out);
+void emit16(uint16_t out);
+void emit32(uint32_t out);
+void emit64(uint64_t out);
+
+struct string_view backend_stream_init_src(const char *path);
+void backend_stream_init_dst(const char *path);
+void backend_stream_close_src();
+void backend_stream_close_dst();
+
+void save(const char* path);
+
+#endif
diff --git a/include/x86.h b/include/x86.h
new file mode 100644
index 0000000..6eb8831
--- /dev/null
+++ b/include/x86.h
@@ -0,0 +1,36 @@
+#ifndef X86_H
+#define X86_H
+
+#include <stdint.h>
+
+#define RAX 0
+#define RCX 1
+#define RDX 2
+#define RBX 3
+#define RSP 4
+#define RBP 5
+#define RSI 6
+#define RDI 7
+#define R8 8
+#define R9 9
+#define R10 10
+#define R11 11
+#define R12 12
+#define R13 13
+#define R14 14
+#define R15 15
+
+#define REXW 0b01001000
+#define REXWR 0b01001100
+
+#define MODRM(mod, reg, rm) ((uint8_t)mod << 6) | ((uint8_t)reg << 3) \
+ | ((uint8_t)rm)
+
+void x86_mov_r_i64(uint8_t reg, uint64_t value);
+void x86_push_i32(uint32_t value);
+void x86_push_i16(uint16_t value);
+void x86_push_i8(uint8_t value);
+void x86_push_r64(uint8_t reg);
+void x86_push_rm64(uint8_t mode, uint8_t r, uint64_t m);
+
+#endif