From addd54dc31603dc204773d3108dba4e000cd7657 Mon Sep 17 00:00:00 2001 From: A404M Date: Tue, 8 Oct 2024 04:16:27 +0330 Subject: added fasm support added compiler options tried to compile to fasm first --- src/fasm/code_generator/code_generator.c | 42 ++++++++++++++++++++++++++++++++ src/fasm/code_generator/code_generator.h | 17 +++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 src/fasm/code_generator/code_generator.c create mode 100644 src/fasm/code_generator/code_generator.h (limited to 'src/fasm/code_generator') diff --git a/src/fasm/code_generator/code_generator.c b/src/fasm/code_generator/code_generator.c new file mode 100644 index 0000000..0df70f5 --- /dev/null +++ b/src/fasm/code_generator/code_generator.c @@ -0,0 +1,42 @@ +#include "code_generator.h" + +#include +#include +#include +#include + +void deleteByteCodeInners(ByteCode bytecode) { + free(bytecode.code); + free(bytecode.data); + free(bytecode.labels); +} + +ByteCode fasmCodeGenerator(FasmLinkedLines *lines) { + ByteCode bytecode = { + .code = a404m_malloc(0), + .code_size = 0, + .data = lines->data, + .data_size = lines->data_size, + .labels = lines->variables, + .labels_size = lines->variables_size, + }; + + lines->data = a404m_malloc(0); + lines->data_size = 0; + lines->variables = a404m_malloc(0); + lines->variables_size = 0; + + for (size_t i = 0; i < lines->lines_size; ++i) { + const FasmLinkedLine line = lines->lines[i]; + const size_t size = sizeof(line.instruction) + line.operands_size; + bytecode.code = a404m_realloc(bytecode.code, bytecode.code_size + size); + memcpy(bytecode.code + bytecode.code_size, &line.instruction, + sizeof(line.instruction)); + bytecode.code_size += sizeof(line.instruction); + memcpy(bytecode.code + bytecode.code_size, line.operands, + line.operands_size); + bytecode.code_size += line.operands_size; + } + + return bytecode; +} diff --git a/src/fasm/code_generator/code_generator.h b/src/fasm/code_generator/code_generator.h new file mode 100644 index 0000000..85715e4 --- /dev/null +++ b/src/fasm/code_generator/code_generator.h @@ -0,0 +1,17 @@ +#pragma once + +#include +#include + +typedef struct ByteCode { + uint8_t *code; + size_t code_size; + uint8_t *data; + size_t data_size; + FasmVariable *labels; + size_t labels_size; +}ByteCode; + +extern void deleteByteCodeInners(ByteCode bytecode); + +extern ByteCode fasmCodeGenerator(FasmLinkedLines *lines); -- cgit v1.2.3