Get rid of memcopies in codegen, improve Multimedia

This commit is contained in:
Krzosa Karol
2022-10-01 22:07:20 +02:00
parent 026c1ddc80
commit 84254fb6dc
7 changed files with 324 additions and 45 deletions

View File

@@ -545,7 +545,7 @@ gen_ast(Ast *ast){
int i = 0;
For(node->expr){
genln("memcpy(&%Q.m%d, ", var_name, i);
genln("CORE_MemoryCopy(&%Q.m%d, ", var_name, i);
if(!is_array(it->resolved_type)) gen("&");
gen("(");
gen_expr(it);
@@ -761,7 +761,7 @@ gen_ast(Ast *ast){
int i = 0;
For(node->vars){
gen("memcpy((void *)&%Q, (void *)&%Q.m%d, sizeof(%Q));", it->name, var_name, i++, it->name);
gen("CORE_MemoryCopy((void *)&%Q, (void *)&%Q.m%d, sizeof(%Q));", it->name, var_name, i++, it->name);
}
BREAK();
}
@@ -785,7 +785,6 @@ compile_to_c_code(){
gen(R"==(
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#define CORE_Assert(x) do{if(!(x))__debugbreak();}while(0)
#define CORE_AssertMessage(x,...) CORE_Assert(x)
#define CORE_BufferSize(x) (sizeof(x)/sizeof((x)[0]))
@@ -793,6 +792,16 @@ typedef struct String{
uint8_t *str;
int64_t len;
}String;
static void
CORE_MemoryCopy(void *dst, void *src, size_t size){
uint8_t *d = (uint8_t*)dst;
uint8_t *s = (uint8_t*)src;
for(size_t i = 0; i < size; i++){
d[i] = s[i];
}
}
)==");
// Generate struct forward decls