diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2024-10-08 04:16:27 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2024-10-08 04:17:08 +0330 |
commit | addd54dc31603dc204773d3108dba4e000cd7657 (patch) | |
tree | 621620c4ca5634680d7655e3474cf0b0bcec8e01 /src/fasm/code_generator/code_generator.c | |
parent | bf84010e01bb11874689ce53ea4df853b2e41c2b (diff) |
added fasm support
added compiler options
tried to compile to fasm first
Diffstat (limited to 'src/fasm/code_generator/code_generator.c')
-rw-r--r-- | src/fasm/code_generator/code_generator.c | 42 |
1 files changed, 42 insertions, 0 deletions
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 <stdint.h> +#include <stdlib.h> +#include <string.h> +#include <utils/memory/memory.h> + +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; +} |